世界を動かす技術を、日本語で。

ババは評価される

概要

Baba is You をAI評価ベンチマークとして活用する試み ゲーム状態の取得・操作自動化 の技術的アプローチ 既存ソリューションの課題 とプレイヤー作成レベルの活用可能性 PythonとLua による連携と自動制御の実装詳細 現状のAI性能と今後の課題 の整理

Baba is Eval ― Baba is YouをAI評価ベンチマークに

  • Baba is You は、 ルール自体を操作するSokoban系パズルゲーム
  • 抽象的な推論 を要するため、 AIの推論能力評価 に適したベンチマーク候補
  • ターン制 であるため、 クリアまでの手数 を細かい評価指標として利用可能
  • ARC-AGI-3ベンチマーク (2026年予定)に類似しつつ、既に存在する点が特徴
  • ただし メインゲームの解答は既出 であり、ベンチマーク利用には工夫が必要
    • プレイヤー作成の高品質レベルや新規メカニクス を活用すれば解答未公開の問題も用意可能

ゲーム状態の取得

  • 視覚情報 の直接取得より、 ゲームファイル・Luaスクリプト の活用が有効
  • Lua API (MF_read, MF_store, MF_getunits)で INI形式データレベル内オブジェクト情報 を取得
  • オブジェクト情報 には UNITNAME, XPOS, YPOS, ZPOS などのプロパティ
  • 勝利判定 はlevel_wonフックで取得
  • Python MCPサーバ を介し、 Luaから状態テーブルをシリアライズ→Pythonで読み込み
  • 座標グリッド表示 で、 重なったオブジェクトはZ値順に同セル内表示
  • 方向情報は無視 し、 レベルサイズ(roomsizex等) でグリッド範囲を決定

ゲーム操作の自動化

  • キー入力のシミュレーション は遅いため、 Luaのcommand(key,player_)関数 を直接利用
  • undo() も利用可能
  • 非同期呼び出し はLua側alwaysフックで コマンドファイルを監視・実行 する手法を採用
  • Pythonサーバがコマンドを書き込み→Luaが即時実行
  • コマンド実行は高速(50-150ms/リスト) で、 人間より素早い操作 が可能

レベル選択とクライアント実装

  • レベル選択の自動化 は困難で、 マップ移動+pyautoguiによるEnterキー入力 で代用
  • Claude Desktop をクライアントとして利用し、 ツール呼び出しやコンテキスト管理を自動化
  • MCPでゲームルールやキーワードのヘルプ機能 も実装

AIモデルの現状と課題

  • Claude 4レベル0(右へ8回)以外はほぼ解けない
    • ルール把握、経路探索、入力パターン管理、勝敗判定 など全て苦手
  • o3のような推論特化モデル での計画立案・コンテキスト管理が今後の課題
  • トークン消費削減のための密度高い状態表現move_to()のような抽象化入力 も検討余地
  • PULLやMOVEなど一部レベルでは完全制御が必須
  • Baba is You any%自動攻略はまだ遠い目標

今後の展望

  • 進捗や開発参加希望者向けにリポジトリ公開
  • より良いアプローチやアイデアの募集
  • AIによる一般化推論・自動パズル解決技術の発展期待

Hackerたちの意見

レベルの表現が違うと、パフォーマンスが改善されると思う?ASCIIだとAIが苦戦するのを見たことがあるけど、他のデータ構造で表現すると、うまくいくことが多いよね。編集:例えば、構造化された座標のJSONや、グラフベースのJSON、座標を使ったセマンティックな表現とか。

表現に苦戦するなら、それはAIの思考能力を試すにはさらに良いテストになるね。

限界ケースでは、実際の一般知能にとって、表現は無駄だよね。自由に変換する方法を見つけられるから。今のAI世代が一般的じゃない限り、弱点を隠すことで他の部分、強みや別の弱点を露呈させることができるかもね。

