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