Как сгенерировать Set Y с несколькими элементами в CPLEX?

Я написал этот код для создания 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}

Значения переменных

Как я могу сгенерировать несколько элементов в Set Y, если при вычислении E использовалась функция rand?


person Prarup    schedule 07.05.2021    source источник


Ответы (1)


Вы можете использовать массивы для нескольких приведений:

{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]
person Alex Fleischer    schedule 07.05.2021