等式約束的二次規划問題


 

等式約束的二次規划問題一般形式是

其中

應用直接消去法求解:將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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM