如何在 cplex 中转换/获取整数表达式的值?



我是 Cplex 的新手。我需要同时计算多个间隔之间的重叠。为此,我一次计算两个间隔之间的overlap_length,并保存起点/终点的最大值和最小值。 例如,让我们考虑三个间隔变量 I1、I2、I3。目标是最大化三者之间的重叠。 然后,代码如下:

超过1=mdl.overlap_length(I1,I2(

start1=max(mdl.start_of(I1(,mdl.start_of(I2((

end1=min(mdl.end_of(I1(,mdl.end_of(I2((

over1=mdl.overlap_length(I3,(start1,end1(

然后我最大化超过1。 有了这个,我得到以下错误:

断言错误:为了表示固定间隔,"interval2"应该是两个整数的元组

实际上,start1 和 end1 是 CP 整数表达式。我没有找到转换或获取值的方法! 有没有人知道如何做到这一点?

谢谢

在最后一行中,start1 和 end1 需要是边界,它们必须是值而不是决策变量。因此,作为一种解决方法,您可以依靠人工间隔。

由于 OPL 非常接近文档,但恕我直言,让我向您展示 OPL 的方式更容易。

using CP;
dvar interval I1 in 0..20;
dvar interval I2 in 0..20;
dvar interval I3 in 0..20;
dvar int over1;
dvar int start1;
dvar int end1;
dvar interval artificialInterval;
maximize over1;
subject to
{
over1==overlapLength(I1,I2);
start1==maxl(startOf(I1),startOf(I2));
end1==minl(endOf(I1),endOf(I2));
startOf(artificialInterval)==start1;
endOf(artificialInterval)==end1;
over1==overlapLength(I3,artificialInterval);
}   

工作正常

最新更新