2017-10-10 121 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 

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

我希望这可以帮助任何人遇到类似的问题。