これらのモデルは「コーディング」できるけど、まだ実際にはコーディングできないんだ。これらのタスクでのパフォーマンスが入力表現に対して不変になると、実際にコーディングできるってわかるんだよ。だって、表現を変換するスクリプトをサッと作れるからね。

「Baba Is You」は、2Dグリッドパズルゲームのコレクションの中でも素晴らしいゲームだよ。(宣伝しちゃうけど、Thinky.ggの開発者の一人なんだ。これは「最短経路スタイル」のパズルゲームサイトで、[Pathology]やソコバンのバリエーション[ Sokoath]があるよ。)これらのゲームは通常NPハードだから、ソコバンやPathologyのために使われる典型的な手法は、BFSやデッドロック検出、ゾブリストハッシュなどのさまざまなヒューリスティックを使って強引に解決されてる。でも、レベルがあるサイズを超えて、動かせるブロックが増えると、すぐにメモリを使い果たしちゃうんだ。これらのタイプのゲームは、今のところ「AIに強い」って感じで、LLMは解くのが本当に苦手だけど、人間は得意なんだよね(だからARC-AGIのベンチマークには考慮する価値があると思う)。新しい推論モデルが出ると、基本的なPathologyのレベル(「One at a Time」 https://pathology.thinky.gg/level/ybbun/one-at-a-time)で試してみるんだけど、いつもひどい結果になる。上のレベルの簡単なコード(1は壁、2は動かせるブロック、4はスタートブロック、3は出口):000 020 023 041 OPと似たように、Claudeはルールのダイナミクスやブロックされた道、ゲームの目的をうまく管理できなくて、ランダムな結果を出しちゃうんだよね。

Factorioの論文[1]の3ページ目では、エージェントが座標付きのセマンティックな表現を受け取るんだ。これのデータフォーマットを試したことある?

NP困難なのはあまり問題じゃないよ。レベルが比較的小さいし、最悪のケースを選ぶんじゃなくて、人間が解くのを楽しめるように選ばれてるから。SMT/SATソルバーや整数線形プログラミングを使えばかなり進めるよ。マインスイーパーみたいなクラシックなパズルゲームもNP困難だけど、人間が生きている間に解けるインスタンスはコンピュータでかなり早く解けるからね。

一度、「RCがBaba Is Youをプレイする」っていうのを作ったことがあって、共有ブラウザを通じてゲームを操作して、ビデオとコントロールをゲームにストリーミングしてたんだ。かなり楽しかったよ!でも、Baba Is Youの解法は現代のLLMのトレーニングデータに含まれてるから、評価にはあまり向いてないと思う。

でも、Baba Is Youの解法は現代のLLMのトレーニングデータに全部含まれてると思うから、良い評価にはならないだろうね。Claude 4はBaba Is Youのレベルを解けない(レベル0は8つの正しい入力で解けるけど)。だから、今のところは少なくとも目指すにはいい低いハードルだね…。

これは面白いね。このゲームを個々の動きとしてアプローチすると、探索木がすごく深くなる。ただ、ほとんどのレベルは数個の中間目標で表現できるんだ。ある意味、AI囲碁の歴史を思い出すけど、そこでの解決策はMCTSだったから、私たちが求めていたものとは全然違ったよね(MCTSはほとんどのことに一般化できないから)。

ただ、ほとんどのレベルは数個の中間目標で表現できる そうだね、パズルゲーム全般に言えることは、「正しい」中間目標を決定しなきゃいけないってこと。実際、ナイーブな中間目標はしばしば完全に間違ってることが多い!典型的なソコバンの逆転の例として、2つのブロックをゴールエリアに押し込む必要がある場合がある。最初は「じゃあ、1つのブロックをゴールエリアに押して、次にもう1つを押そう」と思うかもしれないけど、これらのゲームには、まず1つのブロックをゴールに押し込んで、何らかの理由でそれを元に戻さなきゃいけないメカニズムがあることが多い(それが追加機能を発動させるかもしれない)。その後、もう1つのブロックを押して、最後に元に戻ってそのことをするんだ。前に進む前に後ろに歩かなきゃいけない変なトリックがいつもあるよね。こういうことにたどり着くのは不可能じゃないと思うけど、そこに行くまでにたくさんのサイクルを回すかもしれないね(人間もそうだと思うけど)。

でも、そこにあった解決策はMCTSだったけど、MCTSは本当に解決策じゃなかったんだ。MCTSベースのAIは何年も前からあったけど、そんなに良くなかった。超人レベルではなかったし、彼らがプレイした手やゲームはちょっと退屈だった。囲碁を上手くプレイするための鍵は、MCTSに似た何かをやることだけど、実際の核心は「誰が勝ってる?」や「ここで試すべき良い手は何?」って答えられるネットワークを使って探索を導くことなんだ。さらに重要なのは、悪いモデルで計算(しばらく検索を実行すること)をすると、より良いモデルをトレーニングするためのより良いトレーニングデータを生成できるってことに気づくことだった。

最近、「Desiderata」って言葉がよく見かけるようになった気がするんだけど、これってLLM用語なの?それとも流行ってるだけ?普通の人は「Desires」や「Goals」って言葉を使うから、これが新しい「delve」なのかなって思ってる。

これは学術的な専門用語だね。Desiderataは論文の最後に、「誰かがXを調査すべきだけど、私は次の資金提供されたプロジェクトに移る」ってセクションによく出てくる。

少なくともこの場合は、私の肉体的な人間の脳から来たものだよ。まあ、実際より賢く見せるために使ったかもしれないけどね—LLMもそうするかもしれないし。

僕の経験だと、LLMはこういうテキストグリッドを扱うのが苦手みたい。列を「検出」するのが行よりも難しいみたいだね。多分、入力が巨大な行として表示されるからだと思う。チェスをプレイする時も同じ問題があるけど、こういうゲームに使えるデータ型があるかは分からない。今のところ、LLMは空間的な問題にあまり対応できてない感じ。でも、これは実際に修正できるはずだよ(最近HNでそのことについての記事を見た気がする)。

トランスフォーマーはグリッドを扱うように簡単にトレーニング/デザインできるんだけど、標準的なLLMは特にそういうのが得意じゃないんだよね(でも、多少は見たことあるだろうけど)。

もしこれがアーキテクチャの制限だったら、画像を扱うことはできないんじゃない?

いい指摘だね。思いつくアーキテクチャの解決策は2Dテキスト埋め込みだね。つまり、各トークン埋め込みに1つの代わりに2つのサインとコサインを追加するってこと。どうやら以前にやった人もいるみたいだよ: https://arxiv.org/abs/2409.19700v2

なんか「The Ricks Must Be Crazy」を思い出すな。自分たちが何かのシミュレーションの中にいるわけじゃないといいけど ;)

ベンチマークとしてはいいアイデアだと思うよ。ARCの現行バージョンとの大きな違いは、定義されていて学習可能なゲーム物理があることだね。ARCは、あまり明確に定義されていない問題に対して少ない例から一般化する必要があるから、現在のARCはそれに取り組むモデルが人間の持つバイアスに近いものを持っている必要があるんだ。

ニッチなコミュニティレベルをプレイする方がずっと興味あるな。これらのレベルを解決できる大きな理由は、百万の「ババは君」攻略動画で訓練されたからだと思う。ポケモンを使ってLLMをテストする人たちも同じで、結局はそのゲームをどれだけ知ってるか次第だよね。

2つの訂正があるよ、投稿に書いてある通り:少なくともClaudeは標準レベルを全く解決できないし、コミュニティレベルは確実に範囲内だね。

「o3のような推論モデルは計画を立てるのにより適しているかもしれないから、自然なステップとしてはClaude Desktopからそっちに切り替えてみるのがいいだろう…」でも…Claude DesktopにはSonnetとOpusのための推論モードがあるよ。