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

  • если чётное — делится пополам;

  • если нечётное — умножается на три и прибавляется один.

И так — до тех пор, пока не доберёшься до единицы.

В один из вечеров, случайно просматривая анимации паттернов Conway’s Game of Life, что-то щёлкнуло.

А если... числа Коллатца не просто последовательности, а клетки на сетке?

Довольно долгое блуждание по теме клеточных автоматов показало их огромное разнообразие, из знаменитых:

  • HighLife (B36/S23);

  • Day & Night (B3678/S34678);

  • Seeds (B2/S);

  • Replicator (B1357/S1357);

  • Wireworld (B3/S23, но с 4 состояниями);

  • Brian’s Brain (B2/S/3);

  • Critters (B3/S23, но с инверсией и сдвигом).

Что примечательно, многие из существующих клеточных автоматов имеют родителя (известный клеточный автомат) и работают по его правилам, но с измененными или дополненным условиями.

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

  • работает с числами;

  • меняет числа по строгому правилу;

  • не останавливается — пока не доберётся до 1.

Получился Collatz Cellular Automaton (CCA) — клеточный автомат, в котором числа рождаются, растут, падают и воскресают, создавая сложные паттерны.

Создание Collatz Cellular Automaton

Шаг 1: Определим сетку

Создаём двумерную решётку размером N*N. Например 30*30, — достаточно для наблюдения за динамикой, но не слишком тяжело для расчётов.

Каждая ячейка содержит натуральное число — начальное значение задаётся случайно из диапазона [1, M], например, M = 1024.

import numpy as np
GRID_SIZE = (30, 30)
MAX_NUM = 1024

# Инициализация
grid = np.random.randint(1, MAX_NUM + 1, size=GRID_SIZE)

Шаг 2: Зададим правило обновления

Функция collatz_step применяет правило гипотезы Коллатца к одному числу:

def collatz_step(n):
    if n == 1:
        return np.random.randint(1, MAX_NUM + 1)  # Перерождение
    elif n % 2 == 0:
        return n // 2
    else:
        return 3 * n + 1

Ключевая идея: при достижении 1 число "умирает" и мгновенно "перерождается" как случайное число.

Это предотвращает замирание системы и создаёт вечный цикл жизни-смерти.

Шаг 3: Параллельное обновление всей сетки

Клеточный автомат требует одновременного обновления всех ячеек. Используем np.vectorize, чтобы применить функцию ко всей матрице:

grid = np.vectorize(collatz_step)(grid)

Шаг 4: Визуализация и анимация

Подключим matplotlib для отображения сетки. Цвет каждой клетки зависит от её значения:

import matplotlib.pyplot as plt
import matplotlib.animation as animation

fig, ax = plt.subplots(figsize=(8, 8))
im = ax.imshow(grid, cmap='plasma', vmin=1, vmax=MAX_NUM)

def update(frame):
    global grid
    grid = np.vectorize(collatz_step)(grid)
    im.set_array(grid)
    return [im]

ani = animation.FuncAnimation(fig, update, frames=200, interval=150, blit=True)
plt.show()

Классификация: к какому типу относится CCA?

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

По Вольфраму – CCA это гибрид класса IV:

  • Класс I: зоны упорядоченности вокруг 1

  • Класс II: цикл 4→2→1

  • Класс III: хаотические всплески от 3n+1

  • Класс IV: доминирует — возникают пространственные структуры, напоминающие рекурсивные деревья и токи

По структуре состояний – это Continuous-State Cellular Automaton:

  • В отличие от классических CA (где состояния ∈ {0,1}), CCA использует целые числа ∈ ℕ;

  • Это делает его частью семейства числовых или арифметических клеточных автоматов (ACA);

По динамике — это диссипативная система с регенерацией:

  • Диссипативная: среднее значение чисел убывает → стремление к единице;

  • С регенерацией: стохастический перезапуск при 1 → система никогда не замирает;

  • Это делает CCA аналогом биологической экосистемы:

    • Рождение → Развитие → Старение → Смерть → Возрождение.

По вычислимости — детерминированная система с элементом случайности

  • Правило — полностью детерминировано;

  • Но перезапуск при достижении единицы — стохастичен.

Заключение

Collatz Cellular Automaton – оказался довольно жизнеспособным клеточным автоматом, имеющим свое право на жизнь в семействе числовых или арифметических.

И самое интересное — он не исчерпан.

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

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

Например, такими опциями могли бы быть:

  • учитывать состояние ближайших 4/8 элементов;

  • «замораживать» состояние ближайших клеток, в случае перехода клетки из состояния 1 в новое случайное значение;

  • «замораживать» состояние нечетной клетки, если рядом все четные;

  • «замораживать» состояние четной клетки, если рядом все нечетные;

  • «ускорять» спуск четной клетки, если рядом все четные, делая два шага;

  • «ускорять» спуск нечетной клетки, если рядом все нечетные, делая два шага.

