У меня есть модель оптимизации, которую я хочу реализовать в 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] = ...;
In В файле .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();
}
}
}
}
Когда я запускаю этот код, я получаю следующий список ошибок:
- Ошибка выполнения основного. Ошибка обработки модели OPL
- Индекс выходит за пределы массива Par4 (1) (1): 3
- Ошибка времени выполнения сценария: (при генерации) Ошибка обработки модели OPL
Как я могу решить это? Спасибо за вашу помощь.