Клітинні автомати
Квітень 2026 · 12 хв читання · Виникнення · Машини Тюрінга · Штучне життя

Мураха Ленгтона

Два правила. Три інструкції. Одна мураха на нескінченній сітці — і приблизно 10 000 кроків уявного хаосу, перш ніж виникне щось неймовірне: ідеально периодичний діагональний коридор, який мураха будує і слідує вічно. Мураха Ленгтона — один з найелегантніших прикладів у науці того, що прості правила можуть породжувати складний порядок без жодного задуму розробника.

1. Два правила

Крістофер Ленгтон представив мурахy в 1986 році як уявний експеримент у галузі штучного життя. Сцена — двовимірна сітка, де кожна клітинка є білою (вимкнена) або чорною (увімкнена). Мураха займає одну клітинку та дивиться в одному з чотирьох кардинальних напрямків — Північ, Схід, Південь, Захід.

На кожному кроці мураха застосовує два правила по черзі:

  1. Поворот: якщо поточна клітинка біла — повернути на 90° праворуч (за годинниковою стрілкою); якщо чорна — повернути на 90° ліворуч (проти годинникової стрілки).
  2. Зміна кольору та рух: змінити колір поточної клітинки (біла ↔ чорна), потім рухатись вперед на один крок у наступну клітинку.
// Перехід стану if cell[x][y] == БІЛА: direction = поворот_праворуч(direction) else: direction = поворот_ліворуч(direction) cell[x][y] = змінити_колір(cell[x][y]) (x, y) = крок_вперед(x, y, direction)

Ось повна специфікація. Ніякого додаткового стану не зберігається. Мураха не має пам'яті про попередні позиції — вона реагує лише на клітинку, на якій стоїть зараз. Все, що відбувається потім — початковий хаос, врешті-решт коридор — виникає з цих трьох рядків.

Нотація: Два правила кодуються літерами R і L — мураха повертає Праворуч (Right) на білій клітинці, Ліворуч (Left) на чорній. Це дає оригінальній мурасі Ленгтона рядок правил RL. Перший символ описує дію на клітинці зі станом 0 (біла), другий — зі станом 1 (чорна).

2. Три фази поведінки

Починаючи з абсолютно білої сітки, мураха Ленгтона проходить через три окремі фази зі збільшенням кроків. Переходи різкі та добре вивчені, хоча не повністю доведені для всіх початкових умов.

0 – ~500
Прості патерни: Мураха створює маленькі, майже симетричні узори. Деякі структури повторюються періодично, і загальний патерн виглядає регулярно — майже як кристал, що росте навколо початкової точки.
~500 – ~10 000
Хаотична фаза: Мураха, здається, блукає випадково. Область відвіданих клітинок росте нерегулярно. На жодному масштабі не видно очевидного патерну. Ентропія конфігурацій відвіданих клітинок висока і коливна.
> ~10 000
Фаза коридору: Без попередження мураха раптово починає будувати діагональний "коридор" — повторюваний 104-кроковий цикл, що переміщує мурашу на 2 клітинки по діагоналі за цикл, тривало назавжди (наскільки будь-коли обчислювали).

Початок коридору фіксований не в конкретному номері кроку — він залежить від точної конфігурації чорних клітинок, побудованих під час хаотичної фази. На абсолютно білій сітці коридор зазвичай починається приблизно на кроці 9 978, і мураха рухається у напрямку (−2, 2) або ротаційному еквіваленті.

Чутлива залежність від початкових умов?

Попри поверхневу схожість з хаосом, мураха Ленгтона не є хаотичною в сенсі теорії динамічних систем. Вона детермінована, а її простір станів дискретний. Проте дві початкові конфігурації, що відрізняються однією перевернутою клітинкою, можуть призвести до коридорів абсолютно різних орієнтацій або до тривалішого блукання — форма чутливості, яка є дискретною, а не неперервною.

3. Коридор: доказ і загадка

Гіпотеза коридору стверджує: починаючи з будь-якої скінченної початкової конфігурації чорних клітинок на іншій нескінченній білій сітці, мураха Ленгтона врешті-решт побудує коридор.

Станом на 2026 рік гіпотеза залишається недоведеною — одна з найнесподіваніших відкритих проблем у вивченні простих детерміністичних систем. Широкий комп'ютерний пошук не виявив жодної початкової конфігурації, що не виробляє коридор, але загального доказу не існує.

Що відомо для всебілої початкової умови:

Чому з'являється коридор?

Повного механістичного пояснення не існує. Найкраще сучасне розуміння полягає в тому, що хаотична фаза поступово будує регіони чорних клітинок, які ненавмисно "спрямовують" мурахy до конфігурації, сумісної з коридором. Як тільки мураха стикається з такою конфігурацією, 104-кроковий цикл самопідсилюється, бо клітинки, що вона перевертає, точно відтворюють необхідний локальний стан через 104 кроки.

