For loop 对于带有步骤OPL Cplex的循环
我需要在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
{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);
}