爬山算法是人工智能算法的一种,特点在于局部择优,所以不一定能够得到全局最优解,尽管效率比较高。使用爬山算法寻找序列最大值的思路是:在能看得到的局部范围内寻找最大值,如果当前元素已经是最大值就结束,如果最大值仍在前面就往前移动到该最大值位置(往上爬),重复上面的过程。如果原始数据的大小和分布类似于下面的图,那么从右往左爬的话就可以找到全局最大值,并且能节省一些时间。而如果从左往右爬的话无法找到全局最大值,只能找到局部最大值,除非把“邻域”定义的非常大,但是如果邻域定义的非常大的话有时候会严重影响算法效率。

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使用爬山算法寻找序列“最大值”相关推荐

  1. 一文教会你Python 随机爬山算法

    随机爬山是一种优化算法.它利用随机性作为搜索过程的一部分.这使得该算法适用于非线性目标函数,而其他局部搜索算法不能很好地运行.它也是一种局部搜索算法,这意味着它修改了单个解决方案并搜索搜索空间的相对局 ...

  2. 5分钟掌握 Python 随机爬山算法

    随机爬山是一种优化算法.它利用随机性作为搜索过程的一部分.这使得该算法适用于非线性目标函数,而其他局部搜索算法不能很好地运行.它也是一种局部搜索算法,这意味着它修改了单个解决方案并搜索搜索空间的相对局 ...

  3. 详解Python使用模拟退火算法求解列表“最大值”

    模拟退火算法可以看作是爬山算法的一种改进,如果前方有更优解就前进,如果没有更优解就以一定概率前进.与简单的爬山算法相比,模拟退火算法有可能跳出局部而得到全局最优解,但也有可能得到更差的解,算法参数的设 ...

  4. 利用python实现贪心算法-----摇摆序列

    今天看到了这个贪心算法的摇摆序列,确实挺难的,自己就没有按照老师所用到的c语言代码编写,并且用了自己所能够理解的方式进行编写代码,代码实现起来有点多余,但是最终还是实现了,大家可以自己进行优化,这个是 ...

  5. 算法——寻找序列平衡点

    一个序列的平衡点是这样的,它的左边的所有的元素的和应该等于右边的所有的元素的和,比如 在下面的序列A:A[0]=-7 A[1]=1 A[2]=5 A[3]=2 A[4]=-4 A[5]=3 A[6]= ...

  6. python数圈算法_Python实现随机爬山算法

    随机爬山是一种优化算法.它利用随机性作为搜索过程的一部分.这使得该算法适用于非线性目标函数,而其他局部搜索算法不能很好地运行.它也是一种局部搜索算法,这意味着它修改了单个解决方案并搜索搜索空间的相对局 ...

  7. 遗传算法与爬山算法简介_遗传算法简介

    遗传算法与爬山算法简介 Genetic Algorithms (GAs) are a part of Evolutionary Computing (EC), which is a rapidly g ...

  8. java实现爬山算法_python实现爬山算法的思路详解

    问题 找图中函数在区间[5,8]的最大值 重点思路 爬山算法会收敛到局部最优,解决办法是初始值在定义域上随机取乱数100次,总不可能100次都那么倒霉. 实现 import numpy as np i ...

  9. python爬山算法

    这篇文章主要介绍了爬山算法,爬山法(climbing method)是一种优化算法,其一般从一个随机的解开始,然后逐步找到一个最优解(局部最优)然后用Python实现了这个算法,需要的朋友可以参考下 ...

最新文章

  1. Python进程池,线程池,协程池
  2. JAVA多线程:线程创建过程以及生命周期总结
  3. Mysql查漏补缺笔记
  4. 被LTRIM(RTRIM())害死了,差点
  5. 运行java是提示 选择未包含 main 类型 如何解决_RuoYi 若依 代码生成器使用教程...
  6. Android Service完全解析
  7. linux mysql --help_深入理解mysql帮助命令(help)
  8. html毕业作品,基于HTML制作的闲置交易网站设计毕业论文+开题报告+Html静态网页源码...
  9. Duplex Generative Adversarial Network for Unsupervised Domain Adaptation
  10. java wmic_Windows WMIC命令使用详解(附实例)
  11. 三层交换机设置成路由
  12. UStore-添加自定义工作流(JDF)到产品
  13. ae合成设置快捷键_(精品)AE从小白到大神之路(一)-AE入门
  14. 瑞幸咖啡第四季营收24亿:同比增80.7% 门店总数超6000家
  15. 【高精度】高精度除以高精度 C++题解
  16. Counting Liars
  17. lect02_project
  18. 计算机如何识别这是一个键盘,键盘两个键同时按下时计算机如何识别被按下的是哪个键...
  19. Codeforces 103B Cthulhu
  20. visual c 怎么编程语言,如何在c中使用julia语言(visual studio)

热门文章

  1. python切换虚拟环境和全局_为什么python虚拟环境启动后依然使用全局的python和pip...
  2. mysql 数据库复制软件_mysql 快速复制数据库
  3. java tdd测试驱动开发_测试驱动开发TDD(test drive development)
  4. 基于matlab的升压斩波实验,升降压斩波电路matlab仿真
  5. python汉字排序_【IT专家】Python中文排序(转载)
  6. 三元一次方程组步骤_姜红梅名师工作室【教学感悟】三元一次方程组解法的思考...
  7. Android Gradle插件(plugin)版本(version)与Gradle、SDK Build Tools版本关系
  8. 基于JAVA+SpringMVC+Mybatis+MYSQL的族谱管理系统
  9. 基于JAVA+SpringMVC+Mybatis+MYSQL的快递预取件查询系统
  10. keil 生成bin找不到afx文件_【学习笔记】Keil不能正确生成.bin文件的解决办法