【问题标题】:How to add new constraints in the scheduling problem at CPLEX?如何在 CPLEX 的调度问题中添加新的约束?
【发布时间】:2019-10-17 08:41:37
【问题描述】:

我是 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];

}

我有cross-posted this question

【问题讨论】:

  • 我已将块格式应用于您的帖子 - 请您删除反引号吗? edit link is here.
  • 我对这个问题投了反对票。如果您可以按照指示修复它,我将不赞成。

标签: scheduling cplex


【解决方案1】:

您还需要按产品扩展您的决策变量(就像您对需求和库存所做的那样),这样您就可以知道每种产品的交付量。

然后您可以通过添加“forall (p in Products)”为每个产品复制每个约束。

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]; 

【讨论】:

  • 谢谢丹尼尔。我真的是初学者。感谢您的帮助!
  • 如果您想提供元评论,最好在问题下将其分离为 cmets。一旦 OP 意识到这一点,以后就可以更轻松地删除它。
【解决方案2】:

你可以试试

{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];

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-24
    • 1970-01-01
    相关资源
    最近更新 更多