启发法是一个提高复杂问题解决效率的实用策略,它引导程序沿着一条最可能的路径到达解,忽略最没有希望的路径,能避免去检查死角,只使用已搜集的数据。

启发式搜索方法的目的是看了到达目标状态情况下极大地减少节点的数目。

启发式搜索:

  • 决定接下来扩展的节点,而不是严格按照广度优先或深度优先的方式进行扩展
  • 在生成节点的过程中,决定哪个节点是后继节点,以及待生成的后继节点,而不是一次性生成所有可能的节点
  • 确定某些节点应该从搜索树中丢弃(或裁剪掉)

爬山法

爬山法背后概念是爬山过程中,你可能接近了顶部的目标节点,但是你无法从当前位置到达目标。它最简单的形式是一种贪婪算法,它使用一种测度(最大化这种测度或最小化这种测度)来指导它到达目标。

最陡爬山法

最陡爬山法是你能够接近某个目标状态,能够在给定的状态下做出决策,并且从多个可能的选项中做出最好的决定。

伪代码实现:

//steepest-ascent Hill climbing
Hillclimbing(Root_Node, goal)
{Create Queue Q;If(Root_Node = goal) return sucessesPush all the children of Root_Node in to Qwhile(Q_Is_Not_Empty){Find the child which has minium distance to goal}//end of whileBest_child = the child which has minium distance to goalIf(Best_child is not a leaf)Hillclimbing(Best_child, goal)ElseIf(Best_child = goal) return Successretum failure;}//end of function
}

某些情况下,爬山法可能出现的问题:山麓问题高原问题山脊问题

山麓问题(局部最大值)

爬山者认为他可能到达山顶,但实际上他到达后看到的并不是山顶。就好比你要去一个公园,从地图和里程表上显示你已经到达了,实际你到达后发现公园的唯一入口在其他地方。

高原问题(相似的局部最大值)

假设有一些良好的相似的局部最大值,但是为了达到最大值必须移动另一个高原。好比有相似的两栋建筑物,你要到达指定的房间,当你越来越接近这房间时,你发现自己身处在错误的建筑物中。

山脊问题

虽然可能存在好的指示让我们接近目标,但在建筑物中它们处于错误的楼层。好比逛百货商店,发现自己要买的商品在其他的楼层。

解决措施

解决局部最大值的方法是回溯,回溯到更早的节点并尝试不同的方向。

当在相邻区域中许多点出现相似值时,可以通过多次应用相同的规则,尝试到达搜索空间的新区域。

山脊问题可以通过一次应用几个规则在几个方向上进行搜索,从而防止被困在某个位置。

最佳优先搜索

最佳优先搜索为了到达目标节点,它会做出探索哪个节点和探索多少节点的决定。

伪代码实现

