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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

ЗАПРЕЩЕНО:

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

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

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


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

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

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

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

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

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

Очень круто!

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

Конечно надо это дело усложнять.

Я бы предложил создать модель небольшого биома: трава - зайцы - волки.

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

Бывает, что зайцы съедят всю траву и начнут вымирать, или волки сожрут всех зайцев и т.д. Но это тоже довольно интересно.

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

Если чуть разобраться в теме, делается очень просто. После подобной реализации я усложнил задачу, сделал траву, травоядных и хищников (3 класса-реализации). Трава - это трава, но появляется после съедения/смерти животного (сразу несколько штук). у животных есть характеристики, скорость, размер (влияет в основном на ср. максимальный возраст), зоркость, плодовитость. В зависимости от характеристик менялись цвета и размеры самих кружочков на карте. В этих самих характеристиках и заключался генетический алгоритм. Каждое животное, когда рождалось, могло немного мутировать один из показателей, в итоге через N поколений имелся целый набор "слонов", "антилоп", "зайцев" и тд. Для баланса нужно я ограничил максимальную сумму всех характеристик. Так же, например, размер отрицательно влиял на плодовитость.

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

есть один баян на эту тему.

про объекты ТБаран и ТСлон )

Погуглите, если не лень.

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

Хахах))) Очень странное решение, превращать в "интерьер") Хотя для "лишь бы сдать" может и норм)

Повеселили)

В этой истории у них классы были) У меня все животные были Herbivorous или Predator типов. Все различия как раз в геноме (читай характеристиках) между экземплярами одного класса были. Между хищником и травоядным единственное различие - кого можно жрать). Изначально пытался добавить "агрессию" (так назвал), типа среднее значение - всеядное, малое - травоядное, большое - хищник, но не понравилось чем-то, уже не помню чем.

раскрыть ветку (7)
Автор поста оценил этот комментарий
вообще занимаясь такими штуками было бы неплохо вкурить в теорию игр.

я собирался в свое время заняться чем то подобным ( имеется ввиду генетичесикй алгоритм ), но более важные дела захватили время.

а вообще была мысль попытаться написать бота для игры rimworld с тем расчетом, что бы можно было описать алгоритм поведения главного героя, и на основе несложной нейронной сети решать задачу выживания в игре.

собственно сам мир описан - нужно было просто создать обработчик поведения персонажа )

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

Или я чего-то не знаю, или у Вас очень странные понятия о несложной нейронной сети) Там столько входных параметров в игре (для нейронов первого слоя), что можно охренеть)) Я правда, по моему, не занимался "принятием решений", перцептрон там, сеть Кохоннена (кластеризация). От нефиг делать либу замутил https://github.com/A1essandro/neural-network . Правда на пыхе, и содержит ошибку в проектировании, хочу на Java переписать, сейчас думаю как исправить эту самую ошибку.

Если у Вас есть хорошая статья по принятию решений и сетям, дайте почитать, пожалуйста.

раскрыть ветку (5)
Автор поста оценил этот комментарий
нет, я когда продумывал общий алгоритм, основной задачей нейронной сети был выбор приоритета задач.

у меня нет какой то конкретной статьи.

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

собственно суть сводилась определению "верно/неверно". верно - коэффициенты не трогаем, неверно - коэффициенты корректируем.

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

Обратное распространение ошибки. Понятно.

Но было бы довольно долго, ждать пока бот научится правильно действовать) Тем более в игре большой элемент случайности. Всякие затмения и т.д.

раскрыть ветку (3)
Автор поста оценил этот комментарий
на это нейронка должна была реагировать адекватно.

собственно там не так уж много состояний окружающей среды.

проблемой стало собственно вклинится в код игры, не нашел я нормального метода подсунуть вместо управления свою программу.

а второй проблемой стал вопрос результата, точнее - что именно считать за результат.

вообще мне всегда нейронка нравилась больше генетических алгоритмов.

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

Скорее всего Вам понравится https://www.youtube.com/channel/UCfelJa0QlJWwPEZ6XNbNRyA

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

непонятно.

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку