我有一个简单的问题,但我找不到解决方法。例如,使用 CP Optimizer 求解器考虑来自 OPL 中调度问题的以下 .mod 文件。
using CP;
int nbJobs = ...;
int nbMchs = ...;
range Jobs = 0..nbJobs-1;
range Mchs = 0..nbMchs-1;
int OpDurations[j in Jobs][m in Mchs] = ...;
dvar interval itvs[j in Jobs][m in Mchs] size OpDurations[j][m];
dvar sequence mchs[m in Mchs] in all(j in Jobs) itvs[j][m];
execute {
cp.param.FailLimit = 10000;
}
minimize max(j in Jobs) endOf(itvs[j][nbMchs-1]);
subject to {
forall (m in Mchs)
noOverlap(mchs[m]);
forall (j in Jobs, o in 0..nbMchs-2)
endBeforeStart(itvs[j][o], itvs[j][o+1]);
}
我只想打印如何为特定实例(.dat 文件)评估约束集。例如,假设我们要打印约束的方式: forall (m in Mchs) noOverlap(mchs[m]);针对不同的 m 值进行评估。
这可能吗?
提前致谢。
如果你依赖“Opl.”,你可以通过脚本来获得它
using CP;
int n=10;
int d[i in 1..n]=i;
dvar interval A[i in 1..n] size d[i];
dvar interval B[i in 1..n] in 1..10 size 3 ;
dvar sequence p in A ;
subject to {
noOverlap(p);
startOf(B[1])==2;
};
execute
{
writeln(Opl.noOverlap(A));
writeln(Opl.noOverlap(B));
}
给予
1
0