python---cvxopt.solvers.qp(P,q,G,h,A,b)

标准形式:
m i n    1 2 x T P x + q T x s . t .    G x h A x = b min\,\,\frac{1}{2}x^TPx+q^Tx\\ s.t.\,\,Gx≤h\\ Ax=b

注意: P P 为对称矩阵, x x 是列向量。
示例:
1 2 [ x 1 x 2 ] [ a b b d ] [ x 1 x 2 ] = 1 2 ( a x 1 2 + d x 2 2 + 2 b x 1 x 2 ) \frac{1}{2}\begin{bmatrix}x_1&x_2\end{bmatrix} \begin{bmatrix}a&b\\b&d\end{bmatrix}\begin{bmatrix}x_1\\x_2\end{bmatrix}= \frac{1}{2}\left(ax_1^2+dx_2^2+2bx_1x_2\right)
m i n    x 1 2 + x 2 2 + x 1 x 2 + 2 x 1 + x 2 s . t .    x i 0 , i = 1 , 2 i = 1 2 x i = 1 min\,\,x_1^2+x_2^2+x_1x_2+2x_1+x_2\\ s.t.\,\, x_i≥0,i=1,2\\ \sum_{i=1}^2x_i=1

因此,由 x 1 2 + x 2 2 + x 1 x 2 x_1^2+x_2^2+x_1x_2 可以推出:
P = [ 2 1 1 2 ] P=\begin{bmatrix}2&1\\1&2\end{bmatrix}

2 x 1 + x 2 2x_1+x_2 可以推出:
q = [ 2 1 ] q=\begin{bmatrix}2\\1\end{bmatrix}

注意:约束条件需要化成标准形式:
s . t .    x i 0 , i = 1 , 2 i = 1 2 x i = 1 s.t.\,\, -x_i≤0,i=1,2\\ \sum_{i=1}^2x_i=1

因此,可以推出:
G = [ 1 0 0 1 ] h = [ 0 0 ] A = [ 1 1 ] b = 1 \begin{array}{lcl} G=\begin{bmatrix}-1&0\\0&-1\end{bmatrix}\\\\ h=\begin{bmatrix}0\\0\end{bmatrix}\\\\ A=\begin{bmatrix}1&1\end{bmatrix}\\\\ b=1 \end{array}

因此,要求解:

m i n    x 1 2 + x 2 2 + x 1 x 2 + 2 x 1 + x 2 s . t .    x i 0 , i = 1 , 2 i = 1 2 x i = 1 min\,\,x_1^2+x_2^2+x_1x_2+2x_1+x_2\\ s.t.\,\, x_i≥0,i=1,2\\ \sum_{i=1}^2x_i=1

可通过:cvxopt.solvers.qp(P,q,G,h,A,b)来进行求解。
其中参数为:
P = [ 2 1 1 2 ] , q = [ 2 1 ] , G = [ 1 0 0 1 ] , h = [ 0 0 ] , A = [ 1 1 ] , b = 1 P=\begin{bmatrix}2&1\\1&2\end{bmatrix},q=\begin{bmatrix}2\\1\end{bmatrix}, G=\begin{bmatrix}-1&0\\0&-1\end{bmatrix},h=\begin{bmatrix}0\\0\end{bmatrix}, A=\begin{bmatrix}1&1\end{bmatrix},b=1
Code:

from cvxopt import solvers, matrix

P=matrix([[2.,1.],[1.,2.]])
q=matrix([2.,1.])
G=matrix([[-1.,0.],[0.,-1.]])
h=matrix([1.,1.])
A=matrix([1.,1.],(1,2))
b=matrix(1.)

solvers.options['show_progress'] = False
sol = solvers.qp(P,q,G,h,A,b)

print(sv['x'])
print(sv['primal objective'])

Result:
在这里插入图片描述

发布了56 篇原创文章 · 获赞 4 · 访问量 8316

猜你喜欢

转载自blog.csdn.net/qq_45669448/article/details/104678910
Q&H