【问题标题】:Is it possible to access the tuple elements within the flow control of OPL?是否可以访问 OPL 的流控制中的元组元素?
【发布时间】:2018-05-23 20:31:53
【问题描述】:

我试图通过在流控制中调用来迭代地解决子问题。我的子问题包含元组集。我想知道是否可以访问流控制内的元组元素(例如,使用 for 循环更新数据)?

【问题讨论】:

  • 你试过什么?为什么不自己编写一些代码来研究呢?见How to Ask。当您可以说明与您共享的某些代码相关的特定问题并告诉我们您遇到了什么问题时,此网站的效果最佳。

标签: cplex opl


【解决方案1】:

我在https://www.ibm.com/developerworks/community/forums/html/topic?id=f08e7a2e-1c1c-4322-bff8-91d2ca62c42e&ps=25提供了一个例子

sub.mod

tuple t
{
 int e1;
 int e2;    
}

{t} y=...;

execute
{
  writeln("y=",y);
}

dvar float x;

maximize x;
subject to {
  x<=sum(i in y)i.e2;
}

execute
{
  writeln("x=",x);
}

然后是 main.mod 中的主块

tuple t
{
int e1;
int e2;    
}

{t} s={<1,1>};

main {
  var source = new IloOplModelSource("sub.mod");
  var cplex = new IloCplex();
  var def = new IloOplModelDefinition(source);


  for(var k=1;k<=5;k++)
  {
  var opl = new IloOplModel(def,cplex);

  var data2= new IloOplDataElements();

data2.y=thisOplModel.s;
Opl.item(thisOplModel.s,0).e2=Opl.item(thisOplModel.s,0).e2+1;
data2.y.add(k,k+1);

  opl.addDataSource(data2);
  opl.generate();

  if (cplex.solve()) {
     writeln("OBJ = " + cplex.getObjValue());
  } else {
     writeln("No solution");
  }
data2.end();
 opl.end();


}  

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-26
    • 2017-01-16
    • 1970-01-01
    • 2016-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多