在Scipy Linprog中,是否有设置使得结果"nicer"?
In Scipy Linprog, is there a setting that makes the results "nicer"?
我用 scipy.optimize.linprog 解决了以下线性程序:
result = linprog(
[0, 0, 0, 0],
A_eq=[
[1, 1, 0, 0],
[1, 0, 1, 1]
],
b_eq=[
-10000, -10000
],
bounds=[(None, -1000), (None, -1000), (None, -1000), (None, -1000)]
)
print(result.x)
并得到:
[-4982.07750764 -5017.92249214 -2508.96124608 -2508.96124608]
这个程序有很多解法都是"nicer"(有更多的整数),例如:
[-5000 -5000 -2500 -2500]
有没有办法告诉 linprog 更喜欢这样的解决方案?
默认情况下,linprog
将使用内点法。这将给出正确的解决方案,但它们通常看起来不太好。单纯形法通常给出 "nicer" 个解。当我们添加参数 method = 'revised simplex'
时,我们看到:
[-1000. -9000. -1000. -8000.]
当然仍然不是独一无二的,但看起来好多了。
我用 scipy.optimize.linprog 解决了以下线性程序:
result = linprog(
[0, 0, 0, 0],
A_eq=[
[1, 1, 0, 0],
[1, 0, 1, 1]
],
b_eq=[
-10000, -10000
],
bounds=[(None, -1000), (None, -1000), (None, -1000), (None, -1000)]
)
print(result.x)
并得到:
[-4982.07750764 -5017.92249214 -2508.96124608 -2508.96124608]
这个程序有很多解法都是"nicer"(有更多的整数),例如:
[-5000 -5000 -2500 -2500]
有没有办法告诉 linprog 更喜欢这样的解决方案?
默认情况下,linprog
将使用内点法。这将给出正确的解决方案,但它们通常看起来不太好。单纯形法通常给出 "nicer" 个解。当我们添加参数 method = 'revised simplex'
时,我们看到:
[-1000. -9000. -1000. -8000.]
当然仍然不是独一无二的,但看起来好多了。