Pull to refresh

Comments 7

Я сразу добавил отдельное действие для второго робота, а также принудительную отмену прыжка, если за время полёта не возникало касания с мячом, чтобы зря не прыгать. При этом мои роботы перебирались по половине времени и знали наилучшую траекторию друг друга. Вот теперь начались первые голы сильным соперникам, у которых уже был и вратарь, и какая-нибудь более сложная логика.

Можно вот это подробней прокомментировать. Как именно это делается? Как роботы взаимодействуют друг с другом? Может ли один робот дать пас другому, например?
Да, пасы возможны. Но это не совсем пасы. Допустим один робот просто собирается ударить по мячу не зная, что будет делать второй робот. А после этого второй робот, зная что первый собрался ударить по мячу, как-то планирует свой удар, например бьет мяч в ворота, после того как по мячу ударит первый робот.
На следущем тике игры первый робот уже знает, что если он не будет менять траекторию, то второй робот ударит в ворота и учитывает это. Это выглядит как пас, но на самом деле первый робот не собирался его давать, а просто бил мяч. В общем, получается, что роботы пытаются улучшить свои действия по очереди, и это часто приводит к пасам или другим многоходовочкам, когда например робот отпрыгивает от своего тиммейта, чтобы ударить мяч.
Понял. Еще вопрос: вы говорили про растянутый во времени поиск. Допустим, вы нашли на одном тике траекторию, но она неоптимальная. Как робот может ее улучшить в следующем тике?

На первой итерации каждого тика лучшая траектория, которая была найдена на предыдущих тиках, переоценивается. А на следующих итерациях генерируются новые, оцениваются, и если скор больше то они заменяют наилучшую. Получается, мы не улучшаем старую, а заменяем на другую, которая оказалась лучше.

Спасибо за статью и за выложенный код! Можно начинать готовиться к следующему raic 2019 ))
А ещё можно неплохо подготовиться участвуя в Mini Aicups!
Sign up to leave a comment.