Когда-то в детстве мне попалась статья в журнале "Техника молодежи" о создании "искусственной жизни" на компьютере.
В то время я ещё и компьютеров не видел, но идея "искусственной жизни" запала мне в голову. Я не мог предположить что через много лет у меня появится свой компьютер, я научусь программировать и создам свой собственный мир "искусственной жизни".
Существует множество определений что такое жизнь но мы будем пользоваться чем то, вроде такого:
Это система умеющая создавать свои копии и при этом могут возникать ошибки. Это запускает механизмы естественного отбора, что даст возможность копиям этой системы приспосабливаться к среде, где они находятся.
Выглядит это так.
На компьютере создаётся виртуальная мир со своими правилами. Можно создавать свои миры совершенно непохожими на реальный мир, ограничений здесь никаких нет. Но для эстетического удовольствия, желательно чтобы созданный мир чем то был похож на реальный.
А дальше в него выпускается первая простейшая живность, которую я буду называть ботами. Боты могут погибнуть или выжить и создать свои копии (потомков). Потомки могут быть с ошибками. Ну а дальше за работу принимается эволюция и естественный отбор.
Самые удачные варианты ботов имеют больше шансов выжить и оставить больше потомков. Все малоприспособленные с большей вероятностью погибнут. Популяция ботов начинает меняться, начинает разбиваться на разные группы, пошедшие по разному пути развития.
Ну а мне, как создателю, остаётся только наблюдать за развитием мира.
Чем неожиданнее и многообразней будут варианты развития мира, тем более удачным можно считать эксперимент.
Геном
В качестве генома который будет изменяться под действием естественного отбора можно использовать разные варианты. Я использовал код. Это специально разработанный программный код, главные особенности которого - это простота, способность описывает сложное поведение и нечувствительность к ошибка выполнения. У каждого бота свой код, своя программа, описывающая его поведение.
Именно этот код-геном будет меняться из поколения в поколение.
Его я опишу в одной из следующих статей.
Также в качестве генома могут выступать веса нейронной сети, "физические" параметры бота, математические формулы и так далее.
Всё это темы для новых статей.
Баланс
Сделать мир не так сложно, сложно подобрать баланс, чтобы мир был интересен. Чем неожиданнее направления и способы развития мира, тем интересней получился мир.
Мир должен быть достаточно сложным, чтобы был простор для развития, но не слишком сложным, чтобы это не затянулось до бесконечности.
Геном должен давать множество вариантов развития. Так как я использовал в качестве генома программный код, нужно было выдержать баланс между низкоуровневыми командами, дающими огромное разнообразие и командами высокого уровня, облегчающими появление работоспособного кода, но снижающие разнообразие вариантов.
Мир должен меняться, что бы не было застоя, иначе мир находит некое стабильное состояние и развитие прекращается. Я использовал смену времён года, когда меняется количество поступающей в мир энергии. Но лучше, что бы развитие ботов меняло мир, например, появлялись отложения, менялась атмосфера и ландшафт от жизнедеятельности ботов и так далее.
Всё это похоже на классический генетический алгоритм, но есть отличия. Здесь нет деления на поколения, бот может вовсе не умирать и дожить до выключения компьютера. Здесь нет явно заданной fitness-функции, определяющей, какой бот лучше, какой хуже. К тому же, она может меняться вместе с изменениями, происходящими в мире.
Нет смысла, нет цели, только естественный отбор в изменяющемся мире.
Ну а на сегодня у меня всё.
В следующих статьях я буду описывать свои эксперименты с "искусственной жизнью", новые идеи, детали реализации, интересные эффекты.
В конце статьи есть видео, где показаны фрагменты с разных симуляций.
Подписывайтесь на канал, ставьте лайки, пишите в комментариях ваши мысли и идеи. Создадим свои миры!
Слава Нам!
foo52ru