等式约束的二次规划问题

 

等式约束的二次规划问题一般形式是

其中

应用直接消去法求解:将A分块,使其包含一个m×m非奇异矩阵AB,x,g做对应的分块

带入到等式约束条件中,可解得xB,再带入q(x),于是二次规划问题转化为无约束规划问题

这个二次规划问题有解析解

 

广义消去法是消去法的一个推广,将Rn划分成两个空间:一个A的列的像空间V,一个AT的零空间K

设Y是V的一组基构成的n×m矩阵,Z是K的一组基构成的n×(n-m)矩阵,并且[Y Z]是正交矩阵

选取Y,Z满足

根据约束条件,有

 因此有

带入一般形式,原问题转化为无约束优化问题

可得到该无约束优化问题的解,从而得到原问题的解

 

下面给出代码实现:

直接消去法

 1 from numpy import *
 2 
 3 def equation_constraint(G,g,A,b):
 4     m=min(A.shape)
 5     n=max(A.shape)
 6     M = range(0, n)
 7     E = range(0, m)
 8     A_B = A[E,:]
 9     I = setdiff1d(M, E)
10     A_N = A[I,:]
11     i=0
12     x = arange(0, n).astype(float)
13     while True:
14         if linalg.matrix_rank(A_B)==m:
15             break
16         else:
17             i+=1
18             E[m-i]+=1
19             I = setdiff1d(M, E)
20             A_B = A[E, :]
21             A_N = A[I, :]
22     G_BB=G[E,:][:,E]
23     G_AA=G[I,:][:,I]
24     G_AB=G[I,:][:,E]
25     G_BA=G[E,:][:,I]
26     g_B=g[E]
27     g_A=g[I]
28     invABAN=dot(A_N,linalg.inv(A_B))
29     invABb=dot(linalg.inv(A_B).T,b)
30     G_hat=G_AA-dot(G_AB,invABAN.T)-dot(invABAN,G_BA)+dot(invABAN,dot(G_BB,invABAN.T))
31     g_hat=g_A-dot(invABAN,g_B)+dot(G_AB-dot(invABAN,G_BB),-invABb)
32     x[E]=invABb+dot(dot(invABAN.T,linalg.inv(G_hat)),g_hat)
33     x[I]=-dot(linalg.inv(G_hat),g_hat)
34     return x

 

posted @ 2018-06-20 21:43  "kisetsu  阅读(3351)  评论(0编辑  收藏  举报