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

2023-10-26

参考博客:人工智能搜索策略: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 如图所示,估价函数与请用全局择优搜索解决该题。

在这里插入图片描述
图1 八数码难题的全局择优搜索树
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述





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),对于八数码的各个变化不再详细画出。在这里插入图片描述
在这里插入图片描述
在这里插入图片描述





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*算法

2.1 解决八数码难题

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

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

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • Day 3 Mastering the Interface Definition Language (IDL)

    Teach Yourself CORBA In 14 Days Day 3Mastering the Interface Definition Language IDL Overview IDL Ground Rules Case Sens
  • momentJS时间加减处理

    计算最近在使用JavaScript计算时间差的时候 发现很多问题需要处理 在查看momentJS之后 发现非常容易 console log moment format YYYY MM DD HH mm ss 当前时间 console log
  • 基于nodejs的在线跑腿管理系统

    末尾获取源码 开发语言 nodejs 框架 Express 数据库 MySQL5 7 数据库工具 Navicat 11 开发软件 Hbuilder VS code 浏览器 edge 谷歌 目录 一 项目简介 二 系统功能 三 系统项目截图
  • go语言context保存上下文

    contxt保存上下文适合全局参数传递 而普通的参数传递就没必要用context 因为不好维护 关于context具体用法可以参考 https studygolang com articles 23247 fr sidebar packag
  • java函数的定义方法_java函数的定义以及使用方法介绍

    java函数的定义以及使用方法介绍 发布时间 2020 04 24 16 28 40 来源 亿速云 阅读 116 作者 小新 今天小编给大家分享的是java函数的定义以及使用方法介绍 相信很多人都不太了解 为了让大家更加了解java函数 所
  • AJAX&&JSON

    课程笔记Day46 AJAX JSON 综合案例 第一章 AJAX 第01节 基础理论 1 概念说明 1 什么是 AJAX AJAX是一项技术合集 他是由一套技术组合得到的新技术方案 异步请求技术 2 AJAX有什么作用呢 使用Ajax技术
  • C++ 删除文本数据中第一个元素

    由于项目需要删除第一个字符 然后按照相同顶格显示 如下 v 279 268005 37 345402 2 081520 v 280 971985 37 074699 1 353890 v 279 015991 44 888100 1 609
  • 手把手教你搭建国产嵌入式模拟器SkyEye开发环境

    SkyEye介绍 SkyEye是一个开源软件 OpenSource Software 项目 中文名字是 天目 SkyEye的目标是在通用的Linux和Windows平台上实现一个纯软件集成开发环境 模拟常见的嵌入式计算机系统 这里假定 仿真
  • 《编译原理》笔记整理

    编译原理 笔记整理 1 1 编译原理 引论 基本概念 发展 机器语言 汇编语言 高级语言 工具语言 基本概念 翻译程序 把某一种语言程序 称为源语言程序 等价的转换成另一种语言程序 称为目标语言程序 的程序 如 中英互译系统 DBMS语言
  • Java工程师成长之路

    Java工程师成长之路 李颜芯 欢迎大家收看CSDN的视频节目 今天我们的有关话题是Java工程师的成长之路 今天我们请到两位老师 和我们一起探讨这个问题 首先请两位老师作一下自我介绍 李翊 大家好 我是来自于东方标准人才服务有限公司 原来
  • 深度学习安装篇之二:ubuntu18.04+pycharm-2021.3安装

    一 软件下 载 1 申请学生或教师用户 可以免费使用专业版本 有学校的电子邮箱edn or 社区免费版 2 官网下载软件 PyCharm the Python IDE for Professional Developers by JetBr
  • arduino-esp32:LVGL中文字库(通用)

    导航 概述 系统自带中文字库 使用自带中文字库 制作专属字库 使用专属字库 VS模拟器 效果 arduino esp32 效果 小结 概述 标题是arduino esp32只是因为平台是这个 LVGL默认的字库是英文的 当然其字库文件里也有
  • 华为OD机试 Python 【食堂供餐】

    题目 员工食堂现在供应盒饭 我们的目标是让员工不用排队直接取餐 根据过去的取餐统计 我们想知道每单位时间 食堂至少要制作多少盒饭 才能确保每个员工都不用等待 输入 3 14 10 4 5 输出 3 输入 3 这表示在一个特定的时间段内 共有
  • YOLO综述:从YOLOV1到YOLOV8

    YOLO综述 从YOLOV1到YOLOV8 ABSTRACT 1 Introduction 2 YOLO Applications Across Diverse Fields 3 Object Detection Metrics and N
  • nginx报错nginx: [error] open() “/run/nginx.pid” failed (2: No such file or directory)

    nginx error open run nginx pid failed 2 No such file or directory 日期 2018 11 03 来源 Linux公社 作者 醉落红尘 字体 大 中 小 CentOS 7 5下启
  • vue 按钮 权限控制

    vue 按钮 权限控制 前言 在日常项目中 会碰到需要根据后台接口返回的数据 来判断当前用户的操作权限 必须当有删除权限时 就显示删除按钮 没有这个权限时 就不显示或者删除这个按钮 通过查找资料 通过vuex来实现这个功能 步骤 1 定义b
  • PID算法

    比例P 数值固定 不会随着情况调整 增幅器 积分I 比例P过小 增幅器补充 抑制器 微分D 比例P过大 抑制器削减 比例P 偏差量 目标量 传感器 比例P 偏差量 比例P系数 执行量 比例P 积分I 偏差量 目标量 传感器 积分I 积分I
  • 得到课程:冯雪·科学减肥16讲

    发刊词 减肥的动机 是为了健康 更是为了提高你的魅力 提高你的社会竞争力 减肥的实质 是改变生活方式 换一种新的人生 只有跟一群志同道合的人一起走 才能走得更远 最终减肥成功 基本原理 01 终点 三个目标一个都不能少 只要体重 体脂和体型
  • 小样本学习(FSL):Few-shot Learning 综述【模型微调(Fine-tunning)、数据增强、迁移学习(Transfer Learning)】

    分类非常常见 但如果每个类只有几个标注样本 怎么办呢 比如 我们打造了一个智能对话开发平台以赋能第三方开发者来开发各自业务场景中的任务型对话 其中一个重要功能就是对意图进行分类 大量平台用户在创建一个新对话任务时 并没有大量标注数据 每个意
  • 启发式搜索算法:A算法(全局、局部择优算法)+A*算法 解决八数码问题

    文章目录 1 A 算法 1 1 全局择优算法 1 1 1 求解八数码 1 2 局部择优算法 1 2 1 求解八数码 2 A 算法 2 1 解决八数码难题 参考博客 人工智能搜索策略 A 算法 1 A 算法 在图搜索算法中 如果能在搜索的每一