![](https://habrastorage.org/storage2/b8c/0d1/465/b8c0d1465305ddcc2856e9ccb62e5c31.jpg)
Приветствую тебя, коллективный хабраразум, поздравляю с Новым Годом! УРА!
Некоторое время назад я решил постичь
Под катом — много картинок и мало текста. Описание программки и пара опытов.
Суть проста — в ограниченном пространстве (500x500 пикселей) «живут» бактерии. Каждая бактерия изображается синим или красным пикселем на белом фоне в зависимости от принадлежности к синей или красной популяции. Сразу оговорюсь, что цвета здесь играют чисто декоративный характер. Красные бактерии живут так, будто нет синих и наоборот.
![](https://habrastorage.org/storage2/a4b/e4f/ebf/a4be4febf67eb70eb7950e78b5e1d759.png)
Бактерия сама по себе примитивна. Она ползет в случайном направлении и случайным образом чуть-чуть изменяет свой вектор скорости.
Через случайный промежуток времени бактерия делится на две бактерии, при этом скорость «детей» наследуется от бактерии, их породившей (примитивная передача генов).
Если много бактерий скапливается в одном месте, то они начинают погибать (имитация нехватки пищи).
В программке предусмотрен режим (оставлять след), когда предыдущий кадр анимации не стирается, а новый рисуется поверх старого. Благодаря этому можно наблюдать маршруты, по которым движутся бактерии. Вот, как выглядит движение одной бактерии с последующим её делением:
![](https://habrastorage.org/storage2/945/3e6/17e/9453e617e7d5c0c42275a550248d0785.jpg)
Но жизнь бактерий была бы прекрасна, если бы не было нас — ученых, которые жаждут исследований и опытов. Именно для нас, справа предусмотрены несколько инструментов влияния на жизнь в «чашке Петри».
Все они, как мне кажется интуитивно понятны, но на всякий случай:
Во первых, можно начать все сначала, убить всех бактерий:
![](https://habrastorage.org/storage2/4f6/1fa/6d3/4f61fa6d3ee9ee9603b31f318224dc7d.jpg)
Можно задать течение среды в какую-нибудь сторону, чтобы бактерии начало сносить:
![](https://habrastorage.org/storage2/93a/e87/80a/93ae8780a266d27ccf4b8823235357f6.jpg)
Можно закручивать бактерии в вихре, будто их сливают в унитаз :)
![](https://habrastorage.org/storage2/653/60d/505/65360d505229d32bc133441aacabdec8.jpg)
Можно сделать, чтобы бактерии раскидывало в стороны от щелчка мыши:
![](https://habrastorage.org/storage2/e5f/9eb/178/e5f9eb178a5f11b42317ccd51419e991.jpg)
Так же, кликом мышки можно создавать новых бактерий по одной:
![](https://habrastorage.org/storage2/bde/597/4c7/bde5974c77bdb080741f951e5cd00d2a.jpg)
Можно управлять скоростью течения времени, увеличивать его, замедлять или совсем останавливать:
![](https://habrastorage.org/storage2/73d/582/6be/73d5826be6b7497c69e82f5770b2cc64.jpg)
К сожалению, из-за оптимизации, при изменении этого параметра расчет количества ближайших бактерий работает не совсем точно.
Ну и уже известная настройка, стирать ли предыдущие кадры:
![](https://habrastorage.org/storage2/312/b08/37c/312b0837c1a182396ddd28cc98b4628d.jpg)
Кнопка обновить стирает все предыдущие кадры один раз.
Приступаем к самому интересному — к опытам
Дадим бактериям расплодиться на всю территорию. К слову — внизу отображаются численности популяций.
После чего включим не очень сильное течение в сторону. Бактерий начнет сносить в угол, где они будут погибать из-за «нехватки пищи». Но всякий раз оказывается, что есть бактерии, которые двигаются против течения. Их не много, но их не сносит в гибельный угол и они порождают таких же, как они сами — стойких к новым условиям. Через некоторое время всю отведенную территорию займет новая популяция, средняя скорость которой будет направлена против течения. Тем самым все будет выглядеть так, будто течения нет СОВСЕМ.
Отключаем течение — бактерий начинает сносить в обратную сторону. Но снова выживают «сильнейшие»…
Таким образом, можно говорить о некотором привыкании к новым внешним условиям. При этом алгоритм привыкания не был заложен изначально.
Бактерии даже могут привыкнуть к не очень сильному «вихрю — смыву в унитаз», или наоборот к разбрасыванию «смерчем» в разные стороны.
Возможно, привыкание, приспособление реальных организмов в некоторых случаях имеет похожую природу. Может быть благодаря этим механизмам у нас сейчас 4 руки и три глаза.
А может быть, тайна искусственного интеллекта кроется за системами роевого интеллекта. Скоро узнаем!
Собственно сама flash-программка:
вконтакте
Для тех, кто не зарегистрирован вк:
тут
P.S.
Для тех, кого не тронула «интеллектуальность» бактерий: можно просто пофантазировать и порисовать интересные картинки:
![](https://habrastorage.org/storage2/e3d/483/ad9/e3d483ad909f1de5400251fb2b268ddb.jpg)
![](https://habrastorage.org/storage2/85a/6c6/1a7/85a6c61a705b942bf9f23be3ca279208.jpg)
![](https://habrastorage.org/storage2/554/82d/963/55482d963a1092cb2b2066b1c7544439.jpg)
P.P.S
Перед написанием этого топика я немного поискал общей информации по похожим темам.
Роевой интеллект в Википедии
Немного практического применения:
Алгоритм роя частиц на Хабре
Муравьиные алгоритмы на Хабре
Клеточный автомат в Википедии
Спасибо за внимание!
UPD
добавляю исходники. FlashDevelop.
Код кривоватый т.к. писал с целью разобраться в AS3, однако довольно понятный
исходники