拟牛顿法(DFP以及BFGS算法)
DFP Method
核心思想:
- 通过迭代方法,对Hessian阵做近似
算法步骤
- S t e p 1 : 初 始 点 x 1 , 精 度 ϵ > 0 , g 1 = − ∇ f ( x 1 ) , H 1 = I n , k = 1 ; Step1:初始点x_1,精度\epsilon>0,g_1=-\nabla f(x_1),H_1=I_n,k=1; Step1:初始点x1,精度ϵ>0,g1=−∇f(x1),H1=In,k=1;
-
S
t
e
p
2
:
如
果
∣
∣
g
k
∣
∣
<
ϵ
,
停
止
迭
代
,
输
出
x
k
,
Step2:如果||g_k||<\epsilon,停止迭代,输出x_k,
Step2:如果∣∣gk∣∣<ϵ,停止迭代,输出xk,
否 则 , 搜 索 方 向 为 d k = − H k g k ; 否则,搜索方向为d_k=-H_kg_k; 否则,搜索方向为dk=−Hkgk; - S t e p 3 : 一 维 搜 索 f ( x k + λ k d k ) = m i n λ ≥ 0 f ( x k + λ d k ) , Step3:一维搜索f(x_k+\lambda_kd_k)=\underset{\lambda\geq0}{min}f(x_k+\lambda d_k), Step3:一维搜索f(xk+λkdk)=λ≥0minf(xk+λdk), 取 x k + 1 = x k + λ k d k 取x_{k+1}=x_k+\lambda_kd_k 取xk+1=xk+λkdk
-
S
t
e
p
4
:
g
k
+
1
=
−
∇
f
(
x
k
+
1
)
,
p
k
=
x
k
+
1
−
x
k
,
q
k
=
g
k
+
1
−
g
k
,
Step4:g_{k+1}=-\nabla f(x_{k+1}),p_k=x_{k+1}-x_k,q_k=g_{k+1}-g_k,
Step4:gk+1=−∇f(xk+1),pk=xk+1−xk,qk=gk+1−gk,
H k + 1 = H k + p k p k T p k T q k − H k q k q k T H k q k T H k q k H_{k+1}=H_k+\frac{p_kp_k^T}{p_k^Tq_k}-\frac{H_kq_kq_k^TH_k}{q_k^TH_kq_k} Hk+1=Hk+pkTqkpkpkT−qkTHkqkHkqkqkTHk - S t e p 5 : k = k + 1 , 转 到 S t e p 2. Step5:k=k+1,转到Step2. Step5:k=k+1,转到Step2.
BFGS Method
算法步骤
- S t e p 1 : 初 始 点 x 1 , 精 度 ϵ > 0 , g 1 = − ∇ f ( x 1 ) , B 1 = I n , k = 1 ; Step1:初始点x_1,精度\epsilon>0,g_1=-\nabla f(x_1),B_1=I_n,k=1; Step1:初始点x1,精度ϵ>0,g1=−∇f(x1),B1=In,k=1;
-
S
t
e
p
2
:
如
果
∣
∣
g
k
∣
∣
<
ϵ
,
停
止
迭
代
,
输
出
x
k
,
Step2:如果||g_k||<\epsilon,停止迭代,输出x_k,
Step2:如果∣∣gk∣∣<ϵ,停止迭代,输出xk,
否 则 , 搜 索 方 向 为 B k d k = − g k ; 否则,搜索方向为B_kd_k=-g_k; 否则,搜索方向为Bkdk=−gk; - S t e p 3 : 一 维 搜 索 f ( x k + λ k d k ) = m i n λ ≥ 0 f ( x k + λ d k ) , Step3:一维搜索f(x_k+\lambda_kd_k)=\underset{\lambda\geq0}{min}f(x_k+\lambda d_k), Step3:一维搜索f(xk+λkdk)=λ≥0minf(xk+λdk), 取 x k + 1 = x k + λ k d k 取x_{k+1}=x_k+\lambda_kd_k 取xk+1=xk+λkdk
-
S
t
e
p
4
:
g
k
+
1
=
−
∇
f
(
x
k
+
1
)
,
p
k
=
x
k
+
1
−
x
k
,
q
k
=
g
k
+
1
−
g
k
,
Step4:g_{k+1}=-\nabla f(x_{k+1}),p_k=x_{k+1}-x_k,q_k=g_{k+1}-g_k,
Step4:gk+1=−∇f(xk+1),pk=xk+1−xk,qk=gk+1−gk,
B k + 1 = B k + q k q k T q k T p k − B k p k p k T B k p k T B k p k B_{k+1}=B_k+\frac{q_kq_k^T}{q_k^Tp_k}-\frac{B_kp_kp_k^TB_k}{p_k^TB_kp_k} Bk+1=Bk+qkTpkqkqkT−pkTBkpkBkpkpkTBk - S t e p 5 : k = k + 1 , 转 到 S t e p 2. Step5:k=k+1,转到Step2. Step5:k=k+1,转到Step2.
程序实现后续补充