2017-04-20 60 views
-1

there, 我是紙漿新手。我從網上的一些例子中學習了紙漿。這些例子非常有用,現在我可以通過自己編寫簡單的模型。但是我仍然很難建立複雜的模型,特別是具有稀疏矩陣的模型。如何利用紙漿生成稀疏矩陣的變量和約束?

請問您可以發表一些複雜的稀疏矩陣例子和conplex約束。我想學習如何只創建必要的變量,而不是簡單的變量,如y = LpVariable.dicts(「y」,(Factorys,Customers),0,1,LpBinary)。

我還有一個問題:如果我簡單地使用y = LpVariable.dicts(「y」,(Factorys,Customers),0,1,LpBinary)來定義變量,其中大部分變量在模型中是無用的目標函數和約束,並且我添加了一些約束來明確地將這種無用變量設置爲0?紙漿算法是否能夠首先識別這些無用變量並首先將其刪除,然後運行整數編程算法(如B & B或B & C)來解決縮小尺寸的問題?如果這是真的,它看起來「設置無用變量爲0」方法根本不會降低求解速度。我對嗎?

回答

0

這可能有助於

http://www.stuartmitchell.com/journal/2012/2/3/my-top-n-tips-for-python-coding-in-optimisation-1.html

尤其是生成一組工廠和客戶第一是稀疏。

factories_customers = [(f,c) for f in factories for c in customers 
          if <insert your condition here>] 

然後使用

y = LpVariable.dicts("y", factories_customers ,0,1,LpBinary) 

紙漿不刪除「無用」的變量和約束,因此構建模型時會很長。

但是,解決方案算法(CBC默認包含將解除變量的預解算法)。

+0

謝謝你,斯圖爾特。因此,如果我明確地將無用變量設置爲零,則解決時間不會有太大差異。建模時間可能會有多少差異。我認爲建模時間通常是幾秒鐘或1分鐘左右,與解決方案時間相比,建模時間非常短。 – liywliyw