機械学習周りのプログラミング中心。
イベント情報
将棋AI/ポケモンバトルAI本電子書籍通販中

Codexはゲームボーイでどこまで強い将棋を作れるか

コーディングエージェントCodexで、ゲームボーイ上で動作する将棋ソフトを作らせてみました。

TL;DR

Codexが自力でほぼすべて実装可能。ただ、UIは人間がおかしな挙動を指摘し、修正させる必要あり。 あらゆる知見を用いてAIを強くすることを要求した。結果的に採用されたアルゴリズムのほとんどは、ゲームボーイの発売時点(1989年)に存在していたものだった。 AIの強さは、残念ながら初心者レベルにとどまった。現代の技術をもってしても計算資源の制約は厳しすぎた。

GB上の将棋ソフトの画面

詳細はリンク先の記事にまとめました。

実際にプレイ可能なデモ(ブラウザ上のエミュレータ使用)を用意しました。

select766.github.io

記事本体

Codexはゲームボーイでどこまで強い将棋を作れるか

ソース

github.com

第36回世界コンピュータ将棋選手権の結果(2026/05/03)

2026年5月3日~5日にかけて開催された第36回世界コンピュータ将棋選手権に参加ソフト「ねね将棋」で参加しました。

ねね将棋としての参加は2024年の第34回以来です*1。2024年はiPhone上でソフトを動作させ、スマートフォンの性能を示すことをテーマにしていましたが、今回はスマートフォンでやれるネタが尽きたため、普通のパソコンで動作するソフトとして参加しました。構成が大きく変わったため、差分ではなく今回の構成をそのまま紹介します。

ソフトの構成

今回の目玉は、「評価関数のブレンド」という仕組みを新規開発したことです。

8種類のNNUE評価関数を用意しておき、対局中に自分の手番が来るたびに、それらを最適な比率でブレンドして1つのNNUE評価関数をその場で生成します。生成した関数を使って通常のNNUEベースの探索を行います。ブレンド処理には0.1秒程度かかりますが、その後は通常のNNUEを用いた探索なので探索部のオーバーヘッドはありません。ブレンド比率を決めるモデルとNNUE評価関数をend-to-endで学習する仕組みも合わせて実装しました。

技術的な詳細はアピール文書をご参照ください。

定跡は新ペタショック定跡 233万局面を使いました。当初はブレンドの仕組みをそのまま見せるために定跡なしにしようと思っていたのですが、テスト対局してみると初手の2六歩か7六歩かで悩んで64秒も消費することが判明しました。定跡の知見が乏しいこともあり、公開されている定跡をそのまま使うことにしました。

ハードウェア

GMKtec製、EVO-X2を使用しました。CPUはAMD Ryzen™ AI Max+ 395で、16コア32スレッドです。この機種の特徴は、CPU用RAMとVRAMの合計が128GBで、その配分を変えられる点です。VRAM 96GBの設定をすることでLLMの動作に役立ちます。しかし今回はCPUのみで動作するソフトを作成したため、VRAM割り当ては1GBとし、置換表に112GB割り当てました。OSはWindows 11です。Chromeリモートデスクトップを用いて、会場のノートパソコンから自宅に設置したマシンに接続しました。

大会概要

項目 内容
大会名 第36回世界コンピュータ将棋選手権
日程 2026年5月3日(日)~5日(火・祝)
会場 川崎市産業振興会館(神奈川県川崎市)
一次予選 37チーム、変則スイス式8回戦、上位10チームが二次予選へ
二次予選 28チーム(一次予選通過10チーム+シード18チーム)、変則スイス式9回戦、上位8チームが決勝リーグへ
決勝リーグ 8チーム、7回戦

決勝リーグ進出チーム(二次予選終了時順位順):Ryfamate、氷彗、dlshogi、奏乗、水匠、六角堂狸、ponkotsu、AobaZero。

最終順位は優勝:氷彗(初出場初優勝)、準優勝:Ryfamate、3位:dlshogiでした。

戦績

ねね将棋は一次予選からの参加で、一次予選は37チーム中3位となりました(6勝1敗1分)。

