Kernkrieg

Kernkrieg (oder Kernkriege) sind ein Programmierspiel, in dem sich zwei oder mehr Kampfprogramme (genannt "Krieger") um die Kontrolle der "Speicherreihe Redcode Simulator" virtueller Computer ("MARS") bewerben. Diese Kampfprogramme werden auf einer abstrakten Zusammenbau-Sprache genannt Redcode geschrieben. Am Anfang wird jedes Kampfprogramm in die Speicherreihe an einer zufälligen Position gestellt, nach der jedes Kampfprogramm eine Instruktion der Reihe nach durchführen kann. Der Gegenstand des Spiels ist, alle Prozesse des gegenüberliegenden Programms (E) zu veranlassen, zu enden (der geschieht, wenn es eine spezielle Instruktion durchführt), das siegreiche Programm im alleinigen Besitz der Maschine verlassend.

Geschichte

Kernkrieg wurde durch ein Programm genannt der Kriecher und ein nachfolgendes Programm genannt die Mähmaschine begeistert, die Kopien des Kriechers zerstört hat. Kriecher wurde von B. Thomas an BBN geschaffen. Dewdney war des Ursprungs des Kriechers und der Mähmaschine nicht bewusst und kennzeichnet sie als ein Gerücht, das aus dem Spiel von Darwin und den Wurm-Experimenten von Shoch und Hupp entsteht.

Der 1984-Artikel Scientific American über den Kernkrieg zitiert dennoch das Spiel Darwin, der von Victor A. Vyssotsky, Robert Morris dem Älteren geschrieben ist. und M Douglas McIlroy an den Glockenlaboratorien in den 1960er Jahren. Das Wort "Core" im Namen kommt aus dem magnetischen Kerngedächtnis, einer veralteten zufälligen Zugriffsspeichertechnologie. Derselbe Gebrauch kann in anderen Computerjargon-Begriffen wie "Kernmüllkippe" gesehen werden.

Die erste Beschreibung der Sprache von Redcode wurde im März 1984, in Kernkriegsrichtlinien von D. G. Jones und A. K. Dewdney veröffentlicht. Das Spiel wurde ins Publikum im Mai 1984 in einem Artikel eingeführt, der von Dewdney im Wissenschaftlichen Amerikaner geschrieben ist. Dewdney hat Kernkrieg in seiner "" Unterhaltungscomputersäule im März 1985, und wieder im Januar 1987 wieder besucht.

International Core Wars Society (ICWS) wurde 1985 ein Jahr nach dem ursprünglichen Artikel von Dewdney gegründet. Der ICWS hat neue Standards für die Sprache von Redcode 1986 und 1988 veröffentlicht, und hat eine Aktualisierung 1994 vorgeschlagen, die als der neue Standard nie formell gesetzt wurde. Dennoch wurde der 1994-Entwurf allgemein angenommen und erweitert, und bildet die Basis für den De-Facto-Standard für Redcode heute. Der ICWS wurde von Mark Clarkson (1985-1987), William R. Buckley (1987-1992) und Jon Newman (1992-) geleitet; zurzeit ist der ICWS verstorben.

Redcode

Redcode ist die im Kernkrieg verwendete Programmiersprache. Es wird durch eine virtuelle Maschine durchgeführt, die als eine Speicherreihe Redcode Simulator oder MARS bekannt ist. Das Design von Redcode basiert lose auf wirklichen CISC Zusammenbau-Sprachen des Anfangs des Zeitalters der 1980er Jahre, aber enthält mehrere Eigenschaften, die nicht gewöhnlich in wirklichen Computersystemen gefunden sind.

0000: ADD.AB # 4, 3 $

0001: MOV.F 2 $, 2

0002: JMP.B-2 $, 0 $

0003: DAT.F # 0, # 0

