新Goal Filter机制

本文最后更新于 2025年10月23日 晚上

老Goal Filter机制的问题

老的Goal Filter机制中存在一个问题。

考虑这个Deliver场景:两个相互连接的房间r1,r2。两个代理a,b。两个物品i,j。代理们的目标分别是:

Ga={Bahold(a,i)=0,BaBbhold(a,i)=1}Gb={Bbhold(b,j)=0,BbBahold(b,j)=1}G_a = \{B_ahold(a,i)=0, B_aB_bhold(a,i)=1\}\\ G_b = \{B_bhold(b,j)=0, B_bB_ahold(b,j)=1\}

在问题的一开始,两个代理和两个物品都在同一个房间r1,并且代理都没有拿任何东西。

对于这个问题,最优解是5步:

a:pick(a,i)b:pick(b,j)a:move_rightb:drop(b,j)a:drop(a,i)a: pick(a,i) \rightarrow b:pick(b,j) \rightarrow a:move\_right \rightarrow b: drop(b,j) \rightarrow a:drop(a,i)

在老的Goal Filter机制中,能够正常地得到前两步,第三步实际上规划过程也没有错,此时aa可以选择stay或者move_right,这两者都不会对结果产生什么影响。

老的Goal Filter机制中,出现问题的情况是两个代理不在同一个房间,且其中一个代理此时做了drop行为,完成了自己的目标。我们这里假设b做了drop行为,完成了自己的目标。

一般来说,在此之前,a认为b有如下可能的目标:

1:Bbhold(b,j)=1, BbBahold(b,j)=02:Bbhold(b,j)=0, BbBahold(b,j)=11: B_b hold(b,j)=1,\ B_bB_a hold(b,j) = 0\\ 2: B_b hold(b,j)=0,\ B_bB_a hold(b,j) = 1

在a的信念中,他依然认为hold(b,j)=1为真。b在drop了之后完成了自己的目标并亮起signal,此时a会察觉到这个signal,因此变更自己Filter goal的策略。简单来说,a会去看在BaBbB_aB_b中是否存在hold(b,j)=1hold(b,j)=1hold(b,j)=0hold(b,j)=0来判断目标集合1和2中的第一个目标是否成立。结果是2不成立,所以a会把2过滤掉(此时已经出了问题)。另外,a也会去看在BaBbBaB_aB_bB_a中是否存在hold(b,j)=1hold(b,j)=1hold(b,j)=0hold(b,j)=0来判断两个集合中的第二个目标是否成立。结果1不成立,所以a也会把1过滤掉。结果就是在a看来在自己的直接信念中没有任何目标集合是成立的。

我在算法中把出现“找不到合理目标”的情况给做了处理,之前做的就是单纯的在找不到合理目标的时候就不去过滤目标,以避免代理认为没有任何可能的目标集合。然后这个Filter问题,在这个模型问题中吃了亏。

实际上,另外一个问题是,a在b drop之后,本地做规划时,a会认为stay比drop好(其实这时候drop就可以完成整个任务了)。这发生的主要原因是在假设目标1中有两个一样长的,以stay开头的最优行为序列。之前会因为出现了两个最优序列而将其全部算进最终结果中,而假设目标2中只有一条以drop开头的最优序列。最后得到的结果是stay出现了两次,drop出现了1次。然后又因为a和b不在同一个房间,导致a无法更新对b的行为经验。因此a不论如何都会一直选择stay,从而造成deadlock。

我昨天说这个问题可以简单地将在同一个规划环境(同一个虚拟世界,同一组假设目标)中出现的复数个相同的开头行为记一次。也就是将假设目标1中出现两次的stay开头序列记为1次,以确保不会因为这种莫名的dominate行为导致deadlock。然后开会的时候胡博士又说了这样是合理的,但是这并没有解决这个问题的根本,所以我又想了一个Filter Goal的改进方案。

Filter Goal改进方案

改进方案并没有对原来的方案做任何改动,它只是一个在那之后进行的二次过滤方法。这个过滤只会在代理发现另一个代理的goal completion信号发生改变时触发,不论是关闭了signal还是打开了signal,都用的同一套逻辑。

这个方法的motivation是,代理信号发生改变,说明代理的某些或某个与goal相关的信念状态发生了改变。因此其他代理只需要对在自己的认知范围之外,在自己没有察觉到的情况下能够发生改变的状态进行枚举,并且剔除那些保留原来状态的目标集即可。

我们说回之前讲的问题例子。b在drop之后,他的signal发生了改变。a不需要考虑是关闭了signal还是打开了signal,它都会在filter goal时增加改进方案中的步骤。

在a的jp认知中,与goal有关的状态有{hold(b,j)=1,hold(a,i)=1}fa(wn)[n]\{hold(b,j)=1, hold(a,i)=1\} \subset f_a(\vec{w_n})[n]。在a的观察状态中,有{hold(a,i)=1}Oa(w)\{hold(a,i)=1\}\subset O_a(w)。这意味着,此时,虽然a有对hold(b,j)hold(b,j)状态的信念,但是却没有实际观察到这个状态的真实值。因此,a将其视为潜在变化量。

由于a知道b完成了任务,因此在a的概念中,潜在变化量一定需要是有所变化才行,因此a会基于这个信息来假设现在世界中可能的状态。这里列一下a对当前世界的jp信念状态和a在通过推理之后假设现在世界中可能的状态。

