Как предотвратить взаимоблокировку двух работников VWAgent, когда они сталкиваются друг с другом после назначения задачиPython

Программы на Python
Ответить
Anonymous
 Как предотвратить взаимоблокировку двух работников VWAgent, когда они сталкиваются друг с другом после назначения задачи

Сообщение Anonymous »

Я работаю над многоагентной сеточной средой с использованием платформы VWAgent.
У меня есть три агента:
  • Белый: исследует и транслирует задания по уборке
  • Зеленый и оранжевый: ждут выполнения заданий, затем переходят к очистке своих плиток
Белые исследуют правильно, передают один раз, а затем оба рабочие начинают двигаться.
Проблема начинается после выполнения заданий:
Зеленый и Оранжевый оказываются лицом друг к другу в одном и том же коридоре, и оба замирают навсегда.
Ни двигается, ни отступает — полный тупик.
Вот соответствующая часть метода рабочего решения():

Код: Выделить всё

def decide(self) -> Iterable[VWAction]:
# Broadcast EXACTLY ONCE to avoid spamming workers
if self.__sent_assignments and self.__broadcast_action:
action = self.__broadcast_action
self.__broadcast_action = None  # Clear it so we don't send again
return [cast(VWAction, action)]

if self.__backoff > 0:
return [VWIdleAction()]

obs = self.get_latest_observation()
appearance = self.get_own_appearance()

collision_action = self.__handle_collision(obs)
if collision_action is not None:
return [collision_action]

pos = self.get_own_position()

if self.__heading_home:
if (pos.get_x(), pos.get_y()) == self.__home_target:
self.__heading_home = False
else:
return [self.__move_towards(target=self.__home_target)]
  • Белый завершает картирование и транслирует задания (хорошо).
  • Зеленый и Оранжевый начинают двигаться (хорошо).
  • Они встречаются в коридоре лицом друг к другу.
  • Код: Выделить всё

    __handle_collision()
    продолжает возвращать сообщение «заблокировано» для обоих.
  • Оба агента простаивают вечно → тупик.
Один работник должен уступить или отступить, чтобы другой мог пройти.
Оба замирают, потому что их логика движения симметрична, и ни один не уступает дорогу.
Вопрос
Как можно Я изменяю свою логику движения/столкновения так, чтобы два рабочих, стоящих лицом друг к другу, не блокировались?
Существует ли общий шаблон для разрешения лобовых столкновений в VWAgent/многоагентных сеточных системах?
Я рад поделиться методом __handle_collision, если необходимо.

Подробнее здесь: https://stackoverflow.com/questions/798 ... each-other
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»