Лекція 9. Asynchronous backtracking алгоритм (with weak commitment)

Для застосування алгоритму асинхронний бектрекінг (АБТ) потрібно задати пріоритет (впорядкування) агентів. Ми будемо вважати, що порядковий номер агента визначає його важливість - чим менше номер, тим вище пріоритет.
Кожне бінарне обмеження відоме обом агентам перевіряється агентом з нижчим пріоритетом. Агенти початково з’єднані ребрами графа, що описують безпосередні обмеження (неможливо мати однаковий колір з обох кінців ребра). Також кожен агент містить множину сусідів, яка спочатку дорівнює його безпосереднім сусідам а пізніше поповнюється іншими. Агенти обмінюються повідомленнями, які бувають трьох типів: - ok? - handle-nogood - handle-new-neighbor

Всі агенти чекають на повідомлення та опрацьовують їх за порядком надходження. На початку роботи алгоритму агенти отримують випадкове призначення та формують список nogood станів - станів, які суперечать розв’язку. Після цього кожний агент надсилає своїм сусідам, що мають нижчий пріоритет повідомлення ok?(agent, color) - що можна зрозуміти як спробу узгодити кольори початкового призначення.

Коли агент отримує повідомлення ok?(agent, color) від сусіда, він поміщає отриману інформацію в структуру, що називається agent view, після цього він перевіряє чи є його колір узгодженим з поточним agent view, тобто чи немає пари (його колір, отриманий колір) у переліку nogood станів. Якщо колір узгоджений, то агент просто видаляє повідомлення. Якщо колір неузгоджений, агент намагається вибрати інший колір та повідомити своїх низькопріоритетних сусідів про свій вибір. Якщо вибрати узгоджений колір неможливо то агент запускає процедуру відкату (backtracking).

При виконанні backtracking формується новий nogood з поточного agent view (ми використовуємо найпростіший спосіб). В цьому разі nogood складається з агентів, які суперечать вибору кольору поточного агента. Агент, який потрапив у backtracking вибирає найменш пріоритетного з переліку агентів з nogood та надсилає йому відповідне повідомлення.

В результаті розв’язок проблеми передається наверх по пріоритетності, якщо ж ситуація backtrackingвиникла у першого агента, формується повідмлення про те, що розв’язку не існує.