Сторонники направления «Искусственная жизнь» часто считают, что они исследуют более общие формы жизни, чем те, которые существуют на Земле. Т.е. изучается жизнь, какой она могла бы в принципе быть («life-as-it-could-be»), а не обязательно та жизнь, какой мы ее знаем («life-as-we-know-it»).
Искусственная жизнь — это синтетическая биология, которая по аналогии с синтетической химией пытается воспроизвести биологическое поведение в различных средах. Это жизнь, созданная человеком, а не природой («life made by Man rather than by Nature»). Исследования искусственной жизни направлены не только на теоретические исследования свойств жизни, но и (аналогично синтетической химии) на практические приложения, такие как подвижные роботы, медицина, нанотехнология, «жизнь» социальных систем и тому подобное.
Большую роль в исследованиях искусственной жизни играет математическое и компьютерное моделирование. Очень часто «организмы» в искусственной жизни — это придуманные людьми объекты, живущие в мире компьютерных программ.
Отмечу, что хотя лозунг «Искусственная жизнь» был провозглашен в конце 80-х, в действительности идейно близкие модели разрабатывались в 50-70-е годы. Два примера из истории отечественной науки.
В 60-х годах блестящий кибернетик и математик М. Л. Цетлин предложил и исследовал модели автоматов, способных адаптивно приспосабливаться к окружающей среде. Работы М. Л. Цетлина инициировали целое научное направление, получившее название «коллективное поведение автоматов».
В 60-70-х годах под руководством талантливого кибернетика М. М. Бонгарда была построена весьма нетривиальная модель «Животное», характеризующая адаптивное поведение искусственных организмов, живущих на разбитой на клетки плоскости и обладающих рядом конкурирующих между собой потребностей.
3.2 Модели искусственной жизни
Некоторые примеры характерных исследований искусственной жизни:
- Исследование динамики жизнеподобных структур в клеточных автоматах (К.Лангтон).
- ПолиМир (PolyWorld) Л. Ягера: компьютерная модель искусственных организмов, которые имеют структурированную нейронную сеть, обладают цветовым зрением, могут двигаться, питаться (и увеличивать тем самым свою энергию), могут скрещиваться и бороться друг с другом.
Тьерра (Tierra) Т.Рэя: модель эволюции самовоспроизводящися компьютерных программ. «Организмы» Тьерры содержат геномы, которые определяют инструкции исполнительных программ. Взаимодействия между организмами проводят к эволюционному возникновению сложного «биоразнообразия» самовоспроизводящися программ.
- Авида (Avida) К. Адами с сотрудниками, эта модель – развитие модели Тьерра. По сравнению с Тьерой Авида более проста и обладает большей общностью. Модель анализировалась аналитическими методами. Были получены характеристики распределения особей в эволюционирующих популяциях. Исследования на модели Авида количественно поддерживают ту точку зрения, что эволюция движется скачками, а не непрерывно.
- Анализ взаимодействия между обучением и эволюцией, выполненный Д.Экли и М. Литтманом. Эта работа продемонстрировала, что «обучение и эволюция вместе более успешны в формировании адаптивной популяции, чем обучение либо эволюция по отдельности».
- ЭХО (ECHO) Дж.Холланда. Эта модель описывает эволюцию простых агентов, которые взаимодействуют между собой путем скрещивания, борьбы и торговли. Взаимодействия между агентами приводит к формированию различных экологических систем: «войны миров», симбиозов и тому подобное.
- Модель эволюции двух конкурирующих популяций, одна из которых есть популяция программ, решающих определенную прикладную проблему (задачу сортировки), а вторая – популяция задач, эволюционирующих в направлении усложнения проблемы (Д. Хиллис). Первая из популяций может рассматриваться как популяция особей-хозяев, а вторая как популяция паразитов. Моделирование показало, что коэволюция в системе паразит-хозяин проводит к нахождению значительно лучших решений проблемы по сравнению с тем решением, которое можно найти в результате эволюции одной только первой популяции (популяции особей-хозяев).
- «Муравьиная ферма» (AntFarm) Р. Коллинза и Д Джефферсона. Эта модель разработана на базе «Коннекшен-машины» (Connection-Machine). Модель имитирует поведение поиска пищи в огромных эволюционирующих популяциях искусственных муравьев.
- Классифицирующие системы Дж.Холланда с сотрудниками. Это модель эволюции когнитивного процесса. Классифицирующая система есть система индуктивного вывода, которая основана на наборе логических правил. Каждое правило имеет следующую форму: «если <условие>, тогда <действие>». Система правил оптимизируется как посредством обучения, так и эволюционным методом. В процессе обучения меняются приоритеты использования правил (т.е. меняются коэффициенты, характеризующие силу правил). При обучении используется так называемый алгоритм «пожарной бригады»: при успехе поощеряются не только те правила, которые непосредственно привели к успешному действию, но и те, которые были предшественниками успеха. Поиск новых правил осуществляется эволюционным методом.
3.3 Подведение итогов
Исследования искусственной жизни тесно связаны с другими интересными направлениями: моделями происхождения жизни, автоматами С. А. Кауффмана, работами по прикладному эволюционному моделированию, по теории нейронных сетей, эволюция популяций искусственных организмов, управление поведением искусственных организмов.
Управление поведением искусственных организмов (синтетическая наука о поведении) – одно из ведущих направлений исследований искусственной жизни.
Управление поведением, как правило, моделируется с помощью нейронных сетей.
4. Моделирование поведения животных
4.1 Принцип работы программы
Рассмотрим структуры, которые описывают окружащую среду, агентов и другие объекты.
Характеристики агента:
- тип (травоядное или хищник)
- уровень энергии
- координаты (x и y)
- массив inputs (значение входов в нейронную сеть на этапе восприятия окружеющей среды)
- массив actions (значения выходов, действия)
- массив weight_oi
- массив biasso (смещения)
Входной массив задаёт входы как объект и область (например, хищное животное и область «лево»). Чтобы дать агенту возможность различать эти элементы, для каждого из них определяется отдельный вход в нейронную сеть. Выходы также связаны с отдельными выходными ячейками выходного вектора, который представляет одно действие.
Мир агентов двумерный, для агентов доступно три плоскости, причём каждую плоскость занимает агент одного типа, три измерения применяются для более эффективного подсчёта присутствующих объектов.
Размер мира, количество существующих растений и агентов — параметры, которые можно изменять для решения разных задач.
Теперь рассмотрим ход выполнения программы.
int main( int argc, char *argv[] )
{
<...>
init();
for (i = 0 ; i < MAX_STEPS ; i++) {
emitLandscape();
simulate();
<...>
}
Функция main инициализирует модель, а затем выполняет в цикле итерации, количество которых указано в заговолочном файле.
Функция init инициализирует среду и объекты в ней. Сначала инициализируется плоскость растений (функция growPlans), для этого создаются растения в количестве, заданном константой. Далее инициализируются агенты (initAgent); чтобы создать максимальное количество агентов (указано константой) каждый раз резервируется половина пространства. Сначала инициализируются травоядные, потом хищники.
Функций growPlans находит пустое место на плоскости растений и помещает в эту ячейку новое растение. Гарантируется, что растение будет помещено только в пустую ячейку.
В ходе инициализации плоскостей агентов программа в цикле проходит по массиву, содержащему типы агентов. Сначала инициализируется поле energy, энергия устанавливается в значение, равное половине от максимального. С помощью findEmptySpot() определяется начальное положение агента, эта находит пустую ячейку в заданной плоскости и сохраняет координаты агента в его структуре. Наконец, инициализируются веса и смещения для нейронной сети агента.
Теперь, после рассмотрения инициализации модели, рассмотрим непосредственно симуляцию. Функция simulate() позволяет каждому агенту выполнить одно действие в окружающей среде за один вызов. Травоядные получают небольшое преимущество, так как они создаются перед хищниками, но так как им предстоит противостоять и голоду, и хищникам, такое преимущество лишь немного выравнивает шансы агентов.
void simulate()
{
int i, type;
// Первыми действуют травоядные
for (type = TYPE_HERBIVORE ; type <= TYPE_CARNIVORE ; type++) {
for (i = 0 ; i < MAX_AGENTS ; i++) {
if (agents[i].type == type) {
simulateAgent( &agents[i] );
}
}
}
}
Функция simulate вызывает функцию simulateAgent для просчёта и выполнения одного действия агентом. Она может быть разбита на четыре отдельные части: восприятие, обработка полученных данных об окружающей среде, выбор действия и проверка энергии агента.
Для того, чтобы агент чувствовал среду ему сначала нужно идентифицировать координаты сетки, которые составляют его поле зрения (на основании направления движения), а затем разбить данную область на четыре отдельные зоны. Каждый вызов функции percept суммирает объекты в определённой зоне. При вызове в неё передаются текущие координаты агента, из массива inputs выбираются нужные данные о значениях на входах нейронной сети агента, а также список координат offset и их смещений. Если агент смотрит на север, то в функцию передаётся набор координат north<zone>, а если на юг, то передаётся тот же набор координт, но со смещением -1, аналогично и области для west<zone>. Смещения координат в каждой зоне определяются выбранным направлением, но они могут быть изменены на координаты противоположного направления. Для лучшего понимания приведу листинг:
// Сетка смещений (север-юг)
const offsetPairType northFront[]=
{{-2,-2}, {-2,-1}, {-2,0}, {-2,1}, {-2,2}, {9,9}};
const offsetPairType northLeft[]={{0,-2}, {-1,-2}, {9,9}};
const offsetPairType northRight[]={{0,2}, {-1,2}, {9,9}};