gpt4 book ai didi

java - 在 or-tools 中编写 MIP 的线性表达式

转载 作者:行者123 更新时间:2023-12-02 09:36:20 32 4
gpt4 key购买 nike

我正在尝试使用 Java 在 or-tools 中编写线性表达式,然后将其添加到约束中。

如文档 linear_expr 中所示并在 GitHub有一种方法可以做到这一点。

尽管如此,我不清楚如何将其用于这样的示例:

linear_expr: offset + sum_{i in S} a_i*x_i
constraint: linear_expr <= y_j

xy 是决策变量

我认为它应该是这样的。

    /*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 变量。

enter image description here

最佳答案

java中没有这样的API,并且您无法按照您编写的方式实现它,因为您无法重载+和*运算符。

您需要在约束对象上使用 setCoefficient。

现在您可以创建一个包含 3 个字段(变量列表、系数列表、常量)和适当的 addTerm()、addVar() 和 setConstant() 方法的类。

话虽如此,您使用的 API 表明您仅使用 boolean 变量和整数系数。

您可以查看 CP-SAT API,它提供 LinearExpr class 。看这个gentle introductionJava API

关于java - 在 or-tools 中编写 MIP 的线性表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57479358/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com