CoreWars: организация "холма" в УрГУ

Курсовая работа студента гр. КН–301 Скробова А.Л.

Научный руководитель – Баклановский М.В.

Уральский государственный университет им. А.М.Горького
Математико-механический факультет
Кафедра вычислительной математики
Екатеринбург, 2005


В работе объясняется необходимость создания на базе мат-меха УрГУ сервера-"холма" для битв компьютерных программ, и детально описывается его предполагаемая организация. Внимание уделяется интересным усовершенствованиям правил CoreWars, которые помогли бы выделить данный сервер среди остальных. На настоящий момент в России не существует подобных "холмов", хотя за рубежом их действует около десятка.

Введение

CoreWars – первая из попыток имитировать на ЭВМ биологическую эволюцию. CoreWars – это "вселенная", в которой специальным образом написанные программы-бойцы, называемые CoreWarriors, полноценно живут в биологическом смысле: рождаются и умирают, двигаются и размножаются, общаются и нападают друг на друга, ставят западни и маскируются, и даже чинят свои повреждения. В этом смысле CoreWars называют "соревнованием компьютерных вирусов", т.к. последним, так же как и CoreWarriors, присущи названные черты. Отличием CoreWars от повседневной жизни компьютерных вирусов является то, что в CoreWars "вирусы" соревнуются друг с другом, а не просто сосуществуют с ничего не подозревающими "мирными" программами. По-видимому, удачные CoreWarriors, будучи реализованными для какой-нибудь реальной ЭВМ, были бы чрезвычайно успешными вирусами и на ней. Однако, как мы увидим позже, архитектура "процессора" CoreWars настолько необычна, что перенос программ-бойцов на реальные ЭВМ потребовал бы недюжинной смекалки.

В работе [14] для CoreWars-подобных экспериментов вводится название "бинология" – от "binary biology". К настоящему времени создано бесчисленное множество бинологических миров – от соревнования Quake-ботов до детских игр, обучающих программированию на примере соревнующихся программ. Однако CoreWars стал классическим бинологическим миром, и наверное, наиболее исследованным из их всех. Например, с использованием CoreWars как модели биологической эволюции был исследовал вопрос первичности репродукции по отношению к метаболизму [15]. Основное отличие CoreWars от бинологических миров, спроектированных непосредственно для моделирования эволюции, таких как Tierra, – то, что это игра, соревнование. Хотя в собственно битвах участвуют только CoreWarriors, на самом деле CoreWars – соревнование авторов этих бойцов. В этой двойственности – игра программистов и объект исследования бинологов – и заключается особый характер CoreWars.

По информации [2] и [4], прототип CoreWars под названием "Darwin" был придуман в 1961 В.Высоцким, Р.Моррисом и Д.МакИлроем. Впервые широкая публика узнала об этой игре в 1972, после публикации в журнале Software – Practice and Experience статьи под псевдонимом "Алеф-Нуль". Но настоящую популярность игра приобрела весной 1984, когда Д.Джонс и А.Дьюдни начали в журнале Scientific American серию статей о CoreWars [5]. По словам Дьюдни, на создание CoreWars его вдохновила история о компьютерном вирусе Creeper, парализовавшем работу ARPANET и побежденном специально для этого написанным вирусом Reaper, который самоуничтожился сразу после завершения своей миссии. Интересно, что Моррис, один из авторов Darwin, – отец создателя первого сетевого червя [12], буквально обрушившего Интернет в 1988, так что компьютерные вирусы и CoreWars имеют общие корни. Сам же Дьюдни в своих статьях многократно заявлял, что CoreWars не имеет отношения к "компьютерной заразе".

Сразу же после выхода статей Дьюдни начались многочисленные соревнования; до сих пор активной остаётся созданная в 1991 ньюсгруппа rec.games.corewar (несколько сообщений в день). До 1993–1994 выходило несколько бюллетеней, посвящённых CoreWars – их архивы лежат на http://para.inria.fr/~doligez/corewar/ и http://www.corewar.info/newsletter.htm. Один из этих бюллетеней – "Core Warrior" – выходит до сих пор.

MARS и RedCode

В игре Darwin – прототипе CoreWars – программы-бойцы выполнялись на реальной IBM 7090, и писались на ассемблере этой ЭВМ. В CoreWars, напротив, используются специально созданные язык RedCode и выполняющий программы на этом языке компьютер "Memory Array RedCode Simulator" (MARS). Самый главный элемент MARS, давший название самой игре – это "the core", память в виде кольца. (Как указывает Jargon File, так хакеры называли ферритовую память больших ЭВМ.) Каждая ячейка памяти представляет собой "машинное слово" неопределённой величины. В одной ячейке хранится код команды и два её операнда: таким образом, все команды имеют одинаковую длину и одинаковое число операндов. Некоторые команды игнорируют один или оба своих операнда; тогда их можно опускать, и они примут значение по умолчанию 0. Подробное описание RedCode приведено в приложении.

Все операнды в RedCode-программах – беззнаковые числа от 0 до CORESIZE–1, где CORESIZE – размер памяти; вся арифметика выполняется по модулю CORESIZE. Однако для удобства допускается использовать в программах отрицательные числа: при компиляции они будут нормализованы. Кольцевая память MARS не имеет начала: адресация всегда выполняется относительно текущей команды. Так, например, команда mov 0, 1 перемещает себя в следующую ячейку памяти. Эта команда является простейшей программой-бойцом, затирающей всю память своими копиями – "импом".

Данные хранятся в виде операндов команд; обычно это неиспользуемые самой командой операнды, или команда dat – сама она невыполнима, и приводит к уничтожению выполнившего её потока. Другое применение команды dat – "бомбардировка" вражеских программ в расчёте, что они выполнят эту команду как свою часть. Второй простейший боец из статьи Дьюдни – именно такой бомбардировщик: mov 3, 7; add #4, -1; jmp -2; dat. Он бомбит память с интервалом в четыре команды; поскольку CORESIZE обычно делится на 4, это приводит к тому, что он не уничтожит себя. Поскольку изначально вся память MARS заполнена командами dat, последнюю строчку предыдущей программы можно опускать.

Третий интересный приём, применяемый в CoreWarriors – использование декрементации для атаки. При одном из режимов адресации – предекрементном – операнд указывает на указатель на объект, с которым будет работать команда, и этот указатель декрементируется перед использованием. Этот режим предназначался для реализации циклов; например, такой бомбардировщик – mov 2, <2; jmp -1; dat 0, -2 – заполняет командами dat (с разными операндами) всю память перед собой. Когда он опишет полный круг по памяти, он затрёт себя и самоуничтожится. Подобный приём – "core clear" – часто применяется бойцами как "последняя надежда", когда другие приёмы не возымели успеха. Предекремент выполняется даже для игнорируемых операндов: так, программа mov 2, <2; jmp -1, <1; dat <333, -2 будет бомбить dat-ами ячейки памяти через одну. Более того, если такая бомба попадёт в противника, и он выполнит команду dat <333, ххх – то перед смертью он декрементирует ячейку памяти на расстоянии 333 от себя – возможно, повреждая код другого потока. Эта идея развивается в "декрементном бомбардировщике" jmp 1, <-1; jmp -1, <-1, который декрементирует все ячейки перед собой по кругу. Более короткая программа, делающая то же самое – djn.a 0, <-1.

Одна битва (CoreWar) начинается с того, что в случайных местах памяти располагаются программы-бойцы. Затем программы выполняются по очереди, по одной команде за ход. Битва длится, пока не останется только один CoreWarrior, или пока не будут выполнены MAXCYCLES команд каждой программы; в последнем случае объявляется ничья.

