Prioritized-LRTA*
- 一、算法原理
- 二、举个栗子!
- 参考
一、算法原理
原文点这儿!
优先级扫描(Prioritized Sweeping)是一种用于强化学习问题的算法,它根据优先级排序的状态更新执行异步动态规划(Moore & Atkeson 1993) 1。如果一个状态的值函数有很大的潜在变化,则它具有很高的优先级。为了保持算法的实时保证,每个计划阶段都可以进行最多的β更新,并且只有潜在更新大于的状态才会被添加到队列中。优先级扫描被证明比q-学习和Dyna-PI更有经验效率(Moore & Atkeson 1993)。
上边是原文翻译过来的,主要就是说这个算法是按优先级给节点进行更新的,这个节点的值潜在变化越大优先级就越高,“潜在变化: Δ \Delta Δ” 在下文程序二中给出了具体的计算方式。
下边才到了算法重点哈,下文的结构是先笼统讲一下P-LRTA*算法的流程,流程中用到的具体的三个函数伪代码将在流程下边进行详细介绍:
P-LRTA*(Prioritized简称P-)分为两个阶段,一个是规划阶段(planning phase),一个是动作阶段(action phase),我把具体操作步骤加粗了,未加粗的是各种算法特性之类的。
-
规划阶段
- P-LRTA*仅通过考虑邻近节点来更新当前节点(函数2:StateUpdate(s)),然后把已更新状态的节点的近邻节点加入队列,优先级是根据 Δ \Delta Δ 的大小。
- 如果队列满了,就把队列中优先级低的移走(函数3:AddToQueue(s, Δ \Delta Δ))。
- P-LRTA* 和 LRTA* 一样不需要对地图的初始信息,并且对不可见区域采用自由空间假设。
- 当队列大小为0时,P-LRTA等同于LRTA。
- 队列有明确的大小,这也严格保证了有限内存的使用。
- 当更新完当前节点的 h 值后,开始优先级更新
- 从队列顶部取最多 PS_MAX_UPDATE 个节点并使用函数1:Prioritized-LRTA(s) 进行更新
- 那些队列中没取完的节点下个规划阶段再用,这也产生了一个不连续的搜索空间,但这是有益的,因为
-
动作阶段
- Agent 从 s 节点移动到拥有最小 f ( s , s ′ ) f(s, s') f(s,s′) 的 s’ 节点, 其中 f ( s , s ′ ) = c ( s , s ′ ) + h ( s ′ ) f(s, s')=c(s, s')+h(s') f(s,s′)=c(s,s′)+h(s′), c ( s , s ′ ) c(s, s') c(s,s′)是节点s和s‘ 直接的距离,h(s’)是节点s’的启发式值。
下面介绍下用到的三个函数:
- 函数 1
函数1应该是主体函数了,输入就是 节点s,先判断s是不是目标节点,如果不是,就进入循环,先调用函数2更新当前节点的 h 值,然后它有个最大更新数,前面提到了,主要没超过这个更新次数并且队列里还有节点,就依次取出队列顶部的节点,只要不是目标节点,就更新h值,最后向 f 值最小的节点移动。 加粗部分对应上边加粗的步骤
-
函数 2
函数2用于更新节点h值,先判断s是不是目标节点,然后计算最低 f(s, s’),然后计算 Δ \Delta Δ, Δ \Delta Δ就是用来衡量优先级的, Δ \Delta Δ越大优先级越高。如果 Δ \Delta Δ大于0,就把节点s的所有临近节点加入队列,然后更新当前节点 s的启发式值 h -
函数 3
函数3 用于把节点加入队列,队列要是没满并且节点s不在里面,就加进入,否则,把优先级低的移走,再把s加入
二、举个栗子!
如上图a所示,有A, B, C, D和Goal五个节点,从最远的D开始,目标是Goal,其启发式值总是为0,每个相邻节点见的移动代价 c = 1,每条路径都是双向的,圈内的值是当前该节点的启发式值 h,上边的方格表示队列。
以下是对该算法的具体应用例子步骤:
-
首先执行 函数1 Prioritized-LRTA*(D), 更新D,进入StateUpdate(D),计算最小f,f(D, C)=f(D, B)=1+1=2, Δ = 2 − 1 > 0 \Delta=2-1>0 Δ=2−1>0 , 把 D 的所有临近节点即B, C加入队列,其优先级都是1写在了下标处,更新 h(D)=2,如图b所示
-
继续运行函数1,此时队列非空,依次置行取出队列顶部节点,先取B,调用StateUpdate(B),f(B, A)=1+1=2, Δ = 2 − 1 = 1 > 0 \Delta=2-1=1>0 Δ=2−1=1>0,把B相邻节点A,D加入队列,其优先级也都是1,更新h(B)=2, 对C同理,由于A,D已在队列中了,最终结果如图c所示
-
从队列取出A,最小 f ( A , G o a l ) = 1 + 0 = 1 , f(A,Goal)=1+0=1, f(A,Goal)=1+0=1, Δ = 1 − 1 = 0 \Delta=1-1=0 Δ=1−1=0,所以h(A)不更新,也不将临近节点加入队列。
-
从队列取出D,最小 f ( D , B ) = f ( D , C ) = 1 + 2 = 3 , Δ = 3 − 2 = 1 > 0 f(D, B)=f(D,C)=1+2=3, \Delta=3-2=1>0 f(D,B)=f(D,C)=1+2=3,Δ=3−2=1>0,将B, C加入队列,优先级都是1,更新 h ( D ) = f ( D , B ) = f ( D , C ) = 3 h(D)=f(D, B)=f(D,C)=3 h(D)=f(D,B)=f(D,C)=3, 如图d所示
-
从队列中取出B,最小 f ( B , A ) = 2 , Δ = 0 f(B, A)=2, \Delta=0 f(B,A)=2,Δ=0,无事发生,C同理
-
队列空了,跳出循环,找到最小 f ( D , B ) = f ( D , C ) = 1 + 3 = 4 f(D, B)=f(D, C)=1+3=4 f(D,B)=f(D,C)=1+3=4,节点从D移动到B或者C。
参考
- [1] Moore, A., and Atkeson, C. 1993. Prioritized sweeping: Reinforcement learning with less data and less time. Machine Learning 13:103–130.