2014-10-19 29 views
1

我在林業行業進行了優化,其中一組公司C可以從收穫區域集合I的一些分類集合A中扣除某些木材。參數x [I, J,V,T,C,A]變量代表從收穫區域I到鋸木廠J在時間T使用車輛V的流量,用於公司C與分類A.需要改造以避免不可行性

我遇到的麻煩是每個鋸木廠必須遵守最小需求,d_minus。這樣做是:

# The total flow into a node at time period t must exceed the minimum demand. 
subject to Constraint2 {j in J, t in T, p in T, c in C, a in A: p <> t}: 
    sum{v in V, i in I} x[i,j,v,p,c,a] >= d_minus[j,t,c,a]; 

麻煩的是,車輛V是一個特定的能力,建模:

# The flow must not exceed the total capacity for each vehicle and time period 
subject to Constraint6 {v in V, t in T}: 
    sum{i in I, j in J, c in C, a in A} x[i,j,v,t,c,a] <= capacity[v]; 

這會導致編譯不過抱怨過在constraint2不可能界限。例如

presolve: constraint Constraint2[1,1,6,1,3] cannot hold: 
body >= 1000 cannot be <= 273; difference = 727 

即時通訊使用4輛車和每輛車的容量40(我嘗試使用400和1000以及,但錯誤依然存在)。 d_minus參數介於500和1000之間。

我以爲參數不應該太窄。使用1000的容量,他們應該按照我所要求的3個車隊來滿足需求。我傾向於「限制所有」約束是限制解決方案,導致錯誤。我嘗試過使用「T中的所有t,j中的J」作爲Constraint2,但後來找不到d_minus的下標。任何人有任何線索?

問候

回答

1

我建議使用solexpand命令presolve後顯示約束Constraint2[1,1,6,1,3]

solexpand Constraint2[1,1,6,1,3]; 

這可能會給上究竟是什麼原因造成的不可行性的一些見解。由於這個問題只有一個約束,因此除非您有一個非常大的約束表達式,否則不應該太困難,在這種情況下,我建議將您的數據集儘可能減小到最小,這仍然會導致不可行性。

+0

感謝您的回覆!我正在使用NEOS服務器,並且在.run文件中添加該命令不會打印任何內容。一直試圖谷歌如何與NEOS使用solexpand,但我還沒有找到任何東西。你知道任何使用NEOS跟蹤錯誤的方法嗎? – Cenderze 2014-11-03 18:55:20

+0

它現在使用solexpand!感謝你,不知道這一點。 感謝您的回覆!我試過使用solexpand,它給了我在原始文章中編輯過的輸出。我已將d_minus約束脩改爲所有組合的1。它給了我所有x變量都應該爲0的解決方案。你知道這可能是什麼嗎? – Cenderze 2014-11-03 19:04:52

+1

由於您的輸入,我現在已經解決了這個問題。當然接受並提高你的答案。再次感謝! – Cenderze 2014-11-03 21:14:03