二次予選では一次予選から上がった10チームとシード18チームの合計28チームで争い、10位となり敗退しました(5勝4敗)。次回大会のシード権を取得しました。

大会中に受けた質問

Q:評価関数が手番ごとに変わるということだが、置換表はクリアしなくていいのか?

確かに、置換表に保存された局面評価値と最新の評価関数との整合性が取れない懸念があります。今回はクリアしない仕様としました。理由は2つ:置換表のクリア自体にも時間がかかること、そして評価関数のブレンド比率は滑らかに変化するため不整合は小さいと想定したことです。

印象に残った対局

一次予選4回戦 ねね将棋 - 氷彗

棋譜リンク

今回優勝した氷彗と引き分けることができました。意図して引き分けを狙ったわけではなく、結果的に幸運な引き分けでした。

二次予選2回戦 芽生将棋 - ねね将棋

棋譜リンク

劣勢の局面から突然の逆転勝利でした。

二次予選4回戦 ねね将棋 - やねうら王 with GTNET

棋譜リンク

ねね将棋のベースとなっているやねうら王に勝てたことはうれしかったです。

二次予選最終戦 ねね将棋 - 二番絞り

決勝リーグ進出がかかった最終戦でしたが、いいところなく敗れてしまいました。

感想

iPhoneでソフトを動かしていた2024年と比べて、今回は直接的に強さを高めることに注力しました。手元での短い思考時間での評価ではあまり良い出来ではなかったのですが、大会では思いのほか健闘でき、望外の結果でした。

決勝リーグには進めなかったのは残念ですが、先手勝率の高さを支える定跡の知識を持ち合わせておらず、仮に進んでもよい結果にはならなかっただろうとも思っています。今後は手法のブラッシュアップを続けながら、将棋AI大会に臨んでいきたいです。

対局してくださった方、運営の皆様に感謝申し上げます。

ソースコード

学習済み評価関数も含め、以下に公開しています。

https://github.com/select766/shogi-nnue-experiment-2026/releases/tag/wcsc36

やねうら王の内部にonnxruntimeを組み込み、ブレンド比率を計算するCNNもエンジン内で推論する仕組みになっています。Windowsバイナリを用意してあるのでビルド不要で動かしてみることは可能ですが、動かし方の説明は省きます。Claudeに聞いてください。

実装は主にClaude+Codexで行いました。コーディングエージェントがなかったら、このようなend-to-end学習機構を一人で作るのは難しかったと思います。

リンク

*1:昨年はねね将棋ではなく「もふ将棋」という別ソフトで参加しました。参加レポート

メタル化・テラスタル装甲2(ラスターカノン1on1)に参加した(フリージオ/AI活用)【ポケモンバトル仲間大会】

2026年1月26日、ごりちゅう(X: srtbprofessor83)さん主催の「メタル化・テラスタル装甲2」に参加しました。「ラスターカノン」のみを覚えたポケモン1体でポケモンSVのオンライン対戦を行います。

イベントの情報はこちら。

私のパーティ

フリージオを採用しました。フリージオ、特性ふゆう、持ち物こだわりメガネ、鋼テラスタル努力値H252C152D100S4、性格ひかえめです。

結果

8勝8敗でした。フリージオ戦が10回、ほかサザンドラ・テツノコウベ・クワガノンでした。全員、初手鋼テラスタルでした。

素早さで負けているケースがほとんどで、確定数が同じようだが先制されて負けるというケースが多くありました。また、特防ダウンを早めに引かれて負けというケースもあり、相対的に不運でした。Sを4だけ振ることで無振り相手には勝てるという想定でしたが、もう少し多めに振られていた方が多いということだと考えられます。

環境考察

「ウェザーボール1on1」の時に開発した、対戦中の選択肢を含んだシミュレーション機構を発展させました。

select766.hatenablog.com

ルール

