问题描述
我用一个定义为x [s,r,v,l]的变量编写了一个OPL模型,该变量具有许多可以正常工作的约束。
range V = 1..17;
range S = 1..20;
range LP=1..2;
range RT=1..8;
dvar float+ x[S][RT][V][LP];
.
.
.
同样,我在约束之后定义了execute(输出部分),如下所示:
execute Output{\
writeln("---------------------Timeline---------------------------------");\
for(var s in S){\
writeln("Week " + s);\
for(var l in LP){\
for (var v in V){\
if (sum(r in RT)(x[s,r,v,l]) > 0) {\
writeln(" Line "+l+" Producing product "+v+" "+sum(r in RT)x[s,l]+" tons "+sum(r in RT) x[s,l] / Pi_l[l]+" hours ");\
}\
}\
}\
}\
}
但是它不起作用。有什么办法吗? (或修改语法以获得正确的句子)
解决方法
您不能在脚本中使用sum,但可以将OPL和脚本混合使用:
range V = 1..17;
range S = 1..20;
range LP=1..2;
range RT=1..8;
float Pi_l[l in LP]=l;
dvar float+ x[S][RT][V][LP];
subject to
{
x[1][1][1][1]==1;
}
float su[s in S][l in LP][v in V]=sum(r in RT)(x[s,r,v,l]);
execute Output{
writeln("---------------------Timeline---------------------------------");
for(var s in S){
writeln("Week " + s);
for(var l in LP){
for (var v in V){
if (su[s][l][v] > 0) {
writeln(" Line "+l+" Producing product "+v+" "+su[s][l][v]+" tons "+su[s][l][v] / Pi_l[l]+" hours ");
}
}
}
}
}
工作正常