第8回 問題解決
問題解決 とは 具体例: ・鶴と亀が合わせて7匹 ・足の合計は20本 ・鶴と亀は各々何匹いる? x+y=7, 2x+4y=20 ⇒ (x,y)=(4,3)
問題解決のプロセス 問題の定式化: 対象となる世界(外部世界)から本質的な部分を抽出し,形式的記述を獲得 問題の定式化: 対象となる世界(外部世界)から本質的な部分を抽出し,形式的記述を獲得 形式的処理: 形式的記述を形式的に処理して解を抽出 (内部世界) 問題の対象となる世界での解釈: 問題の対象となる世界での解を確保
問題の定式化 状態空間法 問題分解法 手段目的解析 ( Means End Analysis )
状態空間法:解探索の定式化 状態空間中を初期状態から目標状態(解)に至る径路を探索すること ・状態空間(state space): 状態を節点(node)、状態遷移を有向枝(arc)としたグラフで表現 ・オペレータ: 状態遷移のための手段 ~ 前提条件、削除リスト、追加リスト ・拘束条件: 目標達成のために守らねばならない条件
迷路探索の例 拘束条件: 左向き進行 禁止
解探索の基本手法 縦型探索 深さ優先探索(depth-first search) 深さ方向を優先的に展開 深さ方向を優先的に展開 横型探索 幅優先探索(breadth-first search) 初期節点からの径路が浅い節点を優先的に展開
解探索の基本手法(模式図) 親節点 子節点
基本手法の比較 縦型探索 - 停止しない危険性あり ←深さ方向に制限 - 最適解に到達する保証無し - メモリ消費量は少ない 横型探索 縦型探索 - 停止しない危険性あり ←深さ方向に制限 - 最適解に到達する保証無し - メモリ消費量は少ない 横型探索 - 径路長最短の解に到達する保証あり - メモリ消費量は多い
解探索の効率化 問題固有の知識利用 - 枝のコスト: 2地点間の距離、経費、・・ 問題固有の知識利用 - 枝のコスト: 2地点間の距離、経費、・・ - 節点評価値: 目標節点への近さ ~ ヒューリスティクス関数 - 合併評価 探索手続きの改良 - 山登り法 (hill-climbing method) - 分枝限定法 (branch-and bound method)
A*アルゴリズム Aアルゴリズム: 最良優先探索の改良 ~ 現局面(節点)から解に至るまでの予測評価h(n)に 出発点から現局面までの評価g(n)を加味 f(n) = g(n) + h(n) A*アルゴリズム f(n) = g(n) + h’(n) h’(n) ≦h(n) ;楽観的なヒューリスティクス関数 最適解への到達を保証→AIにおける代表的な探索方式
A*アルゴリズムの例:8-パズル h’(n): ゴール状態と異なる位置におかれたタイル数 h’(n) ≦h(n): ゴールまでに動かさないといけないタイル数
8-パズルの解法
山登り法 現在吟味中の節点に対し、基本操作を施し到達できる次状態候補(現節点の子節点)の中で最も評価値の高い節点を選択 (局所的最適化) ・縦型探索 ・最適解の保証は無し
分枝限定法 山登り法の改良 ~ 現節点の子節点に限定せず、これまでに展開されながら利用されていない節点のうち最適な ものを選択 山登り法の改良 ~ 現節点の子節点に限定せず、これまでに展開されながら利用されていない節点のうち最適な ものを選択 ・オペレーションズリサーチ(OR)における 組合せ最適化問題にて提案された手法と同一 ・横型探索の改良型
分枝限定法による探索の例 S – [C(1), B(2)] – [B(2), F(4), H(5)] – [D(3), E(4), F(4), H(5)] – [E(4), F(4), H(5), G1(5), I(6)]-
最良優先探索(best-first search) 現局面(節点)から解に至るまでの予測評価h(n)をヒューリスティクス関数として与え、利用 ・目標まで到達可能 ・大容量メモリが必要 ・最適解に到達する保証無し
ビーム探索(beam search) 最良優先探索で評価値の高いほうからN個、 またはしきい値以上のもののみ残すことに より、メモリの増大を抑制 ・最適解に到達する保証無し
ゲーム木の探索 ~ 囲碁・将棋 vs. チェス,チェッカー,オセロ,バックギャモン ミニ・マックス法:相手は最小値,自分は 最大値の手を選択→α-β法 最大評価の際の 下限以外をカット 最小評価の際の 上限以外をカット
問題分解法 個々の状態空間が持つ構造を利用して 探索を行う ~ より簡単な部分問題(sub goal)に分割,解が自明な問題(原始問題:principle)になるまで反復 対象)・数式処理(不定積分,因数分解,・・) ・ゲーム(オセロ,・・)
部分問題への分解例 問題:1つ200円のりんごと1つ100円のナシを 合わせて6つ買い,800円を支払った. りんごとナシを幾つずつ買ったか? 問題の定式化: x+y=6, 200x+100y=800 副問題1: 200x+100(6-x)=800 ただし y=6-x 副問題2: 200 (6-y) +100y=800 ただし x=6-y
AND/OR グラフによる記述 節点: 問題 または 部分問題 - AND節点: 全て充足することを要求 節点: 問題 または 部分問題 - AND節点: 全て充足することを要求 - OR節点: 一つでも充足すればOK - 終端節点: 直ちに解決できる問題 枝: 親問題と部分問題の関係 Cf)状態空間法~ 節点:状態,枝:オペレータによる状態遷移 問題を解くこと: AND/ORグラフの中から,条件を満足する 解グラフを求めること
AND/OR グラフによる記述例1:食事の支度 食事: 主食と副食とお茶 ~ 部分問題に分割 副食: 魚料理と肉料理 プロダクション規則 ・主食→米を炊く ・主食→ご飯を温める ・魚料理→魚を焼く かつ 野菜を煮る ・肉料理→肉を炒める かつ 野菜をゆでる
AND/OR グラフ表現: 食事の支度 AND節点 OR節点 解グラフの例 「夕食を食べる」?
例2: 不定積分 解決の候補) ・部分積分法 ・置換積分法: ・漸化式
不定積分問題のAND/OR表現 OR分解 AND分解
例3: 3目並べ 3x3の盤面に黒石,白石を持つプレーヤーが交互に石を置き,先に縦・横・斜めに3つ連続して 並べた方が勝ち 例3: 3目並べ 3x3の盤面に黒石,白石を持つプレーヤーが交互に石を置き,先に縦・横・斜めに3つ連続して 並べた方が勝ち お互い最善を尽くすと引き分け ・自分の手番: OR分岐 ~可能手から最善手を選択 ・相手の手番: AND分岐 ~相手の打つ全ての手を検討 白 黒 白
3目並べの例 〈自分: 黒) X: 必敗手 × ×
Means End Analysis (MEA) 以下の処理を反復 現在の状態を目標状態と比較 差異を減少させる操作を選択 可能ならその操作を適用.可能でなければ現在の状態を退避,部分問題に適用 部分問題が解決されたら退避した問題を回復,解探索作業を再開
MEAにおけるヒューリスティクス知識 以下の関数として実現 2つの状態の間の差異を計算する関数 与えられた差異の解消に貢献する操作を選択する関数 解として許される操作の系列に関する 制約
コスト関数 初期状態S0, O1(So)=S1, O2(S1)= S2, ・・ となる操作系列{Oi}: f(p) = となる操作系列{Oi}: f(p) = が最小となる系列を求める