Принцип работы программы
Следующий этап — съедение объекта. Если подходящий объект был найден, программа проверяет плоскость, в которой он был обнаружен. Для плоскости растений выполняется поиск в массиве plants, после чего растение удаляется из массива landscape, затем создаётся новое растение, которое будет помещено в произвольную пустую ячейку. Для плоскости травоядных животных программа убивает съедаемое травоядное с помощью функции killAgent. Благодаря съедению объекта увеличивается уровень текущего объекта.
Наконец, если объект достиг уровня энергии, который необходим для воспроизводства, вызывается функция reproduceAgent, чтобы позволить агенту «родить» нового агента данного типа.
После уничтожения агента программа определяет, нужно ли инициализировать нового случайного агента данного типа вместо уничтоженного. Решение зависит от количества агентов данного типа, присутствующих в модели. Поскольку эволюционный аспект симуляции является самым интересным, требуется сохранить количество открытых позиций для агентов, чтобы любой агент при достижении определённого уровня энергии мог воспроизвести себя, поэтому новому случайному агенту позволяется занять место уничтоженного агента только если популяция данного типа агентов составляет менее 25% от общего количества агентов. Это позволяет сохранять 25% мест для агентов одного типа свободными для следующего воспроизведения.
Последняя функция симуляции, reproduceAgent , является самой интересной, поскольку она вносит в модель аспект эволюции Ламарка. Когда агент воспроизводит себя, он передает свою нейронную сеть ребенку. Ребенок наследует нейронную сеть родителя, а потом производится с небольшой вероятностью мутация
Сначала необходимо определить, есть ли свободное место для ребенка, проверив, заполнено пространство для агентов данного типа на 50% или нет. Если для ребенка было найдено свободное место, структура агента-родителя копируется для ребёнка, а затем отыскивается свободная ячейка, которую займёт ребёнок. Далее посредством мутации изменяется один из весов в нейронной сети агента. Затем выполняется запись, а энергия родителя делится поровну между ним и ребёнком, что заставляет их двигаться по среде в поисках пищи, пока они не наберут нужного количества энергии для следующего воспроизведения.
Функция emitLandscape сканирует все три плоскости и выводит на экран текущее положение всех объектов.
Заключение
В своей курсовой работе понятие «искусственная жизнь» я рассматривал на примере моделирования пищевой цепочки. Искусственная жизнь предлагает платформу для изучения различных феноменов в биологических и и социальных системах. Преимущество искусственной жизни в теории синтетического поведение — возможность играть в ролевые игры, изменяя параметры модели и отслеживая результаты. В данной курсовой концепции синтетической теории поведения были продемонстрированы с помощью несложной симуляции хищник/жертва. Можно увидеть, что и хищники, и жертвы выработали ряд интересных стратегий поведения, например:
- инстинкт стада для травоядных
Травоядное будет следовать за травоядным, если оно находится в области фронта. Сила травоядных в их количестве, конечно, если это не то травоядное, которое идёт впереди.
- хищники поджидают травоядных возле растений
Эта стратегия была успешной до тех пор, пока травоядные не научились избегать хищников, даже при условии, что растение находится в области видимости.
Мной была создана очень упрощённая модель пищевой цепочки, но даже на её основе можно ставить эксперименты, изменяя параметры окружающей среды, максимальный уровень энергии агентов и максимальное количество агентов того или иного типа, путём редактирования исходных кодов программы данную пищевую цепочку можно усложнять, превращая, к примеру, мёртвых хищников в растения или добавляя различные режимы симуляции.