精确一维搜索——黄金分割法(0.618)

本文介绍黄金分割法(0.618法),一种适用于单峰值函数求极小点的优化算法。该方法无需函数连续性,通过在搜索区间内插入两点,依据函数值比较,逐步缩小搜索范围。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章内容摘自UESTC最优化张老师的PPT

代码:https://github.com/LHesperus/optimization-algorithm/tree/master/unconstrained/Golden%20Section%20Method(0.618)

黄金分割法(0.618法)适用于任何单峰值函数?(?)求极小点的问题,甚至对函数可以不要求连续。

单峰函数

设? : [?, ?] ⊂ R → R,?⋆是在[?, ?]上的全局极小点,如果对于[?, ?]上的任意两点?1, ?2,且?1 < ?2都有
\left\{\begin{matrix} \varphi (t1)>\varphi (t2),&if&t2\leq t^{^{*}} \\ \varphi (t1)<\varphi (t2),&if &t1\geq t^{^{*}} \end{matrix}\right.
那么称?(?)是区间[?, ?]上的单峰函数。若?1 < ?⋆ < ?2,称[?1, ?2]为搜索区间。

基本思想

在搜索区间[?, ?]内适当插入两点?1, ?2,将[?, ?]分成三段,通过比较这两点的函数值,然后由单峰函数的性质,就可以删去最左端或者最右端的一段,这算一次迭代。然后在留下来的区间上再插入一点,就可以重复上述过程,如此下去,可将区间无限缩小。

设区间的长为1,如下图,在与?相距分别为?和?的点插入?1, ?2,为确定?和?,规定:
(1)要求插入的两点在搜索区间中是对称的。因此无论删除哪一端,留下的总是长为?的区间。于是? + ? = 1。
(2)保证了每次迭代都以同一个的比率缩短区间。不妨设去掉[?2, ?],在留下的区间[?, ?2]里在插入新的一个点?3,使
得?3, ?1在[?, ?2]中的位置与?1, ?1 在[?, ?]的位置有相同的比例。

\beta=\frac{\sqrt{5}-1}{2}\approx 0.618

\alpha =\frac{3-\sqrt{5}}{2}\approx 0.382

 

算法步骤:
步骤1 确定?(?)的初始搜索区间[?, ?]。
步骤2 计算?2 = ? + ?(? − ?),?2 = ?(?2)。
步骤3 计算?1 = ? + ?(? − ?),?1 = ?(?1),。
步骤4 若?2-?1≤ ?,停机;否则,转步骤5。
步骤5 若?(?1) ≤ ?(?2),则? = ?2, ?2 = ?1, ?(?2) = ?(?1), ?1 = ? + ?(? − ?), ?1 = ?(?1);
否则,? = ?1, ?1 = ?2, ?(?1) = ?(?2), ?2 = ? + ?(? − ?), ?2 = ?(?2).然后转步骤4。

t^{*}=0.5(t1+t2)

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值