Как добавить новые ограничения в задачу планирования в CPLEX? - PullRequest
1 голос
/ 17 октября 2019

Я новичок в CPLEX, и я изо всех сил пытаюсь добавить больше ограничений в мой проект. Сценарий хорошо работает, когда у меня несколько отправителей и получателей, и только один продукт

Я хотел бы сделать это с большим количеством продуктов в каждом пункте назначения, и я не знаю, как написать ограничения.

{string} Forest = {"A","B","C","D","E"};
{string} Destination = {"D1" , "D2"};
{string} Products = {"Pinus","Eucalyptus"};

float Demand [Destination][Products]= [[3,1],[4,5]];
float Distance [Forest][Destination]=[[21,52],[42,12],[25,15],[52,31],[9,42]]; 
float Stock [Forest][Products]= [[0.94,0],[0,8.62],[0,1.21],[2.6,0],[8.77,0]];` 

//Decision Variables
dvar float+ Delivered [Forest][Destination];

//Função Objetivo
minimize
sum (u in Forest, c in Destination) Distance[u][c] * Delivered[u][c];

//Constraints

subject to {
   forall (u in Forest)
      sum (c in Destination)
        Delivered[u][c] <= Stock [u];


   forall (c in Destination)
      sum (u in Forest) 
         Delivered[u][c] >= Demand[c];

}

У меня кросс-пост на этот вопрос .

Ответы [ 2 ]

3 голосов
/ 17 октября 2019

Вы также можете расширить свою переменную решения по продуктам (как вы делали это для спроса и запаса), чтобы вы могли знать, сколько поставлено каждого продукта.

Затем вы можете реплицировать каждое ограничение для каждого продукта. добавив "forall (p в Продукты)".

dvar float+ Delivered [Forest][Destination][Products];

forall (p in Products)
  forall (u in Forest)
    sum (c in Destination)
      Delivered[u][c][p] <= Stock[u][p]; 
0 голосов
/ 17 октября 2019

вы можете попробовать что-то вроде

{string} Forest = {"A","B","C","D","E"}; 

{string} Destination = {"D1" , "D2"};
{string} Products = {"Pinus","Eucalyptus"};

float Demand [Destination][Products]= [[3,1],[4,5]]; 

float Distance [Forest][Destination]=[[21,52],[42,12],[25,15],[52,31],[9,42]]; 

float Stock [Forest][Products]= [[0.94,0],[0,8.62],[0,1.21],[2.6,0],[8.77,0]]; 

//Decision Variables 
dvar float+ Delivered [Products][Forest][Destination];

//Função Objetivo 
minimize sum (p in Products,u in Forest, c in Destination) Distance[u][c] * Delivered[p][u][c];

//Constraints

subject to { 
forall (u in Forest,p in Products) sum (c in Destination) Delivered[p][u][c] <= Stock [u][p];

forall (p in Products,c in Destination) sum (u in Forest) Delivered[p][u][c] >= Demand[c][p];

}
...