我根据以下示例使用CVXOPT进行线性编程: http://abel.ee.ucla.edu/cvxopt/examples/tutorial/lp.html 我很确定我表达了一个约束
X1 >= 0
但是得到负值。 怎么会?我得到了“找到最佳解决方案”的消息
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]
]
)
约束值(右侧)
b = matrix( [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0] )
最小化功能:
c = matrix( [-1.0, -1.0, -1.0] )
通话:
sol=solvers.lp(c,A,b)
但是:
print (sol['x']):
[-4.83e-09]
[ 1.00e+00]
[ 1.00e+00]
-4.83e-09>=0
False
由于
答案 0 :(得分:4)
根据user guide, CVXOPT 中的默认可行性容差为1.0e-7。因此,您应该期望您的约束只能达到这种准确度。
编辑因此,为确保您的“硬”约束得到满足,您需要将下限变量设置为等于“硬”约束(在您的情况下为0)加可行性公差:
X1 >= 1.0e-7