objective 函数中值的零乘数未给出最可行的解决方案

Zero multiplier for the value in objective function doesn't give the most feasible solution

using Pulp求解一个线性规划(也得到与scipy相同的结果)。所以我的线性程序公式有问题,或者我不知道单纯形算法工作原理的一些棘手细节。

这是 objective 函数 最小化 ,请注意 x2 的乘数是 0,所以我不希望 x1x2 具有除 0 以外的任何值,因为 x3 没有最大约束并且 -1 * x3 能够为最小化提供更多值:

线性方程组:

作为解决方案,我得到了 x2 = 20,即使它在 objective 函数中的乘数是 0.

如果我在 objective 函数中设置 -2 * x3,那么它工作正常。

您发布的解决方案给出了 objective = -380。检查 x=[20,0,0,20,0,20,20,0],objective 函数也是 -380,这意味着它也是最优的,因此,你有无限多的解决方案(很容易证明这两点的任何凸组合都是最优的,见任何线性规划书籍)。问题是您的 PuLP 求解器在遇到一个最佳极值点时停止了。如果您有兴趣获得所有最佳极值点,我建议您使用 Cplex(它不是免费的,但您可能有资格参加 IBM 学术计划)。此外,您可以在 PuLP 求解器中为 Dual Simlex 设置一种求解方法,使其朝不同的方向移动,并且有机会获得另一个极值点。