python实现爬山算法的思路详解
程序员文章站
2023-11-24 20:09:46
问题
找图中函数在区间[5,8]的最大值
重点思路
爬山算法会收敛到局部最优,解决办法是初始值在定义域上随机取乱数100次,总不可能100次都那么...
问题
找图中函数在区间[5,8]的最大值
重点思路
爬山算法会收敛到局部最优,解决办法是初始值在定义域上随机取乱数100次,总不可能100次都那么倒霉。
实现
import numpy as np import matplotlib.pyplot as plt import math # 搜索步长 delta = 0.01 # 定义域x从5到8闭区间 bound = [5,8] # 随机取乱数100次 generation = 100 def f(x): return math.sin(x*x)+2.0*math.cos(2.0*x) def hillclimbing(x): while f(x+delta)>f(x) and x+delta<=bound[1] and x+delta>=bound[0]: x = x+delta while f(x-delta)>f(x) and x-delta<=bound[1] and x-delta>=bound[0]: x = x-delta return x,f(x) def findmax(): highest = [0,-1000] for i in range(generation): x = np.random.rand()*(bound[1]-bound[0])+bound[0] currentvalue = hillclimbing(x) print('current value is :',currentvalue) if currentvalue[1] > highest[1]: highest[:] = currentvalue return highest [x,y] = findmax() print('highest point is x :{},y:{}'.format(x,y))
运行结果:
总结
以上所述是小编给大家介绍的python实现爬山算法的思路详解,希望对大家有所帮助
上一篇: 中文*实现简繁转换
下一篇: asp中一段防SQL注入的通用脚本