2017-03-31 42 views
2

我使用oemof構建了帶6條總線的電力系統。每輛巴士都有簡單的輸入。總線1在兩個方向上連接到總線2(2個變換器)。總線2以同樣的方式連接到總線3。 ...。總線6連接到總線1.所以它是一個環形結構。每輛巴士都有水槽。 巴士1還通過燃氣發電廠與燃氣巴士連接。燃氣公共汽車有1個能量輸入。 現在我開始將巴士1上的一個需求與8760個時間步(一年)連接起來。我讓程序解決了這個能量系統中每個物體的流動。我在40秒後得到了解決方案。 但我的目標是解決系統中更多需求的問題。所以我在公交車2上集成了第二個需求。現在計算時間大約是3分鐘。在公交車3的第三個需求中,計算時間爲15分鐘。每輛公共汽車都需要40分鐘以上的時間。對於使用oemof(solph)和CBC求解器的小型能源模型,求解器時間似乎很高

我的處理器是i5 4670K 3.4 GHz。

我的問題是:爲什麼CBC求解器需要這麼多時間來解決這個問題,以滿足更多的能源需求?有什麼理由嗎?

你現在是如何解決者的工作原理?我找不到任何答案

與系統中的一個需求:

128382 Obj 1.6384541e+013 Primal inf 6.0004356e+008 (5) Dual inf 2.5973983e-006 (1) 
Primal infeasible - objective value 1.6384541e+013 
PrimalInfeasible objective 1.638454066e+013 - 128382 iterations time 36.552 

與系統中的兩項要求:

155933 Obj 1.1686988e+014 Primal inf 3.7517663e+010 (20494) 
Primal infeasible - objective value 1.1686988e+014 
PrimalInfeasible objective 1.16869879e+014 - 155933 iterations time 1728.062 
+0

歡迎來到SO。請在你的問題中編輯你的添加。 –

回答

0

我不同意,40分鐘似乎太長這樣一個小系統。

正常情況下,如果問題不可行,解算器時間會顯着增加。因此,在添加其他需求對象後,應確保問題仍然可解決。順便說一下,不同的單位(或前綴)是錯誤的典型來源。

讓您的問題可以解決的一個簡單方法是爲每條巴士(餘額)添加無限多餘和不足的對象。確保解算器的短缺來源比所有其他對象更加昂貴,否則可能會被用來代替電廠。

對於oemof.solph它看起來像這樣(例如bus_1):

from oemof import solph 

# shortage bus_1 
solph.Source(label='shortage_1', 
      outputs={bus_1: solph.Flow(variable_costs=50000)}) 

# excess bus_1 
solph.Sink(label='excess_1', inputs={bus_1: solph.Flow()}) 

如果添加這些對象到每個總線您的問題會解決的。之後你可以檢查結果。如果這些匯和源的總和大於零,那麼如果沒有它們,問題就不可行。現在你可以分析你的結果來發現問題。