CODE VS 4.0 参戦記

CODE VSに参加しよう

CODE VS 4.0(https://codevs.jp/)に出場してきました。

知らない方のために説明すると、CODE VS(コード バーサス)とは、
「ゲームのAIをあらかじめ作って持ちより、みんなで戦わせるプログラミングコンテスト」。
年に1回の恒例行事で、4.0 という数字が示すとおり、これが4回目の開催です。

本来であれば、1000人近い予選参加者が1ヶ月以上かけて競い合って、上位8人のみが決勝に出場できる狭き門なのですが、
今回の自分は、それとは別枠の「エキシビジョンマッチ枠」での出場です。
エキシビジョンはこの枠の参加者同士どうしで戦うのですが、ここで優勝すれば、
本選8名中から選ばれた優勝者と戦うイベント戦を行うことができます。

運営サイドから自分に、「エキシビジョンマッチに出てみませんか?」とメールが来たのは、
AIのプログラム提出締め切りの約1週間前。
どうも、色々な人に声をかけているようですが、自分が最後だったようです。
それから、もろもろの調整とか、突然言われてもこっちにも事情がとかいろいろあって、
実質的に作業ができるのは休日が丸1日分だけ。

これどうしろと?

AIを開発しよう

文句を言っていても仕方ありません。開発に取り掛かります。
それに、自分の知るかぎり、こういう1人だけ圧倒的に不利なシチュエーションに放り込まれた人物は、
たいていの場合において勝利していたような気がします。明確な勝ちフラグだと言えるでしょう。

今回のゲームは、いわゆる「戦略ゲー」です(https://codevs.jp/gamerule.html)。
村を建てたり、資源を回収したり、戦闘ユニットを生産したりして戦い、先に相手の城を落としたプレイヤーの勝ちです。

もとより時間はないので、全てにおいて完璧な対応をするプログラムを書くことはハナから不可能。
選択と集中。もっとも重要なルールを見極めることこそが、勝利へのカギです。

そして、具体的な詳しいルールはこちら(https://codevs.jp/assets/files/codevs4_rule.pdf)。

読んでみましょう。どこがもっとも重要なルールか分かりましたか?


正解はこちら。ご丁寧にも太字で書いてくれていますね。

このコンテストのAIには、自分で名前をつけられる。

これこそが、一般のプログラミングコンテストに比べて、CODE VS 4.0が決定的に優れているところであり、
同時に、勝敗を分ける分水嶺となる、超重要ポイントでもあります。

プログラミングに限った話ではありませんが、「命名」の果たす役割は、とにかく重大です。
名をつける、それはすなわち、内実を縛り、存在を規定すること。つまりは命を与える行為そのものと言っても過言ではありません。

分かっている人には今さら説明するまでもないことですが、プログラミングにおいても、名前をつけることは極めて重要です。

このブログ(http://d.hatena.ne.jp/shunsuk/20110926/1317033011)によると、プログラミングは「名前」が9割。
このブログ(http://ryo021021.hatenablog.com/entry/2013/10/31/145922)によると、コードを美しく保つには、命名に妥協しないこと。
このブログ(http://d.hatena.ne.jp/r-west/20090510/1241962864)によると、適切な名づけに徹底的にこだわることこそが、良いコードを書くために必要な、たったひとつの方法。

つまり、今回のCODE VSでも、AIの名前の出来によって、勝負の90%は決まるも同然なのです。

《AnagMars》へと至る道

自作のAIに名前をつける機会なんてものは、普通の人が日常生活を送っていても、そう多くはないと思います。
であれば、「AI」にとらわれず、技名や能力名、自分の二つ名をつけるつもりで命名してみてはどうでしょうか。

王道の、漢字+ルビタイプで行くとして、例をあげるなら、

愚王の采配ダイス・マカブル
死の舞踏〜ダンス・マカブル〜と、ダイスをかけて。もちろん采配の「采=賽」ともかかっている。最近このルビと同名の小説が出てしまったので、たとえ考えたのは自分が先でも世間的にはパクリなのがネック。

終焉イットワズフィニッシングストローク
「お前には認識できなかっただろうが……、今の一瞬で戦況は覆り、既に勝敗は決している」的なイメージ。漢字とルビの長さのアンバランスさが魅力。糸とイットがかかっているのもポイント。

とか、こんな感じの名前が、1つのパターンとして考えられると思います。

とはいえ、ここで致命的な問題が。


漢字使用不可。カタカナ・ひらがな使用不可。ほぼアルファベットと数字限定。

かっこいい名づけに極めて長けた、日本語という言語、まさかの完全封殺です。
これは痛い……。この制約に、多くの人が苦しんだだろうことが容易に想像できます。

であれば、Unlimited Limit Edアンリミテッド・リミット・エンドとか、尖った字面で攻めてみましょうか。
最初はこの路線で考えようとしました。しかし、予選の課題だった敵AIたちの名前を見てみると、
gelb, grun, lila, rosa, schwarz, zinnober, silber
と、どれも方向性が全く違います。

いくらキレキレに尖った名前をつけたところで、それで周囲の世界観(※誤用の方)から浮いていては本末転倒。
それは例えるなら、《アクセル》《プラズマ》《ボンバー》《ジェット》という二つ名を持ったヒーロー集団の中に、1人だけ《冥王エグゼキューショナー》が混じっているようなものです。
尖りすぎると、かえって咎る。
いくらエグゼキューショナーがかっこよかったとしても、ただかっこいいだけで周りの命名との調和が取れていなければ、台無しになってしまいます。

かっこよさを追求すれば他から浮いてしまい、他との調和をとろうとすれば魂のこもった名前にならない。
この二律背反を解消できず、多くの参加者が涙を呑んで消えていったことと思われます。

しかし、自分クラスのプログラマーともなれば、この程度のアンチノミーなど恐るるに足りません。

字面に凝れないのなら、意味で凝ればいい。

人は見た目が9割などと言いますが、名前は見た目と中身が密接に関わりあっていて、
あえて片方をシンプルにすることにより、もう片方のこだわりが強調される、なんてことは、ざらに起こりえます。

自分は、それを利用して、

《AnagMars》(読み:あなぐまーず)

今回のAIに、この名前をつけました。

《AnagMars》にこめた想い

まずは「穴熊」。
イタチ科アナグマ属の動物のことではなく、将棋の穴熊囲いのことです。

CODE VS 4.0の戦略ゲームにおいて、自分の城の周りに大量のユニットを生産し、鉄壁の守りを築く。
壊されても壊されても、何個だって鉄壁を生成し続ける。

そうした戦略と「穴熊s」のリンク。
これが、《AnagMars》にこめた第1の意味です。

次に、マーズ(Mars)。
火星そのものではなくて、その命名の由来となった、ローマ神話ギリシャ神話の神のほうです。

このあたり、実は若干複雑なのですが、すごく端的に言うならば、マーズは戦と農耕の神です。
CODE VS 4.0で、ただ鉄壁を築くだけではなく、攻撃ユニットを送りこんで資源マスを制圧し、自軍はそこから恵みを享受する。
そうした作戦と、神マーズの名のリンクが、《AnagMars》にこめた第2の意味です。

わざわざMarsのMを大文字にしているわけで、ここまでは誰でも気づくと思いますが、続いて第3の意味。

《AnagMars》は《Ars Magna》のアナグラム

アルス・マグナ
響きのかっこよさもさることながら、錬金術の秘法だったり、世界の真理を解明する手段だったりと、その設定にもめちゃめちゃ心揺さぶられます。

だからこそ、様々な創作物の中でも、直接的・間接的にモチーフにされることが多いアルス・マグナですが、
今回は、その中でもややマイナーな、ジェロラモ・カルダーノが著した、代数学の書物であるところのアルス・マグナが由来です。

この本にまつわる有名なエピソードが「数学者の決闘」。
名だたる数学者たちが、己の導きだした代数方程式の解法どうしを競い合わせてバトル。
殴り合いともスポーツとも違う、知で知を洗う数学競技。
その逸話が、コードを書いて競い合うCODE VSと、極めて良くリンクしています。

アルス・マグナという言葉自体のかっこよさ。
大文字小文字の場所まで完全に一致するアナグラム
CODE VSの競技性とアルス・マグナの逸話の類似。

このすべてに気づける人となると、一気に全体の半分くらいまで減るのではないでしょうか。

ここでさらにアナグラムを活かすため、ラスト第4の意味。

CODE VSの「VS」と「アルスマグナ」。
これらの単語でGoogle検索すると、VSとアルスマグナをタイトルに含む、一時期そこそこ流行った、とある小説がヒットします。

具体的には、こういう帯のやつ。

未読の人のために簡単に説明すると、陽のあたらない雑魚キャラがヒーローに一矢報いる、強烈なインパクトを備えた作品です。

これは、まさに今回のCODE VSにおける自分のシチュエーションそのもの。
エキシビジョンマッチという日陰の戦い、圧倒的に不利な状況下にも関わらず、表の決勝を勝ち上がってきたヒーローを叩く。叩き潰す。

この強烈な意志と渇望こそが、自分が《AnagMars》という名前にこめた第4の、そして最大の意味です。

プログラムを完成させよう

ここまでのネーミングに要した時間、わずか30分。

これは、常日頃から命名について悩み考えている自分だからこそ、達成できたタイムだと思います。
普通の人なら、これを考えるのに半日とか1日とか、かかってもおかしくないはず。

プログラムの開発にかけられる時間が1日しかないなか、ここを短時間で片づけられた恩恵はあまりに大きいです。
しかも、名前を決めたことで、どういう戦術で戦えば、名前にふさわしいAIになるかが、かなりの部分まで見えています。

というわけで、コードを書きます。
書きます。
書きます。
気合いで書きます。

書きあがりました。

勝戦を見学しよう

CODE VS 4.0 決勝戦当日。
正規ルートで予選を勝ち上がってきた8名が、リーグやトーナメントを戦っています。

詳しい展開は省略しますが、並みいる大学生や社会人を打ち破って優勝したのは、まさかの中学生。
なんという主人公体質。なんというヒーロー補正。

もし、エキシビジョンマッチを勝ち抜いた自分が、彼と戦うことになれば、

・30近いおっさんと、15才の中学生
・同じ中学、同じ部活出身
・CODE VS初回優勝者と、第4回優勝者。
・超攻撃型の戦術と、超守備型の戦術。

と、ありとあらゆる面で対比が効いた、宿命の一戦となります。

否が応でも、期待が高まります。

エキシビジョンマッチに出場しよう

《AnagMars》で戦いました。

負けました。

共通点も真逆の点もそんなにない、必然性とか全くない感じの相手に。

普通に。

しかも大差で完敗。

その後

自分を下した相手はそのままエキシビジョンマッチで優勝し、中学生くんと死闘を繰り広げます。
その圧倒的な制圧力をもって、6本先取の試合で先に5勝。かたや中学生くんはいまだ3勝。

誰もが結末を頭に思い描いたなか、中学生くんは何かしらの力的な何かに覚醒したのか、そこから立て続けに3連勝。見事勝利。

超盛り上がった。



異能バトルは日常系のなかで (GA文庫)

異能バトルは日常系のなかで (GA文庫)

異能バトルは日常系のなかで 2 (GA文庫)

異能バトルは日常系のなかで 2 (GA文庫)

異能バトルは日常系のなかで 3 (GA文庫)

異能バトルは日常系のなかで 3 (GA文庫)

異能バトルは日常系のなかで 10 (GA文庫)

異能バトルは日常系のなかで 10 (GA文庫)