• 人工智能第2版学习——知情搜索1


    书目:人工智能第2版
    有需要电子版的可以私信我。

    这次先简要介绍启发法与前面的盲目搜索的区别,然后讲爬山法、最佳优先搜索、集束搜索。

    引言

           第二章的盲目搜索,对解决Nim、井字游戏是适用的。但是对于跳棋、国际象棋这种拥有巨大搜索空间的游戏,就难以适配了。例如前面学的DFS和BFS,在最坏的情况下,时间复杂度都是指数级别的(相对于节点)。

           所以我们需要采用启发法的搜索算法,引导程序前进。
    这次先学习3个“从不回头”的算法:爬山(hill)、最佳优先搜索(best-first search)、集束搜索(beam search)。

    爬山法

           爬山法不存储历史记录,也没有能力从错误中或错误路径中恢复。
           对于一个爬山者,他只有一个高度计来指示目前所在高度,他每到一个点,必须做出选择,选择的方式就从候选节点中,选择高的那个。看下面的图:
    在这里插入图片描述
           爬山者在A和B中做出选择,因为A更靠近目标,所以选择了A,然后忘记了B,但实际上A能否真的到达目标,这个就不能保证了。

    最陡爬山法

           这个是对爬山法的进一步改进。爬山法每次都是直接找一个比现在好的节点就前进,但是最陡爬山法会在多个比较好的节点中进行比较,选出最好的。
    用书中给的例子来解释吧。
    在这里插入图片描述

           书中对这个例子的解释有点看不太懂,我就按我自己的理解来解释吧。

    在程序中,假设搜索的方式是按字母顺序来的。
    爬山法:先搜索A和B,发现B更小,就选择了B,然后去了C,接着对比D和E,选择了E。
    最陡爬山法:先搜索A、B、C,然后选择了C,接着搜索D、E、F,然后选择了F。

    (这里爬山法为什么能选了B之后再去C,其实我也持怀疑态度,但是书中这里好像就是这么写的,它的本意可能是想说明第一次选择时,爬山法选了B而不是C,但最陡爬山法选了C,然后假设两种算法都选了C,那么下一步是怎么选的。可能是这么回事吧,有人看懂的麻烦纠正一下。)

    爬山法的问题

           爬山法和最陡爬山法都有三个问题(个人感觉就是一个问题),分别是山麓问题、高原问题、山脊问题。见下图:
    在这里插入图片描述
    山麓问题:找了个小的峰,知道最大的峰在那里,但是永远到不了,因为它和现在这个位置之间有一个很低的谷。根据爬山法的搜索选择方式,不可能往低的地方走,所以到不了。
    高原问题、山脊问题:这两个总感觉和前面那个一样的,我就不解释了。

    一句话:陷入了局部最优解。

    最佳优先搜索

           这个搜索方法可以补救爬山法的问题,它是目前第一个智能搜索算法。
           先明确两个定义:
    开放节点:搜索边缘上的节点,以后可能要进一步探索到。
    封闭节点:不再探索的节点,将形成解得基础。
    最佳优先搜索:开放列表中的开放节点按接近目标的估计值进行排列。每次搜索,考虑开放列表中最优希望的点,这样反复选择最优的进行探索。
    看伪代码和图例可能会好理解些:
    在这里插入图片描述

    在这里插入图片描述

    集束搜索

    大白话就是,每层选择都是选择最优的W个,而不是1个。W叫集束宽度。
    下图是W=2的示例图。
    在这里插入图片描述
    集束搜索降低了广度优先搜索的内存开销(从指数降低到线性),但是,如果W太小,可能会是去潜在的解。

    这次就到这里了,可以点个赞吗?

  • 相关阅读:
    桥接模式(结构型)
    Autosar诊断实战系列20-UDS首帧数据接收及流控帧发送代码级分析
    H5 app开启web调试
    ES初使用记录——写入与查询数据
    Qt 堆栈窗体QStackedWidget使用
    软件设计师2013上午题基础知识(易错整理)
    Eigen学习(持续更新)
    常用 numpy 函数(长期更新)
    Charles
    JAVA计算机毕业设计食品点评及售卖系统源码+系统+mysql数据库+lw文档
  • 原文地址:https://blog.csdn.net/weixin_45034895/article/details/126355657