The asynchronous backtracking algorithm (ABT) 算法

  • 2020 年 2 月 11 日
  • 筆記

Asynchronous backtracking (ABT) 算法假設所有智能體(agent)都有各自的優先級(priority)。網絡中每個智能體都知道自己的「上級」和「下級」都是哪些agent。

智能體知道他們自己的值,並且將這些值發送給自己的下一級智能體。所有的智能體都在等待消息,並回復消息。智能體每次更改自己的值後,都把自己的新值發送給自己的下一級智能體。每個智能體收到消息後,都要做出相應的反應。

下面是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)。