2

我有以下目标函数:

最小化所有 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”方法是错误的,但我找不到解决方案。提前致谢。

4

2 回答 2

2

不要cplex.sum在里面使用addTerm。你只需要在你的目标函数中分离出这两个项,因为它们都是在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);

希望有帮助。

于 2013-07-31T18:29:42.617 回答
0

addTerm 方法需要一个系数和一个变量。它不期望一个复杂的表达式(例如一个总和)或一个特定的数值作为第二个参数。可能是您尝试传递的内容存在逻辑问题,因此您可能需要考虑更新您的问题,详细说明您想要完成的内容,如果这不能为您解决问题。换言之,您尝试输入的术语与您使用的线性表达式不兼容。

于 2013-07-31T15:02:49.830 回答