对neutral settings下的epistemic problem的规划逻辑的一个尝试

本文最后更新于 2025年8月27日 凌晨

Policy 决策的基础解决方案

现在,基本的解决方案流程如下:

graph TD

a["基于agent自身对ontic world的认知,生成所有可能的virtual world"] --> b["使用BFS,Centralized地模拟每一个virtual world,并在完成任务时返回action sequence的第一个元素"] 
b --> c["统计所有virtual world的模拟输出,action使用次数最高的为最终policy"] 

virtual world的生成流程如下:

graph TD

a["获取当前agent对于Ontic world的认知世界 epistemic world"] --> b["将epistemic world中的每一个agent的goal设置为当前agent的belief_goals_to_others中的goal"]
b --> c["基于epistemic world,找到所有可能且合理的ontic world"]

Neutral Setting与Cooperative Setting

由于planning的目标是让每个agent都能够完成自己的目标,因此他们是否知道其他agent的目标只能够对模型的policy生成产生一些帮助性的作用,而非绝对的需求。

Cooperative Setting

Cooperative setting在该项目中被认为成如下情况之一:

  • 所有agent的goals也许都不一样,但他们都在初始化时就知道对方的goals是什么。
  • 所有agent的goals都相同,然而这个setting在decentralized problem的情况下不是很合理。

项目中采用的是第一个setting,即会给每个Agent分别分配goals self_goals,然后再初始化的时候让这些agent拥有对于其他agent的goals的信息 blief_goals_to_othersbelief_goals_to_others中的信息只会在生成virtual worlds时使用,用于将goals分配给其他agents。

Neutral Setting

Neutral setting在该项目中被视为:所有agent都不知道对方的goals。

在创建virtual world时,让所有Agent都拥有自己的goal才比较符合常理,然而在bfs算法中,即便agent没有goals也不会出现什么问题,因为在expand action的时候与goals无关。但是也许会让最终的输出结果变得并不准确。

因此,我们最早的解决方案是,列出所有可能的,对其他agent有关的goals,并且分配给belief_goals_to_others。然而,这很容易出现goals冲突问题导致问题无解。而这种无解的问题无法用直观的角度来判断,因此只能在程序模拟的过程中判断bfs无解问题。而这通常对性能会带来极大的开销。

因此,目前也可以考虑当没有对其他agent的goals产生信念时,便不再假设对方的goals。

virtual world中对其他agent的goals的分配方案

为了更好地描写,现在假设只有两个agent: a, b。目前尝试的方法是:

  • a没有其他b的goal信念时:在创建virtual world时,将b的goal设为a的goal,但是要做一些调整

    • 复制a的goals,对a的每一个goals中belief sequence中的第一个元素调整为b。也就是说,如果在a的goal中为$ B_aB…\varphi,那么在分配给b的时候便会是,那么在分配给b的时候便会是B_bB…\varphi$。如果出现了相同连续的belief sequence,则只保留一个。belief sequence在程序中用一个list[str]表示,那么假如修改后的sequence为[b,b,a],那么就会被修改为[b,a]。这里贴一个完整例子:

      • Ga=BaBbBaφGb=BbBbBaφBbBaφG_a = B_aB_bB_a\varphi \rightarrow G'_b = B_bB_bB_a\varphi \rightarrow B_bB_a\varphi

  • a有b的goal信念时,创建virtual world时,则直接将b的goal设为a对b goals的信念。如果有多个不同的信念,则会创建多个virtual world

一个agent 如何对其他agent的goals产生信念

现在每一个agent都会维护一个complete signal,后面简称信号。当信号为true时,代表该agent已经完成了自己的goal。

当然,在这个问题中,agent的信号可以被激活也可以被取消,当他发现自己又没有完成目标时,信号又会被取消。

现在只考虑了agent只能观察到能看见的其他agent当前的信号状态,不会考虑他们以前是什么样的。后续可以考虑也把这个加入进去。

当一个agent观察到有另一个agent的信号为true时,它会在能够观察到的agent的状态中枚举出所有可能的goals组合,并且将其全部假如到自己对那个agent的belief goals中。

这个方法有诸多问题需要考虑,比如说他们的goals如果是对其他人的信念,该如何处理?

这个问题似乎没有什么很好的解决方案,我们可以像一个辅助方案来减轻这个问题带来的影响。

现在,系统也会维护在每一个时间戳上agent做出的行为,由于一个时间戳上只能有一个agent行动,所以用于维护的是一个history_action: list[tuple[agent_name, action]],这个列表长度应该与history_world: list[list[Function]] 等长。两个列表综合来看就可以理解为agent_name在某个world下选择了action行为。其他agent是否能够观察到这个行为,取决于observation_function中的定义。比如说当两个agent在那个时间戳上在同一个房间中时,这两个agent便可以得知对方在那时的action(如果那对方的行动轮次)。


对neutral settings下的epistemic problem的规划逻辑的一个尝试
http://example.com/2025/08/02/Decentralized-Epistemic-Planning/对neutral settings下的epistemic problem的规划逻辑的一个尝试/
作者
Clain Chen
发布于
2025年8月2日
许可协议