如何在 CPLEX 中生成具有多个元素的 Set Y?

问题描述

我已经编写了这段代码生成一个带有单个元素的 Set Y

int m=3 ;

range I= 1..m;

int w[i in I]=i;

int q= min(i in I)w[i] ;

int W=1000;

int Ea[I];  

{int} B={381,198,291};
   
{int} E ={rand(f) | f in B: f>0};

execute
{
  writeln("E is ",E)
  
  var j=1
  
  for(var k in E) 
  {        
      Ea[j]=k;         //Array Ea has same values as set E
     
      j=j+1;         
  } 
}  
    
int ok[i in I]=(sum(i in I)Ea[i]*w[i]<=W-q);

{int} Y= {sum(i in I)Ea[i]*w[i]|x in 0..W-q,i in I: ok[i]==1 } ;

execute{

writeln(Y);
  
}

以上代码和变量值的输出

E is  {93 42 31}
Y is {270}

Variable Values

如何在Set Y中生成多个元素,因为在计算E时已经使用了rand函数

解决方法

您可以将数组用于多个强制转换:

{int} B={381,198,291};

range casts=1..10;
   
{int} E[c in casts] ={rand(f) | f in B: f>0};

execute
{
  writeln(E);
} 

int Y[c in casts]= sum(e in E[c]) e;

execute{

writeln(Y);
  
}

给予

[{93 42 31} {378 131 243} {25 177 61} {4 48 212} {276 1 256} {289 138 264}
         {366 192 177} {138 150 164} {125 163 246} {315 180 240}]
 [166 752 263 264 533 691 735 452 534 735]