//Best-First Search
BestFirstSearch(Root_Node, Goal)
{Create Queue Q;Inser Root_Node to Q;while(Q_Is_not_Empty){G = remove from QIf(G = goal) return path from Root_Node to Qwhile(G has child nodes){If(child is not inside Q)Insert child node to QElseinsert the child which has minimum value into the Q,delet all the other nodes.sort Q by value //smallest Node at the top }}return failure
}

与爬山法相比,最佳优先搜索的优势在于可以通过回溯开放所有开放列表的节点,从错误、假线索、死胡同恢复。

集束搜索(Beam Search)

Beam Search(集束搜索):是一种启发式图搜索算法,在图的解空间比较大的情况下,为了减少搜索所占用的空间和时间,在每一步深度扩展的时候,剪掉一些质量比较差的结点,保留下一些质量较高的结点。

知情搜索(一)-启发法相关推荐

  1. 人工智能之集束搜索Beam Search Algorithm

      集束搜索是属于人工智能基础知识中的知情搜索,知情搜索是基于启发法的一种搜索方法,由爬山法-->最陡爬坡法-->最佳优先搜索法-->集束搜索,逐步优化算法 通过爬山简单来说下这几种 ...

  2. unix入门经典_程序员大神们的经典编程语录

    作为程序员的你,下面这些程序员经典语录请您认真来读一读,也许此时此刻会有不一样的心得体会与收获. "大多数优秀的程序员从事编程工作,不是因为期望获得报酬或得到公众的称赞,而是因为编程是件有趣 ...

  3. 人工神经网络理论及应用pdf,人工智能的相关书籍

    有哪些关于人工智能的书籍可供推荐? 看到这个问题有点小兴奋,我来推荐一份人工智能书单. 1.机器学习精讲机器学习原理算法与应用教程,精简机器学习入门手册,美亚机器学习深度学习畅销书,全彩印刷,扫描书中 ...

  4. 神经网络入门经典书籍,神经网络的书籍推荐

    有没有好理解的关于神经网络的书推荐 肯定是matlab用的神经网络设计了,通俗易懂,很多实例!!戴葵翻译的美国经典神经网络<神经网络设计>神经网络概念非常简单(如果是科班出身),看一个下午 ...

  5. 世界读书日丨程序员经典语录值得读一读

    每年的4月23日,是"世界读书日".这一天,是为了提醒我们,无论生活多么的忙碌,都要记得多读书. 作为程序员的你,下面这些程序员经典语录请您认真来读一读,也许此时此刻会有不一样的心 ...

  6. 最近非常受欢迎的国外经典计算机教材有这样7本

    你想知道最受欢迎的国外计算机教材有哪些吗?我今天给大家推荐7本经典教材,希望你喜欢. 1.数据结构 Python语言描述 第2版 数据结构算法入门教程,基于Python语言进行讲解,国外高等院校教材升 ...

  7. 人工智能导论-周苏作业答案

    ​第一章 1.作为计算机科学的一个分支,人工智能的英文缩写是( ).AI 2. 人工智能是研究.开发用于模拟.延伸和扩展人的智能的理论.方法.技术及应用系统的一门交叉科学,它涉及( D). A. 自然 ...

  8. 1024 | 不加班,带你们一起薅当当的羊毛!

    来源 | 异步 | 文末赠书 早上好啊,大家周末过得怎么样? 最近后台有好多人催我写清单,我才发现今年双十一来得特别早.▼ 别着急,未到双十一,1024程序员节,优惠悄然来了,哪些书值得买?跟着畅销榜 ...

  9. 五位工程师亲述:AI技术人才如何快速成长?

    来源:AI前线 本文长度为12000字,建议阅读10分钟 本文与你分享AI技术人才的真实成长经历. 标签:人工智能 前言 参考塞缪尔. 约翰逊(18 世纪英国文学评论家.诗人,著有<英语大辞典& ...

最新文章

  1. python subprocess_python subprocess
  2. CADisplayLink 及定时器的使用
  3. iOS评论App----常用时间的处理
  4. linux改变工作目录命令,linux命令:cd命令,改变当前的工作目录
  5. Spark性能优化:对RDD持久化或CheckPoint操作
  6. 本地php后台密码恢复默认,找回wordpress后台管理密码的PHP脚本方法
  7. 三种方式在CentOS 7搭建KVM虚拟化平台
  8. 把java复制到e_编写一个程序,将e:\java目录下的所有.java文件复制到e:\jad目录下...
  9. 【Python】小练习
  10. 诗与远方:无题(二十八)- 曾经写给妹子的一首诗
  11. android超级管理员权限作用,Android获取超级管理员权限的实现
  12. 基于QT的IM(jabber)库和客户端
  13. 不同类型的Syslinux 引导
  14. rk3328 android10 Debug串口打印信息
  15. Python中的字符串下标
  16. Linux编码解码指令-base64
  17. python安装绘图库matplotlib_python绘图库Matplotlib的安装
  18. Linux系统下怎么查询自己的ip和port
  19. FMDB-FMDatabaseQueue
  20. Linux查看服务器的cpu和内存的硬件信息

热门文章

  1. base64编码类------原始码(C#)
  2. 计算机从bios到操作系统,高手进!!计算机开机后在进入操作系统前BIOS在进行什么检测工作?...
  3. App推广:三大思路与解决方案
  4. Graphite详解
  5. Linux 集群技术
  6. linux 内核启动Initramfs与initrd 及其挂载
  7. 一个有趣的网站:子说
  8. 机器学习scikit-learn(一)(转)
  9. rtmp/rtsp播放器
  10. 什么样的企业算是负责任的企业