Відкрите питання: Чи кожна скінченна початкова конфігурація призводить до коридору? Відповідь — так для всіх перевірених випадків (вичерпно перевірено мільярди початкових конфігурацій клітинок), але математичний доказ або контрприклад не знайдені. Труднощі у глобальній залежності поведінки від локальних правил через необмежені часові горизонти.

4. Симетрія та початкові умови

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

Початкові конфігурації з чорними клітинками можуть порушувати симетрію довільним чином, призводячи до коридорів у будь-якому з чотирьох діагональних напрямків або затримуючи початок коридору до сотень тисяч кроків.

Початкова конфігурація Початок коридору (приблизно) Напрямок коридору
Все біле, мураха дивиться на Північ ~9 978 кроків Діагональ ПнЗх
Одна чорна клітинка в (1, 0) ~12 500 кроків Діагональ ПнСх
Випадкова заповнена область 50×50 Варіюється (10³–10⁶) Варіюється
Дві мурахи (зустрічне обертання) Не спостерігалося* Залежить від взаємодії

* Системи з кількома мурахами мають абсолютно іншу динаміку і не охоплені стандартною гіпотезою коридору.

Дзеркальна симетрія

Інверсія правил (RL → LR) просто відображає всю траєкторію. Мураха LR на всебілій сітці створює той же патерн, що і мураха RL, відбита відносно осі y, і її коридор іде у протилежному діагональному напрямку.

5. Терміти: узагальнення мурахи

Термiт (coined by Rudy Rucker, поєднання "Turing" і "termite") узагальнює мурашy Ленгтона, дозволяючи:

Оригінальна мураха Ленгтона — найпростіший Термiт: k = 2 кольори, s = 1 внутрішній стан. Її таблиця переходів:

Стан Колір клітинки Новий стан Новий колір Поворот
0 0 (білий) 0 1 (чорний) Праворуч (+90°)
0 1 (чорний) 0 0 (білий) Ліворуч (−90°)

При k кольорах та s станах, Термiт має s × k правил — кількість різних Термiтів з s = 1 та k кольорами дорівнює 4ᵏ (чотири можливих напрямки повороту на правило) × kᵏ (k можливих нових кольорів на правило). Навіть при k = 3 (три кольори) це дає більше 10 000 різних мурах, більшість з яких демонструють радикально різну поведінку, що виникає.

6. Нотація правил та зоопарк мурах

Множини багатокольорових мурах Ленгтона (один внутрішній стан) описуються рядком літер, де кожна літера описує дію на клітинці відповідного кольору:

Колір клітинки збільшується на 1 за модулем k після кожного кроку (циклічно через k кольорів по порядку), а літера на позиції i рядка правила описує поворот на кольорі i.

Правило "RL" → стандартна мураха Ленгтона (оригінал, k=2) Правило "RLR" → 3-колірна мураха Правило "LLRR" → 4-колірна мuraха, демонструє "коридор" за ~100 кроків, потім складний ріст Правило "RLLR" → 4-колірна мураха, будує квадратну фрактальну область

Примітні поведінки

Правило Поведінка Примітки
RL Хаос → діагональний коридор Оригінальна мураха Ленгтона
RR Заповнює трикутник, іде по діагоналі Дуже проста, немає фази хаосу
LL Симетричне заповнення ромба Дзеркало RR
RLLR Повільний симетричний ріст, що нагадує межу Sierpiński 4-колірна, дуже симетрична
LLRR Швидкий нерегулярний ріст зі складними межами 4-колірна, коридор не спостерігається
LRRRRRLLR Структура, схожа на більярдний куля-периодик 9-колірна, період у тисячах

7. Обчислювальна універсальність

Термiти з кількома внутрішніми станами є Тюрінг-повними — вони можуть симулювати будь-яке обчислення при відповідній початковій стрічці (конфігурації сітки). Найпростіший відомий Тюрінг-повний Термiт має 2 внутрішніх стани та 2 кольори, що ставить машини у стилі Ленгтона на межу обчислювальної універсальності.

Оригінальна однодержавна двобарвна мураха Ленгтона (RL) не відома як Тюрінг-повна. Її траєкторія врешті-решт стає периодичною (коридор), що виключало б універсальне обчислення — універсальна машина повинна вміти виконувати необмежену кількість різних кроків без циклу. Однак гіпотеза коридору не доведена, тому питання про універсальність стандартної мурахи технічно залишається відкритим.

Зв'язок з одновимірними клітинними автоматами

Мураха Ленгтона формально є двовимірною машиною Тюрінга з нерухомою головкою, що рухається на двовимірній стрічці. Вона відрізняється від одновимірних елементарних клітинних автоматів Вольфрама тим, що просторово-часовий аспект не є основною структурою — натомість мураха прокладає шлях через двовимірне середовище, яке вона модифікує по ходу.

Попри двовимірність, мураха Ленгтона інформаційно скупа: повний стан у будь-який момент — це лише позиція мурахи (x, y), напрямок і повна конфігурація сітки. Сітка — "пам'ять", а мураха — "процесор".

