Transcript Document

人工知能
(Artificial Intelligence)
知識を用いない探索法
深さ優先探索 (depth-first search)
Lecture 2
田中美栄子
グラフ探索
グラフ探索
基本的には前向き推論
初期節点(start node)から目標節点(goal node)へ
S
初期節点
G
探
索
目標節点
グラフ探索
目標節点
探査を終了する節点
open リスト
今後調べる節点を記載しておくリスト
※探索が終わった節点はopenから削除
グラフ探索
初期節点が目標節点かどうか?
Start = Goal ?
YES
探査終了(end)
NO
探査開始(start)
探索の基本アルゴリズム
(木の場合)
Search algorithm{
1. StartNodeをopenlistに入れる
2. LOOP:if(open==empty)break; (探索失敗)
3. n=first(open);
4. if(goal(n))print(n)break; (探索終了)
5. remove(n,open);
6. 次に調べる節点をopenに入れる
7. Back to Step-2}
探索の基本アルゴリズム
フローチャート
知識を用いない探索
力まかせ探索
深さ優先探索
幅優先探索
最適探索 複数解のうち、最適
解
力まかせ探索
Brute-force search
『ブルートフォース攻撃』の使われ方と同
ブルートフォース攻撃
パスワードを解く際など
0000 , 0001 , 000
2 ・・・
当たるまで入力
力まかせ探索
利点
 実装が容易
 解が存在する場合、必ず解くことが
可能
力まかせ探索
問題点
 解候補数が組合せ爆発を起こす場合、
コストが急激に増大
知識を用いない探索
力まかせ探索
深さ優先探索
幅優先探索
最適探索 複数解のうち、最適
解
深さ・幅探索のイメージ
 箱の中からプレゼントを見つけたい・・・・という
場合.
S
AB
•次にCの箱を調べる
•深さ優先探索
CD
•次にBの箱を調べる
•幅優先探索
深さ優先探索
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