如何在 OPL 中为特定实例打印约束评估

问题描述 投票:0回答:1

我有一个简单的问题,但我找不到解决方法。例如,使用 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 值进行评估。

这可能吗?

提前致谢。

cplex constraint-programming opl cp-optimizer
1个回答
0
投票

如果你依赖“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
© www.soinside.com 2019 - 2024. All rights reserved.