当前位置: 首页 > 知识库问答 >
问题:

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

施宏大
2023-03-14

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

在. mod文件中,我定义了三个集合:

  • int numSet1=
  • int numSet2=
  • int numSet3=
  • 范围设置1=1。。numSet1
  • 范围设置2=1。。numSet2
  • 范围设置3=1。。numSet3

和四个参数:

  • 浮点Par1[设置1]=
  • 浮点Par2[设置1][设置2]=
  • 浮点Par3[设置1]=
  • 浮点Par4[集1][集2][集3]=

在. 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(); 
        }
    }
    }         
}

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

  • 执行main失败。处理OPL模型失败

我如何解决这个问题?谢谢你的帮助。

共有1个答案

竺和洽
2023-03-14

在里面

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

你改变了错误的元素你应该改变

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

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

 类似资料:
  • 问题内容: 我有一个ng-repeat,它在更改正在使用的数组中的数据时不会更新。我已经研究了一段时间,但似乎没有任何效果。最初,当页面加载时,ng- repeat显示数据集的第一页,在获取新数据(下一页)并使用该数据设置该数组时,ng- repeat不会注意到更改,并且永远不会填充更新的数组。如果有人可以在正确的方向上指导我,将不胜感激。 }]); 问题答案: 尝试将tbody包装在div中,但

  • 问题内容: 我试图弄清楚Angular的工作原理,并在模型更改时无法更新视图。 的HTML JS http://jsfiddle.net/N2G7z/ 有任何想法吗? 问题答案: 正如上面提到的Ajay beniwal一样,您需要使用Apply来开始消化。

  • 问题内容: 我用来加载图像。值是从一些范围变量加载的,如下所示: 我的问题是,当我运行时,它会使属性为空,但不会在属性中反映出来。因此,我不断看到需要空占位符的图像。 我该如何处理? 问题答案: 这是ngSrc和ngHref指令的预期行为。这些指令仅支持识别新路径,但是当路径不可用时,这些指令将以静默方式退出(我在这里看到一个拉取请求。)。 因此,当图像变量不再可用时,可能的解决方法是将ngSho

  • 我现在迷路了。

  • 我使用的是一个由渲染器对象的ObservableList支持的TableView,其设置如下: 渲染器对象非常简单,如下所示: 我有一个从UI调用的函数,通过按下按钮并包含以下内容: 我原本希望每3秒钟在每一行上看到一次对approved的更改,但它会执行所有行,并且只有在这之后才会更新UI。为什么会这样?如何更新UI?

  • 我尝试重新验证()和重新绘制(),但没有改变。 现在有趣的事情来了。如果我用for(int I=0;I 只有当我用另一个我手动填写的列表创建和设置新模型时,我才能查看更新。