Последнее время в качестве хобби мною было посвящено довольно много сил на изучение Гипотезы Коллатца — той самой, где каждое натуральное число, подчиняется простому закону:
если чётное — делится пополам;
если нечётное — умножается на три и прибавляется один.
И так — до тех пор, пока не доберёшься до единицы.
В один из вечеров, случайно просматривая анимации паттернов 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)

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

Sayman22 Автор
17.11.2025 04:13Диапазон указан в самом начале. От 1 до 1024. Максимальное значение можно задавать, как начальное условие.
Система детерминирована в пределах как раз этого заданного числа и всегда придет к 1.
Зачем брать сумму по некой окрестности? Если ставить эту сумму в центральный элемент, то будут нарушена изначальная логика работы автомата и он уже не будет подчиняться формуле в Гипотезе Коллатца.
Возможные влияния без изменения логики работы клеточного автомата, я указал в заключении. Это далеко не все возможные, но как пример они подойдут

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

Sayman22 Автор
17.11.2025 04:13Такую систему можно формально считать клеточным автоматом с нулевым радиусом взаимодействия (радиус = 0), то есть окрестность Мура/фон Неймана состоит только из самой клетки.
Это декомпозируемый клеточный автомат, эквивалентный бесконечному набору копий динамической системы.
Это не автомат в классическом его понимании, но автомат.
А ещё , я привёл специально критерии по классификация.
А в конце в заключении привел пример взаимодействия клеток между собой, внедрение которых как опций не будет рушить всю логику декомпозируемого клеточного автомата, а лишь добавлять логику его работы. И тогда этот автомат получит свойства и классического автомата с взаимодействием клеток и оставит за собой функционал каждой клетки, которая будет также отдельно как динамическая система.
Но все это скорее всего вам не важно. Вы просто захотели заминусовать карму и пост))) Скорее всего вы даже не вникали и не дочитали не классификацию , не заключение.

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

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

wataru
17.11.2025 04:13В классических автоматах нет радиуса 0.

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

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

Sayman22 Автор
17.11.2025 04:13Ну да, ну да. Комментарии вам тоже нейросеть пишет.
А полностью статью читать не зачем, у вас свое миропонимание по первым строкам)
Вам какой чат больше по душе?
Из открытых?
Или те которые через vpn?

Sayman22 Автор
17.11.2025 04:13В следующей публикации как раз будет разобраны опции на примере небольшой игры, где некий юнит ходит по сетке и пытается выжить не попав на четные числа.
Я ее тоже через чат нагенерю .
Он кстати ее за меня выложит на гитхаб, чтоб простым смертным было проще открыть код.
Идею тоже он придумал и опции все за меня.
А вообще наверное я где то спалось, ведь проект то на Гугл коллабе отлаживался , а чату наверное не удобно самому там работать, но кто на это посмотрит)
Главное по первым строкам определить все определить, нравится тебе статья или нет)

wataru
17.11.2025 04:13В следующей публикации как раз будет разобраны опции
Можно было текущую в этом случае опустить. А то какие-то тизеры статей получаются.

Yami-no-Ryuu
17.11.2025 04:13Было бы разумно представлять матрицу как битовой поле и применять регрессию Коллатца к нему как целому.

Sayman22 Автор
17.11.2025 04:13Мы были бы ограничены , например, 64 битами (ячейками). Большинство ячеек было бы нулевыми, если бы мы использовали ограниченные числа, например , 1024.
Применить опции в таком случае не получилось бы, указанные классификации не выполнялись бы. Соответственно и ячейки не были бы отдельными динамическими системами. И это уже был бы не клеточный автомат
IgDem
Да, без взаимодействия клеток это какая-то странная Жизнь.
Но какую-нибудь анимацию было бы интересно посмотреть. Жаль, что не опубликовали.
Sayman22 Автор
Получается с числами под законом не обязательно взаимодействие, они даже так самодостаточны. Но как я написал, я уже проверял различные варианты взаимодействия и это работает. Как будет время обязательно наглядно покажу
IgDem
Жизнь мизантропов какая-то.