Эта малая часть опций, которые возможно внести в работу рассмотренного автомата. Проведя довольно большое количество экспериментов, можно смело сказать, что все они также жизнеспособны, как и сам Collatz Cellular Automaton. Это дает возможность усложнить всю систему в целом, локально дополняя или усиливая изначальные правила.

Спасибо за Ваше внимание, надеюсь Вам было интересно.

Комментарии (20)


  1. IgDem
    17.11.2025 04:13

    Да, без взаимодействия клеток это какая-то странная Жизнь.

    Но какую-нибудь анимацию было бы интересно посмотреть. Жаль, что не опубликовали.


    1. Sayman22 Автор
      17.11.2025 04:13

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


      1. IgDem
        17.11.2025 04:13

        Жизнь мизантропов какая-то.


  1. maxmodeller
    17.11.2025 04:13

    Звучит интересно, но гифку с блэкджеком и анимацией очень нужно!


    1. Sayman22 Автор
      17.11.2025 04:13

      Принял, постараюсь в ближайшее время довыложить


  1. Tzimie
    17.11.2025 04:13

    И перерождается как случайное число? В каком диапазоне? И это сразу делает всю систему недетерминированной


    1. Tzimie
      17.11.2025 04:13

      Берите сумму по некоей окрестности


    1. Sayman22 Автор
      17.11.2025 04:13

      Диапазон указан в самом начале. От 1 до 1024. Максимальное значение можно задавать, как начальное условие.

      Система детерминирована в пределах как раз этого заданного числа и всегда придет к 1.

      Зачем брать сумму по некой окрестности? Если ставить эту сумму в центральный элемент, то будут нарушена изначальная логика работы автомата и он уже не будет подчиняться формуле в Гипотезе Коллатца.

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


  1. wataru
    17.11.2025 04:13

    Числа случайные, все друг от друга независимые. Никакой это не автомат вообще, а просто N*N независимых последовательностей коллатца. И ничего по ним не видно.


    1. Sayman22 Автор
      17.11.2025 04:13

      Такую систему можно формально считать клеточным автоматом с нулевым радиусом взаимодействия (радиус = 0), то есть окрестность Мура/фон Неймана состоит только из самой клетки.

      Это декомпозируемый клеточный автомат, эквивалентный бесконечному набору копий динамической системы.

      Это не автомат в классическом его понимании, но автомат.

      А ещё , я привёл специально критерии по классификация.

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

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


      1. wataru
        17.11.2025 04:13

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


        1. Sayman22 Автор
          17.11.2025 04:13

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

          Но вижу, что вы действительно не дочитали до конца и не вникали


          1. wataru
            17.11.2025 04:13

            В классических автоматах нет радиуса 0.


            1. Sayman22 Автор
              17.11.2025 04:13

              Прочитайте заключение. Там все написано. Опция один, будет давать зависимость от 4 или 8 ближайших клеток, как делается в большинстве классических автоматах. А дальше по этим зависимым клеткам наслаиваются другие опции, например с заморозкой или ускорением.

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


              1. wataru
                17.11.2025 04:13

                Ключевое слово: "Будет". В статье только какие-то наброски эскизов идей (и те, похоже, выдавленные нейросетью).


                1. Sayman22 Автор
                  17.11.2025 04:13

                  Ну да, ну да. Комментарии вам тоже нейросеть пишет.

                  А полностью статью читать не зачем, у вас свое миропонимание по первым строкам)

                  Вам какой чат больше по душе?

                  Из открытых?

                  Или те которые через vpn?


                1. Sayman22 Автор
                  17.11.2025 04:13

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

                  Я ее тоже через чат нагенерю .

                  Он кстати ее за меня выложит на гитхаб, чтоб простым смертным было проще открыть код.

                  Идею тоже он придумал и опции все за меня.

                  А вообще наверное я где то спалось, ведь проект то на Гугл коллабе отлаживался , а чату наверное не удобно самому там работать, но кто на это посмотрит)

                  Главное по первым строкам определить все определить, нравится тебе статья или нет)


                  1. wataru
                    17.11.2025 04:13

                    В следующей публикации как раз будет разобраны опции

                    Можно было текущую в этом случае опустить. А то какие-то тизеры статей получаются.


  1. Yami-no-Ryuu
    17.11.2025 04:13

    Было бы разумно представлять матрицу как битовой поле и применять регрессию Коллатца к нему как целому.


    1. Sayman22 Автор
      17.11.2025 04:13

      Мы были бы ограничены , например, 64 битами (ячейками). Большинство ячеек было бы нулевыми, если бы мы использовали ограниченные числа, например , 1024.

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