Игрушка для программистов, Core War, была придумана в 1984 году. Известная песочница собирает желающих «побороться» кодами до сих пор. Она может быть полезна как инженерам (кибербезопасность и борьба с хакерами), так и биологам (эволюционные процессы) и экономистам (развитие рынка в условиях конкуренции). С появлением LLM игра получила новое развитие. Исследователи из Sakana AI и MIT предложили обновленную стратегию, основанную на эволюционных процессах и противоборствующей динамике.


Идея Core War

Пойдем по порядку и кратко опишем основную суть игры и правила. Игроки пишут программы, называемые воинами, на Redcode — языке, похожем на ассемблер и разработанном для симулятора Core War. Воины загружаются в массив памяти виртуального компьютера, называемый Ядром, где они сражаются за контроль над системой. Ядро представляет собой кольцевую память фиксированного размера (обычно 8000 ячеек), каждая из которых содержит одну инструкцию. При инициализации каждому воину выделяется один процесс, представленный счётчиком команд, указывающим на следующий адрес для выполнения. На каждом шаге симуляции виртуальная машина выполняет по одному адресу для каждого воина по принципу циклического перебора. Простыми словами команды можно описать так:

MOV

Копирует данные из одного места в другое

ADD

Складывает два числа

SUB

Вычитает

JMP

Прыгает на другую строку кода

CMP

Сравнивает два значения

DJN

Уменьшает счётчик и прыгает, если не ноль (цикл)

SPL

Раздваивает выполнение (создаёт поток‑клон)

забавная визуализация идеи Core War
забавная визуализация идеи Core War

Digital Red Queen

Перейдем теперь к описанию метода, предложенного авторами статьи выше. Сам алгоритм можно представить так:

алгоритм красной королевы
алгоритм красной королевы

И, если совсем на пальцах, происходит это:

В качестве оптимизационного алгоритма был выбран MAP‑Elites. Этот алгоритм ищет не одно идеальное решение, а множество разных, каждое из которых является лучшим в своем классе. Проиллюстрируем простым примером: рассмотрим игру, в которой нужно прыгать и бегать по платформам, собирая монеты. Тогда MAP‑Elites анализирует это с точки зрения поведенческих дескрипторов (BD), например, скорость бега и высота прыжка. Эти параметры образуют сетку клеток (например, 3×3 = 9 клеток):

Низкая прыгучесть

Средняя прыгучесть

Высокая прыгучесть

Медленный

Клетка (Медл, Низ)

Клетка (Медл, Сред)

Клетка (Медл, Выс)

Средний

Клетка (Сред, Низ)

Клетка (Сред, Сред)

Клетка (Сред, Выс)

Быстрый

Клетка (Быстр, Низ)

Клетка (Быстр, Сред)

Клетка (Быстр, Выс)

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

Как эта идея переносится на наш случай:

  • Клетки — это не скорость/прыгучесть, а поведение программы Redcode (например, частота атак, стиль обороны).

  • Фитнес — это эффективность программы в бою (победы над другими программами).

  • Мутация — изменение кода программы.

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

Эксперимент

Тестирование Akarsh Kumar et. al проводилось в следующих условиях:

  • всего было N воинов и T этапов симуляции, доля «очков» (units of fitness) на один этап равна

    \frac{N}{T}, то есть на каждом этапе «живые» воины делят это число очков между собой;

  • совокупное число очков за все этапы на одного воина находится по формуле:

    \text{Fitness}(w_i; {w_j}{j \neq i}) = \sum_{\tau=1}^{T} \frac{N}{T} \frac{A_\tau^i}{\sum_j A_\tau^j}

    где A_\tau^j — индикатор события: воин w_j «жив» на этапе \tau. Будем говорить, что воин победил другого воина, если у первого больше очков в битве 1 на 1.

  • поведенческие дескрипторы: общее число порожденных потоков и суммарный объем памяти воина на протяжении симуляции.

  • в качестве LLM, генерирующей новых воинов была взята GPT-4.1 mini (gpt-4.1-mini-2025-04-14)

  • 96 тренировочных противников (человеческие воины);

  • 317 тестовых противников (человеческие воины).

Для анализа результатов авторами статьи были введены следующие понятия:

  1. generality = \frac{\text{defeat or tie}}{\text{all}} (отношение побед и ничьих к общему числу проведенных боев);

  2. phenotype — вектор значений fitness против человеческих воинов, не виденных моделью;

  3. genotype — код воина (представлен в виде эмбеддинга).

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

Перейдем к рассмотрению графиков и дадим несколько комментариев по этому поводу.

воины красной королевы
воины красной королевы

Проанализируем последовательно результаты (число К обозначает число воинов предыдущих этапов, относительно которых происходила оптимизация, а rounds of DRQ — число этапов, внешний цикл):

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

  2. Второй слева график показывает насколько сильно отличались стратегии воинов красной королевы. Мы видим, что разнообразие стратегий падает (конвергенция при различных начальных условиях).

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

  4. На вопрос на сколько изменяется код отвечает последний график.

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

Ввиду вычислительной сложности при запуске таких экспериментов возникает вопрос о теоретической оценке и предсказании исхода для воина. Авторы применили линейную регрессию для предсказания признака generality и получили 𝑅^2 =0.442 (используя OpenAI text‑embedding-3-small) и𝑅^2 = 0.461(OpenAI text‑embedding-3-large). Это умеренная предсказательная сила, показывающая, что код воина частично определяет его эффективность, но остальное зависит от динамики боёв.

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

Код авторов для эксперимента можно посмотреть здесь и здесь (гитхаб).