深さ優先探索

Download Report

Transcript 深さ優先探索

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