r - 使用 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")
这些都给出了相同的结果。
我认为正在发生的事情是求解器使用深度优先,但我希望它解决广度优先,我不明白如何做到这一点。
解决方案
推荐阅读
- c++ - 获取 Windows 监视器的唯一标识符
- corda - 无法引导无法绑定其公共 IP 地址的我的 Corda 节点
- apache-beam - 使用带有通配符泛型的编码器
- javascript - 电子邮件的简单正则表达式模式
- angular - 单击“确认取消”按钮时,滑动切换不应更改
- python - 将相同numpy数组的两个视图组合成单个视图而不复制数组?
- php - 填充所有 div,即使数组太短
- javascript - 为括号.js 做一个插入函数
- mongodb - MongoDB system.user 表更改为 system.users_prod 并在使用 root 用户登录时检索它返回以下错误的值
- python - 从 PyMongo 3.6 开始在数据库之间移动文档的正确方法是什么?