如何使用IBM Cplex OPL脚本定义和初始化3维数组

时间:2018-08-07 12:52:10

标签: arrays cplex opl

在ibm网站http://www-01.ibm.com/support/docview.wss?uid=swg21573358上 他们在Main Opl脚本中定义并初始化了二维数组,如下所示:

primefaces

我正在尝试定义和初始化3维数组,但我定义和初始化的数组给我“结果未定义” 我的代码如下:

main {

    var var_2d = new Array(3);
       for (var i=0; i<3; i++) {
         var_2d[i] = new Array(3);
         for(var j=0; j<3; j++) {
           var_2d[i][j] = 1;
         }
       }

}

我得到的价值是

a =2
 m=3;
 n= 2;

 Range A= 1..2;
 Range M = 1..3;
 Range N = 1..2;

// declare 3 dimensional array in the Main script

main{
var var_var_temp2 = new Array (thisOplModel.a+thisOplModel.m+thisOplModel.n) ; 

// initialize the  3 dimensional array
     for( var r in thisOplModel.A){
         var_var_temp2[r] = new Array(thisOplModel.m);
            for( var i in thisOplModel.M) {
                 var_var_temp2[r][i] = new Array(thisOplModel.n);
                    for ( var j in thisOplModel.N) {
                     var_var_temp2[r][i][j]= 1.0;    
                        }
              }  
          }  
// code to print the value stored in temp2[r][i][j]

for (r in thisOplModel.A) {
                 for (i in thisOplModel.M){ 
                      for (i in thisOplModel.N) {  
                                writeln( var_var_temp2[r][i][j]);                                           
              }                 
                 }       
                      } 

}

1 个答案:

答案 0 :(得分:0)

按原样,您的示例在CPLEX Optimization Studio 12.8中存在语法错误。

如果将顶部更改为以下内容:

int a = 2;
int m = 3;
int n = 2;

range A = 1..2;
range M = 1..3;
range N = 1..2;

也就是说,包括类型并将“ Range”替换为“ range”,那么它似乎运行良好。输出是我们期望的:

1
1
1
1
1
1
1
1
1
1
1
1