この回のゴール
- AI の最も古典的で強力なフレームワーク「状態空間探索」を理解する
- BFS / DFS / A* の 3 つのアルゴリズムを、数式と図で掴む
- 探索でできること・できないことを明確にする
1. なぜ「探索」が AI なのか
次のような問題を考えてみてください:
- 迷路のゴールまでの最短経路を見つける
- 将棋の次の一手を決める
- 配達ルートを最適化する
- ChatGPT が「次のトークン」を選ぶ際の候補絞り込み (ビームサーチ)
これらはすべて 「状態」を移動しながらゴールを探す 問題として定式化できます。これが 状態空間探索 です。
記号主義 AI の時代、AI 研究の大半はこの「探索をどう効率化するか」に費やされました。Deep Blue (チェスでカスパロフに勝った IBM の AI) は本質的には探索アルゴリズムです。
2. 状態空間の数学的定式化
問題を次の 5 つで表します:
| 記号 | 意味 | 迷路の例 |
|---|---|---|
| $S$ | 状態の集合 | 迷路の各マス |
| $s_0 \in S$ | 初期状態 | スタート位置 |
| $G \subseteq S$ | ゴール状態の集合 | ゴールマス |
| $A(s)$ | 状態 $s$ で取れる行動 | 上下左右の移動 |
| $c(s, a)$ | 行動のコスト | 移動1回 = 1 |
目標: $s_0$ から $G$ の要素までの コスト最小の行動列 を見つける。
$$ \pi^* = \arg\min_\pi \sum_{t} c(s_t, a_t) \quad \text{s.t.} \quad s_T \in G $$
3. 3 つの代表的なアルゴリズム
(a) BFS — 幅優先探索
- 「近いマスから順に」全方向に広がりながら探索
- 必ず最短経路を見つける(コストが一定なら)
- データ構造: キュー(FIFO)
- 計算量: 状態数を $|S|$ として $O(|S|)$
from collections import deque
def bfs(start, goal, neighbors):
q = deque([(start, [start])])
visited = {start}
while q:
s, path = q.popleft()
if s == goal:
return path
for ns in neighbors(s):
if ns not in visited:
visited.add(ns)
q.append((ns, path + [ns]))
(b) DFS — 深さ優先探索
- 「一本道をとりあえず奥まで」進む
- 最短経路は保証されない
- データ構造: スタック(LIFO) (再帰でも可)
- メモリ効率は良いが、無限ループに注意
(c) A* — ヒューリスティック探索
- BFS に「ゴールまでの推定距離」を組み合わせた最強の探索
- 評価関数: $f(s) = g(s) + h(s)$
- $g(s)$: スタートから $s$ までの実コスト
- $h(s)$: $s$ からゴールまでの 推定 コスト(ヒューリスティック)
- 迷路なら $h(s) =$ ゴールまでのマンハッタン距離
$$ f(s) = g(s) + h(s), \quad h^*(s) = \text{真のコスト} $$
許容性(admissibility): $h(s) \le h^(s)$ であれば A* は 最短経路を保証* する。
4. 探索でできること・できないこと
✅ できること
- ゲーム (チェス、囲碁、将棋の基本枠組み)
- 配達・ルート最適化
- スケジューリング
- LLM のデコーディング (ビームサーチも探索の一種)
❌ できないこと(次の章以降の動機)
- 状態が明確に定義できない問題 (「この文章は感じが良いか?」)
- 状態数が爆発する問題 (言語の組み合わせは事実上無限)
- 世界が変化する問題 (状態遷移が確率的で不確実)
👉 だから 機械学習 が必要になります。次のサブステップで扱います。
まとめ
- 状態空間探索 は AI の最古典かつ強力なフレームワーク
- 状態・行動・コスト・ゴールの 5 点セットで問題を定式化できる
- BFS / DFS / A* の特徴と使い分け
- BFS: 最短性保証、メモリ多
- DFS: メモリ少、最短性なし
- A*: ヒューリスティックで効率化、最短性保証 (admissible なら)
この回の限界(次への動機)
| 問題 | 何が起きるか |
|---|---|
| 状態が明確に定義できない | そもそも探索木が作れない |
| 状態数が爆発的 | 全探索は不可能 (囲碁の局面数は $10^{170}$) |
| 入力が曖昧 (画像、自然言語) | 「似ている」を定義できない |
👉 次回は「機械学習の基礎」。データから関数を学ぶ アプローチによって、ルールや状態を人が書かなくても問題が解けるようになります。
よくある質問
Q. LLM にも探索は関係ある? A. めちゃくちゃ関係あります。LLM が文を生成するときの ビームサーチ や temperature サンプリング は、確率付きの探索です。第 3 章の LLM で触れます。
Q. A* より速い探索はないの? A. 問題の性質に応じて、双方向探索、IDA*、MCTS (囲碁 AI で使われる) など多数あります。MCTS は AlphaGo でも核となる技術です。
Q. なぜ AI エージェントで探索を学ぶ必要がある? A. エージェントの「複数ステップ計画」は 状態空間探索の拡張 だからです。第 6 章で再登場します。
参考文献
- Russell & Norvig, AIMA Ch.3 (Solving Problems by Searching)
- CLRS, Introduction to Algorithms — BFS/DFS の定番