Нейронная сеть для игры. Как правильно выбирать действия агента?
Имею среду (игровое поле) и агента (нейронную сеть). Метод обучения deep q-learning. На вход нейронке подаю состояние клеток игрового поля (доступные действия в каждой клетке в надежде на то, что агент научится строить замысловатые цепочки ходов), на выходе получаю вероятности одного из 8-ми действий (ходы по вертикали, горизонтали или диагонали). Задача агента добраться до определенной точки (загнать мяч в ворота, если так будет понятней), за это он получает награду. Есть правило, что в каждой клетке каждое действие доступно только однажды (попав в клетку повторно совершённые ранее действия уже недоступны).
Вопрос в том, как быть, если нейронка выбирает недоступное в данный момент действие? Например как если бы в шашках агент пытался походить на занятую другой шашкой клетку. Пробовал штрафовать за выбор недоступного действия (после штрафа сбрасывал состояние среды в начальное состояние). В результате рано или поздно наступает момент, когда агент как бы зацикливается и начинает совершать одну и ту же цепочку действий, последнее из которых недоступно. Потом штраф, сброс, и по новой. Пробовал не сбрасывать среду после неверного выбора, а штрафовать на каждом шаге, пока агент не выберет другое действие. Результат особо не отличается: действия агента не имеют особого смысла. До этого мне удалось обучить агента в окружении Frozen Lake и научить нейросеть играть в игру NIM. А тут что-то никак. ЧЯДНТ? Может мой подход в принципе неверный?..
Введите ещё один параметр-указатель во входной слой: доступен/не доступен объект/клетка (или сразу несколько фалгов: по каждому типу для каждого из всех объектов) и им фильтруйте возможность выбора этой клетки для совершения хода агентом.
PS: Видимо, у Вас есть все возможности ходов в клетке, кроме запрета использования.
В принципе состояние системы и есть набор состояний клеток доски, которые, в свою очередь, и есть массив из восьми нулей и единиц (восемь направлений), отражающих возможность хода. Дополнительно подал состояние текущей клетки, в которой находится агент (подумал что это поможет ему понять где он сейчас находится). Не помогло.
Добавил на вход агенту координаты x и y, нормализованные в диапазоне от 0 до 1. Тоже не помогло, агент гуляет по всему полю, даже не пытаясь брать курс на цель, периодически случайно попадая в ворота.
Так же неуспешной оказалась попытка подавать на вход состояние не всей доски, а только ближайшего окружения в радиусе 3х клеток (я подумал, что лишняя информация сбивает агента с курса).