在CPLEX

时间:2018-11-06 07:37:26

标签: mathematical-optimization modeling linear-programming cplex opl

我该如何制定我的模型来进行450的维护和150的清洁?

forall(w in W, t in T, s in S, p in P, m in M)  
   (450<=hub[m][w][t][s])<=(b_maint[w][m][t][s]==1);

forall(w in W, t in T, s in S, p in P, m in M)  
   (hub[m][w][t][s]>=150)<=(b_clean[w][m][t][s]==1);

我还希望在维护后将集线器设置回0 (轮毂是我的产量)这种配方对吗?。

forall(w in W, t in T, s in S, p in P, m in M)  
   (b_maint[w][m][t][s]==1)==(hub[m][w][t][s]==0);

我还可以像这样建模边界吗?

forall(w in W, t in T, s in S)  
   (135<=sum(p in P, m in M)r_x[m][w][p][t][s] && sum(p in P, m in M)r_x[m][w][p][t][s]<=185)==(b_clean[w][t][s]==1);

我也已经这样尝试过:

(135<=sum(p in P, m in M)r_x[m][w][p][t][s] <=185)==(b_clean[w][t][s]==1);

但这也不起作用...

2 个答案:

答案 0 :(得分:0)

您可以使用逻辑约束:

(x==1) => (y<=2);

表示如果(x == 1),则y小于2。

您也可以使用等效项:

(x==3) == (z>=3)

致谢

答案 1 :(得分:-1)

您写了

forall(w in W, t in T, s in S, p in P, m in M)    
   (450<=hub[m][w][t][s])<=(b_maint[w][m][t][s]==1);

你本可以写的

forall(w in W, t in T, s in S, p in P, m in M)    
   (450<=hub[m][w][t][s])=>(b_maint[w][m][t][s]==1);

=>表示立即

那是你的意思吗?也许您的意思是说逆约束:

forall(w in W, t in T, s in S, p in P, m in M)    
       (b_maint[w][m][t][s]==1)=>(450<=hub[m][w][t][s]);