2014-03-19 38 views
1

我想寫一個優化模型,根據一些約束選擇較小的兩個任務。或使用GLPSOL AMPL/MathProg進行線性規劃的條件

minimize obj: (doT1 * T1) + (doT2*T2) + (additional variables) 

現在,T1和T2代表任務的持續時間,doT1代表執行這些任務的標誌。如果需要,我希望這種優化只能選擇其中的一種。

當我把約束

s.t. c15: 0<= doT1 <= 1; 
s.t. c15: 0<= doT2 <= 1; 

我得到這glpsol之它說的線性形式的乘法不允許的錯誤消息。

線性規劃中可以表達OR條件嗎?

回答

1

gplsol很可能是抱怨變量doT1 * T1doT2 * T2的乘積。

我假設doT1doT2是二進制變量,而T1T2是連續變量(代表任務的持續時間)。 (請注意,這意味着您將不得不使用混合整數規劃求解器而不是純線性規劃求解器,您可能還想嘗試使用功能強大的MIP求解器,如Gurobi)。

您可以通過重寫你的約束條件和目標建立你的模型

minimize T1 + T2 + (additional variables) 

    st  T1 <= UT1*doT1 
      T2 <= UT2*doT2 
      doT1 + doT2 <= 1 
      doT1, doT2 binary 
      (plus any additional constraints) 

其中UT1是以任務T1UT2的持續時間的上限是以任務T2的持續時間的上限。如果doT1 = 0T1 <= 0,所以任務不會完成。如果doT1 = 1,則T1 <= UT1,這意味着任務T1被允許持續一段時間。這同樣適用於T2

OR條件由約束doT1 + doT2 <= 1表示。這個約束意味着doT1doT2不能都是1.那隻能選擇一個工作。請注意,<=約束還允許您不執行任何任務。如果至少必須完成一個任務,則您需要使用約束條件doT1 + doT2 == 1