ルールは以下の通りです。

  • ポケットモンスター スカーレット・バイオレットで対戦します。
  • オンライン対戦の「シングルバトル ノーマルルール」を採用します。すなわち、レベル1~100のポケモンが参加可能ですが、バトル中のポケモンのレベルは50に統一されます。
  • パーティにはポケモンを1体のみ登録できます。
  • ポケモンには、技「ラスターカノン」のみを覚えさせます。「ラスターカノン」を覚えられないポケモンは参加できません。
    • 使用可能ポケモンは、主催者によりリストで与えられています。
  • ラスタルが許可されています。
  • 特性・持ち物は自由に選択できます。

使用可能ポケモンリストは、以下のポケモンと、その進化前です。 カメックスアローラサンドパンアローラダグトリオエアームドキングドラバクーダブーピッグドサイドンランクルスシビルドンフリージオゴルーグサザンドラブロスター・メレシー・ドデカバシクワガノンシロデスナジャラランガ・キョジオーン・グレンアルマ・リククラゲ・クエスパトラ・ミミズズ・キラフロル・イダイナキバ・スナノケガワ・テツノコウベ・クレベース

技術的変更点

対戦中の行動の選択肢として、「初手テラスタル」「テラスタルしない」の2択を設定しました。 作戦を練るコーディングエージェントとしてClaude Codeを用いました。従来はCodex + GPT系列のモデルでした。今回のモデルは、レートリミットの都合上モデルを使い分け、初期考察にClaude Sonnet 4.5、ループに組み込んでパーティ候補を出すフェーズにClaude Haiku 4.5を用いました。 HP・特防の努力値配分ですが、LLMに任せたままだと種族値を気にせずHP252に振るだけという挙動になりやすいです。そのため、HPと特防の努力値合計とポケモンの種族を与えると、特殊耐久が最大になる配分を計算するAgent Skillsを作成し、パーティの候補を提出する前に必ず使用させるようにしました。

最適化結果

56パーティが試され、結果として以下の2つのパーティが等しく最適(勝率50%ずつを分け合う)という結果が出ました。

フリージオ、特性ふゆう、持ち物こだわりメガネ、鋼テラスタル、努力値H252C150D100S8​、性格ひかえめ
フリージオ、特性ふゆう、持ち物とつげきチョッキ、鋼テラスタル、努力値H252C96D96S60、性格おだやか

努力値について、特攻(攻撃系パラメータ)を中途半端な値で出力してきたのは、今までの考察システム開発で初めてです。今まで使用していたGPTと、今回使用したClaudeの差異かもしれません。シミュレーション上良い結果ですが、正確な数値に根拠はない可能性が高いです。特攻種族値最大のクワガノンでこれらを上回れないかなど、手動で少し追加考察をしましたが、上回る方法を見つけられませんでした。 テラスタルの有無は両方シミュレーション中に試すという仕組みになっていますが、使用可能ポケモンに鋼技を1/4倍で受けられるタイプは存在せず、鋼テラスタルをしないという選択肢は存在しないものと思われます。

最終的に採用したのはこだわりメガネ型です。ターン数が少なくて済むので、ラスターカノンの追加効果や回復系アイテムで妙なことが起こりづらいと期待できるためです。ただし、努力値は4n+8になるたびに実数値が上がる仕組みなので、素早さ8などは不自然です。そのため、手動で調整して、最終的に冒頭に書いた通り、「フリージオ、特性ふゆう、持ち物こだわりメガネ、鋼テラスタル努力値H252C152D100S4、性格ひかえめ」となりました。

おわりに

主催のごりちゅうさん、対戦してくださった方ありがとうございました。乱数での特防ダウンが効くので、(A連打するだけではあるのですが)最後まで気の抜けない戦いになるのが面白かったです。 技術面では、今までで参加した中で最もシンプルな殴り合いのルールとなり、LLMを用いたヒューリスティックよりも数値レベルの最適化問題としてとらえたほうが良かったように思われます。現状の枠組みにとらわれず、様々なアイデアの検証を進めていこうと考えています。

1on1考察の「教科書」の自動生成 part01 ローカルLLM+Codex導入【ポケモンバトルAI】

昨年末はコミックマーケットで弊サークル「ヤマブキ計算所」にたくさんの方のご来場を頂き、ありがとうございました。今年もゲームAIに関する活動を進めていきます。

昨年に引き続き、ポケモンの1on1考察システムの研究を進めていきます。昨年、ルールを文章で与えることで、LLMを利用したコーディングエージェントがそのルールを考察し、最適なパーティを提案するシステムが一通り完成し、その成果を同人誌として出版しました。

しかし、その後の大会に参加する中で、いくつかの問題点が見えてきました。今回は、それらの問題点と、解決に向けた新たな取り組みについてお話しします。

昨年のシステムの限界と新たな問題点

現在のシステムを運用していて感じた主な問題点は、LLMの考察の視野が狭いことです。人間であれば容易に思いつくような作戦でも、LLMが自発的にそれを試そうとしないケースが散見されました。

例えば、ある特性が有効だと分かった場合に、同じ特性を持つ進化後ポケモンの方がより強力かもしれない、といった思考にまで至りません。また、LLMが出力するナッシュ均衡の利得行列は、10x10のような大きな表で示されることもあり、人間が直感的に強弱関係を理解するのが難しいという課題もありました。考察の結論だけを提示されても、なぜその結論に至ったのかという思考の過程がなければ、人間が読んで楽しめるコンテンツにはなり得ないと感じています。

今後の目標:「教科書」の作成と解釈性の向上

これらの問題点を踏まえ、今後の目標を2つ設定しました。

一つは、様々な1on1に共通する考察のパターンや作戦を「教科書」として文書化し、新しいルールが与えられた際にLLMがその知識を活用できるようにすることです。これにより、より多角的で強固な考察が可能になると考えています。

もう一つは、LLMによる考察結果の解釈性を高めることです。「この作戦はなぜ有効なのか」「なぜこの作戦は採用されなかったのか」といった思考の過程を文章で示せるようにすることで、人間が読んでも楽しめるような、より深みのあるコンテンツを目指します。

ローカルLLMの導入

新たな目標に向けた第一歩として、ローカル環境でLLMを動作させることにしました。これまでは、Codexというコーディングエージェントからクラウド上のLLM(GPT-5シリーズ)を利用していましたが、月額20ドルのサブスクリプションでは利用量制限に抵触しやすく、24時間気兼ねなくシステムを稼働させることが困難でした。また、モデルのバージョンアップによる再現性の問題も懸念点でした。

そこで、自前のマシンにOllamaというランタイムを導入し、ローカルで動作するgpt-oss-120bのようなモデルを動かす環境を構築しました。これにより、コストや利用量を気にすることなく、安定した環境で開発を進めることができるようになります。

ローカルLLMによる「おきみやげ1on1」の再考察

早速、このローカル環境で、以前考察した「おきみやげ1on1」の分析を再度試みました。おきみやげは使用したポケモンが自滅する技で、このルールでの基本的な作戦は、持ち物の「とつげきチョッキ」で変化技であるおきみやげを封じ、自動的に繰り出される「わるあがき」で戦うというものです。

また、ウェブ検索用MCPも導入したのですが、結果的にLLMがウェブ検索MCPを活用してくれなかったため、gpt-oss-120b自身の知識のみでの考察となりました。

結果として、パーティー候補の生成からシミュレーターによる評価まで、システム自体はエラーなく動作しました。しかし、その考察能力は期待を大きく下回るものでした。約40個のパーティー候補が提案されたものの、最終的に最も有効とされたのは、ただ「ヤドン」を使うというだけの単純なものでした。

おきみやげを使い合えば、後攻のプレイヤーが相手の自滅によって勝利するため、素早さの低いヤドンが有利である、という点までは推論できたようです。しかし、そこから一歩進んだ「とつげきチョッキ」の活用や、「こうこうのしっぽ」を持たせたり、素早さの個体値を0にしたりといった、より高度な作戦には至りませんでした。これは、OpenAIのクラウドモデルと比較して、著しく低い性能です。

今後の課題と展望

今回の結果から、LLMが有効なアイデアを自発的に思いつけないという課題が改めて浮き彫りになりました。gpt-oss-120bが持つ知識だけでは、ポケモン対戦における多様な戦略を網羅できていないようです。

