0

我正在尝试使用cvxopt优化以下二维线性程序:

A = np.array([[1, 0],
              [1, 0],
              [0, -1],
              [0, 1],
              ], dtype=np.float)
b = np.array([2,
              4,
              1,
              1,
              ], dtype=np.float)
c = np.array([-1,0])

A = matrix(A)
b = matrix(b)
c = matrix(c)

sol = solvers.lp(c,A,b)
print sol

本质上,它是一个对正 x、正 y 和负 y 有约束的框,对正 x 有冗余约束,对负 x 没有约束。我得到的输出是:

{'status': 'dual infeasible', 
 'dual slack': None, 
 'iterations': 5, 
 'residual as primal infeasibility certificate': None, 
 'relative gap': None, 
 'dual objective': None, 
 'residual as dual infeasibility certificate': 3.039926013128332e-09, 
 'gap': None, 's': <4x1 matrix, tc='d'>, 
 'primal infeasibility': None, 
 'dual infeasibility': None, 
 'primal objective': -1.0, 
 'primal slack': 5.32208560659015e-09, 
 'y': None, 
 'x': <2x1 matrix, tc='d'>, 
 'z': None}

问题是 LP 在负 x 方向上是无界的,因此原始目标应该是无穷大。我不确定为什么 cvxopt 会-1.0在同样令人困惑的(-1.0, 0)最佳点返回原始目标。

cvxopt 有没有办法告诉我解决方案是无穷大的?

4

1 回答 1

0

正如@musically_ut 提到的,“dual infeasible与说”是一样的primal unbounded。就我而言,我能够将其与最佳点输出一起使用(-1.0, 0)来确定我的目标是无界的消极还是积极。

于 2015-08-26T22:19:20.373 回答