For loop 对于带有步骤OPL Cplex的循环

For loop 对于带有步骤OPL Cplex的循环,for-loop,matrix,cplex,For Loop,Matrix,Cplex,我需要在OPL CPLEX中编写不同维度的矩阵 目前,我为循环编写了以下内容: {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, &qu

我需要在OPL CPLEX中编写不同维度的矩阵

目前,我为循环编写了以下内容:

{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());
}
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);
}
{int}行=。。。;
{int}col=。。。;
国际y[行][列];
执行{
用于(第行中的var i){
对于(var j in col){
y[i][j]=i;
} 
} 
writeln(“y=”,y,
//“/i=”,i,
//“/row=”,第行,
“/col=”,col,
“/time=,cplex.getCplexTime());
}
dvar浮点数x;
最大化x;
服从{
x可以使用模

range r=1..100;

execute
{
  for(var i in r) if (i % 10==0) writeln(i);
}
给予


您可以稍微重写您的
sub.mod
,以实现此目的:

{int} rowSet = ...;
{int} colSet = ...;

range row = 1..last(rowSet);
range col = 1..last(colSet);

int y[row][col];

execute {
  for (var i in row) {
    for (var j in col) {
      y[i][j] = i;
    }
  }
  writeln(y);
}
last
函数将返回相应集合中的最后一个元素。因此,在第一次迭代中得到10,在第二次迭代中得到20,在第三次迭代中得到30。然后将
构造为具有所需元素数目的范围。然后可以使用这些元素初始化数组


请注意,在
main.mod
中,您必须将
data2.row
替换为
data2.rowSet
并将
data2.col
替换为
data2.colSet

嗨,Alex,谢谢您的回答。我更新了问题,更好地说明了我的问题。基本上,您找到的值应该成为我的矩阵的维度,但我不知道如何访问这些值,并使它们成为新的矩阵维度。请查看资产。这可以将1..5转换为1,2,3,4,5的集合
10
20
30
40
50
60
70
80
90
100
{int} rowSet = ...;
{int} colSet = ...;

range row = 1..last(rowSet);
range col = 1..last(colSet);

int y[row][col];

execute {
  for (var i in row) {
    for (var j in col) {
      y[i][j] = i;
    }
  }
  writeln(y);
}