Программирование - это просто
Advertisement
Главная arrow Искусственный интеллект arrow Экспериментальный проект "Эволюция". arrow Экспериментальный проект "Эволюция". Шаг 1. Идеи для модели
20.04.2024 г.
Главное меню
Главная
Интернет магазин
Программные продукты
Биржевые роботы
Искусственный интеллект
Математика и информатика
1С:Предприятие
Уроки C#
Уроки Delphi
Уроки программирования
Web-программирование
Дизайн и графика
Компьютер для блондинок
Исходники
Статьи
Платный раздел
Рассказы про компьютеры
Хитрости и секреты
Системный подход
Размышления
Наука для чайников
Друзья сайта
Excel-это не сложно
Все о финансах
.
Экспериментальный проект "Эволюция". Шаг 1. Идеи для модели Печать E-mail
Автор megabax   
02.04.2014 г.
Структура программы на примере простейшей программы

Экспериментальный проект "Эволюция". Шаг 1. Идеи для модели

Задумал я тут намедни замутить что то типа игры, в котором пользователи, аки Боги, могли бы наблюдать и за ходом эволюции неких виртуальных существ  и направлять ее. В дальнейшем можно даже устраивать турниры подобных виртуальных созданий. Но, прежде чем приступить к программированию, необходимо определиться с набором неких "кирпичиков", из которых будет строиться модель. Прежде всего, вспомним научную гипотезу о происхождении жизни на Земле и попытаемся пересказать ее своими словами, что бы можно было почерпнуть некоторые идеи для будущей модели.

И так, обратимся к википедии.

Давным давно, около четырех миллиардов лет назад  на Земле была голая земля и лужи (а может быть и реки с океанами), состоящими из так называемого первичного бульона. Что представлял собой этот первичный бульон? Это обычная вода, в которой растворены органические соединения: аминокислоты (строительные кирпичики для белков), жиры и прочие молекулы. Прямо как реальный супчик, только несъедобный. Откуда все это взялось? Типа, само образовалось. Так это или нет, не суть важно, не будем спорить с умными учеными, тем более, они проверили эксперимент, который доказал, что это вполне реально.  Главное, что было дальше. А дальше каким то волшебным образом в этом первичном бульоне появились коацерватные капли - некие уплотнения, окруженные слоем специфических молекул, который защищал их от распада. Кстати, мыльные пузыри - тоже своего рода коацерватные капли, только большие. Эти коацерватные капли могли адсорбировать из окружающей среды разные вещества и увеличиваться в размерах. А потом, когда становились ну очень большими, коацерватные капли распадались на более мелкие. Так типа зародились первые одноклеточные.

Какую идею можно вынести из этого для модели? Вот прямо так и напрашивается включить в модель атомы, которые соединяются в молекулы, формируют цепочки органических соединений. Но даже если не принимать во внимание квантовую механику, а рассматривать атомы просто как твердые шарики, между которыми присутствуют силы притяжения и отталкивания, меняющиеся по разным законам, благодаря чему между атомами могут возникать устойчивые связи, модель получиться слишком сложной. И, боюсь, результатов расчета даже маленького промежутка моделируемого времени придется ждать очень и очень долго. Скажу больше, жизнь зарождалась на земле в течении порядка миллиарда лет. Так что вряд ли мне удастся получить что то "живое", беспорядочно сталкивая виртуальные молекулы.  Определенно нужно выбрать что то попроще.

Еще одна идея. Раньше, когда науки совсем не было, люди думали, что все предметы состоят из четырех перемешанных в разных пропорциях стихий: огонь, вода, земля и воздух (некоторые любители гороскопов до сих пор в это верят). И так, пусть в нашей модели имеются четыре вида атомов:

  • Fire  - переносит  некую субстанцию, которая необходима для предания материальному объекту движения.

  • Water - переносит субстанцию, которая необходима для того, что бы затормозить материальный объект.

  • Ground - собственно, это и есть материальный объект.

  • Air - Субстанция, хранящая информацию (программу) о том, как должен объект Ground взаимодействовать с объектами Fire, Water а так же другими объектами Ground.

