爬山算法

这个算法挺简单的。

从当前的节点开始,和周围的邻居节点的值进行比较。 如果当前节点是最大的,那么返回当前节点,作为最大值(既山峰最高点);反之就用最高的邻居节点来,替换当前节点,从而实现向山峰的高处攀爬的目的。如此循环直到达到最高点。这个算法适用于最优解问题,作为学习模拟退火算法的前置知识。

优点:
启发式搜索解决np问题,能更有效的搜索大数据。

缺点:
因为不是全面搜索,所以结果可能不是最佳。
爬山算法一般存在以下问题:
1)小山峰:某个节点比周围任何一个邻居都高,但是它却不是整个问题的最高点,即容易困于局部最优解。
2)高地:也称为平顶,搜索一旦到达高地,就无法确定搜索最佳方向,会产生随机走动,使得搜索效率降低。
3)山脊:搜索可能会在山脊的两面来回震荡,前进步伐很小。

实现步骤:

(1)首先选取一个随机节点,并计算对应的值

(2)在当前节点随机选取邻居节点并计算对应的值,如果邻居节点大于当前结点,则把邻居节点更新为当前结点(爬山),重复2步骤直到左右邻居均无更大值或者达到指定步数。

上代码:

import matplotlib.pyplot as plt
import numpy as npx = np.linspace(0,100,1000)#生成用于绘制函数曲线图的数据
y = 300*np.sin(0.5*x+10)+(x-50)**2 #图形函数#随机选取起点,并计算值
start = np.random.uniform(0,100,1)
yval = 300*np.sin(0.5*start+10)+(start-50)**2#进行100000次
for _ in range(100000):#随机生成移动,当然也可以改成固定步数step = np.random.uniform(-0.0005,0.0005,1)#计算移动后的位置与值go = step + startclimb = 300*np.sin(0.5*go+10)+(go-50)**2#进行比较与更新if(climb < yval):yval = climbstart = go #每3000次更新一次图   if(_%3000==0):plt.cla()plt.clf()plt.scatter(x,y,c='r')plt.scatter(start,yval,c='b')plt.pause(0.001)
#输出结果:
print("x:",start)
print("yval",yval)

print(“x:”,start)
print(“yval”,yval)

附图:


当然从图可以看出是陷入了局部最优解。

简单的启发式搜索---算法爬山算法相关推荐

  1. matlab中用爬山搜索法仿真,MATLAB算法の爬山算法

    图1 爬山算法搜索极大值动态演示 没错,正如在图1中所见到的那样,今天给大家介绍爬山算法.顾名思义,爬山就是我们日常所理解的爬山运动,而目的就是要登上山顶,想要到达山顶,每一步应该是向着山顶迈进的,经 ...

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

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

  3. 【AI】Hill Climbing 爬山算法

    爬山算法 浅谈爬山算法 爬山算法的一种改进方法 爬山算法是对DFS的一种改进 浅谈爬山算法 爬山算法 每次拿相邻点与当前点进行比对,取两者中较优者作为爬坡的下一步.循环直到该点的相邻点中不再有比其更大 ...

  4. java模拟多人爬山_基于爬山算法求解TSP问题(JAVA)

    一.TSP问题 TSP问题(Travelling Salesman Problem)即旅行商问题,又译为旅行推销员问题.货郎担问题,是数学领域中著名问题之一.假设有一个旅行商人要拜访n个城市,他必须选 ...

  5. 爬山算法改进-探测器-python-全局最优解

    爬山算法改进 前言 一.爬山算法 二.算法改进-探测器 1.递归寻找局部最优值 2.探测器搜索全局最优值 总结 前言 爬山法(climbing method)是一种优化算法,它一般从一个随机某一点开始 ...

  6. 爬山算法和模拟退火算法简介(转)

    源:爬山算法和模拟退火算法简介 一. 爬山算法 ( Hill Climbing ) 介绍模拟退火前,先介绍爬山算法.爬山算法是一种简单的贪心搜索算法,该算法每次从当前解的临近解空间中选择一个最优解作为 ...

  7. 旅行商问题(动态规划_爬山算法_遗传算法)

    问题描述 ​ 旅行商问题(Travelling Salesman Problem, 简记TSP,亦称货郎担问题):设有n个城市和距离矩阵D=[dij],其中dij表示城市i到城市j的距离,i,j=1, ...

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

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

  9. 零基础学启发式算法(2)-局部搜索(Local Search)和爬山算法(Hill Climbing)

    一.局部搜索(Local Search) 局部搜索是一种近似算法(Approximate algorithms),是一种简单的贪心搜索算法.从一个候选解开始,持续地在其邻域中搜索,直至邻域中没有更好的 ...

最新文章

  1. 计算机主机的作用和性能指标,Cpu是什么 cpu性能指标主要有哪几个方面【详细介绍】...
  2. Java 设计模式 之 中介者模式(Mediator)
  3. 机器学习领域中的六大误区
  4. web工程中集成cas单点登录
  5. HTML css嵌套的一个例子
  6. 当面试官问我————为什么String是final的?
  7. 太原锦华计算机学校教学质量怎样,一所好学校有哪些特点?
  8. 判断手机是否支持闪光灯的
  9. Fiddler4入门--手机抓包工具安装和使用说明
  10. GIS_GeoTools栅格数据分析之图像变化检测
  11. python试题库_python 题库
  12. java rest 图_java – Serenity Rest服务
  13. 用vue简单写一个音乐播放器
  14. 社会主义市场经济的运作机制
  15. i5 13500怎么样相当于什么水平级别
  16. 2017全国电赛综合测评四分频电路(一片D触发器74LS74的两种方法,有图有真相,实测波形图)
  17. linux 负载高 cpu低,Linux服务器CPU使用率较低但负载较高
  18. 1. 神经网络面试题总结
  19. 计算机硬件 OR CX 1,月亮雨小组的天地
  20. SAP FI 系列 (030) - 特别总账标记

热门文章

  1. GIS 中矢量多边形网格化问题研究
  2. 揭秘:网易运营、产品经理日常工作都在用的14大神器
  3. 集成运算放大器线性应用的基本电路以及输出电压与输出电压的关系
  4. 1.假设检验学习笔记
  5. ALSA子系统(十六)------虚拟耳机驱动
  6. 树状控件的应用(选择出阵武将)
  7. 【IDE-Visual Studio】灾难性故障(异常来自 HRESULT 0x8000FFFF E UNEXPECT
  8. ORA-39001: invalid argument value ORA-39071: Value for EXCLUDE is badly formed.
  9. 青职院人工智能03机器学习基础(二)
  10. 移植IXP驱动到uClinux2008