Основная война - Core War

Основная война
Скриншот Core War
Игра Core War под управлением симулятора pMARS
Разработчики)Д. Дж. Джонс и А. К. Дьюдни
РелизМарт 1984 г.
Жанр (ы)Программирование игры

Основная война 1984 год игра по программированию созданный Д. Дж. Джонсом и А. К. Дьюдни в которой две или более боевых программ (называемых «воинами») соревнуются за контроль над виртуальный компьютер. Эти боевые программы написаны абстрактно. язык ассемблера называется Redcode.

Геймплей

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

Самая ранняя опубликованная версия Redcode определяла только восемь инструкций. Стандарт ICWS-86 увеличил это число до 10, а стандарт ICWS-88 увеличил его до 11. Используемый в настоящее время стандарт ICWS-94 содержит 16 инструкций. Однако Redcode поддерживает ряд различных режимы адресации и (из ICWS-94) модификаторы инструкций, которые увеличивают фактическое число возможных операций до 7168. Стандарт Redcode оставляет базовое представление инструкции неопределенным и не предоставляет программам средств доступа к нему. Арифметические операции могут выполняться с двумя адресными полями, содержащимися в каждой инструкции, но единственные операции, поддерживаемые в самих кодах инструкций, - это копирование и сравнение на равенство.

Постоянная длина и время инструкции
Каждая инструкция Redcode занимает ровно один слот памяти и требует для выполнения ровно одного цикла. Однако скорость, с которой процесс выполняет инструкции, зависит от количества других процессов в очереди, поскольку время обработки распределяется поровну.
Круговая память
Память адресуется в единицах одной инструкции. Пространство памяти (или основной) имеет конечный размер, но только относительная адресация используется, то есть адрес 0 всегда относится к выполняемой в данный момент инструкции, адрес 1 к инструкции после нее и так далее. Максимальное значение адреса устанавливается на единицу меньше, чем количество ячеек памяти, и при необходимости будет повторяться. В результате существует взаимно однозначное соответствие между адресами и ячейками памяти, но программа Redcode не может определить какой-либо абсолютный адрес. Процесс, который не обнаруживает недействительных инструкций или инструкций перехода, будет продолжать бесконечно выполнять последовательные инструкции, в конечном итоге возвращаясь к инструкции, с которой он был запущен.
Многопроцессорность низкого уровня
Вместо единственного указатель инструкции симулятор Redcode имеет очередь обработки для каждой программы, содержащей переменное количество указателей инструкций, которые симулятор выполняет циклически. Каждая программа запускается только с одним процессом, но новые процессы могут быть добавлены в очередь с помощью SPL инструкция. Процесс умирает, когда он выполняет DAT инструкция или выполняет деление на ноль. Программа считается мертвой, если в ней больше не осталось процессов.
Нет внешнего доступа
Redcode и архитектура MARS не предоставляют функций ввода или вывода. Симулятор представляет собой замкнутую систему, единственными входными данными которой являются начальные значения памяти и очередей процессов, а единственным выходом является результат битвы, т.е. какие программы имеют уцелевшие процессы. Конечно, симулятор может по-прежнему позволять внешний осмотр и модификацию памяти во время симуляции.

Версии Redcode

Существует несколько версий Redcode. Самая ранняя версия, описанная А. К. Дьюдни[1] во многих отношениях отличается от более поздних стандартов, установленных Международным основным военным обществом, и может считаться другим, хотя и родственным языком. Форма Redcode, наиболее часто используемая сегодня, основана на проекте стандарта, представленного в ICWS в 1994 году, который так и не был официально принят, поскольку примерно в то время ICWS фактически прекратил свое существование. Однако разработка Redcode продолжалась неформальным образом, в основном через онлайн-форумы, такие как rec.games.corewar[2] группа новостей.

Стратегия

Воинов обычно делят на несколько широких категорий, хотя настоящие воины часто могут сочетать поведение двух или более из них. Три общие стратегии (репликатор, сканер и бомбардировщик) также известны как бумага, ножницы и камень, поскольку их выступления друг против друга примерно такие же, как у их однофамильцев в известной игровой площадке.[3]

Бумага (или репликатор)
Репликатор создает повторяющиеся копии самого себя и выполняет их параллельно, в конечном итоге заполняя все ядро ​​копиями своего кода. Репликаторов трудно убить, но часто им трудно убить своих противников. Поэтому репликаторы имеют тенденцию иметь много связей, особенно с другими репликаторами.
А шелк особый тип очень быстрого репликатора, названный в честь Шелковый воин[4] пользователя Юха Похьялайнен. Большинство современных репликаторов относятся к этому типу. Репликаторы Silk используют параллельное выполнение для копирования всего кода с помощью одной инструкции и начинают выполнение копии до ее завершения.[5]
Ножницы (или сканер)
Сканер предназначен для работы с репликаторами. Сканер не атакует вслепую, а пытается определить местонахождение врага перед тем, как начать целевую атаку. Это делает его более эффективным против сложных противников, таких как репликаторы, но также делает его уязвимым для ловушек. Сканер обычно бомбит память SPL 0 инструкции. Это заставляет врага создавать огромное количество процессов, которые ничего не делают, кроме создания большего количества процессов, замедляя полезные процессы. Когда противник становится настолько медленным, что не может сделать ничего полезного, его память бомбят. DAT инструкции. Сканеры также обычно более сложные и, следовательно, более крупные и хрупкие, чем другие типы воинов.[6]
А один выстрел это очень простой сканер, который сканирует только ядро, пока не найдет первую цель, а затем постоянно переключается на стратегию атаки, обычно это очистка ядра. Мирмидон[7] Роя ван Рейна - это пример одиночного выстрела.
Камень (или бомбардировщик)
Бомбардировщик слепо копирует "бомбу" через равные промежутки времени в ядре, надеясь поразить врага. Бомба часто бывает DAT инструкция, хотя могут использоваться другие инструкции или даже бомбы с несколькими инструкциями. Бомбардировщик может быть маленьким и быстрым, и они получают дополнительное преимущество перед сканированием противников, поскольку бомбы также служат удобным отвлечением. Бомбардировщики часто комбинируются со спиралями импа, чтобы получить дополнительную устойчивость против репликаторов.
Вампир (или яма-ловец)
Вампир пытается заставить процессы своего оппонента перейти в часть его собственного кода, называемую «ямой». Вампиры могут базироваться как на бомбардировщиках, так и на сканерах. Основная слабость вампиров состоит в том, что их легко атаковать косвенно, поскольку они должны по необходимости разбрасывать указатели на свой код по всему ядру. Их атаки также медленные, так как процессам требуется дополнительный раунд, чтобы достичь ямы. мой вамп[8] Паулссон является примером вампира.
Бес
Бесы названы в честь первого из опубликованных воинов, Бес[9] к А. К. Дьюдни, тривиальный мобильный воин с одной инструкцией, который постоянно копирует свою единственную инструкцию прямо перед своим указатель инструкции. Бесов трудно убить, но они почти бесполезны для нападения. Их польза заключается в том, что их можно легко создать в большом количестве, и они могут выжить, даже если остальная часть воина будет убита.
An кольцо беса (или же бесовская спираль) состоит из показов, расположенных через равные интервалы вокруг ядра и выполняющихся поочередно. Бесы на каждом плече кольца / спирали копируют свою инструкцию в следующее плечо, где она немедленно выполняется снова. Кольца и спирали даже сложнее убить, чем простых бесов, и у них даже есть (небольшой) шанс убить воинов, не защищенных от них. Количество рук в бесовском кольце или спирали должно быть относительно простой с размером ядра.
Quickscanner (или q-scan)
Quickscanner пытается поймать своего противника на ранней стадии, используя очень быстрый развернутый цикл сканирования. Быстрое сканирование - это стратегия на раннем этапе игры, которая всегда требует какой-либо другой стратегии в качестве резервной. Добавление компонента быстрого сканирования к воину может улучшить его счет против длинных воинов, таких как другие устройства быстрого сканирования. Однако развернутое сканирование может нацеливаться только на ограниченное количество локаций и вряд ли сможет поймать небольшого противника.
Ядро ясно
Очистка ядра последовательно перезаписывает все инструкции в ядре, иногда даже включая себя. Очищения ядра не очень распространены в качестве самостоятельных воинов, но часто используются бомбардировщиками и сканерами в качестве стратегии конца игры.

Основная война Программирование

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

Воинов также можно создать генетические алгоритмы или же генетическое программирование. Программы, которые объединяют этот эволюционный метод, известны как эволюционирует. Несколько эволюционистов были представлены Основная война сообщества и, как правило, сосредоточены на создании воинов для небольших основных настроек. Последним разработчиком, имевшим значительный успех, был мкГП[10] на свет появились одни из самых успешных нано- и крошечных воинов. Тем не менее, эволюционная стратегия еще должна доказать свою эффективность на более крупных базовых объектах.[11]

Разработка

Основная война был вдохновлен самовоспроизводящийся программа называется Creeper и последующая программа под названием Reaper, которая уничтожала копии Creeper.[12] Creeper был создан Бобом Томасом в BBN.[13] Дьюдни не знал о происхождении Крипера и Жнеца и называет их слухом, исходящим от Дарвин и червячные эксперименты Шоч и Хапп. 1984 год Scientific American статья о Основная война[12] тем не менее цитирует игру Дарвин, В исполнении Виктор Александрович Высоцкий, Роберт Моррис, и Дуглас Макилрой в Bell Labs в 1961 году. Слово «Core» в названии происходит от магнитная память, устаревший оперативная память технологии.

Первое описание языка Redcode было опубликовано в марте 1984 г. в Основные принципы войны Д. Дж. Джонса и А. К. Дьюдни.[1] Игра была представлена ​​публике в мае 1984 года в статье, написанной Дьюдни в Scientific American. Дьюдни снова Основная война в своей колонке «Компьютерные развлечения» в марте 1985 г.[14] и снова в январе 1987 г.[15]

Международное общество ядерных войн (ICWS) было основано в 1985 году, через год после первой статьи Дьюдни. ICWS опубликовал новые стандарты для языка Redcode в 1986 и 1988 годах и предложил обновление в 1994 году, которое никогда не было официально установлено в качестве нового стандарта.[16] Тем не менее, проект 1994 г. был широко принят и расширен и составляет основу де-факто стандарт для Redcode сегодня. Руководили ICWS Марк Кларксон (1985–1987), Уильям Р. Бакли (1987–1992) и Джон Ньюман (1992–); в настоящее время ICWS не функционирует.[17]

Redcode

 0000:  ДОБАВИТЬ.AB  #   4, $   3 0001:  MOV.F   $   2, @   2 0002:  JMP.B   $  -2, $   0 0003:  DAT.F   #   0, #   0
Собранный Redcode в стиле ICWS-94

Redcode - это язык программирования используется в Основная война. Он выполняется виртуальная машина известный как Симулятор Redcode массива памяти, или же МАРС. Дизайн Redcode частично основан на реальных CISC языки ассемблера начала 1980-х годов, но содержит несколько функций, которые обычно не встречаются в реальных компьютерных системах.

И Redcode, и среда MARS предназначены для предоставления простой и абстрактной платформы без сложности реальных компьютеров и процессоров. Хотя Redcode призван напоминать обычный язык ассемблера CISC, он во многом отличается от «настоящей» сборки.

Реализации

Разработка реализаций игры продолжалась годами несколькими авторами. Доступно несколько версий игры,[18] портирован для нескольких платформ. Например pMARS который программное обеспечение с открытым исходным кодом с исходный код на Sourceforge,[19] или SDL основан SDL pMARS для Windows.[20] Недавно был создан полностью веб-симулятор. https://www.corewar.io/ устранение необходимости загружать какие-либо инструменты для конкретной платформы.

Общая реализация pMars была загружена 30 000 раз в период с 2000 по 2017 гг. Sourceforge.[21]

Рекомендации

  1. ^ а б Jones, D.G .; Дьюдни, А. (Март 1984 г.). «Основные принципы войны». Получено 2013-03-11.
  2. ^ "rec.games.corewar в группах Google". Получено 2013-03-11.
  3. ^ Вангсава, Минтарджо. «Введение в искусство в 1988 году: трилогия« Бумага - камень - ножницы »». Получено 2013-03-11.
  4. ^ Похьялайнен, Джиппо. «Шелковый воин 1.3». Получено 2013-03-11.
  5. ^ Похьялайнен, Джиппо (апрель 1995 г.). "Репликаторы? - Источник Phoenix & TimeScape". Получено 2013-03-11.
  6. ^ Меткалф, Джон (апрель 2004 г.). «Анатомия сканера, базовое введение». Получено 2013-03-11.
  7. ^ ван Рейн, Рой. «Мирмидон». Получено 2013-03-11.
  8. ^ Паулссон, Магнус. "myVamp v3.7". Получено 2013-03-11.
  9. ^ Дьюдни, А.К. "Бес". Получено 2013-03-11.
  10. ^ Скиллеро, Джованни. «мкГП (MicroGP v2)». Получено 2018-09-10.
  11. ^ Ваук, Баркли; Подожди, Александр; Шмидт, Кристиан. «Эволюционный подход порождает конкурентоспособные программы ядерной войны» (PDF). Получено 2013-03-11.
  12. ^ а б Дьюдни, А.К. (Май 1984 г.). «В игре под названием Core War враждебные программы вступают в битву битов». Scientific American. Получено 2017-10-05.
  13. ^ Шох, Дж.; Хапп, Дж. (Март 1982 г.). «Программы-черви - ранний опыт работы с распределенными вычислениями». Коммуникации ACM. 25 (3): 172–180. Дои:10.1145/358453.358455.
  14. ^ Дьюдни, А.К. (Март 1985 г.). «Бестиарий вирусов, червей и других угроз компьютерной памяти». Scientific American. Получено 2017-10-05.
  15. ^ Дьюдни, А.К. (Январь 1987 г.). «Программа под названием MICE прокладывает себе путь к победе в первом турнире Core War». Scientific American. Получено 2017-10-05.
  16. ^ Долигез, Дэмиен; Дарем, Марк (8 ноября 1995 г.). «Аннотированный проект предлагаемого основного военного стандарта 1994 года». Получено 2013-03-11.
  17. ^ Меткалф, Джон. "Краткая история Коревара". Получено 2013-03-11.
  18. ^ Эмуляторы Corewar на corewar.info
  19. ^ Corewar на Sourceforge
  20. ^ pMARS-SDL на corewar.co.uk, автор - Йоонас Пихлая (7 мая 2003 г.)
  21. ^ скачать номера coreware на Sourceforge (доступ 2017-03-22)

внешняя ссылка