首页 > 解决方案 > 使用 LpSolveAPI 赋值,如何以类似广度优先的方式填充参数?

问题描述

首先,我对线性规划有基本的了解,可能不知道正确的术语。我认为我需要的是一个广度优先的求解器。

我有两个概率表,我想将它们用作约束。我的目标函数是所有参数加起来为 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")

这些都给出了相同的结果。

我认为正在发生的事情是求解器使用深度优先,但我希望它解决广度优先,我不明白如何做到这一点。

标签: roptimizationlinear-programminglpsolve

解决方案


推荐阅读