objective 函数中值的零乘数未给出最可行的解决方案
Zero multiplier for the value in objective function doesn't give the most feasible solution
我using Pulp求解一个线性规划(也得到与scipy相同的结果)。所以我的线性程序公式有问题,或者我不知道单纯形算法工作原理的一些棘手细节。
这是 objective 函数 最小化 ,请注意 x2
的乘数是 0
,所以我不希望 x1
或 x2
具有除 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 设置一种求解方法,使其朝不同的方向移动,并且有机会获得另一个极值点。
我using Pulp求解一个线性规划(也得到与scipy相同的结果)。所以我的线性程序公式有问题,或者我不知道单纯形算法工作原理的一些棘手细节。
这是 objective 函数 最小化 ,请注意 x2
的乘数是 0
,所以我不希望 x1
或 x2
具有除 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 设置一种求解方法,使其朝不同的方向移动,并且有机会获得另一个极值点。