파이썬에서 CVXOPT를 사용하여 상당히 간단한 2 차 프로그래밍 문제를 해결하려고합니다. 내 매개 변수의 일부 값은 완벽하게 작동하지만 다른 매개 변수는 실패하는 것으로 나타났습니다.파이썬에서 CVXOPT가 간단한 2 차 프로그래밍 문제를 해결하지 못합니다.
아래 그림은 세 가지 예제 중 하나에 대해 실패한 cvxopt.solvers.qp()
의 매우 간단한 예입니다.
모든 예가 매우 비슷하다는 것을 알 수 있습니다. CVXOPT가 왜 3 중창을 풀지 못하는지 누가 알 수 있습니까?
많은 감사
import numpy as np
from cvxopt.solvers import qp
from cvxopt import matrix
print '-'*70
print 'Case 1:'
P = np.array([[ 0.0084, 0.003 ],
[ 0.003, 0.0017]])
q = np.array([[-0.36],
[-0.02]])
G = np.array([[ 1., 0.],
[ 0., 1.]])
h = np.array([[ 500.],
[ 500.]])
results = qp(
matrix(P),
matrix(q),
matrix(G),
matrix(h),
)
print results # Works fine, {'status': 'optimal'}
print results['x']
print 'Works fine'
print '-'*70
print 'Case 2:'
P = np.array([[ 0.0042 , 0.0015 ],
[ 0.0015 , 0.00085]])
q = np.array([[-0.48],
[-0.06]])
G = np.array([[ 1., 0.],
[ 0., 1.]])
h = np.array([[ 500.],
[ 500.]])
results = qp(
matrix(P),
matrix(q),
matrix(G),
matrix(h),
)
print results # Fails, reaches max_iter, {'status': 'unknown'}
print '***Fails***'
print '-'*70
print 'Case 3:'
P = np.array([[ 0.0021 , 0.00075 ],
[ 0.00075 , 0.000425]])
q = np.array([[-0.54],
[-0.08]])
G = np.array([[ 1., 0.],
[ 0., 1.]])
h = np.array([[ 500.],
[ 500.]])
results = qp(
matrix(P),
matrix(q),
matrix(G),
matrix(h),
)
print results # Works fine, {'status': 'optimal'}
print results['x']
print 'Works fine'
왜 실패했는지 말할 수는 없지만 QP는 사소하지 않고 아무런 해결자가 완벽하지 않습니다. 이와 같은 작은 문제가 발생하면 조금 성가 시지만 항상 문제가 될 수 있습니다. 그것은 반복의 수를 늘리는 것이 도움이되지 않기 때문에 어떻게 든 여기에서 분기됩니다. 상용 솔루션 인 MOSEK는 전혀 문제가 없습니다. – sascha