[AI] LRTA*ls(k)搜索算法

news2024/11/30 12:34:10

LRTA*LS[K]

论文在这里!

一、LRTA*(K)算法的缺点

LRTA*(K)算法每次要更新队列Q里的state,但有三点缺陷:

  • 如果state y进入 Q,但重考虑后 h(y) 不会改变,这是一种浪费时间的努力

  • 可能有的state进入Q不止一次,要经过多次更新才能打到最终值

  • 进入Q的state的顺序以及K的取值都会影响最终结果

下面举个栗子说明:

在这里插入图片描述
如图(i), a, b, c, d是state,最左侧那一列是迭代次数,state下边的数字是 h 值,每次移动 g = 1,后继按左-右的顺序改变。

下边是每次迭代运行的具体步骤(一定注意是左右的顺序进入Q,然后每次迭代就是从Q里按顺序取state):

  • 第零次迭代:当前state是d,迭代0那一行的数字是初始 h 值,h(d)一开始是2,得先考虑d,把d加入Q,Q = {d},这就是为什么后文说d进Q两次,这里还有一次他没写出来!

  • 第一次迭代:h(d)=4, Q={c} -----这里就是,d改变后,考虑左边的c,右边没东西

  • 第二次迭代:h( c ) = 5, Q={b, d} -----这里是第一次移动,移动到c点,然后考虑c左右的state{b, d},放入Q

  • 第三次迭代:h(b)不变 ----这里并没有移动,agent还在c,b是从Q里取出来的,看它要不要更新,下一个就取d出来。

  • 第四次迭代:h(d) = 6, Q = {c} -----你看我说要取d出来看看要不要更新吧?d需要更新,如果d更新了,那下一个就要考虑d的后继了,那就是c,c就先进入Q

  • 第五次迭代:h( c )不变 ----然后把c从Q取出来,c不变

  • 然后没有需要更新的就停下了。

在这个过程中,c和d进入Q两次,d更新了两次,c只更新了一次。整个流程,一共就走了一步,走之前的整个Q={d}, 走一步移动到c后,Q = {c, b, d, c}。

然后文中说,如果K=3,且还是左右顺序进入Q,那么进入Q的顺序就是d, c, b,就如图 (ii) 所示。我不理解,第一个 d 是第一步呀,为啥要加在这里?不加d的话,走了第一步到C,Q={c, b, d},我觉得和上边结果一样的呀?不理解。。。

二、 L R T A ∗ L S ( k ) LRTA*_{LS}(k) LRTALS(k)算法

算法概览: L R T A ∗ L S ( k ) LRTA*_{LS}(k) LRTALS(k) 算法把states分为内部states(用集合 I ∈ X I \in X IX 表示, X是所有state的集合)和边缘states (用集合 F ∈ X F \in X FX 表示), I ∩ F = ∅ I \cap F=\emptyset IF= L R T A ∗ L S ( k ) LRTA*_{LS}(k) LRTALS(k) 选择当前状态的局部空间并更新其内部state, 内部states只更新一次值,内部states的数量上限为K(集合 I 的长度最高为K),该算法继承 LRTA* 和 LRTA*(K) 的良好属性。

1、选择局部空间

步骤如下:

  • I = ∅ I = \emptyset I=, Q = {x| x是当前state}

  • 循环直到 Q 空了或者 ∣ I ∣ = = K |I| == K I==K:
    从Q中提取state w, 如果 w 就是目标,就跳出循环。否则,检查是否存在 h ( w ) < m i n v ∈ { S u c c ( w ) − I } h ( v ) + g ( w , v ) h(w) < min_{v \in \{Succ(w)-I\}}h(v)+g(w, v) h(w)<minv{Succ(w)I}h(v)+g(w,v)
    其中 h ( w ) h(w) h(w)是state w的启发值, { S u c c ( w ) − I } \{Succ(w)-I\} {Succ(w)I}表示w的所有后继state S u c c ( w ) Succ(w) Succ(w) 减去 I 集合中的交集,剩下的不在 I 中的后继state,g(w, v)表示从state w 到 v 的路程代价。
    如果满足上式(文中称之为“更新条件”),就把 w 加入 I,v 加入 Q

  • 把 I 中所有state的不在I中的后继state加入边缘集合 F