Sowohl Redcode als auch die Umgebung von MARS werden entworfen, um eine einfache und abstrakte Plattform ohne die Kompliziertheit von wirklichen Computern und Verarbeitern zur Verfügung zu stellen. Obwohl Redcode gemeint wird, um einer gewöhnlichen CISC Zusammenbau-Sprache zu ähneln, unterscheidet er sich auf viele Weisen vom "echten" Zusammenbau:

  • Redcode hat sehr wenige Operationen — 10 in ICWS-88 und 18 in ICWS-94.
  • Jede gesammelte Instruktion wird in einen Instruktionscode und zwei numerische Felder geteilt. Kein numerischer Wert wird für den Instruktionscode definiert. Der Code kann nur als ein Teil einer kompletten Instruktion kopiert werden, und kann nur für die Gleichheit verglichen werden.
  • Außer dem opcode und zwei numerischen operands erlaubt ICWS-94 jeder Instruktion von Redcode, einen Modifikator zu haben, der die Größe (ein Feld, beide Felder oder komplette Instruktion) von den Daten definiert, auf denen die Instruktion funktioniert. Zusätzlich hat jedes der numerischen Felder Wenden-Weise vereinigt. ICWS-88 definiert 4 Wenden-Weisen, und ICWS-94 erweitert diese Zahl zu 8.
  • Jede Redcode Instruktion hat dieselbe Länge und nimmt dieselbe Zeit, um durchzuführen. Das Gedächtnis wird in Einheiten einer Instruktion gerichtet.
  • Alle Zahlen sind nicht unterzeichnet (d. h. nichtnegativ) ganze Zahlen weniger als die Größe des Gedächtnisses. Deshalb gibt es eine isomorphe Ähnlichkeit zwischen Zahlen und Speicherpositionen. Die ganze Arithmetik wird modulo die Größe des Gedächtnisses getan.
  • Nur das Verhältniswenden wird verwendet. D. h. richten Sie 0 immer bezieht sich auf die zurzeit durchführende Instruktion, richten Sie 1 an die Instruktion danach und so weiter. Adressen vorbei am Ende des Gedächtnisses hüllen sich ringsherum zum Anfang ein. Auf diese Weise kann ein Programm nicht (und brauchen nicht) wissen seine absolute Position im Gedächtnis.

Jedes Programm kann auch mehrere aktive Prozesse, jeder haben, seinen eigenen Instruktionszeigestock habend. Jedes Programm fängt mit nur einem Prozess an, aber andere können mit der Instruktion geschaffen werden. Die Prozesse für jedes Programm führen abwechselnd durch, so dass die Ausführungsgeschwindigkeit jedes Prozesses zur Zahl von aktiven Prozessen umgekehrt proportional ist, die das Programm hat. Ein Prozess stirbt, wenn er eine Instruktion durchführt oder eine Abteilung durch die Null durchführt. Ein Programm wird tot betrachtet, wenn es keine Prozesse mehr übrighat.

Hauptmerkmale

Keine numerischen Instruktionswerte: Der Redcode Standard verlässt die zu Grunde liegende Darstellung von Instruktionscodes unbestimmt, und stellt keine Mittel für Programme zur Verfügung, um darauf direkt zuzugreifen. Arithmetische Operationen können nur auf den zwei in jeder Instruktion enthaltenen Adressfeldern getan werden. Die einzigen Operationen, die auf den Instruktionscodes selbst unterstützt sind, kopieren und Vergleich für die Gleichheit.

Kein absolutes Wenden: Alle Adressen werden als Ausgleiche hinsichtlich der Instruktion interpretiert, die sie enthält. Da sich der Adressraum ringsherum einhüllt, ist es tatsächlich für ein Programm von Redcode unmöglich, seine absolute Adresse zu bestimmen.

Mehrverarbeitung der niedrigen Stufe: Statt eines einzelnen Instruktionszeigestocks hat ein Simulator von Redcode mehrere Prozess-Warteschlangen, jeder, eine variable Zahl von Instruktionszeigestöcken der die Simulator-Zyklen durch enthaltend. Neue Prozesse können zur Warteschlange hinzugefügt werden, die die Instruktion verwendet.

Andere bemerkenswerte Eigenschaften von Redcode schließen ein:

Kein Außenzugang: Redcode und die Architektur von MARS stellen keinen Eingang oder Produktionsfunktionen zur Verfügung. Der Simulator ist ein geschlossenes System mit dem einzigen Eingang, der die Anfangswerte des Gedächtnisses und der Prozess-Warteschlangen und der einzigen Produktion ist, die das Ergebnis des Kampfs ist, d. h. welche Programme überlebende Prozesse hatten. Natürlich kann der Simulator noch Außeninspektion und Modifizierung des Gedächtnisses erlauben, während die Simulation läuft.

