zoukankan      html  css  js  c++  java
  • 人工智能3:通过搜索进行问题求解

          形式化、搜索、执行。

    一、形式化

          1. 初始状态

          2. 可能行动

          3. 转移模型

          4. 目标测试

          5. 路径耗散

    二、算法性能

          1. 完备性

          2. 最优性

          3. 时间复杂度

          4. 空间复杂度

    三、无信息搜索策略

          1. 宽度优先搜索

          先扩展根结点,接着扩展根结点的所有后继,然后再扩展它们的后继。一般地,在下一层的任何结点扩展之前,搜索树上本层深度的所有结点都应该已经扩展过。使用FIFO队列。

          性能:完备的、最优的。时间和空间需求太大。

          2. 一致代价搜索

          扩展的是路径消耗g(n)最小的结点n,也就是对任何单步代价函数都是最优的算法。可以通过将边缘结点集组合成按g值排序的队列来实现。目标检测应用于结点被选择扩展时,而不是生成时。也就是要先算所有的代价值。

          性能:如果没有为0的代价就是完备的。最优的。时间和空间消耗比宽度优先搜索还要打。

          3. 深度优先搜索

          总是扩展搜索树的当前边缘结点集中最深的结点。使用LIFO队列。最新生成的结点最早被选择扩展。效率严重依赖于使用图搜索还是树搜索。

          性能:图搜索是完备的,树搜索不完备。不是最优的。时间复杂度受限于状态空间的规模。空间复杂度性能非常好。当状态空间分支因子为b最大深度为m,只需存储O(bm)个结点。

          一种变形:回溯搜索。所用内存空间更少。

          4. 深度受限搜索

          解决了无穷路径的问题。

          性能:不完备。不是最优的。

          5. 迭代加深的深度优先搜索

          经常和深度优先搜索结合使用来确定最好的深度界限。做法是不断增大深度限制,直到找到目标。

          6. 双向搜索

           同时运行两个搜索,一个从初始状态向前搜索同时另一个从目标状态向后搜索,希望它们在中间某点相遇。可以这样实现:目标测试替换为检查两个方向的搜索的边缘结点集是否相交;如果交集不为空就找到了一个解。

    四、有信息(启发式)搜索策略

          最佳优先搜索,结点是基于评价函数f(n)值被选择扩展的。大多数的最佳优先搜索算法的f由启发函数构成:

          h(n) = 结点n到目标结点的最小代价路径的代价估计值。

          1. 贪婪最佳优先搜索

          试图扩展离目标最近的结点,理由是这样可能可以很快找到解。只用启发式信息,即f(n)=h(n)。

          2. A*搜索:缩小总评估代价

          它对结点的评价结合了g(n),即到达此结点已经花费的代价,和h(n),从该结点到目标结点所化代价:f(n)=g(n)+h(n)=经过结点n的最小代价解的估计代价。

          保证最优性的条件:(1)h(n)是一个可采纳启发式,指它从不会过高估计到达目标的代价。(2)一致性:就是三角不等式,一条边长度不大于另两条边之和。

          3. 存储受限的启发式搜索

          迭代加深A*(IDA*)算法。和典型的迭代加深算法的主要区别是所用的截断值是f代价(g+h)而不是搜索深度。

          递归最佳优先搜索(RBFS)。MA*和SMA*算法。这几种是鲁棒的、最优的搜索算法,它们使用有限的内存;只要时间充足,它们能求解A*算法因为内存不足不能求解的问题。

  • 相关阅读:
    SubString函数总结
    button按钮居中
    2019 面试题
    linux(centos)搭建SVN服务器
    svn 设置钩子将代码同步到web目录下面
    sql 语句总结
    php 多维数组转换
    php 两个数组是否相同,并且输出全面的数据,相同的加一个字段标示
    PHP错误类型及屏蔽方法
    设置div中文字超出时自动换行
  • 原文地址:https://www.cnblogs.com/r1ce/p/5333337.html
Copyright © 2011-2022 走看看