Все эти объекты "живут" в квадратном двумерном пространстве Universe.  Это пространство ограничено непроходимыми стенками. Пространство поделено на ограниченное число локаций, имеющих координаты x и y. В каждой локации может быть только один объект. Объекты могут двигаться строго вдоль оси x ли y (по диагонали двигаться не могут). Если надо поменять направление движения, то объекты должны остановиться. Скорость может быть равна 1 или -1. Случайным образом  любой из локаций может родиться пара Fire и Water, эти объекты разлетаются в разных направлениях. Если эти объекты встречаются то они взаимоуничтожаються.

Остальные объекты взаимодействуют следующим образом:

Ground. Если столкнулся с Fire, то поглощает его. Но емкость объекта для субстанции Fire ограничена.  Если емкость переполнена, то Fire отражается.  С Water взаимодействует аналогичным образом. Накопленную субстанцию Fire или Water может использовать для движения.

Air. При столкновении с Ground соединяется с ней. При этом заложенная в объекте программа запускается на выполнение. После выполнения этой программы Ground, который присоединил Air,  испускает копию присоединенного Air. При это с некоторой долей вероятности может произойти мутация.  Способы и вероятность мутации задается самой же программой, которая заложена в Air. Если Air столкнулся с Air то они отскакивают друг от друга.

Программа, которая будет храниться в Air представляет собой некий виртуальный код, похожий на ассемблер. Примерный набор команд:

  • Команда условного перехода.

  • Команда безусловного перехода.

  • Арифметические команды.

  • Логические команды.

  • Команды сравнения.

  • Команды управления объектом Ground.

Плюс еще надо сделать что то типа "зрения", что бы объекты Ground могли как то "видеть" окружающую реальность. Но на "зрение" они тоже должны расходовать энергию (Fire), да и на само выполнения программы. И еще, время жизни Air в свободном состоянии ограничено. Что бы не было перенаселения "вселенной". 

Естественно, это только первый шаг. В дальнейшем я планирую усовершенствовать и запрограммировать модель, так, что бы было интересно в это играть. Но потом я решил еще сильнее упростил первоначальную модель. И так, в ней остаются такие понятия, как двумерная вселенная (Universe), энергия (Energy), бактерии (Bacterium) и гены (Gene). Каждая бактерия может делать определенный набор действий:

  • Сканировать соседнюю ячейку и определить, что там: пусто или другая бактерия. При этом она может узнавать своих (по сигнатуре).

  • Брать энергию из окружающего пространства и накапливать ее.

  • Уничтожать другие бактерии и забирать у них энергию.

  • Делится, кладя свою копию в соседнюю ячейку. На это нужна энергия.

  • Активизировать защитный экран, мешающий другой бактерии убить ее. На поддержку экрана тратится энергия.

Бактерией управляют гены - в них заложена программа на псевдоязыке. При делении бактерии могут происходить мутации. Выполнение каждого шага программы  тратит энергию. Энергии в окружающей среде ограничено. Если одна бактерия нападает на другую, то она побеждает в случае, когда сила нападения больше силы защиты. Сила нападения равна потраченной энергии. Силы защиты - в на коэффициент больше, чем первоначальное количество затраченной энергии, но с каждой единицей времени защита ослабевает и ее приходиться подпитывать энергией.

Мутации могут быть следующих видов:

  • Случайное изменение байта программы.

  • Случайное удлинение гена.

  • Случайное укорачивание гена.

И так, первичная модель создана. Приступаю к разработке программы, о результатах напишу.

 

 

 
« След.
 
© 2024 Программирование - это просто
Joomla! - свободное программное обеспечение, распространяемое по лицензии GNU/GPL.
Русская локализация © 2005-2008 Joom.Ru - Русский Дом Joomla!
Design by Mamboteam.com | Powered by Mambobanner.de
Я принимаю Яндекс.Деньги