Python使用爬山算法寻找序列“最大值”
爬山算法是人工智能算法的一种,特点在于局部择优,所以不一定能够得到全局最优解,尽管效率比较高。使用爬山算法寻找序列最大值的思路是:在能看得到的局部范围内寻找最大值,如果当前元素已经是最大值就结束,如果最大值仍在前面就往前移动到该最大值位置(往上爬),重复上面的过程。如果原始数据的大小和分布类似于下面的图,那么从右往左爬的话就可以找到全局最大值,并且能节省一些时间。而如果从左往右爬的话无法找到全局最大值,只能找到局部最大值,除非把“邻域”定义的非常大,但是如果邻域定义的非常大的话有时候会严重影响算法效率。
from random import randint
def hillMax(lst, howFar):
'''
lst:待确定最大值的列表
howFar:爬山时能看到的“最远方”,越大越准确
'''
#由于切片是左闭右开区间,所以howFat必须大于1
assert howFar>1, 'howFar must >1'
#从列表第一个元素开始爬
#如果已经到达最后一个元素,或者已找到局部最大值,结束
start = 0
ll = len(lst)
while start <= ll:
m = lst[start]
loc = lst[start:start+howFar]
mm = max(loc)
if m == mm:
return m
else:
#局部最大数的位置
mmPos = [p for p, v in enumerate(loc) if v==mm]
start += mmPos[0]
#测试
lst = [randint(1, 100) for i in range(20)]
print(lst)
print(max(lst))
print(hillMax(lst,6))
Python使用爬山算法寻找序列“最大值”相关推荐
- 一文教会你Python 随机爬山算法
随机爬山是一种优化算法.它利用随机性作为搜索过程的一部分.这使得该算法适用于非线性目标函数,而其他局部搜索算法不能很好地运行.它也是一种局部搜索算法,这意味着它修改了单个解决方案并搜索搜索空间的相对局 ...
- 5分钟掌握 Python 随机爬山算法
随机爬山是一种优化算法.它利用随机性作为搜索过程的一部分.这使得该算法适用于非线性目标函数,而其他局部搜索算法不能很好地运行.它也是一种局部搜索算法,这意味着它修改了单个解决方案并搜索搜索空间的相对局 ...
- 详解Python使用模拟退火算法求解列表“最大值”
模拟退火算法可以看作是爬山算法的一种改进,如果前方有更优解就前进,如果没有更优解就以一定概率前进.与简单的爬山算法相比,模拟退火算法有可能跳出局部而得到全局最优解,但也有可能得到更差的解,算法参数的设 ...
- 利用python实现贪心算法-----摇摆序列
今天看到了这个贪心算法的摇摆序列,确实挺难的,自己就没有按照老师所用到的c语言代码编写,并且用了自己所能够理解的方式进行编写代码,代码实现起来有点多余,但是最终还是实现了,大家可以自己进行优化,这个是 ...
- 算法——寻找序列平衡点
一个序列的平衡点是这样的,它的左边的所有的元素的和应该等于右边的所有的元素的和,比如 在下面的序列A:A[0]=-7 A[1]=1 A[2]=5 A[3]=2 A[4]=-4 A[5]=3 A[6]= ...
- python数圈算法_Python实现随机爬山算法
随机爬山是一种优化算法.它利用随机性作为搜索过程的一部分.这使得该算法适用于非线性目标函数,而其他局部搜索算法不能很好地运行.它也是一种局部搜索算法,这意味着它修改了单个解决方案并搜索搜索空间的相对局 ...
- 遗传算法与爬山算法简介_遗传算法简介
遗传算法与爬山算法简介 Genetic Algorithms (GAs) are a part of Evolutionary Computing (EC), which is a rapidly g ...
- java实现爬山算法_python实现爬山算法的思路详解
问题 找图中函数在区间[5,8]的最大值 重点思路 爬山算法会收敛到局部最优,解决办法是初始值在定义域上随机取乱数100次,总不可能100次都那么倒霉. 实现 import numpy as np i ...
- python爬山算法
这篇文章主要介绍了爬山算法,爬山法(climbing method)是一种优化算法,其一般从一个随机的解开始,然后逐步找到一个最优解(局部最优)然后用Python实现了这个算法,需要的朋友可以参考下 ...
最新文章
- Python进程池,线程池,协程池
- JAVA多线程:线程创建过程以及生命周期总结
- Mysql查漏补缺笔记
- 被LTRIM(RTRIM())害死了,差点
- 运行java是提示 选择未包含 main 类型 如何解决_RuoYi 若依 代码生成器使用教程...
- Android Service完全解析
- linux mysql --help_深入理解mysql帮助命令(help)
- html毕业作品,基于HTML制作的闲置交易网站设计毕业论文+开题报告+Html静态网页源码...
- Duplex Generative Adversarial Network for Unsupervised Domain Adaptation
- java wmic_Windows WMIC命令使用详解(附实例)
- 三层交换机设置成路由
- UStore-添加自定义工作流(JDF)到产品
- ae合成设置快捷键_(精品)AE从小白到大神之路(一)-AE入门
- 瑞幸咖啡第四季营收24亿:同比增80.7% 门店总数超6000家
- 【高精度】高精度除以高精度 C++题解
- Counting Liars
- lect02_project
- 计算机如何识别这是一个键盘,键盘两个键同时按下时计算机如何识别被按下的是哪个键...
- Codeforces 103B Cthulhu
- visual c 怎么编程语言,如何在c中使用julia语言(visual studio)
热门文章
- python切换虚拟环境和全局_为什么python虚拟环境启动后依然使用全局的python和pip...
- mysql 数据库复制软件_mysql 快速复制数据库
- java tdd测试驱动开发_测试驱动开发TDD(test drive development)
- 基于matlab的升压斩波实验,升降压斩波电路matlab仿真
- python汉字排序_【IT专家】Python中文排序(转载)
- 三元一次方程组步骤_姜红梅名师工作室【教学感悟】三元一次方程组解法的思考...
- Android Gradle插件(plugin)版本(version)与Gradle、SDK Build Tools版本关系
- 基于JAVA+SpringMVC+Mybatis+MYSQL的族谱管理系统
- 基于JAVA+SpringMVC+Mybatis+MYSQL的快递预取件查询系统
- keil 生成bin找不到afx文件_【学习笔记】Keil不能正确生成.bin文件的解决办法