文章目录
此前准备最优化算法考试时整理的,都是一些比较简单且常用的最优化算法,没有放公式的推导,也还有很多相关的算法,感兴趣的话可以参考《最优化方法》(上课用的课本,红皮的,16k,还蛮经典的,公式推导也很详细)。
(讲课的老师真的非常认真,一言一行都带着对数学的喜爱)
一维搜索算法
Fibonacci法与黄金分割法
- Fibonacci法使用前首先要求解出计算函数值的次数n;
- Fibonacci的优点:可使原始区间长度与最终区间长度的比值达到最大值;缺点:每次区间缩短率 F i − 1 F i \frac{F_{i-1}}{F_{i}} FiFi−1 不定,计算量大
- 黄金分割法是Fibonacci法的极限形式,缩短率定为0.618
- 黄金分割法缩短率的计算:每次保留区间
(
b
−
x
1
)
(b-x_{1})
(b−x1),
(
x
2
−
a
)
(x_{2}-a)
(x2−a) 的概率相等,即
b − [ a + p ( b − a ) ] = [ a + ( 1 − p ) ( b − a ) ] − a b-[a+p(b-a)]=[a+(1-p)(b-a)]-a b−[a+p(b−a)]=[a+(1−p)(b−a)]−a
黄金分割法步骤
- s t e p 1 step_1 step1: x 2 = a + 0.618 ( b − a ) x_2=a+0.618(b-a) x2=a+0.618(b−a), f 2 = f ( x 2 ) f_2=f(x_2) f2=f(x2),转 s t e p 2 step_2 step2
- s t e p 2 step_2 step2: x 1 = a + 0.382 ( b − a ) x_1=a+0.382(b-a) x1=a+0.382(b−a), f 1 = f ( x 1 ) f_1=f(x_1) f1=f(x1),转 s t e p 3 step_3 step3
- s t e p 3 step_3 step3: 若 ∣ b − a ∣ < e r r |b-a| \lt err ∣b−a∣<err, x ∗ = ( b + a ) 2 x^{*} = \frac{(b+a)}{2} x∗=2(b+a)
-
s
t
e
p
4
step_4
step4:
- 若 f 1 < f 2 f_1\lt f_2 f1<f2,则 b = x 2 , x 2 = x 1 , f 2 = f 1 b=x_2,x_2=x_1,f_2=f_1 b=x2,x2=x1,f2=f1,转 s t e p 2 step_2 step2;
- 若 f 1 > f 2 f_1\gt f_2 f1>f2,则 a = x 1 , x 1 = x 2 , f 1 = f 2 a=x_1,x_1=x_2,f_1=f_2 a=x1,x1=x2,f1=f2,转 s t e p 5 step_5 step5;
- 若 f 1 = f 2 f_1=f_2 f1=f2,则 a = x 1 , b = x 2 a=x_1,b=x_2 a=x1,b=x2,转 s t e p 1 step_1 step1.
- s t e p 5 step_5 step5: x 2 = a + 0.618 ( b − a ) x_2=a+0.618(b-a) x2=a+0.618(b−a), f 2 = f ( x 2 ) f_2=f(x_2) f2=f(x2), s t e p 3 step_3 step3
进退法
- 进退法用于求解下单峰区间
平分法
类似于二分搜索
设
f
(
x
)
f(x)
f(x) 为下单峰函数,若
f
(
x
)
f(x)
f(x) 在
[
a
,
b
]
[a,b]
[a,b] 具有连续的一阶导数,且
f
′
(
a
)
<
0
f'(a)<0
f′(a)<0,
f
(
b
)
>
0
f(b)>0
f(b)>0
取
c
=
(
a
+
b
)
/
2
c=(a+b)/2
c=(a+b)/2,若
f
′
(
c
)
=
0
f'(c)=0
f′(c)=0,则c为极小点;
若
f
′
(
c
)
>
0
f'(c)>0
f′(c)>0,则以
[
a
,
c
]
[a,c]
[a,c] 代替
[
a
,
b
]
[a,b]
[a,b] 作为新区间;
若
f
′
(
c
)
<
0
f'(c)<0
f′(c)<0,则以
[
c
,
b
]
[c,b]
[c,b] 代替
[
a
,
b
]
[a,b]
[a,b] 作为新区间.
不精确的一维搜索
- wolf准则,armijo准则等
- 有关wolf准则:
- 根据
f
(
x
k
+
α
k
p
k
)
f(x_k+\alpha_k p_k)
f(xk+αkpk) 在
x
k
x_k
xk 处的Taylor展开式可得到条件1(步长不能太大)
f ( x k ) − f ( x k + α k p k ) ≥ μ α k g k T p k f(x_k)-f(x_k+\alpha_k p_k) \ge \mu \alpha_k g_{k}^{T} p_k f(xk)−f(xk+αkpk)≥μαkgkTpk - 条件2(同时步长不能太小)
∇ f ( x k + α k p k ) T p k ≥ σ g k T p k \nabla f(x_k+\alpha_k p_k)^{T}p_k \ge \sigma g_{k}^{T} p_k ∇f(xk+αkpk)Tpk≥σgkTpk
- 根据
f
(
x
k
+
α
k
p
k
)
f(x_k+\alpha_k p_k)
f(xk+αkpk) 在
x
k
x_k
xk 处的Taylor展开式可得到条件1(步长不能太大)
无约束最优化方法
最速下降法
- 线性收敛
- 整体收敛
- 本质:用线性函数去近似目标函数
- 步骤
- s t e p 1 step_1 step1: 取初始点 x 0 x_0 x0,k=0
- s t e p 2 step_2 step2: 计算 g k = g ( x k ) g_k=g(x_k) gk=g(xk)
-
s
t
e
p
3
step_3
step3: 若
g
k
≤
e
r
r
g_k\le err
gk≤err,
x
∗
=
x
k
x^{*} = x_k
x∗=xk,否则
p
k
=
−
g
k
p_k=-g_k
pk=−gk,由一维搜索确定步长
f ( x k + α k p k ) = min α > 0 f ( x k + α k p k ) f(x_k+\alpha_k p_k)=\min_{\alpha\gt 0}f(x_k+\alpha_k p_k) f(xk+αkpk)=α>0minf(xk+αkpk) - s t e p 4 step_4 step4: x k + 1 = x k + α k p k x_{k+1}=x_k+\alpha_k p_k xk+1=xk+αkpk,k=k+1,转 s t e p 2 step_2 step2
- 在求解正定二次函数,进行精确一维搜索时,经推导可得出
α k = − g k T p k p k T G p k = g k T g k g k T G g k \alpha_k=-\frac{g_k^T p_k}{p_k^T G p_k}=\frac{g_k^T g_k}{g_k^T G g_k} αk=−pkTGpkgkTpk=gkTGgkgkTgk
Newton法
- 二次收敛
- 局部收敛
- 本质:用二次函数去近似目标函数
- 优点:
- 若 G ∗ G^{*} G∗正定且初始点合适,算法二阶收敛
- 对正定二次函数,迭代一次就可以收敛到极小值
- 缺点:
- 对多数问题不是整体收敛的
- 每次迭代需要计算 G k G_k Gk
- 每次迭代时需要求解线性方程组,方程组可能是奇异或非正定的;可能得不到下降方向
- 收敛于鞍点或极大点的可能性与收敛于极小点的可能性一致
- 步骤
- s t e p 1 step_1 step1: 取初始点 x 0 x_0 x0,k=0
- s t e p 2 step_2 step2: 计算 g k = g ( x k ) g_k=g(x_k) gk=g(xk)
-
s
t
e
p
3
step_3
step3: 若
g
k
≤
e
r
r
g_k\le err
gk≤err,
x
∗
=
x
k
x^{*} = x_k
x∗=xk,否则计算
G
k
=
G
(
x
k
)
G_k=G(x_k)
Gk=G(xk)
p k = − G − 1 g k p_k=-G^{-1}g_k pk=−G−1gk - s t e p 4 step_4 step4: x k + 1 = x k + p k x_{k+1}=x_k+p_k xk+1=xk+pk,k=k+1,转 s t e p 2 step_2 step2
共轭方向法和共轭梯度法
- 计算量较小,适合大规模问题求解
- 共轭方向法步骤
- s t e p 1 step_1 step1: 取初始点 x 0 x_0 x0,k=1,下降方向 p k p_k pk
- s t e p 2 step_2 step2: 计算 g k = g ( x k ) g_k=g(x_k) gk=g(xk)
-
s
t
e
p
3
step_3
step3: 若
g
k
≤
e
r
r
g_k\le err
gk≤err,
x
∗
=
x
k
x^{*} = x_k
x∗=xk,否则由一维搜索确定步长
f ( x k + α k p k ) = min α > 0 f ( x k + α k p k ) f(x_k+\alpha_k p_k)=\min_{\alpha\gt 0}f(x_k+\alpha_k p_k) f(xk+αkpk)=α>0minf(xk+αkpk) - s t e p 4 step_4 step4: x k + 1 = x k + α k p k x_{k+1}=x_k+\alpha_k p_k xk+1=xk+αkpk,取共轭方向 p k + 1 p_{k+1} pk+1 使得 p k + 1 T G p i = 0 p_{k+1}^{T} G p_i=0 pk+1TGpi=0,k=k+1,转 s t e p 2 step_2 step2
- FR-共轭梯度法步骤
- s t e p 1 step_1 step1: 取初始点 x 0 x_0 x0,k=1
- s t e p 2 step_2 step2: 计算 g k = g ( x k ) g_k=g(x_k) gk=g(xk)
-
s
t
e
p
3
step_3
step3: 若
g
k
≤
e
r
r
g_k\le err
gk≤err,
x
∗
=
x
k
x^{*} = x_k
x∗=xk,否则下降方向
p
k
=
−
g
k
+
β
k
−
1
p
k
−
1
p_k=-g_k+\beta_{k-1}p_{k-1}
pk=−gk+βk−1pk−1
β k − 1 = { 0 , k = 1 g k T g k g k − 1 T g k − 1 , k > 1 \beta_k-1=\begin{cases}0,k=1\\ \frac{g_k^T g_k}{g_{k-1}^T g_{k-1}},k\gt 1\end{cases} βk−1={0,k=1gk−1Tgk−1gkTgk,k>1
由一维搜索确定步长
f ( x k + α k p k ) = min α > 0 f ( x k + α k p k ) f(x_k+\alpha_k p_k)=\min_{\alpha\gt 0}f(x_k+\alpha_k p_k) f(xk+αkpk)=α>0minf(xk+αkpk) - s t e p 4 step_4 step4: x k + 1 = x k + α k p k x_{k+1}=x_k+\alpha_k p_k xk+1=xk+αkpk,k=k+1,转 s t e p 2 step_2 step2
- PRP-共轭梯度法步骤
- 将FR中的
β
\beta
β 替换为
β k − 1 = { 0 , k = 1 g k T ( g k − g k − 1 ) g k − 1 T g k − 1 , k > 1 \beta_k-1=\begin{cases}0,k=1\\ \frac{g_k^T (g_k-g_{k-1)}}{g_{k-1}^T g_{k-1}},k\gt 1 \end{cases} βk−1=⎩⎨⎧0,k=1gk−1Tgk−1gkT(gk−gk−1),k>1
- 将FR中的
β
\beta
β 替换为
- 重新开始的***共轭梯度法,即在k为n的倍数时, p k p_k pk 重新设置为负梯度方向
拟Newton法
- 对Hess矩阵进行修正
- DFP步骤
- s t e p 1 step_1 step1: 取初始点 x 0 x_0 x0,计算 g 0 g_0 g0, H 0 H_0 H0通常设置为单位矩阵,k=0
- s t e p 2 step_2 step2: p k = − H k g k p_k=-H_k g_k pk=−Hkgk
-
s
t
e
p
3
step_3
step3: 由一维搜索确定步长
f ( x k + α k p k ) = min α > 0 f ( x k + α k p k ) f(x_k+\alpha_k p_k)=\min_{\alpha\gt 0}f(x_k+\alpha_k p_k) f(xk+αkpk)=α>0minf(xk+αkpk) - s t e p 4 step_4 step4: x k + 1 = x k + α k p k x_{k+1}=x_k+\alpha_k p_k xk+1=xk+αkpk
-
s
t
e
p
5
step_5
step5: 若
g
k
≤
e
r
r
g_k\le err
gk≤err,
x
∗
=
x
k
x^{*} = x_k
x∗=xk,否则
{ s k = x k + 1 − x k = α k p k y k = g k + 1 − g k \begin{cases}s_k=x_{k+1}-x_k=\alpha_k p_k\\y_k=g_{k+1}-g_k \end{cases} {sk=xk+1−xk=αkpkyk=gk+1−gk - s t e p 6 step_6 step6: 根据DFP修正公式计算 H k + 1 H_{k+1} Hk+1,k=k+1,转 s t e p 2 step_2 step2.
- BFGS步骤
- 将DFP中的修正公式换为BFGS修正公式即可
- DFP修正公式
H k + 1 = H k − H k y k y k T H k y k T H k y k + s k s k T y k T s k H_{k+1}=H_{k}-\frac{H_k y_k y_k^T H_k}{y_k^T H_k y_k}+\frac{s_k s_k^T}{y_k^T s_k} Hk+1=Hk−ykTHkykHkykykTHk+ykTskskskT - BFGS修正公式
H k + 1 = H k − H k y k y k T H k y k T H k y k + s k s k T y k T s k + w k w k T H_{k+1}=H_{k}-\frac{H_k y_k y_k^T H_k}{y_k^T H_k y_k}+\frac{s_k s_k^T}{y_k^T s_k}+w_kw_k^T Hk+1=Hk−ykTHkykHkykykTHk+ykTskskskT+wkwkT
其中, w k = y k T H k y k ( s k y k T s k − H k y k y k T H k y k ) w_k=\sqrt{y_k^T H_k y_k}(\frac{s_k}{y_k^T s_k}-\frac{H_k y_k}{y_k^T H_k y_k}) wk=ykTHkyk(ykTsksk−ykTHkykHkyk)
约束最优化方法
等式约束的最优性条件
- Lagrange定理(一阶必要条件)
- 将等式约束最优化问题转化为无约束最优化问题
-
L
(
x
,
λ
)
=
f
(
x
)
−
λ
T
c
(
x
)
L(x,\lambda)=f(x)-\lambda^T c(x)
L(x,λ)=f(x)−λTc(x)
{ ∇ f ( x ∗ ) − ∑ i = 1 i λ i ∗ ∇ c i ( x ∗ ) = 0 c i ( x ∗ ) = 0 \begin{cases} \nabla f(x^{*})-\sum^i_{i=1}\lambda_i^{*}\nabla c_i(x^{*})=0 \\ c_i(x^{*})=0 \end{cases} {∇f(x∗)−∑i=1iλi∗∇ci(x∗)=0ci(x∗)=0
- L ( x , λ ) L(x,\lambda) L(x,λ) 关于x的Hess矩阵正定(二阶充分条件)
不等式约束的最优性条件
-
Fritz-John一阶必要条件
{ λ 0 ∗ ∇ f ( x ∗ ) − ∑ i = 1 i λ i ∗ ∇ c i ( x ∗ ) = 0 c i ( x ∗ ) ≥ 0 , i = 1 , 2 , . . m λ i ∗ c i ( x ∗ ) = 0 , i = 1 , 2 , . . m λ i ∗ ≥ 0 , i = 0 , 1 , . . m \begin{cases} \lambda_0^{*} \nabla f(x^{*})-\sum^i_{i=1}\lambda_i^{*}\nabla c_i(x^{*}) = 0 \\c_i(x^{*})\ge 0,i=1,2,..m \\ \lambda_i^{*} c_i(x^{*})=0,i=1,2,..m\\ \lambda_i^{*}\ge 0,i=0,1,..m \end{cases} ⎩⎪⎪⎪⎨⎪⎪⎪⎧λ0∗∇f(x∗)−∑i=1iλi∗∇ci(x∗)=0ci(x∗)≥0,i=1,2,..mλi∗ci(x∗)=0,i=1,2,..mλi∗≥0,i=0,1,..m -
Karush-Kuhn-Tucker一阶必要条件(KKT)
{ ∇ f ( x ∗ ) − ∑ i = 1 i λ i ∗ ∇ c i ( x ∗ ) = 0 c i ( x ∗ ) = 0 , i = 1 , 2 , . . l c i ( x ∗ ) ≥ 0 , i = l + 1 , l + 2 , . . m λ i ∗ c i ( x ∗ ) = 0 , i = 1 , 2 , . . m λ i ∗ ≥ 0 , i = l + 1 , . . m \begin{cases} \nabla f(x^{*})-\sum^i_{i=1}\lambda_i^{*}\nabla c_i(x^{*}) = 0 \\c_i(x^{*})= 0,i=1,2,..l \\ c_i(x^{*})\ge 0,i=l+1,l+2,..m \\ \lambda_i^{*} c_i(x^{*})=0,i=1,2,..m\\ \lambda_i^{*}\ge 0,i=l+1,..m \end{cases} ⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧∇f(x∗)−∑i=1iλi∗∇ci(x∗)=0ci(x∗)=0,i=1,2,..lci(x∗)≥0,i=l+1,l+2,..mλi∗ci(x∗)=0,i=1,2,..mλi∗≥0,i=l+1,..m -
- 严格互补松弛条件:所有有效约束的乘子均不为0
罚函数法
满足约束时,对应的函数值很小;
不满足约束时,对应的函数值很大——”惩罚”.
在求解过程中,为使得总的目标函数值最小,得到的解一般会满足约束.
- 外罚函数(适用于等式约束)
- 等式约束
P ( x , λ ) = f ( x ) + σ ∑ i = 1 l ∣ ∣ c i ( x ) ∣ ∣ β P(x,\lambda)=f(x)+\sigma \sum_{i=1}^{l}||c_i(x)||^{\beta} P(x,λ)=f(x)+σi=1∑l∣∣ci(x)∣∣β - 不等式约束
P ( x , λ ) = f ( x ) + σ ∑ i = 1 m ∣ m i n ( 0 , c i ( x ) ) ∣ α P(x,\lambda)=f(x)+\sigma \sum_{i=1}^{m}|min(0,c_i(x))|^{\alpha} P(x,λ)=f(x)+σi=1∑m∣min(0,ci(x))∣α - 一般约束
P ( x , λ ) = f ( x ) + σ P ~ ( x ) P(x,\lambda)=f(x)+\sigma \tilde{P}(x) P(x,λ)=f(x)+σP~(x)
P ~ ( x ) = ∑ i = 1 l ∣ ∣ c i ( x ) ∣ ∣ β + ∑ i = l + 1 m ∣ m i n ( 0 , c i ( x ) ) ∣ α \tilde{P}(x)=\sum_{i=1}^{l}||c_i(x)||^{\beta} + \sum_{i=l+1}^{m}|min(0,c_i(x))|^{\alpha} P~(x)=i=1∑l∣∣ci(x)∣∣β+i=l+1∑m∣min(0,ci(x))∣α - 缺点:近似最优解往往不可行; σ \sigma σ越大越好,但 σ \sigma σ 越大使得Hess矩阵的条件数越大,趋向于病态,无约束问题难以求解。
- 等式约束
- 内罚函数(适用于不等式约束)
- 仅适用于求解不等式约束
B ( x ) = f ( x ) + r B ~ ( x ) B(x)=f(x)+ r \tilde{B}(x) B(x)=f(x)+rB~(x)
B ~ ( x ) = ∑ i = 1 m 1 c i ( x ) o r B ~ ( x ) = − ∑ i = 1 m l n ( c i ( x ) ) \tilde{B}(x)=\sum_{i=1}^{m}\frac{1}{c_{i}(x)} or \tilde{B}(x)=-\sum_{i=1}^{m}ln(c_{i}(x)) B~(x)=i=1∑mci(x)1orB~(x)=−i=1∑mln(ci(x))
- 仅适用于求解不等式约束
乘子法
- Lagrange+罚函数
- 等式约束
M ( x , λ , σ ) = L ( x , λ ) + σ 2 c ( x ) T c ( x ) M(x,\lambda,\sigma)=L(x,\lambda)+\frac{\sigma}{2}c(x)^T c(x) M(x,λ,σ)=L(x,λ)+2σc(x)Tc(x)
λ k + 1 = λ k − σ k c ( x k ) \lambda_{k+1}=\lambda_k-\sigma_k c(x_k) λk+1=λk−σkc(xk) - 不等式约束
M ( x , λ , σ ) = f ( x ) + 1 2 σ ∑ i = 1 m { [ m a x ( 0 , λ i − σ c i ( x ) ) ] 2 − λ i 2 } M(x,\lambda,\sigma)=f(x)+\frac{1}{2\sigma}\sum_{i=1}^{m}{\{[max(0,\lambda_i-\sigma c_i(x))]^2-\lambda_i^2\}} M(x,λ,σ)=f(x)+2σ1i=1∑m{[max(0,λi−σci(x))]2−λi2}
( λ k + 1 ) i = m a x [ 0 , ( λ k ) i − σ c i ( x k ) ] (\lambda_{k+1})_i=max[0,(\lambda_k)_i-\sigma c_i(x_k)] (λk+1)i=max[0,(λk)i−σci(xk)] - 一般约束
M ( x , λ , σ ) = f ( x ) + 1 2 σ ∑ i = l + 1 m { [ m a x ( 0 , λ i − σ c i ( x ) ) ] 2 − λ i 2 } − ∑ i = 1 l λ i c i ( x ) + σ 2 ∑ i = 1 l c i 2 ( x ) M(x,\lambda,\sigma)=f(x)+\frac{1}{2\sigma}\sum_{i=l+1}^{m}{\{[max(0,\lambda_i-\sigma c_i(x))]^2-\lambda_i^2\}}-\sum_{i=1}^l\lambda_i c_i(x)+\frac{\sigma}{2}\sum_{i=1}^l c_i^2(x) M(x,λ,σ)=f(x)+2σ1i=l+1∑m{[max(0,λi−σci(x))]2−λi2}−i=1∑lλici(x)+2σi=1∑lci2(x)
( λ k + 1 ) i = m a x [ 0 , ( λ k ) i − σ c i ( x k ) ] , i = l + 1 , . . . m (\lambda_{k+1})_i=max[0,(\lambda_k)_i-\sigma c_i(x_k)],i=l+1,...m (λk+1)i=max[0,(λk)i−σci(xk)],i=l+1,...m
( λ k + 1 ) i = ( λ k ) i − σ k c i ( x k ) , i = 1 , 2 , . . . l (\lambda_{k+1})_i=(\lambda_k)_i-\sigma_k c_i(x_k),i=1,2,...l (λk+1)i=(λk)i−σkci(xk),i=1,2,...l

2541

被折叠的 条评论
为什么被折叠?



