我有一个组合目标函数来解决问题 (p) 的拉格朗日松弛。
目标函数的数学公式为:
Minimize [sum(i in n) time[i] * poids[i] + sum (i in n) Mult[i]* ((sum (j in n) x[i][j]) -1).
我尝试了以下方法,但不起作用:
// objective
IloNumExpr expr1 = null;
IloLinearNumExpr obj = cplex1.linearNumExpr();
for (int i =0; i<n; i++) {
obj.addTerm(time[i],W[i]);
}
for(int i=0; i<n; i++){
IloLinearNumExpr expr = cplex1.linearNumExpr();
for (int j=0; j<n; j++){
if (cplex1.equals(x[i][j])){
expr.addTerm(1,x[i][j]);
}
} cplex1.sum(expr,-1);
cplex1.prod(expr, mult[i]);
obj.add(expr);
}
cplex1.addMinimize(obj);
感谢您的帮助。
最佳答案
您的代码中有多个错误。
我在这里假设 cplex1
是一个 IloCplex
类型变量。
话虽这么说,你已经
for (int j=0; j<n; j++){
if (cplex1.equals(x[i][j])){
expr.addTerm(1,x[i][j]);
}
} cplex1.sum(expr,-1);
cplex1.prod(expr, mult[i]);
这有两个错误。第一
if (cplex1.equals(x[i][j])){
您正在将 IloCplex
与数字变量进行比较。这将始终返回 false。您在这里想实现什么目标?
第二个错误是这个
cplex1.sum(expr,-1);
cplex1.prod(expr, mult[i]);
应该是这个
expr = cplex1.sum(expr,-1);
expr = cplex1.prod(expr, mult[i]);
因为这些方法不会更改其输入,但会返回结果。
如果问题仍然存在,请尝试改正错误。尝试发布更完整的代码片段。
希望这有帮助
关于java - 拉格朗日松弛 Cplex 和 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27843663/