Lecture 3 田中 美栄子 状態空間のグラフ表現 グラフの構成 node(節),edge(枝) 有向グラフと無向グラフ tree(木) 閉路(ループ)のないグラフ 状態空間のグラフ表現 始節点(start node)から目標節点(goal node)へ グラフの探索 ・ rootから始める,Bottom up=前向き推論 ・ goalから始めるtop down=後ろ向き推論 グラフ探索 グラフ探索 基本的には前向き推論 初期節点(start node)から目標節点(goal node)へ 初期節点 探 索 目標節点 グラフ探索 目標節点 探策を終了する節点 open リスト 今後調べる節点を記載しておくリスト ※探索が終わった節点はopenから削除 グラフ探索 初期節点が 目標節点であるかどうかを調査 YES 探策終了 NO 探策開始 探索の基本アルゴリズム(木の場合) Search algorithm{ 1. 初期節点をopenリストに入れる 2. LOOP:if(open==empty)break; (探索失敗) 3. n=first(open); 4. if(goal(n))print(n)break; (探索終了) 5. remove(n,open); 6. 次に調べる節点をopenに入れる 7. 2のLOOPへ戻る} 探索の基本アルゴリズム フローチャート 知識を用いない探索 力まかせ探索 深さ優先探索 幅優先探索 最適探索 複数解のうち、最適解 力まかせ探索 Brute-force search 力まかせ探索 利用場面 解候補数を処理可能程度まで 縮小できる問題固有の ヒューリスティクスがある場合 力まかせ探索 利点 実装が容易 解が存在する場合、必ず解くことが可能 力まかせ探索 問題点 解候補数が組合せ爆発を起こす場合、 コストが急激に増大 深さ優先探索 Depth-first search 深さ優先探索 アルゴリズム Depth-first search algorithm{ 1. 初期節点をopenリストに入れる 2. LOOP:if(open==empty)break; (探索失敗) 3. n=first(open); 4. if(goal(n))print(n)break; (探索終了) 5. remove(n,open); add(n,closed); 6. 次に調べる節点をopenに入れる(nを展開し、全 ての子節点𝑛𝑖 をopenリストの先頭に入れ、 𝑛𝑖 からnへポインタを付ける) 7. 2のLOOPへ戻る} 深さ優先探索 探索例 S : 初期節点 G : 目標節点 深さ優先探索 探索例 openリスト 1. S 初期節点Sを openリストに入れる 深さ優先探索 探索例 openリスト 1. S 2. a Sの子節点aの探索 (Sは探索済みなので openリストから除く) 深さ優先探索 探索例 openリスト 1. S 2. a 3. b , c aをb,cに展開 bの探索 深さ優先探索 探索例 openリスト 1. S 2. a 3. b , c 4. d , e , c bをd,eに展開 dの探索 深さ優先探索 探索例 openリスト 1. S 2. a 3. b , c 4. d , e , c 5. e , c dの子節点が無いので そのままeの探索 深さ優先探索 探索例 openリスト 1. S 2. a 3. b , c 4. d , e , c 5. e , c 6. G , f , c EをG,fに展開、目標節点Gの 探索が行えたのでここで終了 深さ優先探索 探索例 openリスト 1. S 2. a 3. b , c 4. d , e , c 5. e , c 6. G , f , c 探索順番 S→a→b→d→e→G
© Copyright 2024 ExpyDoc