そこで、次なるステップとして、まずは人間が作成した「アイデア集」のようなテキストをLLMに与え、その知識を正しく理解し、考察に活用できるかを検証していきたいと考えています。外部から与えられた知識をLLMがどのように扱うかを理解することが、将来的により自律的な考察システムを構築するための重要な鍵となると考えています。

理想は、LLM自身がこのようなアイデアを自動で発見できるようになることですが、その実現に向け、まずは一歩ずつ着実に検証を進めていきます。

次回は、LLMにテキストでアイデアを与えてみる実験の結果についてご報告します。

EVO-X2でgpt-oss-120bを動作させる(2026年1月版)

GMKtecのEVO-X2 (128GB RAMオプション)という計算機を購入し、gpt-oss-120bを動作させました。数時間悩んだため、設定や動作するバージョンのメモです。※この記事はメーカー等からの提供ではなく、自費で購入し、アフィリエイトリンクも使用せずに執筆しています。

2025-12-16に注文、2025-12-29に到着しました。325,490円でした。

UEFI設定

GPUが使うRAMを96GBに設定します。

電源投入直後にEscキーを連打してUEFI設定画面に入ります。Advanced->GFX Configurationを選択します。iGPU ConfigurationをUMA_SPEFICIED、UMA Frame bufer Sizeを96GBに変更します。

UEFI設定画面1

UEFI設定画面2

OS・ドライバ

OSをWindows 11 25H2にアップデートしました。(効果があるかはわかりません)

AMD Softwareの最新版をダウンロードしてインストールします。

https://www.amd.com/ja/support/download/drivers.html

AMD Softwareの中のAMD Install Managerを探し、Chipset Driversを最新に更新します。(※これが重要でした)

AMD Install Manager

llama.cppの導入

llama.cppのリポジトリから、記事執筆時点で最新のb7681の"Windows x64 (Vulkan)"版をダウンロードします。

https://github.com/ggml-org/llama.cpp/releases/tag/b7681

LLMを実行

llama.cppを解凍したディレクトリで、コマンドプロンプトでサーバを起動します。 -c はコンテキストウィンドウのサイズです。(注意: 60GBのモデルダウンロードが実行されます)

llama-server -hf ggml-org/gpt-oss-120b-GGUF -c 65536 --jinja --n-gpu-layers 99

Webブラウザlocalhost:8080 にアクセスすると、簡易的なChatGPT風インターフェースが現れます。

テストとして、Wikipediaの「東京都」の一部、12867文字をコピペし、質問しました。

LLMのインターフェース

コマンドプロンプト側の表示は以下の通り。プロンプトが長いとそれなりに時間はかかりますが、生成速度はそんなに悪くありません。

prompt eval time =   20470.08 ms / 10925 tokens (    1.87 ms per token,   533.71 tokens per second)
       eval time =   12651.10 ms /   515 tokens (   24.57 ms per token,    40.71 tokens per second)
      total time =   33121.18 ms / 11440 tokens

LLM動作中のタスクマネージャ画面

さらに、 -c 1301072 でも動作することを確認しました。

ハマった点

購入時点でのドライバではタスクマネージャ上の「専用GPUメモリ」が32GBまでしか使用できておらず、Out of Memoryエラーでまともに動きませんでした。また、新しめのllama.cppは起動時にクラッシュしたため、古いバージョンを試すという試行錯誤が発生していました。ドライバのアップデートによりこれらの問題が解消しました。

今後

ゲームAIに関するAIエージェントをローカルLLMで動作させることを目指しています。 Codex CLIをそのまま使うとシステムプロンプトだけで40kトークン程度あるため、工夫が必要そうです。

ウェザーボール1on1に参加した(ユキノオー/AI活用失敗)【ポケモンバトル仲間大会】

2026年1月3日、めた(X: GuoHuai)さん主催の「ウェザーボール1on1」に参加しました。名前の通り、「ウェザーボール」のみを覚えたポケモン1体でポケモンSVのオンライン対戦を行います。

イベントの情報はこちら。

私のパーティ

ユキノオーを採用しました。ユキノオー、特性ゆきふらし、持ち物こだわりメガネ、氷テラスタル努力値H252C252D4、特性れいせい、最遅です。

結果

14勝6敗でした。

ゴーストテラスタルする特性ノーてんきのチルタリスにのみ敗れました。途中14勝2敗でレート1662だったため、ここで止めておくのが結果的には正解でした。

チルタリスに6回、スイクンに9回、その他が5回でした。自発的に天候を変える相手とは当たりませんでした。チルタリス以外の相手がテラスタルする場面は見られなかったため、何を対策しているかははっきりわかりませんでした。

環境考察(失敗)

今回は環境考察がうまくいきませんでしたが、技術的には新しいことに着手したので軽く紹介しておきます。 年末年始の別の活動で準備期間が取れず、当日の午後になって実装を始めました。

ルール

ルールは以下の通りです。

  • ポケットモンスター スカーレット・バイオレットで対戦します。
  • オンライン対戦の「シングルバトル ノーマルルール」を採用します。すなわち、レベル1~100のポケモンが参加可能ですが、バトル中のポケモンのレベルは50に統一されます。
  • パーティにはポケモンを1体のみ登録できます。
  • ポケモンには、技「ウェザーボール」のみを覚えさせます。「ウェザーボール」を覚えられないポケモンは参加できません。ドーブルの参加は可能です。
  • ラスタルが許可されています。
  • 禁止級伝説・幻のポケモンは禁止です。
  • 特性・持ち物は自由に選択できます。
  • PPの増加(ポイントアップ)は禁止です。

技術的変更点

スタート地点はおきみやげ1on1の際に開発したシミュレーションシステムです。

select766.hatenablog.com

重要な変更点は、テラスタルへの対応です。今まで参加してきたルールでは、テラスタルは禁止されているか有用ではないという前提が置けましたが、今回はおけません。 そのため、パーティの候補を生成する際にテラスタルタイプも出力させることと、バトルのシミュレーションの際にテラスタルの有無を考慮することを実装しました。 バトルのシミュレーションでは、従来はパーティ2つを与えて、「Aボタン連打」で勝敗を決定していました。このようなバトルを100回行って勝率を得ます。今回はバトル中の行動ルールを3種類設けました。「テラスタルしない」「最初のターンでテラスタルする」「天候が無しの場合にテラスタルする」の3つです。パーティそれぞれが行動ルールを独立に選択し、3×3=9種類の組み合わせで勝率を計算した利得行列を作成します。利得行列をもとに、それぞれのパーティにとって最善の行動ルールを選択し(実際は純粋戦略ではなく、混合戦略ナッシュ均衡)、その行動ルールの下での勝率をパーティ間の勝率として使用しました。

暫定出力

計算時間が足りず、パーティ17個が評価された時点で大会に参加させるパーティを選択することとなりました。

パーティ17個時点での利得行列(混合戦略ナッシュ均衡における選択確率が正のパーティ)

プログラム実装前、スマホでウェザーボールを覚えるポケモンリストを見ていた際、ウネルミナモにゴーストテラスタルさせるとほとんどの攻撃を半減以下にでき、これを撃破する手段としてユキノオーがあると考えていました。これより遅い天候変化特性を持つポケモンコータスだけなので、比較的安定して戦えると想定し、ユキノオーを採用しました。

すなあらし状態にする特性のポケモンは参加できないことを確認していたものの、 「ノーてんき」を持つポケモンは参加可能なポケモンの中にいないと誤認していました。 私が人力で確認漏れをしていただけでなく、この時点のAIの候補にも存在せず、完全な見落としとなりました。

しばらく進んだ出力

大会進行中に続いていた計算の結果には、ノーてんきチルタリスが登場していました。ただ、鋼テラスタルとなっておりゴーストテラスタルと比べて不完全です。AIの考察にはかなりの穴が残る状況でした。デバッグログには、LLMがダメージ計算式等をPythonコードに書き出して実験している様子が見られます。これを毎回出力させるのは非効率な可能性があり、Skills等の枠組みで汎用的な考察ツールを提供することでLLMの能力をより引き出せる可能性があると考えています。

