scipy linprog次优解决方案

时间:2016-02-23 18:13:01

标签: optimization scipy

尝试测试一个非常简单的优化问题,但无法通过scipy.optimize.linprog查看正在发生的事情

input_vector = -np.array([ - 1。, - 1。, - 1.,1。,1.,1.,1.,0,0,0])

A_upper = np.array([np.ones(len(input_vector)), - np.ones(len(input_vector))])

b_upper = np.array([。1,0.1])

opt_res = sp.optimize.linprog(c = input_vector,A_ub = A_upper,b_ub = b_upper)

答案:

opt_res

状态:0

松弛:数组([0.,0.2])

成功:真实

 fun: -0.10000000000000001

   x: array([ 0. ,  0. ,  0. ,  0.1,  0. ,  0. ,  0. ,  0. ,  0. ,  0. ])

消息:'优化已成功终止。'      尼特:1

当然[0.333,0.333,0.333,-0.25,-0.25,-0.25,-0.25]是一个更好的解决方案,坚持约束。而且,是的,我知道,这是冰山一角......建议的解决方案可以乘以正标量。

我在这里缺少什么?非常感谢提前。

萨姆

1 个答案:

答案 0 :(得分:1)

linprog是正确的。由于您没有提供任何界限,linprog将假设所有变量都是非负数。请参阅docs(参数bounds)。如果要允许负值,则需要明确指定。

LP解算器的这种默认行为并不罕见。