起作用集法(Active Set Method)是一种用于求解约束优化问题的有效算法,特别适用于二次规划问题。以下是使用起作用集法解决二次规划问题的基本步骤和概念。9 U" b, N' o U2 O, I! t/ m
4 d( d. l- s. `) `
### 二次规划问题的形式) s+ o9 Z7 H5 @) K8 n. P' X$ I
$ q* p2 {) z" Y3 L: H ~! L( n g二次规划问题通常可以表示为: * V" b8 f) c3 i. a0 o4 K' P; n. I- I0 z" L% P& v
\[ + q. U: q6 q# }\text{Minimize } f(x) = \frac{1}{2} x^T Q x + c^T x' j3 c- Q3 ` t% ]
\] l* X- E, J W0 {/ m# [' r 1 N# J4 d8 [3 e y约束条件为: . V; d+ r7 ?4 m" h & U# d* U; d/ ]. C2 l: P5 J\[ ( \, }2 g: e) YAx \leq b ' w4 b$ Z; O2 z# r4 [& X+ L' B4 l- P9 ^\]- t0 ~' H6 \( `; u4 z m2 P
6 y9 O. S# a& _! I% p\[ ' z, m7 k# k4 O$ `1 |! V" fx \geq 05 e& D7 X. y' r8 h, ?$ A' `
\]. `$ R* M/ c* a0 T- K
1 D, C5 h- ?) T2 C- R4 A
其中,\(Q\) 是一个对称正定矩阵,\(c\) 是一个向量,\(A\) 是约束条件的系数矩阵,\(b\) 是约束条件的右侧向量。: A" |2 ?; w) V
0 b. j! E& Z2 ^# ^9 w### 起作用集法的步骤$ ]) ~( K, g3 ~4 V
) b% a) H' {0 j" O, l
1. **初始化**:3 i0 Y5 K5 [% I+ u' U' E
- 选择一个初始可行解 \(x_0\)。5 ?% y/ u* O2 Q/ C6 H
- 确定初始的起作用集(即当前活动的约束条件)。 + ~( O# ~( D) u/ n2 {* ^ 4 {* a. H* r1 [) m& i2. **构造拉格朗日函数**: & h+ W- e. D2 ] - 对于当前的起作用集,构造拉格朗日函数: ! T3 G" Y$ W! ]4 k! l k: p& h6 m" r \[9 ^& H) {1 \8 Q# P2 _
L(x, \lambda) = \frac{1}{2} x^T Q x + c^T x + \lambda^T (b - Ax)" m. n( \& c% I0 x! {1 J
\] ; v# Q* {) j. r/ P" S# c- b# t, t: C5 e4 V; s" V0 S# V" n
3. **求解一阶条件**: . Q) }5 u9 r* a6 K - 对 \(L\) 关于 \(x\) 和 \(\lambda\) 分别求偏导数,并令其等于零,得到一个方程组。6 h( H& N2 C- W& T, u7 n/ I# `) H
9 k; ]: l2 g4 Z2 P4 E0 i4. **更新解**: ( O. X5 D2 w, W - 通过求解上述方程组,得到新的解 \(x\)。0 ?1 y5 f9 _# V* P( U% U
- 检查新的解是否满足所有约束条件。 / i* r3 ^/ B3 Y7 O4 { ( s( @ z" o8 u, y, U. ^- {5. **更新起作用集**: 8 v9 G2 s1 X, c3 X - 如果新的解违反了某些约束条件,则将这些约束条件加入起作用集。. r; U7 \- j4 c
- 如果新的解满足所有约束条件,则检查是否可以退出当前的起作用集。, [0 j6 U- k- v% H9 ~
- w! y1 o0 K' l, `
6. **迭代**: 1 I f' z: A5 U4 y- _3 k - 重复步骤 2 到 5,直到满足收敛条件(例如,目标函数值的变化小于某个阈值)。 9 {1 E6 L1 o; k8 _- a7 K3 X4 m" G 9 U6 K5 M8 L# F7. **确定最优解**: . G) J1 K$ t9 ~2 s S - 当达到收敛条件时,当前解即为最优解。 7 j* P/ L, g) i( j8 b/ E: r4 ]* r4 o9 K8 v! ? i6 q
### 示例 + Y9 N) [5 A# j% o0 z- G( L# ^2 P' }: [3 p
假设我们有一个简单的二次规划问题: 2 c7 \% F; J, W , o1 C1 i5 |3 M% Q\[# H# W6 E% q+ I4 F, o Y C
\text{Minimize } f(x) = x_1^2 + x_2^2 ; p$ Z2 V: @; Q$ X\] 6 ?8 C8 N- x7 S( w6 n1 i, u5 f; @% j. w. b2 n) z# }5 J
约束条件为: 8 P" u: e- @, I9 o) G ) [6 B8 C9 h: v; S; p% {\[9 {1 p- w0 V# ?! P8 h
x_1 + x_2 \leq 1. d; f9 S, Y" m! u/ U' K
\]" ? ?' M; F$ \8 d1 w
B0 y! a( o/ }) P* G3 P' L8 \% x\[ 0 n1 T# ]- [! h, I$ @$ M1 h r& tx_1, x_2 \geq 02 V7 s8 F4 R H$ ~& r7 S
\] 5 h+ t8 q$ q& n. o 0 v2 P6 u$ I5 x* W" o6 |( q% v& v**步骤**:1 e. U" t* K0 c7 I* e, R3 c
: O# M- \6 v! U" B1. **初始化**:! d$ d' G+ v! {) ] Y
- 选择初始解 \(x_0 = (0, 0)\),起作用集为空。1 ?; T) O' g) X
7 _& r/ @ ^( \3 G: M) ~* K2. **构造拉格朗日函数**: ) P* q- r. s% n$ x& k( t5 e - 对于当前的起作用集,构造拉格朗日函数。3 k5 |1 A$ ~3 _4 E! @5 Q9 @. H
& [7 W1 q, d J$ s5 {
3. **求解一阶条件**: ( m: }& L5 }9 }: ^' t/ d - 计算偏导数并求解。 * m1 Z1 n/ C1 [- |6 H, n( m: S0 ~- L
4. **更新解**: 5 [0 L8 ~2 h) V) v& E6 { - 得到新的解 \(x\),检查是否满足约束。. B# Y1 `5 W- b$ k9 z4 A