下面是一个例子说明(我觉额的原文说的好像不太对呢,虽然最后结果对,但中间过程和他上边步骤里写的不太一样啊,而且一点都没提Q更新的事儿,下面是我按他的步骤+我自己理解写的,各位有兴趣可以去看看原文这部分)

在这里插入图片描述
在这里插入图片描述

如上图所示,state之间的路程代价 g = 1,

  • 从 d 点开始,那么一开始 Q = d , I = ∅ Q={d}, I = \empty Q=d,I=

  • 然后开始进入第二步的循环,从Q中取出d,判断 h ( d ) < m i n v ∈ { S u c c ( w ) − I } h ( v ) + g ( w , v ) h(d) < min_{v \in \{Succ(w)-I\}}h(v)+g(w, v) h(d)<minv{Succ(w)I}h(v)+g(w,v),这里的 v 就是 d 的后继,只有 c,所以 2 < 3 + 1 2 < 3+1 2<3+1 ,条件成立,把 d 加入 I,c 加入 Q

  • 把 c 从 Q 中取出,c的后继有俩,b和d,其中d已经在 I 中了,所以只看b就行了, 3 < 4 + 1 3<4+1 3<4+1也成立,那么把 c 加入 I,现在 I = {c, d},把 b 加入 Q

  • 把 b 从Q中取出,b也有俩后继,a和c,因为 c 在 I 中了,所以只考虑 a, 4 = 3 + 1 4 = 3+1 4=3+1,条件不成立了,就不能把 b 加入 I, 同样 a 也不能进入 Q

  • a 没有进入 Q,那么 Q 就空了,循环终止!

  • 此时我们得到了内部state的集合 I = { c , d } I = \{c, d\} I={c,d} , 然后把c,d的不在 I 的后继加入边缘集合F={b}

  • 程序终止!

2、更新局部空间

步骤如下:

当 内部集合 I 非空时置行下列循环:

  • 计算连接state对 ( i , f ) , i ∈ I , f ∈ F , f ∈ S u c c ( i ) (i, f), i \in I, f \in F, f \in Succ(i) (i,f),iI,fF,fSucc(i)

  • 更新 h ( i ) = g ( i , f ) + h ( f ) h(i) = g(i, f) + h(f) h(i)=g(i,f)+h(f)

  • i i i I I I 中移除,把 i i i 加入 F F F

在这里插入图片描述
还是上边那个例子,我们第一部分已经计算好了局部空间 I = c , d , F = b I = {c, d}, F={b} I=c,d,F=b,开始更新局部空间

  • I = c , d I = {c, d} I=c,d,非空,此时先进入while循环

  • 由于F里只有b,满足条件的对儿就一对儿,(c, b)

  • 开始更新 h ( c ) = g ( c , b ) + h ( b ) = 1 + 4 = 5 h(c) = g(c, b) + h(b) = 1+4=5 h(c)=g(c,b)+h(b)=1+4=5

  • 把 c 从 I 中移除,把 c 加入 F

  • 此时 I={d},非空,继续循环

  • 此时 F={c},那么就只有一对儿 (d, c)

  • 开始更新 h ( d ) = g ( d , c ) + h ( c ) = 1 + 5 = 6 h(d) = g(d, c) + h(c) = 1+5=6 h(d)=g(d,c)+h(c)=1+5=6

  • 将 d 从 I 中移除,并加入 F

  • 此时 I 空了,跳出循环

  • 程序结束!

感觉有点东西哦兄弟们,喜欢就一键三连吧,有任何问题或者见解也请评论区留言!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/41191.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【网络工程】6、防火墙介绍及配置实操