Unveränderliche Instruktionslänge und Zeit: Jede Redcode Instruktion besetzt genau ein Speicherablagefach und nimmt genau einen Zyklus, um durchzuführen. Die Rate, an der ein Prozess Instruktionen jedoch durchführt, hängt von der Zahl anderer Prozesse in der Warteschlange ab, weil Verarbeitungszeit ebenso geteilt wird.

Relativ wenige Instruktionen: Die frühste veröffentlichte Version von Redcode hatte nur acht Instruktionen, während die zurzeit verwendete Version achtzehn hat. Jedoch unterstützt Redcode mehrere verschiedene Wenden-Weisen und (in späteren Versionen) Instruktionsmodifikatoren, die die wirkliche Zahl von möglichem opcodes zu mehreren tausend steigern.

Alle Adressen sind gültig: Alle Zahlen in Redcode werden als nicht unterzeichnete ganze Zahlen behandelt, und der maximale Wert der ganzen Zahl wird veranlasst, der Zahl von Speicherpositionen minus eine gleichzukommen. So ist jede ganze Zahl eine gültige Adresse, und jede Speicherposition hat genau eine gültige Adresse. Zahlen, die außerhalb der gültigen Reihe fallen würden, werden ringsherum gemäß den üblichen Regeln der modulo Arithmetik gewickelt.

Kreisförmiges Gedächtnis: Demzufolge des obengenannten und des Mangels am absoluten Wenden erscheint der Speicherraum (oder Kern) zu den Programmen darin als ein Kreis ohne bestimmten Anfang oder Ende. Ein Prozess, der auf keinen Invaliden oder Sprung-Instruktionen stößt, kann fortsetzen, aufeinander folgende Instruktionen endlos durchzuführen, schließlich zur Instruktion zurückkehrend, wo es angefangen hat.

Varianten

Mehrere Varianten von Redcode bestehen. Die frühsten von A. K. Dewdney beschriebenen Versionen unterscheiden sich in vieler Hinsicht von den späteren Standards, die von der Internationalen Kernkriegsgesellschaft gegründet sind, und konnten als ein verschiedener, obgleich verbunden, als Sprache betrachtet werden. Die Form von Redcode hat meistens verwendet heute basiert auf einem Draftstandard, der dem ICWS 1994 vorgelegt ist, der nie formell akzeptiert wurde, weil der ICWS effektiv verstorben um diese Zeit geworden war. Die Entwicklung von Redcode hat jedoch auf eine informelle Weise hauptsächlich über Online-Foren wie der newsgroup weitergegangen.

Nichtspielgebrauch

Im Prinzip kann Redcode zu Zwecken außer dem Kernkrieg verwendet werden.

Frühste Versionen

Die frühste veröffentlichte Beschreibung von Redcode wird in den Kernkriegsrichtlinien veröffentlicht im März 1984 von A. K. Dewdney und D. G. Jones gefunden. Die Sprache, wie beschrieben, hier unterscheidet sich bedeutsam von den späteren Varianten, auf viele an wirklichen Zusammenbau-Sprachen des Zeitalters nähere Weisen seiend.

Die Richtlinien beschreiben eine Reihe nur acht Instruktionen, aber es wird festgestellt, dass die frühsten Durchführungen von Redcode durch Dewdney und Jones einen größeren Befehlssatz hatten. Tatsächlich, wie man am besten sieht, breitet sich die in den Richtlinien beschriebene Sprache mehr als eine Basis für andere Entwickler auf aus als als ein wirklicher Standard.

Strategie

Krieger werden in mehrere breite Kategorien allgemein geteilt, obwohl wirkliche Krieger häufig das Verhalten von zwei oder mehr von diesen verbinden können. Drei der allgemeinen Strategien (Wiederholangabe, Scanner und Bomber) sind auch bekannt als Papier, Schere und Stein, da ihre Leistung gegen einander der ihrer Namensvetter im weithin bekannten Spielplatz-Spiel näher kommt.

  • Ein Bomber (oder Felsen) kopiert blind eine "Bombe" regelmäßig im Kern, hoffend, den Feind zu schlagen. Die Bombe ist häufig eine Instruktion, obwohl andere Instruktionen oder sogar Mehrinstruktionsbomben, verwendet werden können. Ein Bomber kann klein und schnell sein, und sie gewinnen einen Extrarand über die Abtastung von Gegnern, da die Bomben auch als günstige Ablenkungen dienen. Bomber werden häufig mit Teufelchen-Spiralen (sieh unten) verbunden, um Extraelastizität gegen Wiederholangaben zu gewinnen. Der zweite veröffentlichte Krieger in der Kernkriegsgeschichte, Zwerg durch A. K. Dewdney, war ein Bomber.
  • Eine Wiederholangabe (oder Papier) macht wiederholte Kopien von sich und führt sie in der Parallele durch, schließlich den kompletten Kern mit Kopien seines Codes füllend. Wiederholangaben sind hart, häufig Schwierigkeit zu töten, aber zu haben, ihre Gegner tötend. Wiederholangaben neigen deshalb dazu, viele Bande besonders gegen andere Wiederholangaben einzukerben. Das frühste Beispiel einer Wiederholangabe ist Mäuse durch Chip Wendell.
  • Eine Seide ist ein spezieller Typ der sehr schnellen Wiederholangabe, genannt nach dem Seidenkrieger durch Juha Pohjalainen. Die meisten modernen Wiederholangaben sind dieses Typs. Seidenwiederholangaben verwenden parallele Ausführung, um ihren kompletten Code mit einer Instruktion zu kopieren, und Ausführung der Kopie zu beginnen, bevor es beendet wird.
  • Ein Scanner (oder schneiden), wird entworfen, um Wiederholangaben, gewöhnlich durch die Bombardierung des Gedächtnisses mit Instruktionen zu schlagen. Das veranlasst den Feind, eine riesige Zahl von Prozessen zu schaffen, die wirklich nichts als mehr Prozesse schaffen. Das verlangsamt nützliche Prozesse. Wenn der Feind so langsam wird, dass es unfähig ist, irgendetwas Nützliches zu tun, wird das Gedächtnis mit Instruktionen bombardiert.
  • Ein Scanner greift blind nicht an, aber versucht, seinen Feind vor dem Ergreifen einer ins Visier genommenen Offensive ausfindig zu machen. Das macht es wirksamer gegen hard-kill Gegner wie Wiederholangaben, sondern auch verlässt es verwundbar für Köder. Scanner sind auch allgemein komplizierter, und deshalb größer und zerbrechlicher als andere Typen von Kriegern. Er durch P. Kline Allein Ansehen ist ein Beispiel eines starken Scanners.
  • Ein Vampir oder Versuche des Grube-Trappers, die Prozesse seines Gegners in ein Stück seines eigenen Codes springen zu lassen, hat eine "Grube" genannt. Vampire können entweder auf Bombern oder auf Scannern basieren. Eine Hauptschwäche von Vampiren ist, dass sie indirekt leicht angegriffen werden können, da sie notwendigerweise Zeigestöcke zu ihrem Code überall im Kern streuen müssen. Ihre Angriffe sind auch langsam, weil es eine Extrarunde für die Prozesse nimmt, um die Grube zu erreichen. myVamp5.4 durch Paulsson ist ein gutes Beispiel eines Vampirs.
  • Ein ein Schuss ist ein sehr einfacher Scanner, der nur den Kern scannt, bis es das erste Ziel findet, und dann dauerhaft auf eine Angriffsstrategie, gewöhnlich ein klarer Kern umschaltet. Myrmidon durch Roy van Rijn ist ein einfacher, noch wirksamer oneshot.
  • Ein Teufelchen (genannt nach dem allerersten veröffentlichten Krieger, Teufelchen durch A. K. Dewdney) ist ein trivialer beweglicher Ein-Instruktion-Krieger, der ständig seine alleinige Instruktion gerade vor seinem Instruktionszeigestock kopiert. Stärkt sind hart zu töten, aber neben dem nutzlosen für das Vergehen. Ihr Gebrauch liegt in der Tatsache, dass sie in der großen Anzahl leicht erzeugt werden können und überleben können, selbst wenn der Rest des Kriegers getötet wird.
  • Ein Teufelchen-Ring oder Teufelchen-Spirale bestehen daraus stärkt unter Drogeneinfluss an gleichen Zwischenräumen um den Kern und abwechselnd durchführend. Das Stärken an jedem Arm des Rings/Spirale kopiert ihre Instruktion zum folgenden Arm, wo es wieder sofort durchgeführt wird. Ringe und Spiralen sind noch härter zu töten als einfach stärkt, und sie haben sogar eine (kleine) Chance, gegen sie nicht geschützte Krieger zu töten. Die Zahl von Armen in einem Teufelchen-Ring oder Spirale muss mit der Größe des Kerns relativ erst sein.
  • Ein quickscanner versucht, seinen Gegner früh durch das Verwenden einer sehr schnellen entrollten Abtastungsschleife zu fangen. Quickscanning ist eine Strategie des frühen Spiels, und verlangt immer eine andere Strategie als eine Unterstützung. Das Hinzufügen eines quickscanning Bestandteils einem Krieger kann seine Kerbe gegen lange Krieger — wie anderer quickscanners verbessern. Jedoch kann das entrollte Ansehen nur eine begrenzte Zahl von Positionen ins Visier nehmen, und wird kaum einen kleinen Gegner fangen.
  • Ein klarer Kern ist ein einfacher Krieger, der folgend jede Instruktion im Kern, manchmal sogar einschließlich sich überschreibt. Kern klärt sich sind als eigenständige Krieger nicht sehr üblich, aber sie werden häufig als eine Schlussphase-Strategie durch Bomber und Scanner verwendet.
  • Ein Bombe-Faltblatt ist eine Spezialstrategie gegen Bomber. Es scannt den Kern, bis es eine Bombe ausfindig macht, die durch den Bomber geworfen ist, und dann seinen Code dort kopiert, annehmend, dass der Bomber denselben Punkt wieder irgendwann bald nicht angreifen wird.

Kernkriegsprogrammierung

Gestützt auf dem Verstehen von Kernkriegsstrategien kann ein Programmierer einen Krieger schaffen, um bestimmte Ziele zu erreichen. Der Krieger wird im ASCII-Format mit einer ".red" Erweiterung gerettet. Revolutionäre Ideen kommen hin und wieder; den größten Teil der Zeit, jedoch, verwerten Programmierer die veröffentlichten Krieger, um einige Ideen zu bekommen. Mit optimizers wie OptiMax oder Kernschritt optimizer Werkzeuge kann ein kompakterer und effizienter Krieger geschaffen werden.

Krieger können auch durch Genetische Algorithmen oder Genetische Programmierung erzeugt werden. Programme, die diese Entwicklungstechnik integrieren, sind auch bekannt als Kernkriegsevolvers. Mehrere kleine und schnelle evolvers wurden von der Kernkriegsgemeinschaft eingeführt, aber wurden auf winzige oder nano Kernkriegseinstellungen mehr eingestellt. Der letzte evolver mit dem bedeutenden Erfolg war µGP, der nano und winzigen KOTHs erzeugt hat. Dennoch muss Entwicklungsstrategie noch seine Wirksamkeit in größeren Hügeln (9000 oder mehr Kerne) beweisen.

Varianten

  • CoreWars 8086 Werkzeuge ein dem ursprünglichen Kernkrieg sehr ähnliches Spiel. Anstatt den kundengerecht angefertigten Befehlssatz von Redcode, CoreWars zu verwenden, werden 8086 Krieger-Programme auf 8086 Zusammenbau-Sprache geschrieben.
  • Tierra ist eine Anpassung des Kernkrieges, der von Thomas S. Ray (ein frühes Mitglied des ICWS) geschrieben ist, verwendet im Modellieren von lebenden Systemen.
  • Avida ist eine weitere Ableitung des Kernkrieges, auf Tierra bauend, und weiter die Prozesse der Evolution abstrahierend. Avida, der von Christoph Adami, Charles Ofria, und Titus Brown geschaffen ist, wird in der wissenschaftlichen Forschung über die Evolution verwendet.

Siehe auch

  • Digitalorganismus
  • RoboWar
  • Algorithmischer Handel: Lager Handelsprogramme bewirbt sich manchmal mit einander.

Links


Membran von Synovial / Martin Guerre
Impressum & Datenschutz