您的位置:首页 > 其它

黄金分割法与单峰函数求极值

2016-05-28 11:16 477 查看
黄金分割法(又称 0.618 法)是求单峰函数极值的一种试探法,所谓单峰函数是指只有一个峰值(局部极小值也是全局极小值,或者说只有唯一的局部极小值)的函数,其严格定义为:

定义:设 f(x) 是定义在 [a,b] 上的函数,若:

(1)存在 x⋆∈[a,b] 使 minx∈{a,b}f(x)=f(x⋆)

(2)对任意的 a≤x1<x2≤b,当 x2≤x⋆ 时,f(x1)>f(x2);当 x1≥x⋆ 时,f(x1)≤f(x2)

则称 f(x) 为 [a,b] 上的单峰函数。

搜索区间收缩原则

“去坏留好”原则

含义较为简单,不再赘述。

对称原则

x1−a=b−x2x2=a+b−x1

等比原则

x2=a+w(b−a)x1=a+w2(b−a)

又根据对称原则:x1−a=b−x2,最终可得,

w2=1−w

简单举例,

求 y=x2 (显然为单峰函数)在[-1, 1]上的最小值;

def golden_split(f, a, b):
x1 = a + 0.332*(b-a)
x2 = a + b - x1
while abs(x1 - x2) < 1e-5:
R, G = f(x1), f(x2)
if R > G:
b = x2
x2 = x1
x1 = a + b - x2
else:
a = x1
x1 = x2
x2 = a + b - x1
return (a + b)/2

print(golden_split(lambda x: x^2), -1, 1))
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: