生成新模型时更改数组维度 CPLEX OPL

Change array dimension when generating a new model CPLEX OPL

我想在 IBM CPLEX Optimization Studio 12.10 中实施优化 model。 我在 OPL 中编写了 model 代码,第一个实现正在运行。我现在想做的是多次迭代 model 以查看解析时间如何根据参数的维度而变化。

在.mod文件中我定义了三组:

还有四个参数:

在.dat 文件中,我已经为这些集合和参数定义了初始值。

我现在想做的是在流程控制中定义一个代码,允许我更改集合的维度,从而更改参数的维度,并为每个分辨率保存分辨率时间:

main {
    var mod = thisOplModel.modelDefinition; 
    var dat = thisOplModel.dataElements; 
    for (var sizenumSet1 = 2; sizenumSet1 <= 10; sizenumSet1 += 2) {
    for (var sizenumSet2 = 1; sizenumSet2 <= 5; sizenumSet2 +=1) {
      for (var sizenumSet3 = 1; sizenumSet3 <=5; sizenumSet3 +=1) {
        var MyCplex = new IloCplex(); 
        var opl = new IloOplModel(mod, MyCplex); 
        dat.changenumSet1=sizenumSet1; 
        dat.changenumSet2=sizenumSet2; 
        dat.changenumSet3=sizenumSet3; 
        opl.addDataSource(dat); 
        opl.generate(); 
        if (MyCplex.solve()) {
         writeln("Solution: ", MyCplex.getObjValue(),
        " / sizeSet1: ", sizenumSet1,
        " / sizeSet2: ", sizenumSet2,
        " / sizeSet3: ", sizenumSet3,
        " / time: ", MyCplex.getCplexTime());
        }    
        opl.end(); 
        MyCplex.end(); 
        }
    }
    }         
}

当我启动此代码时,我得到的是以下错误列表:

我该如何解决这个问题? 感谢您的帮助。

dat.changenumSet1=sizenumSet1;
dat.changenumSet2=sizenumSet2;
dat.changenumSet3=sizenumSet3;

您更改了错误的元素。你应该改变

dat.numSet1=sizenumSet1;
dat.numSet2=sizenumSet2;
dat.numSet3=sizenumSet3;

此外,您似乎缺少对 Par 数组的更新。这些数组在每次迭代中变得更大,因此需要为它们提供更多数据。