繁体   English   中英

Pulp Python LP-错误的解决方案

[英]Pulp Python LP - Wrong Solution

当我运行以下代码时:

from pulp import * 

x = pulp.LpVariable("x", 0, None , LpContinuous) 
y = pulp.LpVariable("y", 0, None , LpContinuous)
problem = pulp.LpProblem("A simple max problem", pulp.LpMinimize) 
problem += x + y, "The objective function" 
problem += x + 2*y == 2, "1st constraint"
problem += 2*x + 3*y == 2, "2nd constraint"
problem += x >= 0, "3rd constraint"
problem += y >= 0, "4th constraint"
problem += x + y == 1, "5th constraint"

problem.writeLP("WhiskasModel.lp")
problem.solve()

for variable in problem.variables():
    print variable.name, "=", variable.varValue

print value(problem.objective)

我得到的输出:

x = 0.0
y = 1.0
1.0

这显然是错误的,因为不满足第二约束。 现在的情况是上述问题没有解决方案。 因此,我希望纸浆能够通知我一些相关的问题(“不可行的问题”)或类似的问题。 相反,我怀疑它会随意删除某些约束并与其余约束一起使用。 在以下情况下类似:

x = pulp.LpVariable("x", 0, None , LpContinuous) 
y = pulp.LpVariable("y", 0, None , LpContinuous)
problem = pulp.LpProblem("A simple max problem", pulp.LpMinimize) 
problem += x + y, "The objective function" 
problem += x + 2*y == 2, "1st constraint"
problem += 2*x + 3*y == 20, "2nd constraint"
problem += x >= 0, "3rd constraint"
problem += y >= 0, "4th constraint"
problem += x + y == 1, "5th constraint"

problem.writeLP("WhiskasModel.lp")
problem.solve()

for variable in problem.variables():
    print variable.name, "=", variable.varValue

print value(problem.objective)

输出是

x = 34.0
y = -16.0
18.0

即第四个约束现在被“删除”。

有任何想法如何解决这个问题吗?

从第一个约束开始,您的程序将尝试自行解决。

从线性代数的角度来看,增强矩阵为:

[ 1 2 | 2
  2 3 | 20
  1 1 | 1 ]

进一步的限制是两个变量都应> = 0。 从第二行直接减去第一行的两倍,您将得到:

[ 1 2  | 2
  0 -1 | 16
  .........]

换句话说,为了满足您的第一个约束,您将y变量强制设为-16,这是唯一可行的解​​决方案。 x变量变为34,以求解第一行。 所有其他约束和目标函数都不再重要。 这是唯一可能的解决方案。

您想要的是如果问题没有解决所有约束的解决方案,系统会向您发出警告。 当前,这尚未在软件包中实现,并且看到了Git,他们不打算更改此行为,因此,如果要警告您一些不可行的问题,请更改软件包。

如果您不想更改软件包,则可以看到违反解决方案的解决方案是不可行的。 您可以编写代码块自己引发警告/异常。

正如您已经说过的:重要的是检查数学优化问题是否可行。 纸浆包含此功能。

包括:

if (problem.status == -1):
     print("Your problem is infeasible!")

在您的代码中,您将看到。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM