Мой эксперимент в генетических алгоритмах + исходный код

Здравствуйте, товарищи.
Увидел я, значит, недавний пост посвящённый генетическому алгоритму, и загорелся идеей повторить его - http://pikabu.ru/story/geneticheskiy_algoritm_v_deystvii_463...


Следует начать с того, что программист из меня не самый продвинутый, нигде не учился, только книжки читал да велосипеды изобретал. И затеял я всю эту историю в основном для того чтобы испытать/отточить свои навыки программирования.

Алгоритм повторял исключительно по информации, описанной в видео, исходные коды не смотрел.

Мой эксперимент в генетических алгоритмах + исходный код Программирование, Генетический алгоритм, Эксперимент, Видео, Гифка, Длиннопост

Итак, я начал писать программу... На Game Maker Studio... Ну а что, есть же люди, которые линукс на холодильники ставят?
На работу над программой ушло примерно два дня, за которые механика трижды полностью переписывалась. В результате я получил более-менее успешный прототип симулятора эволюции и приступил с полевым испытаниям.

Сначала боты были очень тупыми, тыкались в стены и умирали стоя на месте

(Прошу прощения за качество гифок, очень сильно сожралось при уменьшении размеров до разрешённых на пикабу)

Мой эксперимент в генетических алгоритмах + исходный код Программирование, Генетический алгоритм, Эксперимент, Видео, Гифка, Длиннопост

После одной ночи работы программы стали заметны первые зачатки "разума":

Мой эксперимент в генетических алгоритмах + исходный код Программирование, Генетический алгоритм, Эксперимент, Видео, Гифка, Длиннопост

После двух ночей "разум" заметно улучшился, вместе с продолжительностью жизни ботов:

Мой эксперимент в генетических алгоритмах + исходный код Программирование, Генетический алгоритм, Эксперимент, Видео, Гифка, Длиннопост

Для особо упоротых товарищей (вроде меня), и для желающих поржать над моим кривым кодом, выкладываю исходник всей этой истории. Откомментировал в коде всё, что смог.
Ссылка на исходник - http://almostgames.ru/games/evol.gmz
Спасибо за внимание.

P.S. Однажды наступит день, когда я вернусь к этой затее и напишу полноценный гибкий, расширяемый симулятор на каком-нибудь нормальном языке...

Мой эксперимент в генетических алгоритмах + исходный код Программирование, Генетический алгоритм, Эксперимент, Видео, Гифка, Длиннопост

Лига Разработчиков Видеоигр

6.7K постов22.2K подписчиков

Добавить пост

Правила сообщества

ОБЩИЕ ПРАВИЛА:

- Уважайте чужой труд и используйте конструктивную критику

- Не занимайтесь саморекламой, пишите качественные и интересные посты

- Никакой политики


СТОИТ ПУБЛИКОВАТЬ:

- Посты о Вашей игре с историей её разработки и описанием полученного опыта

- Обучающие материалы, туториалы

- Интервью с опытными разработчиками

- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе

НЕ СТОИТ ПУБЛИКОВАТЬ:

- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры

- Посты, единственная цель которых - набор команды для разработки игры

- Посты, не относящиеся к тематике сообщества

Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.

ЗАПРЕЩЕНО:

- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции

- Выдавать чужой труд за свой

Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.


О РАЗМЕЩЕНИИ ССЫЛОК:

Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:

- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества

- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз

- Cсылка размещается в формате: "Страница игры в Steam: URL"

12
Автор поста оценил этот комментарий
Иллюстрация к комментарию
Автор поста оценил этот комментарий
Сначала боты были очень тупыми
После одной ночи работы программы стали заметны первые зачатки "разума"
После двух ночей "разум" заметно улучшился

Таки эволюция кодера, который всё это писал, налицо! :)

раскрыть ветку (1)
12
Автор поста оценил этот комментарий

В этом-то и фишка, что никто ничего не писал. Они сами этому обучались.

Автор поста оценил этот комментарий

генетик хуев

Trojan:Win32/Spursint.A!cl

раскрыть ветку (1)
7
Автор поста оценил этот комментарий
Автор поста оценил этот комментарий

А есть исполняемый файл?

раскрыть ветку (1)
2
Автор поста оценил этот комментарий

Есть. Только он немного отличается от того, что в исходнике и на гифках. В нём боты ещё и дерутся друг с другом и жрут трупы.
http://almostgames.ru/games/evol.exe

показать ответы
Автор поста оценил этот комментарий
Хей, посмотрите на проекты Амебы. Борьба видов и Swimbots! Там есть, что почерпнуть :D
раскрыть ветку (1)
2
Автор поста оценил этот комментарий

Знаком и с тем и с другим =)
В амёбах даже успешного бойца воспитал - http://amebas.ru/amoebas/6659/

Автор поста оценил этот комментарий

нет. я хочу прочитать именно про реализацию автора

раскрыть ветку (1)
2
Автор поста оценил этот комментарий

Но ведь я же исходник выложил. Там же вся реализация как на ладони. С комментариями даже.

Автор поста оценил этот комментарий

Вот я тот пост видел, но не пойму организацию действий - в экземпляр бота просто записываются последовательность необходимых действий для выполнения, после того как он "посмотрит"? И как идет запись - последовательно?

раскрыть ветку (1)
2
Автор поста оценил этот комментарий

И да и нет. Грубо говоря, в экземпляре бота есть куча команд, результат выполнения каждой из которых переключает управление на разные ячейки.
Например, в первой ячейке команда "посмотреть", которая передаёт управление в ячейку 2, если увидело яд, в ячейку 3, если увидело стену, и т.д. Короче, на каждый увиденный предмет следует разная реакция.

показать ответы
Автор поста оценил этот комментарий

То есть получается, есть набор из 64 функций, и победит тот, у кого на каждое событие будет вызываться верная функция?

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

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

Автор поста оценил этот комментарий

Объясни логику, пожалуйста, не нужно кода. Просто не понимаю, что это за квадратики, какие у них задачи и условия.

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Синие квадратики - боты. По аквариуму разбросаны стены (серые), еда (зелёная) и яд (красный). Боты бегают по полю, и пытаются выжить. 8 самых живучих дают жизнь новому поколению, по 8 потомков каждый. У неготорых из потомков мутирует один или несколько генов.
У каждого бота есть свой геном - набор из 64 чисел, от 0 до 63 каждое (на гифках внизу написаны геномы лидеров предыдущего поколения).
Каждая цифра в ячейке генома обозначает какую-то конкретную функцию бота, например 1 - посмотреть прямо перед собой. В зависимости от того, каким был результат выполнения команды, управление перескакивает на другую ячейку генома. Например на картинке изображён кусочек генома. В первой клетке стоит цифра 1 - значит бот смотрит прямо перед собой. В зависимости от того, что он там увидел он переключается на другую ячейку генома. Например, если он увидел стену, то следующей он будет выполнять команду 23, а если увидел еду, то выполнит комадну 9. Таким образом, весь его геном - это алгоритм его действий в аквариуме.
Благодаря системе отбора самых живучих и незначительным мутациям, происходит постепенная адаптация генома к условиям среды, и боты становятся всё умнее и умнее.

Иллюстрация к комментарию
показать ответы
Автор поста оценил этот комментарий

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

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Так и сделаю, как только буду более-менее доволен их поведением. Пока что они меня радуют, но всё ещё не до конца.

1
Автор поста оценил этот комментарий
В итоге на последней гифке последний бот жил так долго просто потому, что шел напролом и жрал все подряд. И умер он, потому что стена.
раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Просто не научился ещё на тот момент. Но пару тысяч поколений спустя он исправился.

Предпросмотр
Автор поста оценил этот комментарий

Автор, перезалей код) Хочу поковыряться. Может чему научусь!

раскрыть ветку (1)
Автор поста оценил этот комментарий

Ссылка на исходник всё ещё рабочая.

показать ответы
Автор поста оценил этот комментарий

есть это в открытом доступе или только покупать ?

раскрыть ветку (1)
Автор поста оценил этот комментарий

Есть.

показать ответы
Автор поста оценил этот комментарий

а что читал ?

раскрыть ветку (1)
Автор поста оценил этот комментарий

Хед фёрст джава, паттерны проектирования, статьишки всякие в интернетах.

показать ответы