jpwa=fa(wn)[n]={at(a)=r2, at(b)=r1, hold(a,i)=1, hold(b,j)=1, holding..., connect...}jpwa={at(a)=r2, at(b)=r1, hold(a,i)=1, hold(b,j)=0, holding..., connect...}jpw_a = f_a(\vec{w_n})[n] = \{at(a)=r2,\ at(b)=r1,\ hold(a,i)=1,\ hold(b,j)=1,\ holding...,\ connect...\}\\ jpw_a' = \{at(a)=r2,\ at(b)=r1,\ hold(a,i)=1,\ hold(b,j)=0,\ holding...,\ connect...\}

jpwajpw'_a中可能会出现有冲突状态,比如hold(b,j)=0hold(b,j)=0holding(b)=1holding(b)=1同时出现,但这对生成与goal相关的jp状态不会产生影响(逻辑上来说)。

在此之后,我的目的是让a基于这个假设状态来生成b的jp信念,以得到对应的Bb,BbBaB_b, B_bB_a一类的状态内容。具体方法是,假如现在要生成BbB_b

fb(wn+1)=[w1,w2,,wn+1]for wn is the real history worlds:wn+1=fa(wn)+jpwaf_b(\vec{w_{n+1}'}) = [w''_1, w''_2, \dots, w''_{n+1}]\\ \text{for } \vec{w_n} \text{ is the real history worlds:}\\ \vec{w'_{n+1}} = f_a(\vec{w_n}) + jpw'_a

在经过假设状态处理之后,a认为BbB_b中存在的状态为pwn+1p \in w''_{n+1}。然后根据这个来判断每一个假设目标是否成立。

比如说,对于之前的问题,把jpwajpw_a'加入到fa(wn)f_a(\vec{w_n})后,我们有wn+1\vec{w'_{n+1}},然后:

Bb=fb(wn+1)={,hold(a,i)=1,hold(b,j)=0,}BbBa=fa(fb(wn+1))={,hold(a,i)=1,hold(b,j)=1,}B_b = f_b(\vec{w'_{n+1}}) = \{\dots, hold(a,i)=1, hold(b,j)=0,\dots\}\\ B_bB_a = f_a(f_b(\vec{w'_{n+1}})) = \{\dots, hold(a,i)=1, hold(b,j)=1,\dots\}

在旧的假设目标1,2中,只有2成立,因此a会把1过滤掉。最后得到了正确的唯一内容。

这个方法同样可以用在b上,这个问题中,使用旧的filter goal方案时,b对a可能的goal信念也会有同样的问题。背景条件是a,b不在同一个房间,b正拿着j,a做了drop(i)动作让自己的signal发生改变。这里列一下此时b认为a可能的goal:

1:{Bahold(i,a)=0, Bahold(j,b)=1}2:{Bahold(i,a)=0, BaBbhold(j,b)=1}3:{Bahold(j,b)=1, BaBbhold(i,a)=0}4:{Bahold(i,a)=1, BaBbhold(i,a)=0}5:{BaBbhold(i,a)=0, BaBbhold(j,b)=1}6:{Bahold(i,a)=0, BaBbhold(i,a)=1}1: \{B_a hold(i,a)=0,\ B_a h old(j,b)=1\}\\ 2: \{B_a hold(i,a)=0,\ B_aB_b hold(j,b)=1\}\\ 3: \{B_a hold(j,b)=1,\ B_aB_b hold(i,a)=0\}\\ 4: \{B_a hold(i,a)=1,\ B_aB_b hold(i,a)=0\}\\ 5: \{B_aB_b hold(i,a)=0,\ B_aB_b hold(j,b)=1\}\\ 6: \{B_a hold(i,a)=0,\ B_aB_b hold(i,a)=1\}\\

没做改变的Goal Filter中,正常的BbBaB_bB_a中存在的状态有hold(i,a)=1,hold(j,b)=1hold(i,a)=1, hold(j,b)=1,对应的是Bahold(i,a)=1,Bahold(j,b)=1B_ahold(i,a)=1, B_ahold(j,b)=1,因此1,2,6会被筛掉。BaBbBaB_aB_bB_a中存在的状态有hold(i,a)=1,hold(j,b)=1hold(i,a)=1,hold(j,b)=1,因此3,4,5会被筛掉,最后结果就是全部筛掉,b认为没有任何可能的goal。采取同样的措施(找不到合理目标的时候就不去过滤目标),这一流程不会被执行。

在改进方案中,由于a的一个行为让自己的signal产生了变化,b此时可以执行这个补充方案。简单推理一下,得到

jpwb={,hold(i,a)=0,}jpw_b' = \{\dots,hold(i,a)=0,\dots\}

这个里面没有hold(j,b)hold(j,b)状态的原因是bb现在能够准确地观察到这个状态,因此这不是一个潜在变化量。

jpwbjpw'_b加入到fb(wn)f_b(\vec{w_n})后,我们有wn+1\vec{w'_{n+1}},然后:

Ba=fb(wn+1)={, hold(a,i)=0, hold(b,j)=1,}BaBb=fa(fb(wn+1))={, hold(a,i)=1, hold(b,j)=1,}B_a = f_b(\vec{w'_{n+1}}) = \{\dots,\ hold(a,i)=0,\ hold(b,j)=1,\dots\}\\ B_aB_b = f_a(f_b(\vec{w'_{n+1}})) = \{\dots,\ hold(a,i)=1,\ hold(b,j)=1,\dots\}

以此,识别出可能的goals有1,2,6,便只会保留这三个。其余的3,4,5则会被筛除。


新Goal Filter机制
http://example.com/2025/10/23/Decentralized-Epistemic-Planning/新Goal Filter机制/
作者
Clain Chen
发布于
2025年10月23日
许可协议