python导入cvxopt库进行有约束优化问题的求解,但是老报错,经过多次踩坑发现,错误原因可能是:数据维度不匹配;数据格式不是'd'型;数据未转换为矩阵形式。
先放上一个能成功运行的:
from cvxopt import matrix, solvers
P = [[20.79, 19.52], [19.52, 18.36]]
P = matrix(P)
q = matrix([-1.0, -1.0])
G = [-1.0, -1.0]
G = matrix(G, (1,2))
h = 0.0
h = matrix(h)
A = [1.0, 1.0]
A = matrix(A, (1, 2))
b = 0.0
b = matrix(b)
solvers.options['show_progress'] = False
sol = solvers.qp(P, q, G, h, A, b)
print(sol['x'])
print(sol['primal objective'])
注意:
Ⅰ数据必须都带小数点,需要保证数据为’d'类型
Ⅱ某些list转化为matrix时需指定大小,如A=matrix(A, (1, 2))指定A为1*2矩阵
Ⅲmatrix必须是cvxopt.matrix,使用numpy.matrix不行
然后还遇到了这个问题:
发现是因为表达式写错了,无法进行最优化求解。
修改表达式为正确形式后成功。