Зв'язок з Правилом 110: Правило 110 Вольфрама (1D елементарний клітинний автомат) доведено Тюрінг-повним і демонструє схожий патерн уявного хаосу, що йде за структурованою периодичною поведінкою. Мурашу Ленгтона часто цитують поряд з Правилом 110 як приклад того, як прості детерміністичні правила можуть породжувати одночасно непередбачуваність і врешті-решт — периодичність, хоча механізми абсолютно різні.

8. Реалізація на JavaScript

// Мураха Ленгтона — компактна реалізація на canvas
// Підтримує довільні рядки правил типу "RL", "RLLR", "LRRRRRLLR"

const CELL_SIZE = 3;      // пікселів на клітинку
const GRID_W    = 300;    // ширина сітки в клітинках
const GRID_H    = 300;    // висота сітки в клітинках
const RULE      = "RL";   // рядок правил — одна літера на кольоровий стан

// Палітра кольорів: один колір на стан
const PALETTE = ["#1e1e2e", "#f59e0b", "#6366f1", "#10b981", "#ef4444", "#a78bfa"];
const NUM_STATES = RULE.length;

// Сітка: 2D масив цілочисельних кольорових станів [0..NUM_STATES-1]
const grid = new Array(GRID_H).fill(null).map(() => new Uint8Array(GRID_W));

// Стан мурахи
let ax = Math.floor(GRID_W / 2);   // x мурахи
let ay = Math.floor(GRID_H / 2);   // y мурахи
let dir = 0;  // 0=Північ, 1=Схід, 2=Південь, 3=Захід

const DX = [ 0, 1,  0, -1];  // зміщення по X для кожного напрямку
const DY = [-1, 0,  1,  0];  // зміщення по Y (Y росте вниз)

function step(n = 1) {
  for (let i = 0; i < n; i++) {
    const state = grid[ay][ax];
    const rule  = RULE[state];

    // Поворот
    if      (rule === 'R') dir = (dir + 1) & 3;
    else if (rule === 'L') dir = (dir + 3) & 3;   // +3 mod 4 = -1
    else if (rule === 'U') dir = (dir + 2) & 3;
    // 'N' = без повороту

    // Зміна кольору (цикл до наступного стану)
    grid[ay][ax] = (state + 1) % NUM_STATES;

    // Рух вперед
    ax = (ax + DX[dir] + GRID_W) % GRID_W;
    ay = (ay + DY[dir] + GRID_H) % GRID_H;
  }
}

function draw(ctx) {
  for (let y = 0; y < GRID_H; y++) {
    for (let x = 0; x < GRID_W; x++) {
      const s = grid[y][x];
      if (s === 0) continue;   // пропустити фонові клітинки для швидкості
      ctx.fillStyle = PALETTE[s % PALETTE.length];
      ctx.fillRect(x * CELL_SIZE, y * CELL_SIZE, CELL_SIZE, CELL_SIZE);
    }
  }
  // Мальювати мурашку
  ctx.fillStyle = "#ffffff";
  ctx.fillRect(ax * CELL_SIZE, ay * CELL_SIZE, CELL_SIZE, CELL_SIZE);
}

// Цикл анімації
function setup(canvas) {
  const ctx = canvas.getContext("2d");
  canvas.width  = GRID_W * CELL_SIZE;
  canvas.height = GRID_H * CELL_SIZE;

  function frame() {
    step(50);                          // 50 кроків мурахи на кадр анімації
    ctx.clearRect(0, 0, canvas.width, canvas.height);
    draw(ctx);
    requestAnimationFrame(frame);
  }
  requestAnimationFrame(frame);
}
        

Нотатки щодо продуктивності

При 50 кроках на кадр і 60 FPS симуляція виконується зі швидкістю 3 000 кроків мурахи на секунду — достатньо для досягнення початку коридору (~10 000 кроків) приблизно за 3 секунди реального часу. Оптимізація "пропуск фону" в циклі малювання уникає ітерації по ≈83 000 білих клітинок на кожному кадрі; потрібно малювати лише клітинки з ненульовим станом (чорні клітинки).

Для більших сіток або вищих кількостей кроків розгляньте використання масиву пікселів ImageData замість окремих викликів fillRect: записуйте RGBA-значення напряму у типізований масив і пакетно передавайте через putImageData — зазвичай у 10–50 разів швидше, ніж малювання прямокутника по клітинці.

Обгортання проти нескінченної сітки

Реалізація вище обертається на межах сітки (тороїдальна топологія). На тороїдальній сітці коридор врешті-решт обгорне і мураха може повторно потрапити на власний слід, виробляючи іншу довгострокову поведінку. Для вірної симуляції гіпотези нескінченної сітки використовуйте хеш-карту з розширенням (JavaScript Map з рядковими ключами "x,y"), що росте при відвіданні мурахою нових клітинок.

Спробуйте: Змініть константу RULE на "RLLR" або "LLRR" і зверніть увагу, наскільки різними виглядають патерни. Симетричні правила (де рядок читається однаково вперед/назад при L↔R) схильні виробляти симетричні патерни. Порушення цієї симетрії будь-яким чином зазвичай призводить до спіралеподібної або спрямованої структури.