Одна из особенностей MARS – встроенная поддержка многопоточности: команда spl порождает новый поток по указанному адресу, продолжая выполнение и по старому – подобно инструкции BBW (Branch Both Ways) из юмористической подборки "Opcodes which should existed" 1970-х. Переключение программ происходит независимо от переключения их потоков; т.е. каждая из N программ будет получать 1/N процессорного времени независимо от того, сколько в каждой из них потоков, и каждый из K потоков программы будет получать 1/K процессорного времени, назначенного этой программе. Потоки программы выполняются в порядке их создания, по одной инструкции за квант. Программа считается побеждённой, если уничтожены все её потоки; перед разработчиком бойца ставится дилемма – сделать программу более живучей (больше потоков) или более быстрой (меньше потоков). Типичные программы-бойцы имеют около десятка потоков; ограничение на количество потоков одной программы – MAXPROCESSES – задаётся правилами соревнования.

Для поражения многопоточных противников используются "ловчие ямы" – бомбы вида jmp 0 или spl 0, которые не уничтожают поток, но и не дают ему выполнять осмысленной работы; таким образом процессорное время отбирается от остальных потоков программы-противника. Потом, когда обездвиженный противник будет найден в памяти, его можно будет уничтожить точечными бомбардировками. Более интересный вариант этого приёма – это "захват в рабство", когда команды перехода указывают на собственный код бойца; таким образом он может заставить своего противника выполнять нужный себе код – фактически, отбирая у противника процессорное время в свою пользу.

Резюмируя перечисленные приёмы, CoreWars можно назвать соревнованием программ за захват ресурсов ЭВМ – памяти и процессорного времени, точно так же как эволюцию биологических видов – соревнованием за захват ресурсов планеты.

Реализации MARS

Существуют реализации MARS для всех распространённых ПК и многих больших ЭВМ; часто их авторы вносят собственные расширения в RedCode – другими словами, боец может быть "непереносим" между разными реализациями MARS. Созданное Дьюдни в 1985 общество International Core War Society (ICWS) утвердило два стандартных диалекта RedCode – ICWS-84 и ICWS-88; сейчас используется в основном диалект ICWS-94, имеющий статус чернового стандарта.

Одно из наиболее популярных нестандартизованных расширений MARS – p-space, впервые реализованный в эмуляторе pMARS (1995). p-space – это личная память каждого CoreWarrior: небольшой участок памяти (адресуемый абсолютно, т.е. от ячейки 0 до ячейки PSPACESIZE –1), доступ к которому имеет только сама программа-боец. Перед началом каждого раунда в ячейку 0 записывается результат предыдущего раунда. Содержимое всех остальных ячеек сохраняется между раундами, и поэтому CoreWarrior может сохранять там информацию о стратегии противника для её использования в следующем раунде. Однако противник может дописать в код бойца инструкции записи в его p-space; эта технология называется "brainwashing". Соответственно, боец, рассчитывающий на содержимое p-space при выборе своей стратегии, должен как-то проверять его целостность. В общем, p-space можно рассматривать как бинологический аналог "памяти вида". Его использование, однако, не получило большой популярности; чтобы получить от него существенные преимущества, нужны более сложные программы и большее число раундов дуэли, чем это имеет место в CoreWars.

pMARS (portable MARS) (http://www.koth.org/pmars/) – самая популярная реализация MARS; она существует в вариантах для DOS, Windows, Macintosh, Amiga и Linux. Её модификация с усовершенствованной графикой – pMARS-SDL (http://www.cs.helsinki.fi/u/jpihlaja/cw/pmars-sdl/index.html) – поддерживает Windows и X11. Существует множество других реализаций:

Большой список различных CoreWars-систем приведён в [13].

Холмы

В Интернете есть так называемые "холмы" – открытые CoreWars-соревнования. "На холме" сидят несколько десятков (иногда сотен) лучших CoreWarriors; по электронной почте или через веб-форму принимаются заявки на участие с кодом бойца; ежедневно или еженедельно заявки обрабатываются, и холм обновляется. Чем дольше боец просидит на холме, тем больше чести достаётся его автору. Первый холм, созданный в Intel В.Шубертом в 1991, больше не существует. Существующие ныне холмы:

Общепринятые условия соревнований – CORESIZE=8000, PSPACESIZE=500, MAXCYCLES=80000, MAXPROCESSES=8000, дуэль, ограничение на длину программы – 100 команд, минимальное расстояние между программами при старте – 100 команд. Используются и другие значения – как правило, отличающиеся от этих в 10 или 100 раз: например, 80000 ("большой холм") или 800 ("крошечный холм").

Проект холма УрГУ

Из всех холмов наиболее популярен KOTH.org, запущенный вторым по счёту (1993) и остающийся до сих пор рекордсменом по длительности своего функционирования. До недавнего времени наряду с ним был весьма популярен Pizza Server – третий холм в истории (1994). В России же, насколько я смог понять, вообще нет ни одного холма. Это тем более удивительно, что чемпион третьего международного турнира ICWS (1988) – Е.Лилитко из Переславля-Залесского. Поэтому конечной целью данной работы было подготовить почву для создания CoreWars-холма на мат-мехе УрГУ. Соответственно, первым делом нужно было подготовить требования к такому серверу. Очевидно, он должен мочь выполнять уже написанные программы, и для этого он должен быть совместимым со стандартом де-факто – KOTH.org (ICWS-94 + p-space). Можно будет изначально "загрузить" на холм те несколько тысяч бойцов, что доступны на существующих (в т.ч. остановленных) холмах и в базах данных CoreWars, таких как http://www.netapt.com/~daveey/art/code/corewars/bots/ – тогда первые посетители придут не на пустой холм, а на уже заполненный наиболее выдающимися программами-бойцами.

Кроме того, хотелось бы реализовать уникальные "фишки", которые привлекли бы к нашему серверу пользователей KOTH.org:

Расширение CoreWars

Для расширения CoreWars можно предложить следующие идеи:

1. Ограничение доступных команде ячеек некоторой её окрестностью. Сейчас CoreWarrior имитирует всевидящий и всесильный организм, который видит всю память целиком, может выполнять операции над любой её ячейкой, и может мгновенно перемещаться в любую из них. Мне кажется, что было бы более бинологически оправданным ограничить область действия программы, т.к. это приближает бинологическую модель жизни к её биологическому прототипу, – поэтому такое ограничение способствовало бы выработке биологически состоятельных стратегий для CoreWarriors. Впрочем, более существенный недостаток CoreWars как модели биологической эволюции – то, что любые два CoreWarriors конкурируют, т.е. все "бинологические виды" как бы занимают одну и ту же нишу. Однако путь к преодолению этого ограничения, намеченный в [10], – позволить CoreWarriors изменять способ интерпретации своих соперников MARS-ом – совершенно уничтожит CoreWars как игру (требующую предопределённых правил) и поэтому не представляется мне интересным для реализации на холме УрГУ.

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

2. Традиционным способом визуализации CoreWar были совершенно ненаглядные ряды строк: пользователь должен "держать в уме", что все эти строчки связаны в одно кольцо. Более того, такой способ неверно передаёт расстояние между ячейками памяти. Более наглядный, но менее компактный способ предложен в [16] – изображать кольцо памяти именно в виде кольца. Но есть один способ расширить MARS, одновременно облегчая визуализацию и сохраняя совместимость с имеющимися программами, – перейти от одномерного кольца к двумерному тору: тогда изображение памяти в виде матрицы станет естественным. В условиях двумерной памяти можно задать 4 направления выполнения и переключаться между ними, подобно языку Befunge. Для программ на RedCode, где каждая команда имеет одинаковую длину и структуру, это достаточно просто и естественно. Операнды команд, таким образом, превращаются в пары чисел – сдвиг "вверх" и "вправо" от текущей ячейки до указываемой.

Оба названных усовершенствования названы во второй статье Дьюдни, но только как общие концепции; их разработку и обоснование я взял на себя.

3. Случайно выбирать величину квантов для переключения между потоками CoreWarriors, или даже выполнять несколько потоков одновременно (сами команды при этом остаются атомарными). В таких условиях в CoreWarriors пришлось бы задействовать явные средства синхронизации. Среда для соревнования параллельных программ уже существует (http://www.gridwars.com/), поскольку параллельные вычисления имеют большую прикладную значимость; однако C-подобный язык GridWars, CxC, крайне далёк от ассемблер-подобного RedCode. Мне казалось бы интересным "скрестить" параллельное программирование и CoreWars. Задача реализации CoreWars на параллельной ЭВМ была поставлена в [3], однако там нет никакой информации об её выполнении.

4. Устраивать соревнования большой кучи бойцов одновременно, в большой памяти – для проверки не столько силы атаки, сколько живучести бойца. В принципе, такие соревнования ведутся на некоторых холмах, но недостаточно популярны. Может быть, имеет смысл устраивать "гонки на выживание" – побеждённого бойца сразу же заменяет новый, очки начисляются за время жизни бойца? Ещё одна интересная идея – битвы небольшого (3–4) числа бойцов; очевидно, это потребует совершенно иных стратегий, чем для дуэлей.

5. Устраивать "соревнования эволюторов".

Известно, что создание CoreWarriors методами генетического программирования достигло большого успеха: на некоторых холмах первые места держат эволюционные программы, на других они соревнуются с написанными человеком на равных. Речь здесь идёт не о программах, сгенерированных эволютором от начала до конца, а об использовании эволюционных программ как основы для написания собственных. Даже не используя эволюционные программы непосредственно, из них можно почерпнуть массу свежих идей, не использованных ещё в человеческих программах. Однако, поскольку качественная имитация эволюции CoreWarriors требует колоссальных вычислительных затрат, разные авторы эволюторов используют свои подходы для упрощения модели эволюции. Одна из поставленных задач в рамках "Холма УрГУ" – реализация универсального микроядра MARS, которое использовалось бы и в онлайн-соревнованиях CoreWarriors, и в эволюторах. Затем можно было бы запустить наряду с холмом CoreWarriors параллельный холм программ-эволюторов: побеждает та, которая сгенерирует самого лучшего бойца, а место бойца-вершины эволюции определяется как раз на основном холме.

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

6. Реализовать "со-эволюцию".

Перри предлагает довести узконаправленную тренировку на холмах до крайности – сводя генерируемых бойцов всё время с одним и тем же CoreWarrior, вывести таким образом для него "идеального противника". Мне кажется, что было бы чрезвычайно интересно заложить возможность самосовершенствования в самом CoreWarrior: увеличив число раундов дуэли, например, до 1000, позволить соперникам "со-эволюционировать" на всём её протяжении. Таким образом, мы получим сразу пару "идеальных противников" – интересно, насколько сильно они будут отличаться от своих изначальных версий.

Такое расширение CoreWars объединяло бы в одном соревнование бойцов и соревнование эволюторов, притом в одной программе они сочетались бы оба.

Есть и более изощрённые идеи относительно развития CoreWars; так, например А.Вэйт [18] предлагает заменить "устаревшие" цифровые программы-бойцы на квантовые, выполняемые под управлением виртуальной машины QMARS – эмулятора квантового компьютера. К сожалению, я недостаточно знаком с аппаратом квантовых вычислений, чтобы как-то это прокомментировать, но сама идея квантовых программ-бойцов кажется мне чрезвычайно привлекательной для отдельного исследования.

Заключение

Подводя итог всему изложенному, я представляю себе "Холм УрГУ" в виде следующей схемы:

            ,–––––––микро-MARS––––эволюторы
"видеомагнитофон"       |   \ `––––––––|––––––.
           \            |    \         |       \
            блок визуализации \ холм эволюторов \
                  |          \ \       |       \ \
          онлайн-визуализация–\\–>веб-сайт<–––холм бойцов
                               \ \
                                \ \
                         офлайн-MARS
  (для тестирования бойцов "на дому")

В этой схеме блок визуализации получает на входе в реальном времени либо информацию о проходящей битве (от виртуальной машины MARS), либо воспроизводимую по записи информацию (от "видеомагнитофона"; запись производится той же виртуальной машиной). Офлайн-MARS включает такой блок визуализации (вместе с "видеомагнитофоном") и собственно виртуальную машину; для онлайн-битв блок визуализации используется в виде Java-аплета.

Приложения

Описание MARS

Команды RedCode:

Обозначение в скобках после команды указывает версию RedCode, в которой она впервые появилась: "Core War Guidelines" [9] (84), ICWS-86 [7] (86), ICWS-88 [8] (88), ICWS-94 подверсии 3.2 [17] (94), ICWS-94 подверсии 3.3 [6] (95), pMARS 0.8 (p). В случаях, когда семантика команды различалась в разных версиях RedCode, приведена наиболее новая, а в скобках дан комментарий о первой версии RedCode с текущей семантикой данной команды.

Режимы адресации:

Предекременты и/или постинкременты выполняются до самой команды и могут изменять её операнды – в последнем случае выполняться будет команда с изменёнными операндами. Если оба операнда команды выполняют предекременты и/или постинкременты, то операнд A обрабатывается раньше операнда B. Кроме того, предекременты и постинкременты выполняются даже для игнорируемых операндов.

Начиная с ICWS-94, все операнды всех команд допускают все виды адресации. Если операнд A команд jmp, jmz, jmn, djn, spl – непосредственное значение, то происходит переход в ту же ячейку памяти, точно так же, как если бы операндом A было $0. Если операнд B команд djn, mov, add, sub, mul, div, mod – непосредственное значение, то изменяется оно само: например, команда djn #42, #1 после выполнения превращается в djn #42, #0; переход выполняется, превращая команду далее в djn #42, #-1 – только затем будет выполняться следующая команда. Таким же образом команда add #1, #2 после выполнения превращается в add #1, #3.

Размер данных, с которыми по умолчанию работает команда, – только операнд B слова, либо оба операнда слова (для add, sub, mul, div, mod, slt) и слово целиком (для остальных команд), – определяется меньшим из размеров его операндов. В ICWS-94, кроме того, определены модификаторы, которые явно задают части слова, обрабатываемые командой:

Модификатор отделяется от команды точкой. Например, mov.ab A, B копирует операнд A слова, задаваемого операндом A, в операнд B слова, задаваемого операндом B; mov.x A, A меняет местами операнды A и B слова, задаваемого операндом A; cmp.f A, B сравнивает слова, задаваемые операндами A и B, игнорируя различия в командах и режимах адресации этих слов, а cmp.i A, B принимает такие различия во внимание.

Команды работы с p-space всегда обрабатывают один из операндов, но не оба, потому что ячейки p-space представляют собой числа, а не слова. Как и с другими командами, по умолчанию используется операнд B слова, задаваемого операндом команды. Адресация p-space, так же как и основной памяти, циклическая: адрес PSPACESIZE+X указывает на ту же ячейку, что и адрес X.

Формат файлов RedCode:

Регистр символов не различается. Команды записываются по одной в строке. Перед командой может быть символьная метка; такая метка может использоваться как операнд в командах – при компиляции она заменяется относительным адресом помеченной команды. Допускаются комментарии от символа ; до конца строки. Определены псевдокомментарии, содержащие информацию о программе: ;redcode (версия RedCode), ;author (автор программы-бойца), ;strategy (описание бойца), ;name (название бойца), ;version (версия бойца), ;date (дата написания программы-бойца). Псевдокомментарии не влияют на выполнение программы; их использование зависит от конкретной реализации холма. Отдельно стоит псевдокомментарий ;assert, задающий условие компиляции программы-бойца: например, ;assert CORESIZE==8000. Предопределённые значения, такие как CORESIZE, зависят от конкретной реализации и обрабатываются так же, как метки.

Допускается псевдокоманда equ, аналогичная по действию директиве #define препроцессора языка Си. Символьный идентификатор, стоящий слева от псевдокоманды, во всём последующем тексте программы заменяется текстовой строкой, стоящей справа от этой псевдокоманды. В начале программы может присутствовать псевдокоманда org; в конце программы может присутствовать псевдокоманда end. Псевдокоманды org и end задают метку команды, с которой должно начинаться выполнение программы; если они отсутствуют, то выполнение будет начинаться с первой команды программы. Содержимое программы после псевдокоманды end игнорируется. Операндом команды может быть выражение, составленное из скобок, знаков арифметических (+ – * / %) и логических (&& || ! == != <= >=) операций, целых чисел (допускается шестнадцатеричная запись в виде 0xABCD) и меток. При компиляции выражение вычисляется и заменяется своим значением по модулю CORESIZE.

Используемые термины

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

Бинология: изучение бинологических моделей; "двоичная биология".

Эволютор (evolver): программа или блок программы, моделирующий биологическую эволюцию (мутации, скрещивание, естественный отбор).

Генетическое программирование: использование эволюторов в компьютерных программах.

Со-эволюция двух и более видов: ход эволюции, в котором критерии естественного отбора для одного вида меняются как результат эволюционных изменений других видов.

Литература

  1. "A Brief History of Corewar" (2005) – http://corewar.co.uk/history.htm
  2. Core Wars // Jargon File под ред. Eric S. Raymond – http://www.catb.org/~esr/jargon/html/C/Core-Wars.html
  3. "COSC 4F90 Project: Parallel Core War Environment and Genetic Procreation of Warriors" (1998) – http://www.cosc.brocku.ca/Project/info/corewar.htm
  4. "Darwin, a Game of Survival of the Fittest among Programs" – http://www.cs.dartmouth.edu/~doug/darwin.pdf
  5. Dewdney, A.K. Статьи // Scientific American (1984–1989) – http://www.koth.org/info/akdewdney/index.html
  6. Doligez, Damien и Durham, Mark. "Annotated Draft of the Proposed 1994 Core War Standard" (1995) – news:48a7bm$nnq@news-rocq.inria.fr // rec.games.corewar
  7. Durham, Mark. "'86 and '88 Core War Standards" (1990) – news:3173@oucsace.cs.OHIOU.EDU // rec.games.programmer
  8. Gettys, Thomas. "Core War '88 - A Proposed Standard" (1988) – http://www.ams.smc.univie.ac.at/~schamane/lectures/kds2/data/icws-88.txt
  9. Jones, D.G. и Dewdney, A.K. "Core War Guidelines" (1984) – http://www.ociw.edu/~birk/COREWAR/DOCS/guide2red.txt
  10. Kampis, George. "Coevolution in the Computer: The Necessity and Use of Distributed Code Systems" (1993) – http://hps.elte.hu/~kampis/Papers/English/alife93.ps
  11. Karonen, Ilmari. "The beginners' guide to Redcode" (2004) – http://vyznev.net/corewar/guide.html
  12. Lemos, Robert. "A 20-year plague"(2003) – http://ecoustics-cnet.com.com/A+20-year+plague/2009-7349_3-5111410.html
  13. Marsden, Anton. "Core War Frequently Asked Questions" (2000) – http://homepages.paradise.net.nz/~anton/cw/corewar-faq.html#CoreWarSystems
  14. Perry, John. "Core Wars Genetics: The Evolution of Predation" (1991) – http://corewar.co.uk/perry.htm
  15. Rasmussen, Steen и др. "Emergence and evolution of cooperative structures in a computational chemistry" (1990) – http://portal.acm.org/citation.cfm?id=87532
  16. Rosenberg, Stuart и Seiler, Jo. "Visualization of Information Trade Wars" (1995) – http://www.holonet.khm.de/~s2/write/itw.html
  17. Strack, Stefan и Durham, Mark. "Annotated Draft of the Proposed 1994 Core War Standard" (1994) – http://www.ecst.csuchico.edu/~pizza/koth/icws94.html
  18. Wait, Alexander. "pQmars – the Quantum Coreworld reference implementation" – http://non.fiction.org/~await/qcw/