Python cvxopt 忽略约束

Zah*_*ahy 1 python linear-programming

我根据以下示例使用 CVXOPT 进行线性编程:http ://abel.ee.ucla.edu/cvxopt/examples/tutorial/lp.html 我很确定我表达了一个约束

X1 >= 0 
Run Code Online (Sandbox Code Playgroud)

但是得到一个负值。怎么来的?我收到“找到最佳解决方案”消息

A = matrix( [ [0.0, 0.0, 1.0, 1.0, -0.0, -0.0, -1.0, -1.0, -1.0, 0.0, 0.0], 
              [0.0, 1.0, 1.0, 0.0, -0.0, -1.0, -1.0, -0.0, 0.0, -1.0, 0.0], 
              [1.0, 0.0, 0.0, 1.0, -1.0, -0.0, -0.0, -1.0, 0.0, 0.0, -1.0]
              ]
            ) 
Run Code Online (Sandbox Code Playgroud)

约束值(右侧)

b = matrix( [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0] )
Run Code Online (Sandbox Code Playgroud)

最小化功能:

c = matrix( [-1.0, -1.0, -1.0] )
Run Code Online (Sandbox Code Playgroud)

调用:

 sol=solvers.lp(c,A,b)
Run Code Online (Sandbox Code Playgroud)

但:

print (sol['x']): 
[-4.83e-09]
[ 1.00e+00]
[ 1.00e+00]

-4.83e-09>=0 
False
Run Code Online (Sandbox Code Playgroud)

谢谢

And*_*son 6

根据用户指南CVXOPT 中的默认可行性容差为 1.0e-7 。因此,您应该期望您的约束仅满足此精度级别。

编辑因此,为了确保您的“硬”约束得到满足,您需要将变量下限设置为等于“硬”约束(即在您的情况下为 0)加上可行性容差:

X1 >= 1.0e-7
Run Code Online (Sandbox Code Playgroud)