优化理论13----黄金分割法单峰函数python实现及验证

Posted 炫云云

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了优化理论13----黄金分割法单峰函数python实现及验证相关的知识,希望对你有一定的参考价值。

一维搜索——黄金分割法


最优化知识笔记整理汇总,超级棒

无约束一维极值问题

无约束一维极值问题可简单表述为:
min ⁡ f ( x ) , x ∈ R ,  or  min ⁡ f ( x ) , x ∈ [ x 1 , x 2 ] \\min f(x), x \\in \\mathrm{R}, \\\\ \\text { or } \\min f(x), x \\in\\left[x_{1}, x_{2}\\right] minf(x),xR, or minf(x),x[x1,x2]
其中 x x x 为一维变量,相应的 f ( x ) f(x) f(x) 为一维变量 x x x 的函数。

如果自变量的范围为整个实数区间,此时的优化问题为求函数的最小值,是一个全局优化问题。我们考虑的优化问题是以下两种情况:

(1)在自变量的范围为整个实数区间的前提下,求函数的任意一个极值;

(2)在自变量的范围为给定区间的前提下,求函数的任意一个极值。

求解无约束一维极值问题常使用一维搜索法。一维搜索即沿着某一已知方向求目标函数的极小点,其方法是根据已知点通过迭代公式求得新的点,而新的点比当前点更优。

单峰函数

定义:

f f f是定义在闭区间 [ a , b ] [a,b] [a,b]上的一元函数, x ∗ x^* x f f f [ a , b ] [a,b] [a,b]上的极小点,并且对于任意的 x 1 , x 2 x_1,x_2 x1,x2属于 [ a , b ] [a,b] [a,b], x 1 < x 2 x_1<x_2 x1<x2;

若当 x 2 < = x ∗ x_2<=x^* x2<=x 时, f ( x 1 ) > f ( x 2 ) f(x_1)>f(x_2) f(x1)>f(x2), 当 x ∗ < = x 1 x^*<=x_1 x<=x1时, f ( x 2 ) > f ( x 1 ) f(x_2)>f(x_1) f(x2)>f(x1) 则称 f f f是在闭区间[a,b]上的单峰函数。

形象地描述如图:

图中f(x)和g(x)均为单峰函数,即在一个区间上存在一个极值点可以将函数明确地分成两半具有单调性的曲线

图中f(x)和g(x)均为单峰函数,即在一个区间上存在一个极值点可以将函数明确地分成两半具有单调性的曲线。可以看到,单峰只是一个形象的称呼,也有单谷函数(区间)的称谓

黄金分割法

黄金分割法就是在单峰(谷)区间内搜索出最优解的算法,具体算法步骤如下图:

  • 原理:极小点包含于搜索区间内,可以不断地缩小搜索区间,就可以使搜索区间的端点逼近到极小点。

img

如图所示, [ a , b ] [a, b] [a,b] 为搜索区间,黄金分割法首先根据黄金比例产生两个内点 x 1 , x 2 x_{1}, x_{2} x1,x2

x 1 = a + 0.382 ∗ ( b − a ) x_{1}=a+0.382 *(b-a) x1=a+0.382(ba)

x 2 = a + 0.618 ∗ ( b − a ) x_{2}=a+0.618 *(b-a) x2=a+0.618(ba)

然后根据 f ( x 1 ) , f ( x 2 ) f\\left(x_{1}\\right), f\\left(x_{2}\\right) f(x1),f(x2) 的大小关系来重新选择搜索区间。

  1. f ( x 1 ) < f ( x 2 ) f\\left(x_{1}\\right)<f\\left(x_{2}\\right) f(x1)<f(x2) ,则搜索区间变为 [ x 1 , b ] \\left[x_{1}, b\\right] [x1,b]
  2. f ( x 1 ) > f ( x 2 ) f\\left(x_{1}\\right)>f\\left(x_{2}\\right) f(x1)>f(x2) ,则搜索区间变为 [ a , x 2 ] \\left[a, x_{2}\\right] [a,x2]
  • 算法步骤

【1】选定初始区间 [ a 1 , b 1 ] \\left[a_{1}, b_{1}\\right] [a1,b1] 及精度 ε > 0 \\varepsilon>0 ε>0 ,令 α = 0.618 \\alpha=0.618 α=0.618,计算试探点:

λ 1 = a 1 + ( 1 − α ) ∗ ( b 1 − a 1 ) \\lambda_{1}=a_{1}+(1-\\alpha) *\\left(b_{1}-a_{1}\\right) λ1=a1+(1α)(b1a1)

μ 1 = a 1 + α ∗ ( b 1 − a 1 ) \\mu_{1}=a_{1}+\\alpha*\\left(b_{1}-a_{1}\\right) μ1=a1+α(b1a1)

并令 k = 1 k=1 k=1

【2】若 b k − a k < ε b_{k}-a_{k}<\\varepsilon bkak<ε ,则停止计算。最优解 x ∗ ∈ [ a k , b k ] x^*\\in[a_{k},b_{k}] x[ak,bk],可取 x ∗ = 1 / 2 ∗ ( a k + b k ) x^*=1/2*(a_{k}+b_{k}) x=1/2(ak以上是关于优化理论13----黄金分割法单峰函数python实现及验证的主要内容,如果未能解决你的问题,请参考以下文章

一维搜索 黄金分割法

OpenCV-单峰三角阈值法Thresh_Unimodal

OpenCV-单峰三角阈值法Thresh_Unimodal

模拟退火

机器学习实战4:基于马尔科夫随机场的图像分割(附Python代码)

优化理论05----最速下降法最速下降法思想python实现