文章目录
- 0.618 法
- 示例
- Newton 法
- 示例
0.618 法
0.618 法是一种一维线性搜索的算法,也称为黄金分割法(Golden Section Method)。它是一种迭代方法,用于确定目标函数在一个区间上的最小值。
以下是 0.618 法的基本步骤:
-
选取初始数据,确定初始搜索区间 [ a 0 , b 0 ] [a_0,b_0] [a0,b0] 和精度要求 δ > 0 \delta>0 δ>0. 计算最初两个试探点 λ 0 , μ 0 \lambda_0,\mu_0 λ0,μ0,
λ 0 = a 0 + 0.382 ( b 0 − a 0 ) , \lambda_0=a_0+0.382(b_0-a_0), λ0=a0+0.382(b0−a0), μ 0 = a 0 + 0.618 ( b 0 − a 0 ) . \mu_0=a_0+0.618(b_0-a_0). μ0=a0+0.618(b0−a0).- 计算 φ ( λ 0 ) \varphi(\lambda_0) φ(λ0) 和 φ ( μ 0 ) \varphi(\mu_0) φ(μ0),令 k = 0. k=0. k=0.
-
比较目标函数值。
- 若 φ ( λ k ) > φ ( μ k ) \varphi(\lambda_k)>\varphi(\mu_k) φ(λk)>φ(μk),转步 3;否则转步 4.
-
若 b k − λ k ⩽ δ b_k-\lambda_k\leqslant\delta bk−λk⩽δ,则停止计算,输出 μ k \mu_k μk;否则,令
a k + 1 : = λ k , b k + 1 : = b k , λ k + 1 : = μ k a_{k+1}:=\lambda_{k},\:b_{k+1}:=b_{k},\:\lambda_{k+1}:=\mu_{k} ak+1:=λk,bk+1:=bk,λk+1:=μk φ ( λ k + 1 ) : = φ ( μ k ) , μ k + 1 : = a k + 1 + 0.618 ( b k + 1 − a k + 1 ) . \varphi(\lambda_{k+1}):=\varphi(\mu_{k}),\:\mu_{k+1}:=a_{k+1}+0.618(b_{k+1}-a_{k+1}). φ(λk+1):=φ(μk),μk+1:=ak+1+0.618(bk+1−ak+1).- 计算 φ ( μ k + 1 ) \varphi(\mu_{k+1}) φ(μk+1),转步 5.
-
若 μ k − a k ⩽ δ \mu_k - a_k\leqslant\delta μk−ak⩽δ,则停止计算,输出 λ k \lambda_k λk;否则,令
a k + 1 : = a k , b k + 1 : = μ k , μ k + 1 : = λ k , a_{k+1}:=a_k,~b_{k+1}:=\mu_k,~\mu_{k+1}:=\lambda_k, ak+1:=ak, bk+1:=μk, μk+1:=λk, φ ( μ k + 1 ) : = φ ( λ k ) , λ k + 1 : = a k + 1 + 0.382 ( b k + 1 − a k + 1 ) . \varphi(\mu_{k+1}):=\varphi(\lambda_{k}),\:\lambda_{k+1}:=a_{k+1}+0.382(b_{k+1}-a_{k+1}). φ(μk+1):=φ(λk),λk+1:=ak+1+0.382(bk+1−ak+1).- 计算 φ ( λ k + 1 ) \varphi(\lambda_{k+1}) φ(λk+1),转步 5.
-
k : = k + 1 k:=k+1 k:=k+1,转步 2.
0.618 法的优点之一是,每次迭代都将搜索区间缩小为当前区间的 0.618 倍,因此可以很快地接近最小值。此方法通常适用于连续单峰函数的最小值搜索问题。
示例
用 0.618 法解下述函数,搜索区间宽度到 ε = 0.5 \varepsilon = 0.5 ε=0.5.
min t ≥ 0 φ ( t ) = t 3 − 2 t + 1 \min_{t≥0}\:\varphi(t)=t^3-2t+1 t≥0minφ(t)=t3−2t+1
根据经验,选择初始搜索区间为 [ 0 , 3 ] [0, 3] [0,3](单谷区间).
计算过程:
a λ μ b φ ( λ ) φ ( μ ) 0 0 1.146 1.854 3 0.2131 3.6648 1 0 0.708 1.146 1.854 − 0.0611 0.2131 2 0 0.438 0.708 1.146 0.2082 − 0.0611 3 0.438 0.708 0.876 1.146 − 0.0611 − 0.0798 \begin{array}{|r|r|r|r|r|r|r|r|}\hline&a&\lambda&\mu&b&\varphi(\lambda)&\varphi(\mu)\\\hline0&0&1.146&1.854&3&0.2131&3.6648\\\hline1&0&0.708&1.146&1.854&-0.0611&0.2131\\\hline2&0&0.438&0.708&1.146&0.2082&-0.0611\\\hline3&0.438&0.708&0.876&1.146&-0.0611&-0.0798\\\hline\end{array} 0123a0000.438λ1.1460.7080.4380.708μ1.8541.1460.7080.876b31.8541.1461.146φ(λ)0.2131−0.06110.2082−0.0611φ(μ)3.66480.2131−0.0611−0.0798
最后输出 t = μ 3 = 0.876 t = \mu_3 = 0.876 t=μ3=0.876.
Newton 法
一维线性搜索是在优化算法中常用的一种方法,用于确定在给定搜索方向上的合适步长,使得目标函数在该方向上能够有明显的下降。Newton法(牛顿法)是一种使用二阶导数信息的优化方法,它在一维线性搜索中也可以应用。下面是一维线性搜索的 Newton 法的基本步骤:
-
选择初始点 x 0 x_0 x0: 在搜索方向上选择一个初始点。
-
计算目标函数的一阶和二阶导数:
- 计算目标函数 f ( x ) f(x) f(x) 在当前点 x k x_k xk 的一阶导数 f ′ ( x k ) f'(x_k) f′(xk) 和二阶导数 f ′ ′ ( x k ) f''(x_k) f′′(xk)。
-
计算搜索步长:
- 计算一维搜索的步长 t k t_k tk,通常使用牛顿法的更新公式:
t k = − f ′ ( x k ) f ′ ′ ( x k ) t_k = -\frac{f'(x_k)}{f''(x_k)} tk=−f′′(xk)f′(xk)
- 计算一维搜索的步长 t k t_k tk,通常使用牛顿法的更新公式:
-
更新当前点:
- 使用步长 t k t_k tk 更新当前点: x k + 1 = x k + t k x_{k+1} = x_k + t_k xk+1=xk+tk
-
重复迭代:
- 重复步骤 2-4,直到满足停止条件,例如梯度足够小或达到最大迭代次数。
需要注意的是,上述步骤中的计算是在一维搜索方向上进行的,因此 f ′ ( x k ) f'(x_k) f′(xk) 和 f ′ ′ ( x k ) f''(x_k) f′′(xk) 分别是一维的梯度和二阶导数。在牛顿法中,使用二阶导数信息可以更准确地确定搜索步长,因此相较于一些基于一阶导数信息的方法,牛顿法可能在一维搜索中更快地收敛。
总的来说,一维线性搜索的 Newton 法是一种有效的优化方法,特别适用于目标函数具有二阶导数信息的情况。
示例
用 Newton 法求 min φ ( t ) = ∫ 0 t arctan x d x \min\:\varphi(t)=\int_0^t \arctan x\:dx minφ(t)=∫0tarctanxdx 的最优解.
解:
φ ′ ( t ) = arctan t , 1 φ ′ ′ ( t ) = 1 + t 2 , t k + 1 = t k − φ ′ ( t k ) 1 φ ′ ′ ( t k ) \varphi^{\prime}(t)=\arctan t,\:\frac{1}{\varphi^{\prime\prime}(t)}=1+t^{2},\:t_{k+1}=t_{k}-\varphi^{\prime}(t_{k})\frac{1}{\varphi^{\prime\prime}(t_{k})} φ′(t)=arctant,φ′′(t)1=1+t2,tk+1=tk−φ′(tk)φ′′(tk)1
选择 t 1 = 1 t_1=1 t1=1,开始计算,搜索精度取 ε = 0.01 \varepsilon=0.01 ε=0.01.
k t k φ ′ ( t k ) 1 / φ ′ ′ ( t k ) 1 1 0.7854 2 2 − 0.5708 − 0.5187 1.3258 3 0.1169 0.1164 1.0137 4 − 0.0011 − 0.0011 \begin{array}{|r|r|r|r|r|}\hline k&t_k&\varphi^{\prime}(t_k)&1/\varphi^{\prime\prime}(t_k)\\\hline1&1&0.7854&2\\\hline2&-0.5708&-0.5187&1.3258\\\hline3&0.1169&0.1164&1.0137\\\hline4&-0.0011&-0.0011&\\\hline\end{array} k1234tk1−0.57080.1169−0.0011φ′(tk)0.7854−0.51870.1164−0.00111/φ′′(tk)21.32581.0137
最后输出 t k = − 0.0011 t_k=-0.0011 tk=−0.0011.