Моделирование того, как альтруистичное поведение может фиксироваться в геноме. Этот механизм называется Родственный отбор или Kin selection.
В симуляции наибольшее распространение получает тот вариант гена, который, в данных условиях, обеспечивает наибольшее своё распространение в следующем поколении.
При этом он может действовать в ушерб своего носителя.
Боты, если нет добычи, стараются держаться на расстоянии друг от друга.
Добычу видят на небольшом расстоянии и устремляются к ней.
При поедании добычи издают крик.
Дальность крика определяется значением в гене.
Интерфейс
Кнопками MODE можно переключать 4 режима:
- добыча даёт 500 единиц энергии
- добыча даёт 1000 единиц энергии
- добыча даёт 1500 единиц энергии
- добыча даёт 1500 единиц энергии, но сняты ограничения на порождение потомков
С помощью добычи я старался удерживать популяцию в размере 1800 особей.
Поэтому, чем больше энергии даёт добыча, тем реже она появляется на карте и тем больше расстояние между участками с добычей.
Именно из за увеличения расстояния возрастает средняя дальность крика.
Кнопка SCALE служит для зума. Можно при дальнем зуме кликнуть по карте и кнопкой SCALE приблизить это место, для наблюдения.
Вместо кнопки SCALE можно использовать клавишу ПРОБЕЛ.
При ближнем зуме можно перемещаться по карте с помощью клавиш со стрелками.
Кнопка GRAPH включает/отключает отображение гистограммы.
Кнопка SPEED позволяет ускорить симуляцию. При ускоренном режими карта не отображается, но график переодически обновляется, что позволяет следить за прогрессом.
Кнопка PAUSE включает/отключает паузу.
Кнопка SAVE включает/отключает сохранение скриншотов в папке world. Сохранение происходит только при отключенном SPEED, то есть в медленном режиме.
Размер сохранённых картинок 7680 × 4320 и занимают они много места на диске ( 1-2 Мб).
Для видео я сохранял их с прозрачным фоном.
Что бы сохранять с прозрачным фоном,
нужно в коде в функции void fullStep() изменить
pg.background(#626881);
на
pg.background(0,0);
Кнопка SAVE_G каждый 500 шаг сохраняет скриншот графика в папке graph.
Работает и в медленном и в быстром режиме.
Код написан в среде Processing