@Jden10

Как можно реализовать движение объекта в 2d пространстве к еде с помощью нейросети?

Подскажите, как можно реализовать движение объекта в 2d пространстве к еде с помощью нейросети.
Пока идея подавать координаты ближайшей еды( примерно 10 еды), на выходе с помощью функции активации(гиперболический тангенс), умноженной на 2, получать изменение координаты по х и у
Для обучение выбрал генетический алгоритм обучения
Попробовал реализовать, однако обучение, несмотря на постоянную корректировку весов, не происходило
  • Вопрос задан
  • 124 просмотра
Пригласить эксперта
Ответы на вопрос 4
maaGames
@maaGames
Погроммирую программы
Вознаграждение за "еду" не забыл добавить? Ближайшую еду не надо передавать, достаточно координаты любой еды или "всех едов". На самом деле, нужно всё игровое поле передавать или регион, в котором находится объект. Ведь движение будет не в пустом пространстве, в итоге надо будет обходить препятствия и "врагов".
Штраф за каждое передвижение, большое вознаграждение за кушание еды. И учить, учить, учить... Нейросеть сама научится выбирать ближайшую цель и двигаться к ней.
Например задать "здоровье" объекта равное числу клеток на игровом поле. За каждый шаг здоровье снижается на 1 и объект умирает, когда здоровье равно нулю. Такой подход гарантирует, что объект не сможет топтаться на одном месте и ходить кругами, а выживут только те, кто или будет бегать по всему полю и случайно наткнётся на еду и те, кто будет целенаправленно бежать к еде. В процессе отбора последние, скорее всего, останутся последними выжившими.
Ну и множитель корректировки не дожен быть слишком большим или слишком маленьким, количество слоёв должно быть не слишком маленьким и не слишком большим, топология сети должна быть... какая-то.
Ответ написан
Комментировать
Vindicar
@Vindicar
RTFM!
Передача координат цели - плохая идея. Если цель в 100;100 сеть получит один и тот же сигнал и если управляемый объект в 90;100, и если объект в 110;100 - а действия должны быть разные. Кроме того, если сместить всю карту на некоторое расстояние, сеть может сломаться, а это плохо.

Я бы посоветовал делать raytracing. Выпускаешь веером N лучей из центра управляемого объекта, говоришь, во что они упёрлись.
А лучше вместо тонких лучей сделать сектора обзора фиксированной ширины. Для каждой комбинации тип объекта+сектор сообщать сети расстояние до ближайшего объекта данного типа в данном секторе. Тогда сеть сможет ориентироваться по своим окрестностям независимо от своего расположения.
Ответ написан
@AlexSku
не буду отвечать из-за модератора
Нейросеть называется Обучение с подкреплением (Reinforcement Learning).
Примеры по хождению по лабиринту в плейлисте.
Здесь надо обучать агента.
Ответ написан
Комментировать
mayton2019
@mayton2019
Bigdata Engineer
Это простая игровая логика и ее можно реализовывать без нейросетей. Тогда собственно в чем вопрос?

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

Насчет координат. Да. Нужно передавать не абсолютные а относительные координаты к еде. И для упрощения
самой формулы - сразу отбрасывать все лишнее и передавать только ближайшую еду. Иначе клетка как Буриданов
осёл застрянет между двумя источниками еды и так и сдохнет от голода.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы