Мне нужно написать матрицы разных размеров в OPL Cplex. В настоящее время я написал это для l oop:
{int} row=...;
{int} col=...;
int y[row][col];
execute
{
for (var i=1; i<=row.size; i+=10){
for (var j in col){
y[i][j]=i;
}
}
writeln("y= ",y,
"/ row = ", row.size,
"/ col = ", col.size,
"/ time = ", cplex.getCplexTime());
}
В настоящее время в журнале сценариев я получаю в качестве решения все матрицы (от 1x2 до 100x2). Я хотел бы вычислить (и распечатать) только матрицы 1x2, 10x2, 20x2, ..., 90x2 и 100x2. По сути, я хотел бы печатать матрицу каждые 10 строк (итого 11 матриц, а не 100). Я попытался умножить row.size на 10 (или разделить его на 10, когда значение строки равно 100). Как я могу это сделать?
ОБНОВЛЕНИЕ:
main.mod
{int} set1={};
{int} set2={};
int ar[1..100][1..100];
main {
var source = new IloOplModelSource("sub.mod");
var cplex = new IloCplex();
var def = new IloOplModelDefinition(source);
for(var i=1;i<=30;i++) if (i % 10 == 0) {
for (var j=1; j<=30; j++) if (j % 10 == 0) {
var opl = new IloOplModel(def,cplex);
var data2= new IloOplDataElements();
data2.row=thisOplModel.set1;
data2.row.add(i);
data2.col=thisOplModel.set2;
data2.col.add(j);
}
opl.addDataSource(data2);
opl.generate();
}
if (cplex.solve()) {
writeln("Solution = " + cplex.getObjValue(),
"/ time = ", cplex.getCplexTime());
} else {
writeln("No solution");
}
data2.end();
opl.end();
}
sub.mod
{int} row=...;
{int} col=...;
int y[row][col];
execute {
for (var i in row) {
for (var j in col) {
y[i][j]=i;
}
}
writeln("y= ",y,
// " / i= ", i,
// "/ row = ", row,
"/ col = ", col,
"/ time = ", cplex.getCplexTime());
}
dvar float x;
maximize x;
subject to {
x<=sum(i in row, j in col) y[i][j];
}
execute
{
writeln("x=",x);
}
Теперь я получаю правильные значения в row = {10, 20, 30} и col = {10, 20, 30} в main.mod. В строке sub.mod и col - наборы. Мне нужно использовать эти значения в качестве размеров матрицы. Итак, первая матрица 10х10, вторая 20х20 и т. c. Как я могу получить доступ к значениям внутри набора, чтобы я мог создать эти матрицы? Извините за многочисленные вопросы, но я действительно новичок в CPLEX.