是否有正确的解决方法来正确表达此模型:
using CP;
int fooSize[0..3]=[2,2,3,2];
dvar interval foo[t in 0..3] size fooSize[t];
dvar int bar[0..3] in 0..1;
dexpr int stop = max(t in 0..3) endOf(foo[t]);
minimize stop;
subject to{
all(ordered u,v in 0..3: bar[u]==bar[v])
startOf(foo[u])>=endOf(foo[v]) || startOf(foo[v])>=endOf(foo[u]);
}
OPLIDE告诉我,决策变量bar
未获得授权。我也尝试过:
forall(ordered u,v in 0..3)
(bar[u]==bar[v]) => (startOf(foo[u])>=endOf(foo[v]) || startOf(foo[v])>=endOf(foo[u]));
但它似乎没有用,解算器只挂了好几个小时。那么我该如何调试OPL模型呢?如果您需要具体信息,请告诉我。
一般来说,有没有办法根据决策变量的值来约束约束?
答案 0 :(得分:1)
您不能使用决策变量切片。
你可以写:
using CP;
int fooSize[0..3]=[2,2,3,2];
dvar interval foo[t in 0..3] in 0..10000 size fooSize[t];
dvar int bar[0..3] in 0..1;
dexpr int stop = max(t in 0..3) endOf(foo[t]);
minimize stop;
subject to{
forall(ordered u,v in 0..3)
(bar[u]==bar[v]) => (startOf(foo[u])>=endOf(foo[v]) || startOf(foo[v])>=endOf(foo[u]));
}
在CPLEX OPL IDE中,您有一个调试器。 这在文档中有描述 IDE和OPL>启动工具包>从运营研究到CPLEX Studio和ODM Enterprise
问候