0

cvxoptを使用して、次の 2d 線形プログラムを最適化しようとしています。

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