1
我在Python中使用CVXOPT來嘗試解決一個相當簡單的二次編程問題。我發現它對我的參數的某些值完美起作用,但對其他參數無效。Python中的CVXOPT無法解決簡單的二次編程問題
下面顯示的是一個非常簡單的例子,cvxopt.solvers.qp()
三個例子中的一個失敗。
你可以看到所有的例子在本質上都非常相似。誰能告訴我爲什麼CVXOPT未能解決三者中的問題?
非常感謝
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