- 在线时间
- 482 小时
- 最后登录
- 2026-9-11
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7943 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2975
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1183
- 主题
- 1198
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
起作用集法(Active Set Method)是一种用于求解约束优化问题的有效算法,特别适用于二次规划问题。以下是使用起作用集法解决二次规划问题的基本步骤和概念。8 b8 o; Z" f" d" \+ [* h
8 g+ ?0 d( A/ U6 p0 W7 m" O3 }3 L. e
### 二次规划问题的形式
, ?' h0 c$ U+ S+ s$ M% f) }8 N7 Q! {
二次规划问题通常可以表示为:: ^, ]- G. S l
) `' F( d7 }) t/ F) e
\[
) y) S n# T+ C2 o3 ?( _ r\text{Minimize } f(x) = \frac{1}{2} x^T Q x + c^T x
. I' W% X3 c3 M7 c9 [$ L5 y\]$ j+ U+ ^; h3 |. {! z; C; W
! C8 _/ E3 ?* r. }( n约束条件为:
) Q3 @2 W7 Z/ y" U+ t6 U* s2 S9 }1 N, x( c1 l6 c5 t I4 \
\[" z, Z1 _; f% w s1 h
Ax \leq b
4 B- g) N: Y8 ?' [- a+ V\]0 s1 }' i5 J$ ?' S3 N
2 ` L1 }1 ~6 n: L# x
\[
$ a8 k- R- x* Y* Q+ h$ Hx \geq 0& t( x( t' v% t- q9 L, }. K8 Y8 i- A8 N
\]
1 `( {% t" q/ k/ T( O, F+ N; |! H7 K. t( G4 x3 q) N, i
其中,\(Q\) 是一个对称正定矩阵,\(c\) 是一个向量,\(A\) 是约束条件的系数矩阵,\(b\) 是约束条件的右侧向量。
& C J" R: _; U5 z7 F# Y8 S2 _/ r2 d# q& L
### 起作用集法的步骤
& o) [& \& ~$ ?. d: R6 \7 q: h. C a; D4 U2 h9 G
1. **初始化**:
" X: X; \0 W( f( J: ?4 e - 选择一个初始可行解 \(x_0\)。! o% d8 d. q+ N+ q7 v' J$ o
- 确定初始的起作用集(即当前活动的约束条件)。4 j6 M) i& H. Y% D4 F
6 P5 ^- W- V1 t6 h1 L. n; W2. **构造拉格朗日函数**:
# E! H. _- J" y7 P( {2 t8 Z8 Q - 对于当前的起作用集,构造拉格朗日函数:
6 U) k2 Z5 I0 U
- W* K5 ?% S( k0 U: N% ~ \[0 G+ g; Z. h3 C. {9 I5 i
L(x, \lambda) = \frac{1}{2} x^T Q x + c^T x + \lambda^T (b - Ax)
5 }) s7 K# N1 p3 {$ ~ \]
) V* D+ \5 }5 S: l- w7 R7 j: `" V* H+ X: I s' Z
3. **求解一阶条件**:
5 q% }( H$ _" ^1 Q - 对 \(L\) 关于 \(x\) 和 \(\lambda\) 分别求偏导数,并令其等于零,得到一个方程组。
; ^! y. k" O1 M/ Y& ?7 X3 b
1 `) X7 b5 c; U) }* Y- d6 w4. **更新解**:
0 A2 l3 E# X9 s$ X - 通过求解上述方程组,得到新的解 \(x\)。, Q) H1 t8 e& ]& t* Y# k2 V
- 检查新的解是否满足所有约束条件。- N) A+ N0 b# ?/ @5 r% y' G
0 [# A1 d \8 H h/ K
5. **更新起作用集**:
& x! t$ D# ?: c& I - 如果新的解违反了某些约束条件,则将这些约束条件加入起作用集。
. g- w V7 R. _* _ - 如果新的解满足所有约束条件,则检查是否可以退出当前的起作用集。
3 o+ F$ B( F" t" R* O# ]" h$ g r9 i& J% v/ m& h
6. **迭代**:
0 P9 { D$ H- d, M, {# E - 重复步骤 2 到 5,直到满足收敛条件(例如,目标函数值的变化小于某个阈值)。
( V- T# g3 ~$ O# x* ?5 }4 w
0 P4 o/ ]/ {- u% G: }0 Z7. **确定最优解**:
: E5 {6 P5 f7 Z" q, N$ j - 当达到收敛条件时,当前解即为最优解。
8 j; Y, [1 S: |/ S, _- P) F( n8 w: S+ M( F. y
### 示例
9 A& L1 B" P7 W( N' t- x; k/ n+ _4 k. C! I, B. W3 i; E* }
假设我们有一个简单的二次规划问题:0 _0 x4 _! O: W* }& k7 [9 k) M- R
/ _& `) r2 B- r
\[
- q' n" m; p' ] D- c; r\text{Minimize } f(x) = x_1^2 + x_2^2
8 P" f1 D4 D, M3 z0 Q* E7 ?0 e\] z3 V4 ?( @9 m% z
% A @, z* X. f3 L# a! ^
约束条件为:$ L+ _* ?# x7 g4 {/ f
4 B" `! Y+ H' `# r5 x8 q\[' l/ h W0 S( |) m3 P: v5 R* ?! ~* L
x_1 + x_2 \leq 1) C% P0 k6 k: [4 s# y1 L
\]
9 u/ ~/ d! P- P2 d) W' M1 X& @' o5 p: s% ?+ x4 E
\[7 O8 c6 @% x' o; q1 n
x_1, x_2 \geq 0
g/ e- N! e( g6 a- T\]7 F& f1 E) n' a+ {$ o
4 A: C5 b5 F, s$ n ~**步骤**:! `6 V' |5 p: o' l# K% y
$ T% q- {) L& I) j1. **初始化**:
+ R' N1 J) J1 q% `9 F - 选择初始解 \(x_0 = (0, 0)\),起作用集为空。: G: E8 v. G3 r) j I' d) Z% Y. f
) d5 I5 U9 K8 N2 h! n) V2. **构造拉格朗日函数**:
' e7 J/ Q8 I! \" y5 ~% T - 对于当前的起作用集,构造拉格朗日函数。
" E/ B5 ~4 ?6 c( R8 H0 j' h# h7 n' d3 n
3. **求解一阶条件**:
; m- B- y& T; x - 计算偏导数并求解。
% p7 q. {& N8 Q1 B1 D% l# H- q# `* g2 o) Y5 m+ d5 C) o6 }
4. **更新解**:( k. e$ C3 K/ F# M% o# I
- 得到新的解 \(x\),检查是否满足约束。
$ p* H$ N! i7 R6 g7 O$ O7 w' ~! X8 v
5. **更新起作用集**:/ s' s J/ D$ z* Y5 M D% o
- 如果 \(x_1 + x_2 > 1\),则将约束 \(x_1 + x_2 \leq 1\) 加入起作用集。
0 g- c) \+ R' X0 W4 X0 i9 N7 p# s( l& w: `+ O' u& b$ @
6. **迭代**:
) N/ f3 G0 |& I - 重复上述步骤,直到收敛。# q. _; g7 M* w% M7 z
) o, Z& i$ L4 z9 u7 u6 M! |7. **确定最优解**:; \' Z' S* u2 o9 ]: o9 ], a
- 最终得到的解即为最优解。
9 j+ ]- F( c+ d' b5 @: X/ R8 K- ^ W9 M- ?1 `. ]
### 总结2 W' o2 w9 Y% I6 I6 h
, s4 q& U0 m# a h! R2 f起作用集法是一种有效的求解二次规划问题的算法,通过动态调整活动约束集来逐步逼近最优解。它适用于处理具有线性约束的优化问题,尤其在约束条件较多的情况下表现良好。4 {, H2 H+ E' P; y
& h+ J, p2 E8 k6 S7 ?3 s& W& Y4 a
% X6 V6 m9 c: F. k: e* S9 Y
F3 u8 H4 ?6 v/ B a& C |
zan
|