scipy.optimize.linprog 不适合我:我做错了什么?
scipy.optimize.linprog not working for me: what am I doing wrong?
我正在尝试使用 scipy.optimize.linprog,但在简单情况下它对我不起作用。我一定是做错了什么--请帮我找出来。
这是输入和预期的解决方案以及预期解决方案是否可行的测试
import numpy, scipy.optimize
print "A", A_ub
print "b", b_ub
print "c", c
print "x_expected", x_expected
print "expected optimum", numpy.dot(c, x_expected)
print "feasibility test", numpy.dot(A_ub, x_expected) <= b_ub
这会打印
A [[-1. -0. 0. 1.]
[-0. -1. 1. 1.]
[-1. -0. -0. -1.]
[-0. -1. -1. -1.]]
b [ 2. 1. -2. -1.]
c [ 1. 1. 0. 0.]
x_expected [ 0 0 -1 2]
expected optimum 0.0
feasibility test [ True True True True]
当我调用 linprog 时,我得到了一个可行的解决方案,但它似乎不如我上面预期的那样最优。
r = scipy.optimize.linprog(c, A_ub, b_ub)
x_derived = r.x
print "x_derived", x_derived
print "derived optimum", numpy.dot(c, x_derived)
print "derived feasibility", numpy.dot(A_ub, x_derived) <= b_ub
这会打印
x_derived [ 1. 0. 0. 1.]
derived optimum 1.0
derived feasibility [ True True True True]
我应该得到预期的解决方案(或者更好的解决方案,如果有的话)而不是我得到的,我的推理有什么问题吗?如果我没记错的话,如何让 linprog 为我获取它?谢谢!
Linprog 默认采用通常的线性规划下界 x >= 0
,您的 "expected" 解决方案不满足。请参阅 bounds
关键字参数以更改边界。
我正在尝试使用 scipy.optimize.linprog,但在简单情况下它对我不起作用。我一定是做错了什么--请帮我找出来。
这是输入和预期的解决方案以及预期解决方案是否可行的测试
import numpy, scipy.optimize
print "A", A_ub
print "b", b_ub
print "c", c
print "x_expected", x_expected
print "expected optimum", numpy.dot(c, x_expected)
print "feasibility test", numpy.dot(A_ub, x_expected) <= b_ub
这会打印
A [[-1. -0. 0. 1.]
[-0. -1. 1. 1.]
[-1. -0. -0. -1.]
[-0. -1. -1. -1.]]
b [ 2. 1. -2. -1.]
c [ 1. 1. 0. 0.]
x_expected [ 0 0 -1 2]
expected optimum 0.0
feasibility test [ True True True True]
当我调用 linprog 时,我得到了一个可行的解决方案,但它似乎不如我上面预期的那样最优。
r = scipy.optimize.linprog(c, A_ub, b_ub)
x_derived = r.x
print "x_derived", x_derived
print "derived optimum", numpy.dot(c, x_derived)
print "derived feasibility", numpy.dot(A_ub, x_derived) <= b_ub
这会打印
x_derived [ 1. 0. 0. 1.]
derived optimum 1.0
derived feasibility [ True True True True]
我应该得到预期的解决方案(或者更好的解决方案,如果有的话)而不是我得到的,我的推理有什么问题吗?如果我没记错的话,如何让 linprog 为我获取它?谢谢!
Linprog 默认采用通常的线性规划下界 x >= 0
,您的 "expected" 解决方案不满足。请参阅 bounds
关键字参数以更改边界。