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