首页 > 解决方案 > 如何使用 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);
...

标签: javaoptimizationor-toolsmixed-integer-programming

解决方案


推荐阅读