尝试测试一个非常简单的优化问题,但无法通过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]是一个更好的解决方案,坚持约束。而且,是的,我知道,这是冰山一角......建议的解决方案可以乘以正标量。
我在这里缺少什么?非常感谢提前。
萨姆
答案 0 :(得分:1)
linprog
是正确的。由于您没有提供任何界限,linprog
将假设所有变量都是非负数。请参阅docs(参数bounds
)。如果要允许负值,则需要明确指定。
LP解算器的这种默认行为并不罕见。