【发布时间】:2020-02-07 09:18:46
【问题描述】:
我有一个要在 IBM CPLEX Optimization Studio 12.10 中实现的优化模型。 我在 OPL 中编写了模型代码,第一个实现正在运行。我现在想做的是多次迭代模型,以查看解析时间如何根据参数的维度而变化。
在 .mod 文件中我定义了三组:
- int numSet1=...;
- int numSet2=...;
- int numSet3=...;
- 范围 Set1 = 1..numSet1;
- 范围 Set2 = 1..numSet2;
- 范围 Set3 = 1..numSet3;
还有四个参数:
- float Par1[Set1]=...;
- float Par2[Set1][Set2]=...;
- float Par3[Set1]=...;
- float Par4[Set1][Set2][Set3]=...;
在 .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 模型失败
- 数组 Par4(1)(1):3 的索引超出范围
- 脚本运行时错误:(在生成中)处理 OPL 模型失败
我该如何解决这个问题? 感谢您的帮助。
【问题讨论】:
标签: multidimensional-array cplex opl