java - 如何使用 google or-tools 在约束中设置间隙
问题描述
我正在尝试使用 Google or-tools 解决以下问题
minimize f = x1 + x2
有约束
x1 = 0 or 100 <= x1 <= 2000
x2 = 0 or 100 <= x2 <= 2000
x1 + 4 * x2 >= 650
什么 Solver 最适合这个问题?
如何定义这些约束?(我在Java中使用)
我可以对每个变量使用 3 个约束进行建模(如 sascha 所指出的)
x1 >= a1 * 100
x1 <= a1 * 2000
a1 = 0, 1 (binary)
x2 >= a2 * 100
x2 <= a2 * 2000
a2 = 0, 1 (binary)
但是,Solver.makeConstraint()
要求约束在表单上
L <= c1*x1 + c2*x2
...
MPConstraint ct = solver.makeConstraint(L, infinity);
ct.setCoefficient(x1, c1);
ct.setCoefficient(x2, c2);
...
L、c1 和 c2 必须是数字,而不是其他变量。就我而言,我想做类似的事情
...
// x1 >= a1 * 100
MPConstraint ct = solver.makeConstraint(a1 * 100, infinity);
ct.setCoefficient(x1, 1);
...
解决方案
推荐阅读
- sql - 将 Inner Join Grouping SQL 转换为 Linq
- javascript - 分配“数组有选择值”后数组清除
- if-statement - SwiftUI 中的有条件文本取决于数组值
- swift - Swift/Xcode - 自定义注释视图中的按钮没有响应
- angular - 仅当检查切换时,离子表演div才
- java - 图像在处理中使用过多的 RAM
- c# - 如何修复'值不能为空。参数名称:在 SharePoint Online 中使用 CSOM 的 key 异常
- osmnx - 在 Python 中使用 osmnx 到距离内边缘的最近点
- keras - 使用 Keras 在去噪自动编码器中获取隐藏层输出
- reactjs - 在待办事项列表应用程序中创建重复项