Жизнь на частицах

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

Классический пример системы с простыми правилами и сложным поведением — клеточные автоматы, именно на них я и ориентировался, пытаясь подобрать правила. Конечно же, для клеточных автоматов правила будут в большинстве случаев проще. Но частицы могут быть красивее!

Под катом много мегабайт гифок.


Клеточный суп


Сначала я пошёл по стопам игры «жизнь»: у каждой частицы есть счётчик “перенаселения”, который равен сумме обратных квадратов расстояний до других частиц. Если этот счётчик меньше определённого предела, то есть соседей мало, то частица притягивается к другим частицам, а если соседей много — отталкивается. Если частицы пересекаются, то они отталкиваются в любом случае, чтобы не проходить сквозь друг друга.

Случайно раскидываем частицы по полю и смотрим, что выйдет.



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



Теперь наши “клетки” стали многослойными.

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

Поэтому идём дальше.

Игра в догонялки


Меняем правила игры. Больше не будем считать соседей. Пусть частицы будут просто притягиваться или отталкиваться в зависимости от их типов. Если все частицы одного типа, то тут всего 2 варианта: они либо все отталкиваются, либо все притягиваются.



Если есть больше типов частиц, то тут можно комбинировать, какие к каким будут притягиваться, а от каких отталкиваться.

Скрытый текст
Помимо притяжения/отталкивания можно было бы добавить и другие варианты, например, чтобы частицы никак не реагировали друг на друга, или добавить коэффициенты к силе воздействия, но у меня не получилось найти в этом какого-либо интересного поведения.

Любое такое правило можно представить в виде матрицы N*N, где N — количество типов частиц, а в каждой ячейке либо притяжение, либо отталкивание. Притяжение обозначим за 0, а отталкивание — за 1. Тогда любая матрица соответствует определённому числу, например, матрица $\begin{bmatrix} 1 & 0\\ 1 & 0 \end{bmatrix}$ будет означать 0101, то есть 5 (последняя цифра в двоичном виде — первая в матрице). Количество различных матриц для правил равно $2^{N^2}$. Например, для двух типов частиц получится 16 правил.



Может показаться, что правило 3 такое же, как правило 7, но если перевести их в матрицы, то получится $\begin{bmatrix} 1 & 1\\ 0 & 0 \end{bmatrix}$ и $\begin{bmatrix} 1 & 1\\ 1 & 0 \end{bmatrix}$, а это значит, что в правиле 7 только бежевые притягиваются друг к другу. В то время как в правиле 3, бежевые притягиваются еще и к красным. Но из-за низкой плотности красных это оказывает малозаметный эффект. По-настоящему же одинаковыми правилами можно назвать, например, 3 и 12, так как всё поведение частиц идентично, только цвета поменялись местами. Если оставить только правила с уникальным поведением, то из 16 правил у нас останется 10. Для трёх типов частиц из 512 возможных комбинаций остаётся 104 уникальных, а для четырёх — 3044 из 65536 Получается последовательность 2, 10, 104, 3044.

Но вернёмся к нашим десяти правилам.



В глаза бросается правило 9, которое является матрицей $\begin{bmatrix} 1 & 0\\ 0 & 1 \end{bmatrix}$, где одинаковые отталкиваются, а разные притягиваются. Случайно разбросанные частицы быстро образуют “нити” и на этом застывают.

Так же застывают правила 1 и 15: они эквивалентны двум единственным правилам для одного типа частиц (предыдущая анимированная гифка). Обычно застывают все правила, матрицы которых симметричны. Еще есть правила 2, 3, 5, и 11 с несимметричными матрицами. Это значит, что один вид частиц притягивается, ко второму, а второй отталкивается от первого. Начинаются “догонялки”.



Правило 3 слишком стабильное, в нём “догонялки” в какой-то момент прекращаются, а если и возобновляются, то редко и ненадолго. Правило 11 — слишком хаотичное. Остаются 2 и 5.

Можно их как-то скомбинировать, чтобы было еще интереснее. Я подобрал правило 105 для трёх цветов, то есть матрицу $\begin{bmatrix} 1 & 0 & 0\\ 1 & 0 & 1\\ 1 & 0 & 0 \end{bmatrix}$, и такое вот поведение:



Это всё выглядит живо, но неустойчиво. А как же определённые повторяющиеся “живые” существа? Как же поиск осцилляторов и глайдеров? Надо снова менять правила!

Плавающая жизнь


Не будем сильно менять правила. Вместо этого добавим новую фичу. Теперь частицы на небольшом расстоянии будут образовывать связи. Если частицы связаны, то они постоянно притягиваются друг к другу. Это притяжение не ослабевает с расстоянием. Но, если расстояние выше определённого порога, то связь рвётся.

Я попробовал разные варианты с тремя цветами и остановился на том, где красные могут образовывать только одну связь, бежевые — три, а голубые — две, то есть можно обозначить максимальные связи в виде $\begin{bmatrix} 1\\ 3\\ 2 \end{bmatrix}$.

При этом, красные не могут связываться с другими красными, бежевые и голубые могут иметь не больше двух связей с частицами своего цвета и не больше одной с частицами каждого другого цвета. Это всё в виде матрицы: $\begin{bmatrix} 0 & 1 & 1\\ 1 & 2 & 1\\ 1 & 1 & 2 \end{bmatrix}$



Я поигрался с разными правилами притягивания/отталкивания, и мне понравилось $\begin{bmatrix} 1 & 1& 0\\ 1 & 1 & 1\\ 1 & 1 & 1\end{bmatrix}$, то есть красные притягиваются к голубым, а во всех остальных случаях все отталкиваются.



Кажется, будто эти существа плавают в жидкости или машут крыльями.





Пара осцилляторов и пара глайдеров.

Неподвижные фигуры легко получить: нужно лишь не использовать красный и голубой вместе, так как в этих правилах это единственная комбинация с притяжением.





Но иногда движение возникает и при таких цветах. Некоторые фигуры начинают раскручиваться, отталкиваясь от других, получаются “шестерёнки”.



Заключение


В дальнейшем было бы интересно сравнивать полученные фигуры, собрать статистику по частоте их появления.

Еще можно эти правила использовать как основу для создания более сложных существ с едой, размножением, эволюцией.

Можно построить из этого логические схемы, собрать калькулятор, процессор лучше не надо.

Поиграть


Реализация на JS от v1vendi

Исходники


Код на Java

Похожие крутые штуки


Космики
Particle Life
Clusters
Поделиться публикацией

