启发式搜索算法:A算法(全局、局部择优算法)+A*算法 解决八数码问题

这篇具有很好参考价值的文章主要介绍了启发式搜索算法:A算法(全局、局部择优算法)+A*算法 解决八数码问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

参考博客:人工智能搜索策略:A*算法

1.A 算法

在图搜索算法中,如果能在搜索的每一步都利用估价函数f(n)=g(n)+h(n)对Open表中的节点进行排序,则该搜索算法为A算法。由于估价函数中带有问题自身的启发性信息,因此,A算法又称为启发式搜索算法。
对启发式搜索算法,又可根据搜索过程中选择扩展节点的范围,将其分为全局择优搜索算法局部择优搜索算法
`

1.1.全局择优算法

在全局择优搜索中,每当需要扩展节点时,总是从Open表的所有节点中选择一个估价函数值最小的节点进行扩展。其搜索过程可能描述如下:

(1)把初始节点S0放入Open表中,f(S0)=g(S0)+h(S0);
(2)如果Open表为空,则问题无解,失败退出;
(3)把Open表的第一个节点取出放入Closed表,并记该节点为n;
(4)考察节点n是否为目标节点。若是,则找到了问题的解,成功退出;
(5)若节点n不可扩展,则转到第(2)步;
(6)扩展节点n,生成子节点ni(i=1,2,……),计算每一个子节点的估价值f(ni) (i=1,2,……),并为每一个子节点设置指向父节点的指针,然后将这些子节点放入Open表中;
(7)根据各节点的估价函数值,对Open表中的全部节点按从小到大的顺序重新进行排序;
(8)转第(2)步。

由于上述算法的第(7)步要对Open表中的全部节点按其估价函数值从小到大重新进行排序,这样在算法第(3)步取出的节点就一定是Open表的所有节点中估价函数值最小的一个节点。因此,它是一种全局择优的搜索方式

对上述算法进一步分析还可以发现:
如果取估价函数f(n)=g(n),则它将退化为代价树的广度优先搜索;
如果取估价函数f(n)=h(n),则它将退化为广度优先搜索。
可见,广度优先搜索和代价树的广度优先搜索是全局择优搜索的两个特例

1.1.1.求解八数码

例 1: 八数码难题。 设问题的 初始状态S0 和 目标状态Sg 如图所示,估价函数与请用全局择优搜索解决该题。

启发式搜索算法:A算法(全局、局部择优算法)+A*算法 解决八数码问题
图1 八数码难题的全局择优搜索树
启发式搜索算法:A算法(全局、局部择优算法)+A*算法 解决八数码问题
启发式搜索算法:A算法(全局、局部择优算法)+A*算法 解决八数码问题
启发式搜索算法:A算法(全局、局部择优算法)+A*算法 解决八数码问题





1.2.局部择优算法

在局部择优搜索中,每当需要扩展节点时,总是从刚生成的子节点中选择一个估价函数值最小的节点进行扩展。其搜索过程可描述如下:

(1)把初始节点S0放入Open表中,f(S0)=g(S0)+h(S0);
(2)如果Open表为空,则问题无解,失败退出;
(3)把Open表的第一个节点取出放入Closed表,并记该节点为n;
(4)考察节点n是否为目标节点。若是,则找到了问题的解,成功退出;
(5)若节点n不可扩展,则转到第(2)步;
(6)扩展节点n,生成子节点ni(i=1,2,……),计算每一个子节点的估价值f(ni) (i=1,2,……),并 按估价值从小到大的顺序依次放入Open表的首部(不是全部排序,而是这个扩展节点n生成的子节点),并为每一个子节点设置指向父节点的指针,然后转第(2)步。

由于这一算法的第六步仅仅是把刚生成的子节点按其估价函数值从小到大放入Open表中,这样在算法第(3)步取出的节点仅是刚生成的子节点中估价函数值最小的一个节点。因此,它是一种局部择优的搜索方式。

对这一算法进一步分析也可以发现:
如果取估价函数f(n)=g(n),则它将退化为代价树的深度优先搜索;
如果取估价函数f(n)=d(n),则它将退化为深度优先搜索。
可见,深度优先搜索和代价树的深度优先搜索是局部择优搜索的两个特例

1.2.1.求解八数码

和用全局择优算法一样(估价函数一样),但扩展的顺序不一样
局部更类似深度,全局跟类似广度
如下图片可体现区别:

在此仅画出权重f(x),对于八数码的各个变化不再详细画出。启发式搜索算法:A算法(全局、局部择优算法)+A*算法 解决八数码问题
启发式搜索算法:A算法(全局、局部择优算法)+A*算法 解决八数码问题
启发式搜索算法:A算法(全局、局部择优算法)+A*算法 解决八数码问题





2.A*算法

上一节讨论的启发式搜索算法,都没有对估价函数f(n)做任何限制。实际上,估价函数对搜索过程是十分重要的,如果选择不当,则有可能找不到问题的解,或者找到的不是问题的最优解。为此,需要对估价函数进行某些限制。A* 算法就是对估价函数加上一些限制后得到的一种启发式搜索算法。
假设f*(n)为从初始节点S0出发,约束经过节点n到达目标节点的最小代价值。估价函数f(n)则是f*(n)的估计值。
显然,f*(n)应由以下两部分所组成:

  • 一部分是从初始节点S0到节点n的最小代价,记为g*(n);
  • 另一部分是从节点n到目标节点的最小代价,记为h*(n),当问题有多个目标节点时,应选取其中代价最小的一个。

因此有 f*(n)=g*(n) +h*(n)

把估价函数f(n)与 f*(n)相比

  • g(n)是对g*(n)的一个估计
  • h(n)是对h*(n)的一个估计。

启发式搜索算法:A算法(全局、局部择优算法)+A*算法 解决八数码问题

则称得到的算法为A*算法

2.1 解决八数码难题

g*(n)为起点n状态的最短路径代价值;换句话说,就是层数
h*(n)是n状态目的状态的最短路径的代价值。换句话说,“不在位”数码个数至少要移动多少位才能变成目标数码对应的位置
这样,f*(n)就是起点出发通过n状态而到达目的状态的最佳路径的总代价值。

在该图中,从这些值还可以看出,最佳路径上的节点都有 f*=g*+h*=4.

启发式搜索算法:A算法(全局、局部择优算法)+A*算法 解决八数码问题文章来源地址https://www.toymoban.com/news/detail-496479.html

到了这里,关于启发式搜索算法:A算法(全局、局部择优算法)+A*算法 解决八数码问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 启发式算法之灰狼优化算法

    蚁群算法?秃鹰算法?布谷鸟算法?鱼群算法?猴群算法?这都是些啥? 这些算法听起来都很接地气,实际上也确实很接地气。它们都是学者通过观察动物们的行为得到的灵感,从而设计出来的精彩的算法。以动物命名的算法可远不止这些,比如还有蜂群算法、狼群算法、蝙

    2024年02月13日
    浏览(29)
  • 【启发式算法】灰狼优化算法【附python实现代码】

    写在前面: 首先感谢兄弟们的订阅,让我有创作的动力,在创作过程我会尽最大能力,保证作品的质量,如果有问题,可以私信我,让我们携手共进,共创辉煌。 路虽远,行则将至;事虽难,做则必成。只要有愚公移山的志气、滴水穿石的毅力,脚踏实地,埋头苦干,积跬

    2024年02月16日
    浏览(23)
  • 元启发式算法库 MEALPY 初体验-遗传算法为例

    官网: MealPY官网 开源许可: (GPL) V3 MEALPY (MEta-heuristic ALgorithms in PYthon) 是一个提供最新自然启发式元启发算法的Python模块,它是最大的此类Python模块之一。这些算法模仿自然界中的成功过程,包括生物系统以及物理和化学过程。mealPy 的目标是免费向所有人分享元启发领域的知识

    2024年04月11日
    浏览(32)
  • 数学启发式

    优化求解器 | Gurobi 数学启发式算法:参数类型与案例实现 数学启发式算法 | 可行性泵 (Feasibility Pump)算法精讲:一份让您满意的【理论介绍+编程实现+数值实验】学习笔记(Python+Gurobi实现) 大佬到底是大佬!这些资料太适合我这种没基础的人了! 数学启发式(Mathematical Heurist

    2024年02月04日
    浏览(25)
  • 【图论】树上启发式合并

    本篇博客参考: Oi Wiki 树上启发式合并 算法学习笔记(86): 树上启发式合并 首先,什么是 启发式合并 ? 有人将其称为“优雅的暴力”,启发式合并就是在合并两个部分的时候,将内容少的部分合并至内容多的部分,减少合并的操作时间 树上启发式合并(dsu on tree) 可以被用

    2024年04月15日
    浏览(41)
  • 树上启发式合并(dsu on tree)

    dsu on tree dsu text{dsu} dsu 一般指 disjoint set union text{disjoint set union} disjoint set union ,即并查集。 dsu on tree text{dsu on tree} dsu on tree 指树上合并与查询操作,但它的实现和普通的并查集并无关联,两者的共同点仅仅在于都能合并集合和查询而已。 dsu on tree text{dsu on tree} d

    2024年02月16日
    浏览(31)
  • 【论文阅读】聚集多个启发式信号作为监督用于无监督作文自动评分

    本文提出一个新的无监督的AES方法ULRA,它不需要真实的作文分数标签进行训练; ULRA的核心思想是使用多个启发式的质量信号作为伪标准答案,然后通过学习这些质量信号的聚合来训练神经自动评分模型。 为了将这些不一致的质量信号聚合为一个统一的监督信号,我们将自动

    2024年02月16日
    浏览(27)
  • 【无码专区1】简单路径的第二大边权(启发式合并+最小生成树)

    只有std,没有自我实现,所以叫做无码专区 description 给一张无向图,多次询问,每次询问两个点之间所有简单路径(不重复经过点)中边权第二大(不是严格第二大)的权值的最小值。 数据范围: 1 0 5 10^5 1 0 5 级别 我的想法 前 50 % 50% 5 0 % 的数据 q , n ≤ 1 0 3 , m ≤ 2 × 1 0

    2024年02月08日
    浏览(26)
  • 如何进行测试分析与设计-HTSM启发式测试策略模型 | 京东云技术团队

    测试,没有分析与设计就失去了灵魂; 测试人员在编写用例之前,该如何进行测试分析与设计呢?上次在《测试的底层逻辑》中讲到了【输入输出测试模型】,还讲到了【2W+1H测试分析法】,但2W1H分析法是初步的分析方法,具体在测试中如何落地,还需要更细的设计。 今天

    2024年02月05日
    浏览(36)
  • Codeforces Round 890 (Div. 2) D. More Wrong(交互题 贪心/启发式 补写法)

    题目 t(t=100)组样例,长为n(n=2000)的序列 交互题,每次你可以询问一个区间[l,r]的逆序对数,代价是 要在的代价内问出最大元素的位置,输出其位置 思路来源 neal Codeforces Round 890 (Div. 2) supported by Constructor Institute D (交互+分治) 附加强 - 知乎 题解 赛中开题顺序大失败没看这个

    2024年02月14日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包