接上篇《5、路由器介绍及配置实操》 之前我们讲解了网络设备路由器的介绍&#xff0c;以及完成了路由器的相关配置实操。本篇我们来讲解防火墙的基础知识以及相应的实操案例。 一、什么是防火墙&#xff1f; 防火墙是一个安全产品&#xff0c;它可以把安全的内网和不安全的外网…

【前端】jQuery-概述+基本使用+常用API

目录 一、jQuery概述 1.1JavaScript库 1.2jQuery的概念 二、jQuery的基本使用 2.1jQuery的下载 2.2jQuery的使用步骤 2.3jQuery的入口函数 2.4jQuery的顶级对象$ 2.5jQuery对象和DOM对象 三、jQuery常用API 3.1jQuery选择器 3.1.1jQuery基础选择器 3.1.2jQuery层级选…

Linux下C语言实现HTTP文件服务器和TCP协议实现网络数据传输

在实际开发中经常用到web框架&#xff0c;比如Servlet&#xff0c;SpringBoot等&#xff0c;这些开发框架提高了我们的开发效率&#xff0c;节省了开发时间。但是这会令我们技术人员处于浮云之上&#xff0c;看不到其本质。说实话&#xff0c;Java语言那么流行&#xff0c;其本…

springboot-自动配置

一、简介 在搭建springboot应用的时候&#xff0c;无需像之前spring的时候&#xff0c;要一堆繁琐的配置文件之类的。一个main的方法&#xff0c;就能把springboot的项目run起来。和其他框架整合也是非常的简单&#xff0c;只需要使用到Enablexxxxx注解就可以搞起来。 二、原理…

外卖项目09---Redis了解

目录 Redis了解 141 一、Redis入门 143 1.1Redis简介 143 1.2Redis下载与安装 143 1.3Redis入门---Redis服务启动 144 1.3.1Redis服务启动 1.3.2设置密码远程连接 二、Redis数据类型 145 三、Redis常用命令 146 3.1Redis常用命令---字符串string操纵命令 3.2Redis…

现代密码学导论-21-分组密码

目录 3.6.3分组密码及其操作模式 ECB(Electronic Code Book) 电码本模式 CBC(Cipher Block Mode) 密文分组链接方式 THEOREM 3.32 CBC模式的CPA安全 连锁CBC模式 OFB(Output Feedback Mode) 输出反馈模式 CTR(Counter) 计数器模式 THEOREM 3.33 CTR多明文PCA安全 THE…

C语言学习之路(基础篇)—— 复合类型(自定义类型)

说明&#xff1a;该篇博客是博主一字一码编写的&#xff0c;实属不易&#xff0c;请尊重原创&#xff0c;谢谢大家&#xff01; 结构体 1) 概述 数组&#xff1a;描述一组具有相同类型数据的有序集合&#xff0c;用于处理大量相同类型的数据运算。 结构体&#xff1a;将多个…

工具分享:Springboot+Netty+Xterm搭建一个网页版的SSH终端

一. 简述 搭建一个web ssh&#xff0c;主要是借助websocket和xterm&#xff0c;可以实现一个类似于xshell的效果&#xff0c;如图&#xff1a; 二. 技术栈 这里使用了springboot、netty、jsch、react、Ts,xterm。 这里我用了springboot和netty实现了websocket&#xff0c;js…

稳了,我用 Python 可视化分析和预测了 2022 年 FIFA 世界杯

许多人称足球为 “不可预测的游戏”&#xff0c;因为一场足球比赛有太多不同的因素可以改变最后的比分。 预测一场比赛的最终比分或赢家确实是很难的&#xff0c;但在预测一项比赛的赢家时就不是这样了。在过去的5年中&#xff0c;Bayern Munich 赢得了所有的德甲联赛&#xf…

如何发布一个属于自己的 npm 包

如何发布一个属于自己的 npm 包 start 在日常的工作中&#xff0c;我们会接触很多 npm 包。 例如&#xff1a; npm install jquerynpm install vue/clinpm install axios# ... 等等有时候会想到&#xff0c;构建一个属于自己的 npm 包&#xff0c;应该超级酷吧&#xff1f; …

zabbix基础环境部署

目录 一、环境准备 二、部署LNMP 1、安装Nginx及其依赖包 2、修改nginx配置 3、测试页面 三、部署zabbix服务端 1、下载zabbix 2、安装源码zabbix 3、为zabbix创建数据库与数据库账户 4、搭建Zabbix页面 4.1、第1步 Check of pre-requisites 4.2、第2步 Configure D…

Python代码的编写运行方式

Python代码的编写运行方式介绍 python官方运行环境可到网站https://www.python.org/downloads/找到合适版本下载安装。 安装比较容易&#xff0c;特别强调&#xff0c;安装过程建议勾选“Add Python to PATH”&#xff08;将Python添加到PATH环境变量&#xff09;【注1】&…

Docker安装Minio

寻找Minio镜像 Docker Hub 查找官方镜像 下载Minio镜像 下载最新版Minio镜像 docker pull minio/minio等同于 docker pull minio/minio:latest下载指定版本的Minio镜像 docker pull minio/minio:RELEASE.2022-11-26T22-43-32Z.fips检查当前所有Docker下载的镜像 docker …

第六章TCP/IP——网络传输硬件设备

个人简介&#xff1a;云计算网络运维专业人员&#xff0c;了解运维知识&#xff0c;掌握TCP/IP协议&#xff0c;每天分享网络运维知识与技能。个人爱好: 编程&#xff0c;打篮球&#xff0c;计算机知识个人名言&#xff1a;海不辞水&#xff0c;故能成其大&#xff1b;山不辞石…

Linux进程通信之消息队列

目录 1.消息队列的原理&#xff1a; 2.消息队列的接口&#xff1a; &#xff08;1&#xff09;创建消息队列 &#xff08;2&#xff09;向消息队列发送消息 &#xff08;3&#xff09;接收消息 &#xff08;4&#xff09;操作消息队列的接口 1.消息队列的原理&#xff1a; 消…

docker 安装 Heimdall 导航页

前言 随着群晖中使用的功能越来越多&#xff0c;各种端口太多容易忘&#xff0c;所以就有了使用导航页的想法&#xff08;使用收藏夹的朋友除外&#xff09;。群晖也有自带的WEB套件管理&#xff0c;不过个人感觉相对麻烦&#xff0c;使用 Heimdall 导航页可以设置密码登录&am…

【数字信号调制】16QAM信号调制解调【含Matlab源码 2050期】

⛄一、QAM调制与解调&#xff08;附实验题目说明&#xff09; 1 引 言 数字振幅调制、数字频率调制和数字相位调制是数字调制的基础,然而,这3种数字调制方式都存在不足之处。如频谱利用率低、抗多径衰落能力差、功率谱衰减慢、带外辐射严重等。为了改善这些不足,几十年来人们不…

yocto machine class解析之st-partitions-image

yocto machine class解析之st-partitions-image stm32mp157 yocto的meta-st-stm32mp layer中提供了几个class,后续几篇文章重点分析这些class文件&#xff1a; 第一篇就从st-partitions-image.bbclass 开始&#xff0c;st所有创建image的bb文件都会引用st-partitions-image&am…

「UWB」精准定位黑科技,开启座舱雷达新蓝海

基于厘米级定位、超低功率、强抗干扰、超大容量等技术特点&#xff0c;UWB&#xff08;超宽带&#xff09;技术在消费电子、智能汽车等领域的应用前景被赋予厚望。 值得一提的是&#xff0c;利用UWB雷达还可实现舱内活体检测、脚踢尾箱等&#xff0c;这意味着新一轮座舱感知革…

【Vue】ref引用,插槽

一、ref 什么是ref&#xff1f; ref用来辅助开发者在不依赖于jQuery 的情况下&#xff0c;获取DOM元素或组件的引用。 每个vue的组件实例上&#xff0c;都包含一个$refs对象&#xff0c;里面存储着对应的DOM元素或组件的引用。默认情况下&#xff0c;组件的$refs 指向一个空对…