Комментарии 65

    +25
    Но это же просто потрясающе!
      +2
        0
        Действительно очень похоже. Я даже совсем недавно прочитал вашу статью, пока писал свою. Добавил еще на нее ссылку в конце.
          +1
          Как вариант — добавить в ваш «первобытный бульон» валентные связи, и станет можно моделировать молекулярную эволюцию.

          habr.com/ru/post/374003
        –2
        Прикольно. Но я думаю, что жизнь, или даже ее минимально адекватная модель, должна быть чем-то существенно большим, чем «интересным поведением». Да еще, если поведение было фактически отобрано вручную.
        Есть такая тема современных исследований, как эволюция химических молекул еще до появления жизни, какой мы ее знаем. Иными словами ищут кирпичики жизни в несложной органической химии. Интересная визуализация достигнутого в этих исследований была бы очень полезной и поучительной.
          +22

          Имеется ввиду игра «Жизнь» Джона Конвея, а не "способ существования белковых тел".

            –1
            Не совсем так. Между ними тесная связь.
            0
            «поучительной»? :\
              0
              Алгоритмы наподобие этого тем и интересны, что простые закономерности приводят к возникновению объектов со сложными свойствами. Если отбирать поведение вручную, это уже не то.
              0
              Где можно пощупать исходный код?
                +3
                Добавил ссылки в конце.
                +2
                Еще можно эти правила использовать как основу для создания более сложных существ с едой, размножением, эволюцией.
                Да, генетика в этой работе прямо напрашивается. А ещё было бы интересно прикрутить какую-то примитивную нервную систему (сенсоры, проводники/нейроны, мышцы), которые позволили бы получить более сложное поведение даже на небольшом числе акторов.
                  0
                  10E14 атомов — в одной клетке человека.

                    0
                    Я сомневаюсь, что стоит задача сделать реалистичную симуляцию на атомарном уровне или вообще приравнять эти абстрактные точки к реальным атомам, потому и говорю о функциях чуть более высокого порядка, за которыми было бы интересно наблюдать.
                  +2
                  Кажется, я начал понимать, как отдельные атомы начали образовывать молекулы, а молекулы — более сложные структуры. Хорошая статья.
                    0

                    Кстати, было бы интересно добавить параметры поведения группам частиц, в зависимости от их состава.

                      0
                      Ага. И, возможно, эволюцию параметров.
                      0
                      Есть ещё слаевская про «частицы на пальцах», интересная.
                      sly2m.livejournal.com/644080.html

                      По поводу симулятора — в теории можно попробовать симулировать законы обьединения, учитывая кол-во электронов на внешних орбиталях. То же самое, только в 3d.

                      По фану можно взять Houdini и написать там всю эту математику на VEX для частиц.
                      Тогда ещё и красиво посчитать можно будет.
                        0
                        Очень рекомендую к прочтению книгу товарища Михаила Никитина — Происхождение жизни. От туманности до клетки, М., «Альпина нон-фикшн», 2016. В ней даётся компиляция современных знаний нашей цивилизации о возникновении, планет, сложных молекулярных систем и Жизни.
                        +16
                        Вспомнил вот это.
                        В 2002 году Microsoft затеяла игру для программистов многих стран мира. ...Microsoft создала террариум. Всем желающим предложили населить его растениями и животными — травоядными и хищниками.

                        Программист задавал свойства существа (дальность зрения, максимальная скорость движения, сила атаки, сила защиты и т.п. — общая сумма была ограничена), алгоритмы его поведения (по какой траектории передвигаться; в каких случаях атаковать; есть все, что обнаружишь, или оставить немного на развод и т. п.). Трава росла. Травоядные ели траву. Хищники ели травоядных и друг друга.
                        Тот, кто больше ел, больше размножался. Задача состояла в том, чтобы размножиться как можно больше, вытесняя конкурирующие разновидности хищников, травоядных и т.п. Игра показала, что россияне плохо умеют изготовлять хищников, зато у них замечательно получаются травоядные. В ходе игры российские «коровы» победили всех конкурентов — за счет уникальной стадности и редкостного умения пакостить травоядным представителям других наций. По сути, российские разработчики были единственными, кто додумался, как сделать травоядных по-настоящему стадными. По правилам игры, животным не разрешалось напрямую обмениваться информацией. Поэтому, пасущаяся с краю стада «корова» не могла сообщить коллегам об увиденной «траве» или приближающихся хищниках.

                        Россияне придумали следующий алгоритм стадности. Если одна корова видела бегущую корову своего вида — она начинала бежать в том же направлении. Любопытно, что никто, кроме россиян, не додумался до такой идеи. По словам организаторов игры, именно эта не рассуждающая массовость принесла россиянам победу. Второе изобретение российских программистов было поизощреннее. Если в поле зрения их коровы не было травоядных своего вида — а сплошь чужаки, российская корова с максимальной скоростью съедала всю доступную траву, ничего не оставляя «на развод». И погибала от голода вместе с чужаками. Сложная смесь самопожертвования и ксенофобии.

                        Обратите внимание — жертвуя собой, отечественные травоядные боролись не с хищниками. Они мешали хорошо жить травоядным чужой породы. Конечно, не совсем правильно выводить национальную психологию из несложной разработки нескольких программистов — хотя бы и победителей крупного международного соревнования. Наверное, описанные выше свойства отечественных творений — не общий принцип. Но, возможно, достаточно показательная иллюстрация.
                          0
                          Считаю последний абзац достаточно оскорбительным
                            0
                            Что именно Вас оскорбило?
                              +4
                              … Конечно, не совсем правильно выводить национальную психологию из несложной разработки нескольких программистов… Но, возможно, достаточно показательная иллюстрация

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

                              Индуктивное рассуждение какое-то неуместное у автора тех строк
                                +5
                                Что именно Вас оскорбило?

                                То, что спустя 17 лет не потеряло актуальности )
                            +13
                            Есть целая книга «Designing Beauty: The Art of Cellular Automata» под редактурой Andrew Adamatzky. Там много подобной красоты.

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

                            p.s. Никого не хотел обидеть, просто до сих пор вспоминаю отношение некоторых служителей науки, которые слышали термин «клеточные автоматы» и им на ум сразу приходило две вещи — «Жизнь» и «Игра». А у них мол там серьезное мат. моделирование, а вы тут со своими играми… Хотя мой бывший науч. рук рассказывал, что в когда она в 80ых защищалась, то там вообще чуть ли ее не в лженауке объвиняли.
                              +1
                              Но меня, как человека написавшего диссертацию по теме клеточных автоматов, всегда расстраивает тот факт, что многие относятся к ним как к игрушке. Но клеточные автоматы это серьезная математическая модель, суть которой кратко — «сколь угодно сложное поведение пораждается наборами простых правил»

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


                              Не надо это считать каким-то уничижительным признаком.

                              +1
                              Ох какая милота.
                              Не совсем в тему, но напомнило игру powder game в ней прорва возможностей и всевозможных симуляций, от тепло- и электропроводности до возможности сгорать и распадаться с выделением частиц. Энтузиасты активно пилят разные интересные сцены, типа атомных реакторов или, например, симуляции электрических схем.
                                0
                                Хотел было поправить, оказывается, такая игра тоже есть, а я вспомнил про Powder toy
                                image
                                  0
                                  Вот это мощно! Надо взглянуть, спасибо.
                                    +4
                                    О, помню ее!

                                    Делал там весьма компактный и мощный протонный лазер с фотонной накачкой водорода и титановыми рефлекторами! Странно то, что нигде такой конструкции не видел!

                                    Save id:1358341

                                    Принцип работы:

                                    Фотонный генератор «PCLN + PHOT» испускает фотоны влево и в право, те что уходят налево преотражаются от двух полосок титанового отражателя (до сих пор не знаю, нашел ли кто еще этот баг/фичу).
                                    Фотоны уходящие вправо проходят через разделитель среды “FILT” блока накачки/генератора с водородом «CLNE + H2».

                                    Облученный фотонами водород распадается на протон «PROT» и электрон «ELEC».
                                    Для поглощения избытка электронов и предотвращения детонации водорода используется поглотитель “PVOD”.
                                    Те фотоны, что не распались отражаются от «HSWC» справа и снова проходят через «FILT», отражаются от титана и опять поступают в блок генерации/накачки (и так пока все не распадутся или время жизни фотонов не иссякнет).

                                    Блок накачки/генерации находясь внутри блока нагревателя, подогревается для увеличения КПД. Перегрева водорода и титана не происходит, так как поступающие фотоны и водород успевают охладить начальную часть блока.

                                    Сам нагреватель состоит из генератора плазмы, с которого тепло передается на алмаз «DMND», который передает тепло на «HSWC». Протоны спокойно проходят через последний и снимают тепло.

                                    Собственно на выходе уже будет плотный пучок протонов разогретых до температуры близкой к плазме (~8000-9000).
                                    Время выхода в рабочий режим <1с на core i5-4258U и очень низкая нагрузка на CPU во время работы.
                                    Плавит почти все — мгновенно.

                                    P.S. Цель была сделать компактно и мощно, а не максимально точно. Для повышения копийности в качестве нагревателя можно использовать газ «NBLE», который превращается в плазму при подаче разряда «SPRK».

                                    P.P.S. Тогда мне хотелось играть с лазерами. Этот способ оказался безопаснее.
                                  0
                                  Результат внешне напоминает игру Cell Lab. Но там моделировалось именно поведение клетки, рост, деление и взаимодействие с другими клетками(поедание их или заражение своей ДНК)
                                    +2
                                    Забавно. Подумалось, что мы живём в одной такой клетке с одним набором правил, а рядом есть вселенные со всеми другими возможными наборами. Но им просто не повезло, что их правила не дают возможности образования таких устойчивых структур как молекулы и звёздные системы. И да, как вы уже поняли, я обожаю антропный принцип ;)
                                      0
                                      Космолог Макс Тегмарк высказал предположение, названное гипотезой математической вселенной, что любому математически непротиворечивому набору физических законов соответствует независимая, но реально существующая вселенная.
                                        0
                                        Я бы даже скорее предположил, что параметры этих законов плавно меняются в пространстве.
                                        +1
                                        Вот тут Лоуренс Краусс в довольно увлекательном интервью именно про это говорил. Осторожно, 2 часа!
                                          0
                                          Спасибо, интересная беседа.
                                        0
                                        Вот один человек так лямбда-термы вычисляет
                                        mathoverflow.net/questions/300273/what-is-chemlambda-in-which-ways-could-it-be-interesting-for-a-mathematician
                                          +3
                                          Я бы все-таки не спешил, как вы и тут в комментариях предлагают, сравнивать это сразу с жизнью. Вы близки, но это только начало пути. Поясню развернуто.
                                          Логика «эти притягиваются, а эти отталкиваются» реализуется наиболее наглядно на молекулярном уровне. Внутри любой молекулы атомы и их группы осциллируют, дрожат, поворачиваются, совершают пружинные и ножницеобразные движения. У каждой группы атомов при определенном соседстве есть такой строго определенный паттерн движений, достаточно хорошо описываемый. На этом эффекте основана вся инфракрасная спектроскопия. Даже небольшие и несложные молекулы — жирные кислоты, органические красители, олигосахариды — демонстрируют такие вещи, как полярность, различную гидрофильность/гидрофобность различных фрагментов и остатков (вспомним, что типичное поверхностно-активное вещество — это гидрофильная заряженная «голова» с гидрофобным углеводородным «хвостом»), сворачиваются в мицеллы. Эти их свойства активно используют для создания моющих средств, эмульгаторов, растворителей. Вещества со сродством к определенным субстратам используют как красители, защитные покрытия.
                                          Дальше-больше: различные аминокислоты имеют разную гидрофильность и различный заряд, что определяет укладку цепочки самыми разнообразными формами, которые все же имеют ряд наиболее «удобных», энергетически выгодных. Так устроены все вторичные белковые структуры, основа самых главных биологических молекул. Все это из разряда «красный отталкивается от голубого и сворачивается в клубок вместе с зеленым».
                                          А жизнь — это уже больше про: питательный субстрат, движение по градиенту концентрации питательного субстрата, хемоаттрактанты, движение за источником тепла/света и фазы фотосинтеза, трофность питания и простейшие биохимические циклы, многоклеточность и эмбриональные индукторы (почитайте про организатор Шпемана например).
                                          То, что вы делаете — очень круто! Продолжайте, попробуйте создать развивающееся многоклеточное, как Марков, например (https://www.youtube.com/watch?v=LA1n6OTF5RI) или пищевую цепочку, как тут: habr.com/ru/post/336330, или автотрофов в среде с меняющимся газовым составом. Переходите от простеньких систем к настоящим живым!
                                            +4
                                            Там выше уже пояснили, имеется в виду «жизнь» Конвея, а не способ существования белковых тел.
                                            0
                                            посмотрел код, сила притяжения или отталкивания обратно-пропорциональна квадрату расстояния между частицами (если между ними нет линка): 1/d2
                                            Интересно было бы поизучать другие анизотропные потенциальные поля, у нас в институте была подобная лаба по компьютерному моделированию частиц, мне попалось задание про поле, в котором взаимодействие частиц было пропорционально sin(αx + ϐ)/x2. Тоже интересные структуры появлялись.
                                              0

                                              Вот тут тоже используются интересные функции, тоже прикольно выглядит. Я пытался делать подобное, но такой же плавности добиться пока не удалось.

                                              0
                                              Мне это напомнила вот эту старую игру www.swimbots.com.
                                              В ней реализованно
                                              более сложных существ с едой, размножением, эволюцией.
                                                +1

                                                А можно то же самое в 3D?

                                                  0
                                                  Полный восторг.
                                                  Сколько частиц можно взять чтобы эта молекулярная динамика работала в реальном времени?
                                                    +1
                                                    до 500 на CPU 15-летней давности обсчитывалось норм в рантайме без рывков, а если на GPU обсчитывать (а расчеты параллелятся хорошо), и сразу же через него отображать, то я думаю, что до 10 миллионов спокойно дожать можно.
                                                      +2
                                                      Что хорошо параллелятся согласен, но все же число вычислений пропорционально квадрату числа частиц, хотя сэкономить всегда можно. Срочно переводим в 3D — что, в общем-то совсем не сложно, садимся в трансгалактический аппарат и летаем по разным частям вселенной, отличающимися различными матрицами взаимодействия. Не забываем отослать заявку в 20th Century Fox на для анимации фантастического боевика. Эх, жалко своих дел по горло.
                                                        +4
                                                        Не нужно считать силы взаимодействия в разных частях галактики, достаточно определиться с максимальным расстоянием между взаимодействующими объектами, и можно свести задачу к разбиению пространства, что уже O(log N).
                                                    0
                                                    Завораживает.
                                                      +2
                                                      Прекрасная работа! Когда-то, лет 15 назад тоже нечто подобное делал, только добавил еще на расстояниях меньше радиуса частиц силы отталкивания. При достижении блоком частиц определенной массы они слипались. У вас, как я понял — просто гасится энергия при столкновении (нет отталкивания и нет пролета сквозь). И расцветку-яркость менял в зависимости от кинетической энергии частицы в заданном поле. Но вот по поводу того, что можно несколько цветов сделать для разных типов частиц не придумал.

                                                      Надо будет поэкспериментировать. Такие демонстрации являются своеобразными игрушка для нас — программистов ;) Сидишь — играешь с законами своего мира, и получаешь необычный результат.
                                                        +1
                                                        Пробовали варьировать начальную температуру? И трение поставить на 0, тогда теоретически любая конфигурация будет двигаться вечно.
                                                          +7
                                                          Создателям клеточных автоматов может пригодиться еще один правило — из живой природы, от настоящих «клеточных автоматов»

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

                                                          Кроме того, туфельки оказались способны запоминать, какие частицы съедобны, а какие нет. Ученые бросали им смесь разных частиц. Сначала подопытные глотали все подряд, но потом они выбирали только съедобные.

                                                          Более того проводились такие опыты — брали пробирку, одну часть освещали, а другую нет (парамеция-туфелька умеет различать освещенность). При заплыве на «неправильную» территорию ученые пропускали сквозь воду микроимпульс тока — не смертельный, но неприятный. Через некоторое время инфузории, рандомно плавающие туда-сюда, перестали заплывать на «опасный» участок. Более того, было видно, что они разворачиваются до того, как пересекут границу освещенности.

                                                          Несколько десятилетий подряд исследователи ставили все новые и новые опыты и приходили в восторг от способностей одноклеточных. Эти эксперименты ставили под сомнение сам факт, что для обучения нужен хоть какой-то мозг или хотя бы специализированные нервные клетки (которые появляются толкьо у многоклеточных).

                                                          Поскольку это комментарий под статьей о клеточных автоматах, вы уже можете догадаться, какое правило использовали парамеции туфельки.

                                                          Действительно, мозг для этого правила был не нужен.

                                                          Правило обучающихся туфелек
                                                          1. Инфузории при попадании в неблагоприятные условия выбрасывают тучи стрекательных палочек.
                                                          2. При любом контакте со своими стрекательными палочками — они стремятся покинуть территорию.

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


                                                          Да, забыл сказать — почти сразу ученых начала смущать такая особенность туфелек, как способность получать знания от предыдущих испытуемых, заплывших не туда. Тогда эта концепция была свежа, особенно у биологов, а сейчас, когда мы знаем секрет, мы можем выбирать это правило в качестве одной из базовых гипотез.

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

                                                          Привыкание у одноклеточных организмов...
                                                          Привыкание у одноклеточных организмов реализовано за счет истощения запаса химических веществ, который вызывает реакцию на раздражитель.


                                                          И еще — повышение раздражительности. Оно было замечено уже на опытах с многоклеточными гидрами, у которых отмечается повышение скорости реакции на любой раздражающий импульс. У них есть уже нервные клетки, но раздражительность относительно просто реализуется простым алгоритмом:

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


                                                          Два последних правила скорее относятся к внутреннему устройству одноклеточных и не совсем подходят для «чистых» клеточных автоматов, которые по сути являются точками. Но наверно, похожие рефлексы можно имитировать, если создавать «многоклеточные» существа из кучи специализированных клеточных автоматов, часть из которых будет играть роль медиатора.

                                                          PS: похожий принцип используется в "муравьином алгоритме".

                                                            +4
                                                            Нагло переписал Вашу реализацию на JavaScript :)
                                                            v1vendi.github.io/particle_automata
                                                              0
                                                              О, спасибо, хоть посмотрел. Правда, Ваша реализация CPU грузит реально «нипадеццки» ;)
                                                                0
                                                                Там довольно забавная ситуация, рендеринг занимает даже больше ресурсов, чем расчёт элементов
                                                              0
                                                              Очень, очень круто и завораживающе!
                                                                0
                                                                Onigiri, Вы бы добавили в README.md на гитхабе инструкцию, как запустить Вашу программку? Думаю, что и ссылка на рабочий апплет (GitHub дает github.io для хостинга, если не ошибаюсь), будет не лишней.

                                                                P.S. Еще туда неплохо бы добавить минимальное описание в README.md; если совсем лениво, вставьте ссылку на эту статью (и on English через google translator) ;)
                                                                  0
                                                                  Несколько месяцев назад смотрел описание устройства такой «жизни» на ютуб.

                                                                  youtu.be/Z_zmZ23grXE

                                                                  Тем не менее статья отличная, спасибо!
                                                                    0
                                                                    Почему бы не написать статью в журнал из перечня ВАК? Поработать с источниками — и вперед.
                                                                      0
                                                                      Если у вас покояшиеся объекты начинают раскручиваться, значит ваш код не сохраняет энергию. Консервативную схему применить не пробовали?
                                                                        0
                                                                        Да, но с сохранением энергии гораздо сложнее будет подобрать красивое поведение. Поэтому, допустим, что энергия незаметно поступает извне :)
                                                                          0
                                                                          Это вполне нормально, если например допустить, что частицы — это части больших молекул. Которые получают химическую энергию от АТФ.
                                                                        0
                                                                        Реально круто!
                                                                          +1

                                                                          вот думаю может к 3D приделать часть идей/ просто до этого нейронку тренировал шевелить связи )
                                                                            0
                                                                            Картинка над заголовком «Плавающая жизнь» чем то напоминает атомы. Они соударяются друг с другом и зеленоватые расщепляются :) В принципе я так понимаю что можно подобрать правила для полной эмуляции физики.
                                                                              0
                                                                              Может быть мне повезет, и кто-нибудь подскажет похожую вещь на python/matlab?

                                                                              Интересует динамика N частиц, когда я могу задать силу взаимодействия между частицами как функцию от их собственного месторасположения + месторасположения соседей.
                                                                              Я попытался по-быстрому написать код, но мне не хватает хорошей визуализации + оптимизаций под большое количество частиц (хотя бы 100).

                                                                              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                                              Самое читаемое