パーティ39個時点での利得行列(混合戦略ナッシュ均衡における選択確率が正のパーティ)

おわりに

主催のめたさん、対戦してくださった方ありがとうございました。今まで取り組んできた「実質わるあがきのみ」1on1から、テラスタルが関与する攻撃技のあるウェザーボール1on1への拡張を試みました。テラスタイプを考慮したシミュレーションは動作したものの、複雑化した環境に対するLLMを用いた戦略候補の生成については、不十分な点が多いことが分かりました。

かなしばり1on1に参加した(ゴツメヤミラミ/AI活用シミュレーション)【ポケモンバトル仲間大会】

2025年12月20日、テツポンドさん主催の「かなしばり1on1」に参加しました。名前の通り、「かなしばり」のみを覚えたポケモン1体でポケモンSVのオンライン対戦を行います。

イベントの情報はこちら。

tetspond.hatenablog.com

2025-12-29: 動画化しました!

www.youtube.com

私のパーティ

私はヤミラミで参加しました。詳しくは、ヤミラミ、特性あとだし、持ち物ゴツゴツメット個体値H31,A31,B31,S0、努力値H252,B252,A4、性格のんき(B↑S↓)です。ニックネームは「ダバイト」でした。ゴツゴツメット+鉱石ということで、「ゴツゴツした鉱石」で検索したらヒットした「モルダバイト」のポケモンぽい部分を抽出しました。

環境考察

環境考察には、「おきみやげ1on1」の際に開発した、コーディングエージェントを用いたAI考察システムを活用しましたが、問題が難しく、さらに人力で様々な考察を加えました。

select766.hatenablog.com

ルール

ルールは以下の通りです。

  • ポケットモンスター スカーレット・バイオレットで対戦します。
  • オンライン対戦の「シングルバトル ノーマルルール」を採用します。すなわち、レベル1~100のポケモンが参加可能ですが、バトル中のポケモンのレベルは50に統一されます。
  • パーティにはポケモンを1体のみ登録できます。
  • ポケモンには、技「かなしばり」のみを覚えさせます。「かなしばり」を覚えられないポケモンは参加できません。ドーブルの参加は可能です。
  • ラスタルは禁止です。
  • 幻のポケモンを含め、すべての種族のポケモンが登録可能です。
  • 特性・持ち物は自由に選択できます。

主要メカニズム

持ち物や特性で工夫しない場合、かなしばり1on1で起こることは以下のとおりです。

ターン 先攻 後攻
1 かなしばり(失敗) かなしばり(成功)
2 わるあがき かなしばり(失敗)
3 わるあがき かなしばり(失敗)
4 わるあがき かなしばり(失敗)
5 わるあがき かなしばり(失敗)
(ここでかなしばり解除)
6 かなしばり(成功) 技が出せず行動終了
7 かなしばり(失敗) わるあがき

先攻がわるあがき4回のダメージで後攻を倒して勝利するか、4回分の反動ののち(残りHP=1)後攻のわるあがきのダメージで倒されて敗北するかという結果になります。

かなしばり1on1はAIにとって難しいのか、筆者の経験で思いつくアイデアを複数見落としていました。例えば以下のようなアイデアです。これらのアイデアは手動でシミュレーションに追加し、人間+AIのタッグで考察を進めました。

  • HPは4n+1にすることで、4回の反動で倒れないようにできるが、実数値を考慮せずHP努力値を252振る以外の選択肢が考慮されていない
    • 過去に考察したルールは、お互いにわるあがきを打ち合う状況だったためこの調整は不要でした
  • AIがボクレー+しゅうかくを思いついているのに、戦略が同じで種族値がより高いオーロット+しゅうかくを試すことすらしていない(強制的に含めるとオーロットの方が良いケースがほとんどだった)
  • 攻撃種族値最大のテツノブジン(+こだわりハチマキ)が試されてすらいない

主要な戦略

