我有以下目标函数:
最小化所有 k (1..n) 的总和 (trueck[k] - time[k])。
我尝试这样设置:
IloLinearNumExpr obj = cplex.linearNumExpr();
for(int k=0; k<grossK.length; k++){
obj.addTerm(1.0, cplex.sum(trueck[k], cplex.negative(time[k])));
}
cplex.addMinimize(obj);
第4行的eclipse错误消息是:
“类型 IloLinearNumExpr 中的方法 addTerm(double, IloNumVar) 不适用于参数 (double, IloNumExpr)”
我猜“addTerm”方法是错误的,但我找不到解决方案。 提前致谢。
最佳答案
不要在addTerm
内使用cplex.sum
。您只需在目标函数中分离出这两项,因为它们都是通过 k 求和的。
最小化所有 k (1..n) 的总和 (trueck[k] - time[k])
与 Min *sum_over_k* (trueck[k]) - *sum_over_k* (time[k]) 相同
这样addTerm就可以处理了。 (下面的代码未经测试,但它让您了解应该尝试什么。)
IloLinearNumExpr obj = cplex.linearNumExpr();
for(int k=0; k<grossK.length; k++){
obj.addTerm(1.0, trueck[k]);
obj.addTerm(-1.0, time[k]);
}
cplex.addMinimize(obj);
希望有帮助。
关于java - Cplex Java 将 expr(sum) 添加到目标函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17960904/