Всем привет! Команда продолжает работу и сегодня мы готовы представить новый проект - Lunar Lander.
Идея проекта
Возможно вы знаете игру выходившую ещё под платформу Atari в 1979 году. Цель игры - управляя космическим кораблём "посадить его на поверхность луны".
Если вы с ней не знакомы можете поиграть в эмуляторе - это хорошая возможность вернуться и ощутить сложность старых игр. Вот ссылка на один из онлайн эмуляторов - http://moonlander.seb.ly.
Наша команда решила воссоздать игру с использованием языка программирования Python3 и написать искусственный интеллект, цель которого - обучиться сажать космический корабль. Пример нашей версии игры.
Реализация
Python3 был выбран как один из самых простых и удобных языком программирования. Для вывода картинки был использован модуль PyGame.
Искусственный интеллект было решено создать с помощью нейронных сетей, которые должны обучаться с помощью генетического алгоритма. Мы не используем библиотеки машинного обучения, что бы разобраться как нейронные сети работают изнутри.
К каждой ракете привязан свой экземпляр нейронной сети, ракеты соревнуются в успешности и скорости посадки, выборе места приземления, количестве потраченного топлива. Экземпляры, показавшие лучшие результаты скрещиваются, дают потомство в новом поколении и так до тех пор, пока задача не будет решена.
Входами нейронной сети является:
- Угол наклона ракеты
- Сила с которой в данный момент включен двигатель и оставшееся количество топлива.
- Вертикальная и горизонтальная скорость ракеты
- Координаты ракеты
- Данные о поверхности ракеты
На выход нейронная сеть может подать команду о повороте ракеты, а так же прибавить или убавить мощность двигателя. В нейронной сети 2 скрытых слоя.
- Весь исходный код храниться в репозитории по следующей ссылке - https://github.com/StepanovTihon/Lunar-hodec
Процесс обучения нейронной сети наглядно: