2016-09-28 219 views
0

我試圖執行使用Pyomo優化,但我在努力定義約束了這樣的問題:混合整數規劃:約束定義與if語句,包括變量

if Variable 1 > Parameter 
    Variable 2 = Variable 1 - Parameter 
else skip constraint (?) 

if Parameter > Variable 1 
    Variable 3 = Variable 4 -(Parameter - Variable 1) 
else skip constraint (?) 

不知何故工作的呢? 關於跳過限制:我不太確定是否有必要。

基本上,我只想表達變量和參數之間的關係。

我在這裏看到類似的東西(Mixed integer programming: variable assignment per condition (if then else)),但我無法將其調整到我的問題。

在此先感謝!

+0

這有點不清楚,你到底在做什麼,看起來你缺少一些基礎知識。如果要將某個變量約束爲某個半邊界或取決於另一個值的值,則需要將該約束(將轉換爲線性方程)始終添加到模型中(否則解算器無法關於這個的原因)。這意味着,你的**跳過約束**沒有任何意義。這種僞代碼看起來更像是基於約束編程的方法,而不是混合整數編程。分解你的任務:添加二元指標約束和大M值。 – sascha

+0

我基本上剛剛開始使用約束等,所以我想我想一次納入太多。 謝謝,我會研究你提到的兩種方法。 – AWi

+0

從[this]開始(http://download.aimms.com/aimms/download/manuals/AIMMS3OM_LinearProgrammingTricks.pdf)。解釋指標約束和大M方法。 – sascha

回答

0

我們對模型的其餘部分知之甚少,所以我的答案很可能大有瑕疵。

x1>p => x2=x1-p可以表示爲:

y1=x1-p 
-d*M <= y1 <= (1-d)*M 
y1-d*M <= x2 <= y1+d*M 
d in {0,1} 

這裏M是一個大常數(我們需要找到良好的價值觀,這些大男款)。與其他條件類似。

在幾乎所有情況下,我們都可以使用更多的模型其餘部分的知識來簡化這一過程(大量)。所以在實踐中你不會使用我的一般公式。

+0

感謝您的回答。我剛纔試圖將你的格式應用到實際的代碼中,但我沒有完全理解big_M的功能。 – AWi

+0

big-M是開啓或關閉方程所需的大常量。 –

+0

好吧,清除它。謝謝! – AWi