И снова о нелёгкой жизни цифровых бактерий(длиннопостЪ)
Ссыль на саму программу(уже собранную, ставить ничо не надо, только распаковать) - в конце поста
Спасибо аффтару поста http://pikabu.ru/story/simulyator_yevolyutsii_na_unity__iskh... . Засадил сцуко мне занозу в моцк.
Дело в том, что я тоже любитель всякого накодить, и даже постил там своё творение(http://pikabu.ru/story/simulyator_yevolyutsii_na_unity__iskh... было заброшено по причине полной предсказуемости подопытных. И вот, две недели спустя я понял, что больше не могу сдерживаться.
Итак, встречайте: очередной симулятор лоскутного одеяла эволюции:
![И снова о нелёгкой жизни цифровых бактерий(длиннопостЪ) Программирование, Java, Длиннопост, Эволюция, Гифка](https://cs8.pikabu.ru/post_img/2017/03/07/6/1488877202125934057.jpg)
Напомню суть идеи. В замкнутом пространстве находятся условные организмы(каждая точка-отдельный организм).
Организмы жрут солнечный свет либо друг друга(либо оба сразу), накапливают таким образом энергию.
Когда организм накопит достаточное количество энергии - он делится. Если места для потомка нет - умирает, оставляя труп.
У каждого организма есть собственная модель поведения, состоящая из цепочки команд, которые они выполняют последовательно.
При делении они передают эти команды потомку. Плюс есть шанс мутации, когда одна из команд потомка меняется на другую случайную.
Это у нас с @Neptun общее. Теперь различия:
1. К программе прикручен КОНФИГ!(config.ini), где можно менять всякую разную фигню: размер поля, количество команд, шанс мутации и даже задать набор команд для начальной бактерии. Развлекайтесь! :D
2. Я упоролся и написал эту фиговину на яве. Почему на яве? Ну... я никогда до этого ничего не писал на яве, решил попробовать :D В общем, это несколько увеличило производительность. Теперь даже слабые компы без проблем обсчитывают поля размером 150х150.
3. Замкнутый мир-тор, то есть верх продолжается снизу, а лево - справа. И мы как бы смотрим на это безобразие сверху, а не сбоку.
4. Определение родственников. Бактерии не смотрят в код, они смотрят на ЦВЕТ :D Цвет отличается не больше, чем на 5 - родственник. Нет - подраться и захавать.
5. Консервативное общество
Картина Репина: родительская клетка убивает своего потомка
Суть в том, что в случае мутации бактерия меняет цвет на СЛУЧАЙНЫЙ(отсюда этот эффект лоскутного одеяла). Учитывая п.4 выше, это означает, что родитель может захавать своего едва родившегося потомка. Нетолерантно тут относятся к мутантам...
6. Статы! Кроме модели поведения, каждая бактерия имеет пассивные статы. Сила увеличивает шанс успешной атаки, а также расход энергии.
Выносливость определяет предельное количество энергии(при достижении его, клетка автоматически делится). Мутшанс отвечает за вероятность мутации. Пока, по моим наблюдениям, только сила является эволюционно значимой xD
7. Бактерии не имеют команды "делиться", они делятся автоматически, когда обожрутся до предела.
Теперь об игропроцессе. Всё начинается вот с этого засранца:
Увеличим:
Ещё немного:
Вот с него, ага. По умолчанию, он не умеет двигаться и есть трупы, только получать энергию от солнца. Поэтому игра обычно начинается с овер9000 трупов и ожидания удачной мутации.
После этого начинается бурное развитие разнообразных мелких группировок.
Также, длительные тесты выявили, куда стремится этот искусственно сгенерированный мирок. Он стремится к миру, гармонии и грёбаному мирному сосуществованию :D
Зато по результатам наблюдения я могу точно ответить, как добиться мира во всём мире:
Шаг 1:
То есть буквально, уничтожить всех, кто может атаковать
Шаг 2: Если потом появится кто-то, кто может атаковать - ДРУЖНО ПИЗДИТЬ ЕГО ПАЛКАМИ ПОКА НЕ СДОХНЕТ. Всё. Мир достигнут :D
Но я не смирился так просто. Я подумал, что они прекратили соперничество потому, что им нечего делить. И добавил механику освещения :3
Теперь чем дальше от центра, тем меньше энергии даёт солнцеедение. С аццким хохотом я собрал и запустил новый мир: 64 команды, 300х300, четверть миллиона итераций! Надо сказать, бои за центр были лютые, ни одна группировка не могла одержать верх надолго. Я с интересом смотрел, как они бьются за существование, жуя бутерброд. И думал о том, что кто-то может сейчас точно так же смотреть сверху на нашу человеческую возню...
Однако 250000 итераций спустя:
...бля :D Опять мир и гармония. У кого есть идеи как сделать борьбу - предлагайте!
Что я планирую добавить:
- Показ характеристик бактерии при наведении мыши, как в первой моей программе.
- Старение(отключаемое в конфиге)
- Нормальный гуй с кнопками и полями, чтобы не приходилось вручную править конфиг
- Поскольку это чудо отлично грузит проц, можно добавить бенчмарк
- Бактерии смогут оценивать силу противника и действовать в зависимости от этого
- Призыв сильнейших - возможнось вытащить наиболее развитых особей для заселения нового мира
- Раздельный мутшанс для статов и поведения(сейчас общий)
- Квирки! Особенности, влияющие на механику(например, квирк "Мясоед" увеличивает энергию от поедания мяса и уменьшает от солнца)
- Шаблоны... сложная тема. Меня напрягает, что организмы аццки близорукие, они видят только непосредственное окружение. В древней игрушке про боевых змей "Snake Battle"(одна из первых игр непрямого контроля) была тема шаблонов. Каждый ход змея осматривала пространство вокруг себя(7х7 клеток) и сравнивала с шаблонами, заданными программистом. Если ни один не подходил - действие выбиралось случайно. Если находилось соответствие - действие выбиралось по шаблону. Не уверен, что введу, потому как сложно и сильно замедлит работу.
Что я не планирую:
- 3д. Не нужно.
- Гравитация. Не имеет смысла, мы сверху смотрим.
- Хексы. НЕТ СПАСИБО.
- Показывать исходники. Стыдно xD
И немного о лог-файле endgame.txt Он генерится после выполнения программы в её папке, содержит лог 30 случайных бактерий. А также время, за которое программа была выполнена. Так что можно меряться письками :D
Также внимание! Владельцы топовых i7 и особенно 8-ядерных амд! Если не в падлу, запустите программу 200х200 20000 итераций на 8 потоках. Мне интересно, как отработает и какое будет время :3
Ссыль на сие творение: