Недавно я наткнулся на этот замечательный вводный урок, использующий политику градиентного подкрепления, чтобы научиться играть в Морской бой. Было весело читать и легко играть, поэтому я решил, что мог бы потратить немного времени, чтобы адаптировать его к немного более сложной игре под названием Plane Strike.

«Удар с самолета» в основном является немного более сложной игрой, потому что у цели есть шаблон, который мы, люди, довольно хорошо обнаруживаем и используем. Вот простой пример цели «самолет»:

Учитывая размер доски (6x6) и простую форму мишени, я почти уверен, что любой приличный программист мог бы написать какую-нибудь функцию обнаружения функций, чтобы играть в игру хорошо. А что если доска 10х10 и выглядит она вот так:

А если размер 100x100 и 30 мишеней разной формы? Ручная разработка функций, по-видимому, не сработает. Так что здесь нам нужно машинное обучение, лучшая часть которого заключается в том, что нет ручной разработки функций (хотя придумать хорошую награду — это настоящая проблема, но, к счастью для меня, то, что используется в статье «Морской бой», работает довольно хорошо).

Так что в любом случае я попробовал подход с градиентом политик (исходный код), и он, кажется, неплохо работает с простым Plane Strike 6x6. Вот ориентир средней продолжительности игры (размер скользящего окна = 50):

Таким образом, RL удалось снизить его примерно до 10,8, что довольно хорошо, учитывая, что в среднем он может получить только менее 3 неправильных предположений. Неплохо. На самом деле я не уверен, что смогу его победить.

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

Вот реальная игра по алгоритму:

Зеленые кружки — «попадания», красные — «промахи». Промахи на самом деле имеют большой смысл. Вот почему:

Так что это была моя быстрая забава с маленькой игрой. И на основе этого я сделал голосовую игру для Google Home. Вы можете проверить это, сказав ОК, Google, поговори с Plane Strike.