得られたトップメタパーティを図に示します。

混合戦略ナッシュ均衡にて正の確率が付与されたパーティ間の利得表。基本的にはHPは4n+1になる範囲で最大値、Bは最大値。ミュウツーはABに最大値を振る。

主な戦略としては、以下のものが考えられます。

  • オーロットでしゅうかくにより何度もオボンのみを使用することで無限に回復する
    • 図にはないが、ベトベトン等でくろいヘドロを使用する戦略もあり
  • ミラクルスキンでかなしばりを50%の確率で回避、またはメンタルハーブで初回のかなしばりを実質無効化し、相手が反動で倒れるのを待つ
  • あとだし(または、ヤドンなど遅いポケモン)で相手にわるあがきさせ、ゴツゴツメットで反動を増やすことで回復を間に合わなくさせる
    • メンタルハーブを使われた場合、自分が3回わるあがきをすることになる。その後相手がわるあがきするのを2回耐えられれば、相手が(自分のわるあがきダメージの累積と)反動ダメージで倒れる。
  • (攻撃力の高いポケモンで積極的にわるあがきを使う作戦も考えられます。しかし、AIの考える「最適解」には生き残りませんでした。)

最終パーティ選定

最終的なパーティを1つに絞るために、以下の事情を考慮しました。

  • 「しゅうかく」はギミックとして面白いので、採用者が比較的いると想定
    • これに完敗しない戦略を選びたい
  • ミュウツーは強いが、特に最遅の個体を準備することに手間がかかるため、採用率が低いと想定
    • これに負けてもいい
  • ミラクルスキン相手は運ゲーなので、あまり気にしない

その結果として、ゴツゴツメットヤミラミの採用が決定しました。

戦績

19勝6敗でした。最終順位は1位(レート1659.867)です!

戦績画面(ポケットモンスター バイオレットより)

相手ポケモンごとの勝敗を示します。

ポケモン 対戦回数 勝ち数 勝率 (%)
アローラベトベトン 7 7 100%
オーロット 3 3 100%
ガラルヤドラン 3 0 0%
ハギギシリ 2 1 50%
ベトベトン 2 2 100%
ヤミラミ 2 1 50%
アローラベトベター 1 1 100%
サマヨール 1 1 100%
ハカドッグ 1 1 100%
ミュウツー 1 0 0%
モルフォン 1 1 100%
ヤドン 1 1 100%

ベトベター系統が多く、くろいヘドロでの回復がメイン戦略でした。オーロットが多いという予想での戦略が副次的にヒットし、高い勝率を上げることができました。ハギギシリモルフォンに対してはミラクルスキン発動運に比較的恵まれ、2勝1敗と勝ち越せました。ガラルヤドランについては同じプレイヤーと3度対戦し、3度とも負けでした。毎回わるあがきでの相打ちという終わり方でしたが、毎回ギリギリで倒されました。こちらはヤミラミに実現可能な最大の耐久値を持っているため、これを倒すために攻撃のパラメータを絶妙に調整されていたのかもしれません。

おわりに

主催のテツポンドさん、対戦してくださった方ありがとうございました。環境を読み切れたわけではないですが、採用したゴツゴツメットヤミラミが活躍しやすく、優勝できました。対戦当日のマッチ運にもかなり左右される事象ですので断言できることではないですが、「いやしのはどう1on1」から半年にわたりAIを用いた考察について研究し続けた結果が発揮できました。開発者としては、ChatGPTに代表される生成AI、ナッシュ均衡などの広く認められたゲーム理論アルゴリズム両面において、まだその力を引き出しきれていないと感じています。まだ探究すべきことは多いです。

繰り返しになり恐縮ですが、技術解説は同人誌の形で頒布しておりますのでよろしくお願いします。

select766.hatenablog.com

事後編集

「AIが出力したミュウツー努力値振りがABであるが、最適か不明(HAの方がおそらく良い)」と当初書いていましたが、テツポンドさんの指摘により、HAよりABの方が耐久が良いことが分かりましたので、削除しました。

大会結果が出たため、結果及びそれを受けた感想を追記しました。