0.618法

2023-11-04 23:51
文章标签 0.618

本文主要是介绍0.618法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、简介

0.618法又称黄金分割法,是优选法的一种。是在优选时把尝试点放在黄金分割点上来寻找最优选择。0.618法是根据黄金分割原理设计的,所以又称之为黄金分割法。优选法是一种求最优化问题的方法。

二、实现

# -*- coding: utf-8 -*-
"""
Created on Tue May 23 13:10:17 20170.618法    @author: Administrator
"""import numpy as np
import matplotlib.pyplot as pltepsilon = 1e-3
alpha = 0.618
# -2 - 3
def f(x):return np.e**(-x) + x**2def solve(a,b):count = 0while b - a > 0:lam = a + (1 - alpha) * (b - a)mu = a + alpha * (b - a)print 'count: %d' % countprint 'a: %f' % aprint 'b: %f' % bprint 'b-a: %f' % (b-a)print 'lambda: %f' % lamprint 'mu: %f' % muprint '---------------------'if b - a < epsilon:return (a + b) / 2,f((a + b) / 2)elif f(lam) > f(mu):a = lamlam = mumu = a + alpha * (b - a)elif f(lam) <= f(mu):b = mumu = lamlam = a + (1 - alpha) * (b - a)count += 1def draw(ans):x = np.linspace(-2,3,1000)y = f(x)fig = plt.figure(figsize=(8,4))ax = fig.add_subplot(111)ax.set_xlabel('x')ax.set_ylabel('y')ax.plot(x,y,color='r',linestyle='-.',label='f(x)')ax.scatter(ans[0],ans[1])ax.legend(loc='upper right')fig.show()fig.savefig('a.png')def main():ans = solve(-2.0,3.0)draw(ans)print ansif __name__ == '__main__':main()

0.618法

这篇关于0.618法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/346026

相关文章

0.618法

一、简介 0.618法又称黄金分割法,是优选法的一种。是在优选时把尝试点放在黄金分割点上来寻找最优选择。0.618法是根据黄金分割原理设计的,所以又称之为黄金分割法。优选法是一种求最优化问题的方法。 二、实现 # -*- coding: utf-8 -*-"""Created on Tue May 23 13:10:17 20170.618法 @author: Administra

一维搜索:0.618法

0.618法又叫黄金分割法,适用于单峰函数,可以不连续。 1.算法步骤 (1) 置初始区间 [a1,b1] [ a 1 , b 1 ] [a_1,b_1]及精度要求 L>0 L > 0 L>0,计算试探点 λ1 λ 1 \lambda_1和 μ1 μ 1 \mu_1,计算函数值 f(λ1) f ( λ 1 ) f(\lambda_1)和 f(μ1) f ( μ 1 ) f(\m

0.618算法和基于Armijo准则的线搜索回退法

0.618代码如下: import math # 定义函数h(t) = t^3 - 2t + 1 def h(t):     return t**3 - 2*t + 1 # 0.618算法 def golden_section_search(a, b, epsilon):      ratio = 0.618      while (b - a) > epsilon

0.618算法和基于Armijo准则的线搜索回退法

0.618代码如下: import math # 定义函数h(t) = t^3 - 2t + 1 def h(t):     return t**3 - 2*t + 1 # 0.618算法 def golden_section_search(a, b, epsilon):      ratio = 0.618      while (b - a) > epsilon