【发布时间】:2019-08-13 13:57:25
【问题描述】:
我正在尝试使用 Java 在 or-tools 中编写线性表达式,然后将其添加到约束中。
正如在文档 linear_expr 和 GitHub 中已经看到的那样,有一种方法可以做到这一点。
尽管如此,我不清楚如何将其用于这样的示例:
linear_expr: offset + sum_{i in S} a_i*x_i
constraint: linear_expr <= y_j
x 和 y 是决策变量
这就是我认为应该的样子。
/*define variables and parameters*/
double offset = Math.random();
int S = 10;
ArrayList<Double> aList = new ArrayList<Double>();
/*define variable x and parameter a*/
HashMap<Integer,LinearExpr> x = new HashMap<Integer,LinearExpr>();
for (int i = 0; i < S; i++) {
LinearExpr x_variable = solver.makeBoolVar("x_variable_" + i);
x.put(i,x_variable);
aList.set(i,Math.random());
}
int K = 20;
/*define variable y*/
HashMap<Integer,LinearExpr> y = new HashMap<Integer,LinearExpr>();
for (int j = 0; j < K; j++) {
LinearExpr y_variable = solver.makeNumVar(0,MPSolver.infinity(),"y_variable_" + j);
y.put(j,y_variable);
}
/*linear_expr: offset + sum_{i in S} a_i*x_i
constraint: linear_expr <= y_j
*/
LinearExpr linear_expr = 0;
for (int i = 0; i < S; i++) {
linear_expr = linear_expr + x.get(i) * aList.get(i)
}
linear_expr = linear_expr + offset;
/*define constraint*/
for (int j = 0; j < K; j++) {
MPConstraint constraint = solver.makeConstraint(linear_expr,MPSolver.infinity(),"constraint_"+j);
constraint.setCoefficient(y.get(j),1);
}
此外,不可能创建 LinearExpr 变量。
【问题讨论】:
标签: java or-tools mixed-integer-programming