本文最后更新于 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}
在问题的一开始,两个代理和两个物品都在同一个房间r1,并且代理都没有拿任何东西。
对于这个问题,最优解是5步:
a:pick(a,i)→b:pick(b,j)→a:move_right→b:drop(b,j)→a:drop(a,i)
在老的Goal Filter机制中,能够正常地得到前两步,第三步实际上规划过程也没有错,此时a可以选择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)=1
在a的信念中,他依然认为hold(b,j)=1为真。b在drop了之后完成了自己的目标并亮起signal,此时a会察觉到这个signal,因此变更自己Filter goal的策略。简单来说,a会去看在BaBb中是否存在hold(b,j)=1 或 hold(b,j)=0来判断目标集合1和2中的第一个目标是否成立。结果是2不成立,所以a会把2过滤掉(此时已经出了问题)。另外,a也会去看在BaBbBa中是否存在hold(b,j)=1或hold(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]。在a的观察状态中,有{hold(a,i)=1}⊂Oa(w)。这意味着,此时,虽然a有对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...}
jpwa′中可能会出现有冲突状态,比如hold(b,j)=0和holding(b)=1同时出现,但这对生成与goal相关的jp状态不会产生影响(逻辑上来说)。
在此之后,我的目的是让a基于这个假设状态来生成b的jp信念,以得到对应的Bb,BbBa一类的状态内容。具体方法是,假如现在要生成Bb:
fb(wn+1′)=[w1′′,w2′′,…,wn+1′′]for wn is the real history worlds:wn+1′=fa(wn)+jpwa′
在经过假设状态处理之后,a认为Bb中存在的状态为p∈wn+1′′。然后根据这个来判断每一个假设目标是否成立。
比如说,对于之前的问题,把jpwa′加入到fa(wn)后,我们有wn+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,…}
在旧的假设目标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}
没做改变的Goal Filter中,正常的BbBa中存在的状态有hold(i,a)=1,hold(j,b)=1,对应的是Bahold(i,a)=1,Bahold(j,b)=1,因此1,2,6会被筛掉。BaBbBa中存在的状态有hold(i,a)=1,hold(j,b)=1,因此3,4,5会被筛掉,最后结果就是全部筛掉,b认为没有任何可能的goal。采取同样的措施(找不到合理目标的时候就不去过滤目标),这一流程不会被执行。
在改进方案中,由于a的一个行为让自己的signal产生了变化,b此时可以执行这个补充方案。简单推理一下,得到
jpwb′={…,hold(i,a)=0,…}
这个里面没有hold(j,b)状态的原因是b现在能够准确地观察到这个状态,因此这不是一个潜在变化量。
把jpwb′加入到fb(wn)后,我们有wn+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,…}
以此,识别出可能的goals有1,2,6,便只会保留这三个。其余的3,4,5则会被筛除。