Как стать автором
Обновить

Коллективный разум бактерий или роевой интеллект

Время на прочтение 3 мин
Количество просмотров 16K

Приветствую тебя, коллективный хабраразум, поздравляю с Новым Годом! УРА!
Некоторое время назад я решил постичь всемогущий Actionscript 3.0. Дабы сразу опробовать этот инструмент, я взялся за написание небольшой программки, которая бы имитировала жизнь бактерий. Как мне пришла эта мысль в голову — точно уже не вспомню, но результат оказался для меня неожиданным и довольно интересным.
Под катом — много картинок и мало текста. Описание программки и пара опытов.

Суть проста — в ограниченном пространстве (500x500 пикселей) «живут» бактерии. Каждая бактерия изображается синим или красным пикселем на белом фоне в зависимости от принадлежности к синей или красной популяции. Сразу оговорюсь, что цвета здесь играют чисто декоративный характер. Красные бактерии живут так, будто нет синих и наоборот.

Бактерия сама по себе примитивна. Она ползет в случайном направлении и случайным образом чуть-чуть изменяет свой вектор скорости.
Через случайный промежуток времени бактерия делится на две бактерии, при этом скорость «детей» наследуется от бактерии, их породившей (примитивная передача генов).
Если много бактерий скапливается в одном месте, то они начинают погибать (имитация нехватки пищи).

В программке предусмотрен режим (оставлять след), когда предыдущий кадр анимации не стирается, а новый рисуется поверх старого. Благодаря этому можно наблюдать маршруты, по которым движутся бактерии. Вот, как выглядит движение одной бактерии с последующим её делением:


Но жизнь бактерий была бы прекрасна, если бы не было нас — ученых, которые жаждут исследований и опытов. Именно для нас, справа предусмотрены несколько инструментов влияния на жизнь в «чашке Петри».

Все они, как мне кажется интуитивно понятны, но на всякий случай:
Во первых, можно начать все сначала, убить всех бактерий:


Можно задать течение среды в какую-нибудь сторону, чтобы бактерии начало сносить:


Можно закручивать бактерии в вихре, будто их сливают в унитаз :)


Можно сделать, чтобы бактерии раскидывало в стороны от щелчка мыши:


Так же, кликом мышки можно создавать новых бактерий по одной:


Можно управлять скоростью течения времени, увеличивать его, замедлять или совсем останавливать:

К сожалению, из-за оптимизации, при изменении этого параметра расчет количества ближайших бактерий работает не совсем точно.

Ну и уже известная настройка, стирать ли предыдущие кадры:

Кнопка обновить стирает все предыдущие кадры один раз.

Приступаем к самому интересному — к опытам


Дадим бактериям расплодиться на всю территорию. К слову — внизу отображаются численности популяций.
После чего включим не очень сильное течение в сторону. Бактерий начнет сносить в угол, где они будут погибать из-за «нехватки пищи». Но всякий раз оказывается, что есть бактерии, которые двигаются против течения. Их не много, но их не сносит в гибельный угол и они порождают таких же, как они сами — стойких к новым условиям. Через некоторое время всю отведенную территорию займет новая популяция, средняя скорость которой будет направлена против течения. Тем самым все будет выглядеть так, будто течения нет СОВСЕМ.
Отключаем течение — бактерий начинает сносить в обратную сторону. Но снова выживают «сильнейшие»…

Таким образом, можно говорить о некотором привыкании к новым внешним условиям. При этом алгоритм привыкания не был заложен изначально.

Бактерии даже могут привыкнуть к не очень сильному «вихрю — смыву в унитаз», или наоборот к разбрасыванию «смерчем» в разные стороны.

Возможно, привыкание, приспособление реальных организмов в некоторых случаях имеет похожую природу. Может быть благодаря этим механизмам у нас сейчас 4 руки и три глаза.

А может быть, тайна искусственного интеллекта кроется за системами роевого интеллекта. Скоро узнаем!

Собственно сама flash-программка:
вконтакте
Для тех, кто не зарегистрирован вк:
тут

P.S.
Для тех, кого не тронула «интеллектуальность» бактерий: можно просто пофантазировать и порисовать интересные картинки:




P.P.S
Перед написанием этого топика я немного поискал общей информации по похожим темам.
Роевой интеллект в Википедии
Немного практического применения:
Алгоритм роя частиц на Хабре
Муравьиные алгоритмы на Хабре

Клеточный автомат в Википедии
Спасибо за внимание!

UPD
добавляю исходники. FlashDevelop.
Код кривоватый т.к. писал с целью разобраться в AS3, однако довольно понятный
исходники
Теги:
Хабы:
+62
Комментарии 106
Комментарии Комментарии 106

Публикации

Истории

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн