240 likes | 323 Views
認知システム論 探索(5) 先を読んで知的な行動を選択するエージェント. ゲームプレイング (Game Playing). ゲーム木と評価関数 ミニマックス法 アルファベータ法 ゲームにおけるヒューリスティクス ゲームプログラムの現在. チェス,囲碁・将棋, バックギャモン. ゲーム プレイング. 敵対するエージェント が存在する世界で 今後の行動計画を立てようとするときの 探索問題. → 「ゲーム理論」というのもあるが,この授業では 「先読みの効率化」という 探索技術 に的をしぼる. 探索問題としての特徴.
E N D
認知システム論 探索(5) 先を読んで知的な行動を選択するエージェント ゲームプレイング(Game Playing) • ゲーム木と評価関数 • ミニマックス法 • アルファベータ法 • ゲームにおけるヒューリスティクス • ゲームプログラムの現在
チェス,囲碁・将棋,バックギャモン ゲーム プレイング 敵対するエージェントが存在する世界で今後の行動計画を立てようとするときの探索問題 →「ゲーム理論」というのもあるが,この授業では「先読みの効率化」という探索技術に的をしぼる 探索問題としての特徴 1.敵が味方のじゃまをする →チェス,囲碁 2.探索空間が巨大で最後まで先読みできない →不完全性 3.偶然の要素を含むことがある →バックギャモン 4.時間制限がある →効率と時間の使い方が重要
二人ゲームの形式化 • 初期状態(initial state) • 盤面の状態,どちらの手番か • オペレータ(operator)の集合 • プレイヤが指すことのできる合法手 • その手を指したら,盤面の状態と手番はどうなるか • 終端テスト(terminal test) • ゲームの終了の決定 • 効用関数(utility function) • ゲームの結果を数値として与える. • 勝ち(+1),負け(-1),引分け(0)
× × × × × × × ○ ○ ○ ○ × ○ × × × × ○ ○ × ○ ○ × × × × × ○ × ○ × × ○ ○ 1.ゲーム木と評価関数 効用を最大化しよう 効用を最小化しよう 三目並べ(Tic-Tac-Toe)の例 MAX(×) … MIN(○) … … … … MAX(×) 終端 効用 -1 0 1
評価関数(1/3) 動機:不完全な決定 終端状態までのすべての道筋を探索する時間がない 終端テスト 打ち切りテスト 終端状態で 効用関数を適用 打ち切り状態で 評価関数を適用
評価関数(2/3) 定義評価関数(evaluation function) ヒューリスティックを用いて,期待される効用の見積りを返す関数 チェスの例 これらの総和 駒の価値 1 3 3 5 9 ポーンストラクチャ 0.5 キングの安全性 0.5 駒の配置
評価関数(3/3)参考:将棋の駒の価値(谷川浩司)評価関数(3/3)参考:将棋の駒の価値(谷川浩司)
2.ミニマックス法(minimax procedure) 3 MAX MAX 3 2 2 MIN MIN MIN MIN 終端 3 12 8 2 4 6 14 5 2
ミニマックス法のアルゴリズム Operatorミニマックス法(盤面){for eachop in全オペレータ {次の盤面=盤面にopを適用;評価値[op]=ミニマックス値(次の盤面); }return 評価値[op]が最大なop;} 盤面はどちらの手番かの情報を含む intミニマックス値(盤面){if(盤面が終端状態 ) return効用関数(盤面);else{for eachopin 全オペレータ {次の盤面=盤面にopを適用;評価値[op]=ミニマックス値(次の盤面); }if(MAXの手番)return 評価値[op]の最大値;elsereturn 評価値[op]の最小値; }} すべての変数は局所変数です 再帰
3.アルファベータ法(α-β procedure) ミニマックス法の効率を上げる MAXのこれまでのベスト ≧3 α=3 MAX ≦6 MINのこれまでのベスト 3 β=6 MIN α≧βで枝刈り 3 12 8 6 2 ≦2 β=2
アルファベータ法のアルゴリズム(1/3) Operator アルファベータ法(盤面){α=-∞; β=+∞; for each opin全オペレータ {次の盤面=盤面にopを適用;α=MAX(α,MIN値(次の盤面,α,β)); }returnαを最大にしたオペレータ op;}
アルファベータ法のアルゴリズム(2/3) α<βとして呼び出す int MIN値(盤面,α,β){if(この盤面で先読みを打切り ) return 評価関数(盤面);int v =+∞;for each opin 全オペレータ {次の盤面=盤面にopを適用;v=MIN(v,MAX値(次の盤面,α,β));if (v ≦ α) returnvβ =MIN(β,v);}returnv;} 相互再帰(mutual recursion) 枝刈り (pruning)値は戻り先で無視される
アルファベータ法のアルゴリズム(3/3) α<βとして呼び出す int MAX値(盤面,α,β){if(この盤面で先読みを打切り ) return 評価関数(盤面);int v=-∞;for each opin 全オペレータ {次の盤面=盤面にopを適用;v=MAX(v,MIN値(次の盤面,α,β));if (v ≧β) returnvα=MAX(α,v);}returnv;} 相互再帰(mutual recursion) 枝刈り (pruning)値は戻り先で無視される
3.ゲームにおけるヒューリスティクス 評価関数をどう設計したらよいか? 探索をいつ打ち切ったらよいか?
評価関数の設計(1/3) 基本 • 終端接点では,評価値=効用値 • あまり長い時間かかってはいけない • 実際に勝つ可能性を反映していること 厳密である必要はない
評価関数の設計(2/3) 線形近似 局面の特徴を数量化したもの 例:盤上にあるナイトの数 その特徴の重要性(重み) 機械学習 経験に合うように重みを調節する
評価関数の設計(3/3) 非線形近似 (ニューラルネットの例) ニューラルネットワーク (w をパラメータとする非線形関数) 評価値(出力) 特徴ベクトル(入力) 重みベクトル(パラメータ) 誤差関数 →最小化 バックプロパゲーションアルゴリズムは近似的に最小化する
探索をいつ打ち切るか(1/3) 3つの考え方 • 一定の深さd で打切り • 一定の時間まで反復深化を適用 • 静かな局面で打切り 静かでない局面(駒が激しくぶつかっている) 静けさ探索静かな局面に達するまで深く読む(たとえば,駒を取る手だけを読む)
探索をいつ打ち切るか(2/3)静かでない局面 香 桂 銀 金 王 金 銀 桂 香 この局面は「先手 有利」ではない! △後手 なし 飛 馬 歩 歩 歩 歩 歩 歩 歩 歩 歩 ▲先手 角 歩 歩 歩 歩 歩 歩 歩 歩 歩 飛 香 桂 銀 金 玉 金 銀 桂 香
探索をいつ打ち切るか(3/3) 水平線効果 無意味な手の連続で,不利な局面を見つけることのできない水平線の向こうへ追いやって安心する △後手 銀2歩2 香 桂 金 馬 と 香 △後手 銀2歩 飛 王 歩 歩 歩 歩 と 歩 歩 歩 と 桂 ▲先手 飛金歩 歩 歩 歩 歩 銀 歩 銀 金 歩 玉 金 香 香 桂 桂 馬
偶然の要素を含むゲーム(1/2) サイコロ(dice)の目によって取りうる手が制限される バックギャモン
偶然の要素を含むゲーム(2/2) 期待MIN値も同様 MIN 期待MAX値 Σ 期待値 確率=1/36 偶然節点 1/18 × MAX MAX 1 終端 0 -1 1