Asynchronous backtracking (ABT) 算法假设所有智能体(agent)都有各自的优先级(priority)。网络中每个智能体都知道自己的“上级”和“下级”都是哪些agent。
智能体知道他们自己的值,并且将这些值发送给自己的下一级智能体。所有的智能体都在等待消息,并回复消息。智能体每次更改自己的值后,都把自己的新值发送给自己的下一级智能体。每个智能体收到消息后,都要做出相应的反应。
下面是ABT算法的伪代码:
ABT算法伪代码- 收到Ok?信号。当智能体收到Ok?信号时,该智能体会将信号内容添加到自己的记录表agent_view中。并检查自己的值(check_agent_view)。
- 收到Nogood信号。把Nogood信号内容添加到Nogood表中。如果发给自己Nogood信号的智能体不是自己的领居,就把该Nogood信号内容添加到记录表agent_view中,并将其作为自己的领居。检查自己的值(check_agent_view)。
- 检查值过程(check_agent_view)。当智能体目前的值与记录表agent_view中的值无法一致(consistent)时,为自己选一个可以一致的值,并将新值已Ok?信号的方式发送到下级;如果无法找到这种值,就进入回溯(backtrack)过程。
- 回溯过程(backtrack)。如果Nogood表是空的,那么广播通知其他智能体无解,然后终止程序;否则,从Nogood表中选择优先级最低的智能体,发送Nogood信号给它,将此Nogood从agent_view表中移除,检查自己的值(check_agent_view)。
网友评论