2017-10-10 116 views
0

我在Python PuLP中構建了一個非常複雜的MIP。顯然對我來說太複雜了。當我運行它時,會發出以下警告:Python PuLP「覆蓋以前設置的目標。」和__dummy =無

UserWarning:覆蓋以前設置的目標。 warnings.warn(「覆蓋了先前設定的目標。」)

的問題進行一些計算,但不來預期的解決方案。

LpStatus[prob.status]回報Optimal

prob.objective回報None

當我打印prob.variables()

for v in prob.variables(): 
    print(v.name, "=", v.varValue) 

我得到__dummy = None在其他變量之間。

任何人都可以解釋什麼__dummy = None在這種情況下意味着什麼?我在哪裏可以尋找解決方案?我很確定我只有一個目標函數。

回答

2

好的,我找到了解決方案。我確實重寫了目標函數,卻沒有注意到它。

下面是導致警告的一段代碼:

for i in range(len(items)): 
     for l in range(L): 
      prob += delta[0-l] == 0 

增量變量是一個列表的列表。第一個索引不見了,因此該程序將一個列表與零比較。由於這是不可能的,所以等式總是返回假(可能編碼爲零),然後將其解釋爲目標函數。

這解決了這個問題:

for i in range(len(items)): 
     for l in range(L): 
      prob += delta[i][0-l] == 0 

現在它增加了而不是值的概率方程。

我希望這可以幫助任何人遇到類似的問題。