【发布时间】:2018-05-23 20:31:53
【问题描述】:
我试图通过在流控制中调用来迭代地解决子问题。我的子问题包含元组集。我想知道是否可以访问流控制内的元组元素(例如,使用 for 循环更新数据)?
【问题讨论】:
-
你试过什么?为什么不自己编写一些代码来研究呢?见How to Ask。当您可以说明与您共享的某些代码相关的特定问题并告诉我们您遇到了什么问题时,此网站的效果最佳。
我试图通过在流控制中调用来迭代地解决子问题。我的子问题包含元组集。我想知道是否可以访问流控制内的元组元素(例如,使用 for 循环更新数据)?
【问题讨论】:
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();
}
}
【讨论】: