Core Warは 、1984年にDG JonesとAK Dewdneyによって発表された プログラミングゲーム です。このゲームでは、ウォーリアーと呼ばれる2つ以上の戦闘プログラムが、 仮想コンピュータ の制御を巡って競い合います。これらのプログラムは、 Redcode と呼ばれる抽象アセンブリ言語 で記述されています。Redcodeと仮想マシンの初期標準は、国際Core Wars協会(ICWS)によって確立され、その後の改訂はコミュニティの合意に基づいて行われました。
ゲームプレイ 試合開始時、各プログラムはランダムなメモリ位置にロードされます。プログラムは順番に1つの命令を実行します。勝利条件は、すべての対戦相手を終了させることです。通常は、対戦相手に無効な命令を実行させることで勝利し、勝利したプログラムがマシンを独占します。
Redcodeの初期バージョンでは、命令数はわずか8つでした。この数は、ICWS-86規格で10、ICWS-88で11、そして現在も広く使用されている1994年のドラフト規格で16に増加しました。1994年のドラフトで導入された様々なアドレッシングモード と命令修飾子により、実行可能な演算の総数は7168となります。Redcodeは、メモリ内での命令の表現方法を定義しておらず、プログラムがコピーや等価比較以外の方法で自身のコード構造を検査することも許可していません。算術演算は、命令の2つのアドレスフィールドに限定されています。
一定の命令長と時間 Redcodeの各命令は、正確に1つのメモリスロットを占有し、実行に正確に1サイクルを要します。ただし、処理時間は均等に共有されるため、プロセスが命令を実行する速度は、キュー内の他のプロセスの数に依存します。 循環記憶 メモリは1命令単位でアドレス指定されます。メモリ空間(またはコア )は有限サイズですが、相対アドレス指定 のみが使用されます。つまり、アドレス0 は常に現在実行中の命令を指し、アドレス1 はその次の命令を指し、以下同様です。最大アドレス値はメモリ位置の数より1少ない値に設定され、必要に応じてオーバーフローします。結果として、アドレスとメモリ位置の間には1対1の対応関係がありますが、Redcodeプログラムが絶対アドレスを特定することは不可能です。無効な命令やジャンプ命令に遭遇しないプロセスは、連続する命令を無限に実行し続け、最終的には開始した命令に戻ります。 低レベルマルチプロセッシング Redcodeシミュレータは、単一の命令ポインタではなく、各プログラムごとに プロセスキュー を持ち、その中に可変数の命令ポインタが格納されており、シミュレータはこのキューを順番に処理します。各プログラムは最初は1つのプロセスで開始しますが、SPL命令を使用して新しいプロセスをキューに追加できます。プロセスは、DAT命令を実行するか、 ゼロ除算を 実行すると終了します。プログラムは、残りのプロセスがなくなると終了したとみなされます。 外部からのアクセスはできません RedcodeとMARSアーキテクチャは、入出力機能を提供しません。シミュレータは閉鎖系であり、入力はメモリとプロセスキューの初期値のみ、出力は戦闘の結果、つまりどのプログラムが生き残ったかのみです。もちろん、シミュレータはシミュレーション実行中に外部からのメモリの検査や変更を許可する場合があります。
Redcodeのバージョン Redcodeにはいくつかのバージョンが存在する。AK Dewdney [ 1 ] によって記述された最も初期のバージョンは、国際コア戦争協会によって確立された後の標準とは多くの点で異なり、関連性はあるものの、別の言語とみなすことができる。今日最も一般的に使用されているRedcodeの形式は、1994年にICWSに提出された標準の草案に基づいているが、ICWSはその頃に事実上活動を停止していたため、正式には承認されなかった。しかし、Redcodeの開発は、rec.games.corewar[ 2 ] ニュースグループ などのオンラインフォーラムを通じて、主に非公式な方法で継続されている。
戦略 戦士は一般的にいくつかの大まかなカテゴリーに分けられますが、実際の戦士はこれらの行動のうち2つ以上を組み合わせることがよくあります。一般的な戦略のうち3つ(レプリケーター 、スキャナー 、ボンバー)は、お互いのパフォーマンスが有名な遊び場でのゲームにおける同名の石、紙、はさみ、石に似ていることから 、紙、はさみ、石 としても知られています。[ 3 ]
紙(または複製機) レプリケーターは自身のコピーを繰り返し作成し、それらを並列実行することで、最終的にコア全体を自身のコードのコピーで埋め尽くします。レプリケーターは破壊するのが困難ですが、相手を破壊するのに苦労することがよくあります。そのため、レプリケーター同士の対戦では、引き分けが多くなる傾向があります。 シルクは 、非常に高速なレプリケーターの一種で、 Juha Pohjalainen のSilk Warrior [ 4 ] にちなんで名付けられました。現代のレプリケーターのほとんどはこのタイプです。シルクレプリケーターは並列実行を使用して、1 つの命令でコード全体をコピーし、コピーが完了する前に実行を開始します。[ 5 ] ハサミ(またはスキャナー) スキャナはレプリケーターを打ち負かすように設計されています。スキャナは無差別に攻撃するのではなく、標的を絞った攻撃を開始する前に敵の位置を特定しようとします。これにより、レプリケーターのような倒しにくい敵に対してより効果的になりますが、デコイに対して脆弱にもなります。スキャナは通常、SPL 0 命令でメモリを爆撃します。これにより、敵はさらに多くのプロセスを作成するだけの膨大な数のプロセスを作成し、有用なプロセスを遅くします。敵が有用なことを何もできなくなるほど遅くなると、メモリはDAT 命令で爆撃されます。スキャナは一般的に他のタイプの戦士よりも複雑で、そのためより大きく、より脆弱です。[ 6 ] ワンショット とは、コアをスキャンして最初のターゲットを見つけるまでスキャンを続け、その後は恒久的に攻撃戦略(通常はコアクリア)に切り替える、非常にシンプルなスキャナーです。ロイ・ファン・ラインのMyrmidon [ 7 ] はワンショットの一例です。 石(または爆撃機) 爆撃機は、敵を攻撃することを期待して、コア内で一定間隔で「爆弾」を無差別にコピーします。爆弾は多くの場合DAT 命令ですが、他の命令や、複数の命令を組み合わせた爆弾が使用されることもあります。爆撃機は小型で高速であり、爆弾が敵の注意をそらす役割も果たすため、スキャンを行う敵に対して優位に立つことができます。爆撃機は、レプリケーターに対する耐性を高めるために、インプ・スパイラルと組み合わせて使用されることがよくあります。 吸血鬼(または落とし穴掘り) ヴァンパイアは、相手のプロセスを「ピット」と呼ばれる自身のコードにジャンプさせようとします。ヴァンパイアは、ボマーまたはスキャナのいずれかをベースにすることができます。ヴァンパイアの大きな弱点は、コア全体に自身のコードへのポインタを散在させる必要があるため、間接的に簡単に攻撃される可能性があることです。また、プロセスがピットに到達するまでに余分なラウンドがかかるため、攻撃も遅くなります。ポールソンによるmyVamp [ 8 ] は、ヴァンパイアの一例です。 インプ インプは、 AK Dewdney による史上初の出版された戦士、Imp [ 9 ] にちなんで名付けられました。これは、命令ポインタ のすぐ前に唯一の命令を継続的にコピーする、単純な 1 つの命令を持つ移動可能な戦士です。インプは倒すのが難しいですが、攻撃にはほとんど役に立ちません。その利点は、大量に簡単に生成でき、他の戦士が倒されても生き残る可能性があることです。インプリング (またはインプスパイラル )は、中心核の周囲に等間隔に配置されたインプが交互に行動することで構成されます。リング/スパイラルの各腕にいるインプは、指示を次の腕にコピーし、そこで指示が即座に実行されます。リングやスパイラルは、単純なインプよりも倒すのがさらに難しく、防御手段を持たない戦士を(わずかではありますが)殺してしまう可能性もあります。インプリングやスパイラルの腕の数は、中心核の大きさと互いに素でなければなりません。 ヒドラ ハイドラは小型爆撃機やコアクリアの複数のコピーを発射します。[ 10 ] クイックスキャナー(またはqスキャン) クイックスキャナーは、非常に高速な展開スキャンループを使用して、相手を早期に捕らえようとします。クイックスキャンはゲーム序盤の戦略であり、常に他の戦略をバックアップとして用意しておく必要があります。戦士にクイックスキャンコンポーネントを追加することで、他のクイックスキャナーなどの長身の戦士に対するスコアを向上させることができます。ただし、展開スキャンは限られた数の地点しか対象にできず、小型の相手を捕らえることは難しいでしょう。 Bootstrap ブートストラップは、コンポーネントの 1 つ以上を元の場所からコピーし、スキャナーやクイックスキャナーを引き付けるための囮を残します。[ 11 ] 混合戦士 戦士の中には、同じ時期または異なる時期に、異なる戦略を用いる者がいる。 例えば、Stone/Imp。Stone / Impは、 紙に対する損失を軽減するためにStoneとペアになったImpです。 史上最も成功した戦士の中には、ストーン/インプ族がいる。 コアクリア コアクリアは、コア内のすべての命令を順次上書きし、場合によっては自身も上書きします。コアクリアは単独の攻撃手段としてはあまり一般的ではありませんが、爆撃機やスキャナーが終盤の戦略としてよく使用します。
コアウォー プログラミングCore Warの 戦略を理解することで、プログラマーは特定の目標を達成するためのウォーリアーを作成できます。革新的なアイデアは時折生まれますが、ほとんどの場合、プログラマーは既に公開されているウォーリアーをベースにプログラムを作成します。OptiMaxやコアステップ最適化ツールなどの最適化ツールを使用することで、より効果的なウォーリアーを作成できます。
ウォーリアーは遺伝的アルゴリズム または遺伝的プログラミング によっても生成できます。この進化的手法を統合したプログラムはエボルバーとして知られています。 コアウォー コミュニティによっていくつかのエボルバーが導入され、より小さなコア設定用のウォーリアーの生成に重点が置かれています。大きな成功を収めた最新のエボルバーはμGP [ 12 ] [ 13 ] で、最も成功したナノウォーリアーとタイニーウォーリアーのいくつかを生成しました。しかしながら、進化戦略は、より大きなコア設定での有効性を証明する必要があります。[ 14 ]
発達 Core War は、 自己複製 プログラムであるCreeper と、その後に続いた Creeper のコピーを破壊する Reaper というプログラムに触発されて開発されました。 [ 15 ] Creeper はBBN の Bob Thomas によって作成されました。[ 16 ] Dewdney は Creeper と Reaper の起源を知らず、ダーウィンと Shoch と Huppの線虫実験に由来する噂として言及しています。しかし、 Core Warに関する 1984 年の Scientific American の 記事[ 15 ] では、1961 年にベル研究所 でVictor A. Vyssotsky 、Robert Morris 、Douglas McIlroy によってプレイされたゲームDarwin が引用されています。
名前の「Core」は、廃止されたランダムアクセスメモリ技術である 磁気コアメモリに由来します。この用語は当時も現在も、 Unix およびほとんどのUnixライクなシステムにおけるコアダンプ と呼ばれる作業メモリダンプ内の作業メモリ を指す用語として一般的に使用されています。さらに、このようなシステムにおけるコアダンプのデフォルトファイル名は通常「core」であるか、または「core」という単語を含んでいます。
Redcode言語の最初の記述は、1984年3月にDG JonesとAK Dewdneyによる Core War Guidelines に掲載された。[ 1 ] このゲームは、1984年5月にDewdneyがScientific American に書いた記事で一般に紹介された。Dewdneyは、1985年3月の「Computer Recreations」コラムでCore Warを再訪し、 [ 17 ] 1987年1月に再び取り上げた。[ 18 ]
国際コア戦争協会(ICWS)は、デューニーの最初の論文の1年後の1985年に設立されました。ICWSは1986年と1988年にレッドコード言語の新しい標準を発表し、1994年に更新案を提案しましたが、正式に新しい標準として設定されることはありませんでした。[ 19 ] それにもかかわらず、1994年の草案は広く採用され、拡張され、今日ではレッドコードの事実上の 標準の基礎となっています。ICWSはマーク・クラークソン(1985~1987年)、ウィリアム・R・バックリー(1987~1992年)、ジョン・ニューマン(1992年~)によって運営されていましたが、現在ICWSは活動を停止しています。[ 20 ]
レッドコード 0000 : ADD . AB # 4 , $ 3 0001 : MOV . F $ 2 , @ 2 0002 : JMP . B $ - 2 , $ 0 0003 : DAT . F # 0 , # 0 ICWS-94スタイルのレッドコードを組み立てました
Redcodeは、Core War で使用されるプログラミング言語 です。これは、メモリ配列Redcodeシミュレータ (MARS) と呼ばれる仮想マシン によって実行されます。Redcodeの設計は、1980年代初頭の実際のCISC アセンブリ言語 を大まかにベースにしていますが、実際のコンピュータシステムには通常見られないいくつかの機能を備えています。
RedcodeとMARS環境はどちらも、実際のコンピュータやプロセッサの複雑さを排除し、シンプルで抽象的なプラットフォームを提供するように設計されています。Redcodeは一般的なCISCアセンブリ言語に似ていることを意図していますが、「実際の」アセンブリ言語に比べてかなり簡略化されており、絶対アドレス指定機能はありません。
オリジナルの8つの命令は次のように説明されています。後のバージョンでは、NOP、乗算、およびより複雑な比較が追加されました。[ 21 ]
ICWS '94のドラフト規格では、主にAフィールドの間接参照に対処するために、アドレッシングモードがさらに追加され、合計8つのモードが利用可能になった。
参考文献 1 2 Jones, DG; Dewdney, AK (1984 年 3 月)。「コア戦争ガイドライン」。2023年 5 月 27 日 に取得。 ↑ 「rec.games.corewar on Google Groups」 。 2023年5月29日 取得 。 ↑ ワンソー、ミンタルジョ。 「88年の美術入門:紙・石・はさみ三部作」 。 2023年5月27日 取得 。 ↑ ポジャライネン、ジッポ。 「シルクウォリアー1.3」 。 2025 年 3 月 2 日 に取得 。 ↑ ポジャライネン、ジッポ (1995 年 4 月)。 「レプリケーター? -> フェニックスとタイムスケープソース」 。 2023-05-27 に取得 。 ↑ メトカーフ、ジョン(2004年4月)。 「スキャナーの構造、基本的な入門」 。 2023年5月27日 取得 。 ↑ ファン・レイン、ロイ。 「ミルミドン」 。 2025 年 3 月 2 日 に取得 。 ↑ ポールソン、マグナス。 「myVamp v3.7」 。 2025 年 3 月 2 日 に取得 。 ↑ アラスカ州デュードニーの 「インプ」 。 2025 年 3 月 2 日 に取得 。 ↑ 「コア戦争戦略ガイド」 。 2024年5月12日 取得 。 ↑ 「コア戦争戦略ガイド」 。 2025年5月12日 取得 。 ↑ スキジェロ、ジョバンニ。 「μGP(マイクロGP v2)」 。 GitHub 。 2018年9月10日 に取得 。 ↑ Corno, F.; Sanchez, E.; Squillero, G. (2005). "進化するアセンブリプログラム: ゲームがマイクロプロセッサの検証にどのように役立つか" . IEEE Transactions on Evolutionary Computation . 9 (6): 695– 706. doi : 10.1109/TEVC.2005.856207 . ISSN 1089-778X . ↑ Vowk, Barkley; Wait, Alexander; Schmidt, Christian. "進化論的アプローチにより人間の競争的コア戦争プログラムが生成される" (PDF) . 2023年5月27日 取得 。 1 2 デューニー、AK (1984 年 5 月)。 「コア ウォーと呼ばれるゲームでは、敵対するプログラムがビットの戦いを繰り広げる」 。 サイエンティフィック アメリカン。2023 年 5 月 27 日 取得 。 ↑ Shoch, J. ; Hupp, J. (1982 年 3 月). "The 'Worm' Programs - Early Experience with a Distributed Computation" . Communications of the ACM . 25 (3): 172– 180. doi : 10.1145/358453.358455 . S2CID 1639205 . ↑ Dewdney, A. K. (1985年3月). 「コンピュータメモリに対するウイルス、ワーム、その他の脅威に関するコア戦争の動物誌」 . Scientific American . 2023年5月27日 閲覧 。 ↑ Dewdney, A. K. (1987年1月) 「MICEと呼ばれるプログラムが、第1回コアウォー・トーナメントで勝利を収める」 . Scientific American . 2023年5月27日 閲覧 。 ↑ Doligez, Damien; Durham, Mark (1995年11月8日). 「1994年コア戦争標準案の注釈付き草案」 . 2023年5月27日 取得 。 ↑ メトカーフ、ジョン。 「コアウォーの簡潔な歴史」 。 2023年5月27日 取得 。 ↑ 「Redcode入門ガイド、v1.23」 。 ↑ corewar.info の Corewar エミュレータ ↑ SourceForge の corewar ↑ Joonas Pihlaja による corewar.co.uk の pMARS-SDL (2003 年 5 月 7 日) ↑ SourceForge の corewar のダウンロード数(アクセス日: 2021年6月7日)
外部リンク Core War - 究極のプログラミングゲーム コア戦争情報ページ Redcode入門ガイド 1994年中核戦争基準案の注釈付き草案 Corewar文献目録