首先,我对线性规划有基本的了解,可能不知道正确的术语。我认为我需要的是一个广度优先的解决者。
我有两个概率表,我想用它们作为约束。
我的目标函数是将所有参数加起来为1。
使用R和lpSolveApi,我发现只有我希望优化的一些参数被赋予了任何值。我还尝试添加一个约束,说明每个参数都应该
> 2 or some other value
,但这似乎是错误的。
我的代码的一个最小示例是:
objective_coefficients = c(1,1,1,1,1,1,1,1,1,1,1,1,1) #One for each parameter
lp_model = make.lp(0,13)
lp.control(lp_model, sense="max")
set.objfn(lp_model, objective_coefficients)
#Constraints for probability table 1
add.constraint(lp_model, c(1,0,1,1,1,0,0,0,0,0,0,0,0), "<=", 0.4)
add.constraint(lp_model, c(0,0,0,0,0,0,0,0,0,1,0,0,0), "<=", 0.1)
add.constraint(lp_model, c(0,1,0,0,0,0,0,0,0,0,0,0,0), "<=", 0.2)
add.constraint(lp_model, c(0,0,0,0,0,0,0,0,1,0,0,0,1), "<=", 0.1)
add.constraint(lp_model, c(0,0,0,0,0,1,1,1,0,0,1,1,0), "<=", 0.2)
#Constraints for probability table 2
add.constraint(lp_model, c(1,1,0,0,0,0,0,0,0,0,0,0,0), "<=", 0.2)
add.constraint(lp_model, c(0,0,1,1,1,1,0,0,0,0,0,0,0), "<=", 0.35)
add.constraint(lp_model, c(0,0,0,0,0,0,1,1,0,0,0,0,0), "<=", 0.25)
add.constraint(lp_model, c(0,0,0,0,0,0,0,0,1,1,1,1,0), "<=", 0.17)
add.constraint(lp_model, c(0,0,0,0,0,0,0,0,0,0,0,0,1), "<=", 0.03)
结果是,一些参数附加了较大的值,而另一些则根本没有:
0.05 0.15 0.35 0.00 0.00 0.00 0.20 0.00 0.07 0.10 0.00 0.00 0.03
如果我为所有参数设置最小值,我可以看到所有参数都是可行的>0.02.
我试过:
lp.control(lp_model, basis.crash="mostfeasible", sense="max")
lp.control(lp_model, basis.crash="leastdegenerate", sense="max")
lp.control(lp_model, bb.rule=c("first", "breadthfirst"), sense="max")
lp.control(lp_model, bb.rule=c("gap", "breadthfirst"), sense="max")
这些都给出了相同的结果。
我认为正在发生的事情是求解器使用了depthfirst,但我希望它先求解breathfirst,我不明白如何做到这一点。