佐倉歴史探索1...Title 佐倉歴史探索1 Author user2 Created Date 8/17/2020 11:06:19 AM
ヒューリスティック探索 (Heuristic...
Transcript of ヒューリスティック探索 (Heuristic...
1
知識を用いる探索─ ヒューリスティック探索─
(Heuristic Search)
最良優先探索
均一コスト探索
欲張り探索
A* 探索
ヒューリスティック関数について
最良優先探索の具体的な例
人工知能 探索(3)先を読んで知的な行動を選択するエージェント
今回は,知識を用いる探索として,最良優先探索という一般的な考え方のアルゴリズムを学び,その具体例として,均一コスト探索,欲張り探索,A* 探索の3つを学ぶ.
これらのアルゴリズムにおいては,特定の問題分野に関する「知識」を表現するヒューリスティック関数というものが重要な役割を果たす.
2
復習:一般的探索アルゴリズム
T Z
A R
A
S
F O
必ず先頭から取り除き展開する
戦略に基づいて適切な位置に挿入
B
待ち行列
F
展開する=子を産む
未展開ノードは待ち行列に並べる
子
子から親へのポインタ
これは前回までの復習.
3
経路コストの導入
A
Z
O
T
L
M
D
S
R
C
PB
G
UH
E
V
IN
F
初期状態
ゴール
経路コスト
1517571
140
118
111
70
75
99
80
146
120
97
101138 90
85 98 86
142
92
87
211最適解
前回は,暗黙に各オペレータのコストは1としていて,あまり気にかけなかったが,今回ではこの図のようにいろいろなコストがある場合を考えよう.初期状態からゴールまでの経路コストが最小の解が最適解である.
4
T7
Z10
A5
R16
最良優先探索(best-first search)
O15
B8
待ち行列
コスト関数(cost function)の小さい順になるよう挿入
コスト>0
ベストに見えるものを優先的に展開 コスト関数の決め方によって
いろいろなバリエーションがある
1.均一コスト探索
2. 欲張り探索
3. A* 探索
今回の基本的な考え方は,最良優先探索(best-first search)というものである.
事前に,状態から数値に対応させる何らかの関数をコスト関数として用意しておく.コストは正の数とする.0や負のコストは考えない.また,ノード数が無限個あるときに,n番目のノードのコストが1/n などと,限りなく0に近い正のコストは考えないことにする.した
がって,簡単のため,すべてのコストは正の整数であると考えておけば間違いない.
このアルゴリズムでは,未展開の各ノードのコストを計算し,その小さい順に待ち行列に並べる.
これまでのアルゴリズムと同様に,その先頭ノードを優先的に選んで展開する(子を産む).つまり,コストが小さいという意味で現時点でベストに見えるノードを優先的に展開する.
コスト関数の決め方によって,少なくとも,図に示した3つのバリエーションがある.次のスライドから,それらを順に見ていく.
5
1.均一コスト探索(unform cost search)初期状態からそのノードn までの経路コスト g(n)
をコスト関数とする最良優先探索
ゴールに向かってのシャープな探索になっていない
g(n) = 5+3 = 8
a0
初期状態
35b5
n8
現在状態
全オペレータのコスト=1なら,幅優先探索と同じ動作となる
1つめのアルゴリズム「均一コスト探索」(uniform cost search)は,初期状態からそのノードn までの経路コスト g(n) をコスト関数とする最良優先探索である.特別な場合
として,全オペレータのコスト=1なら,経路コスト=ノードの深さとなるので,それを浅い順に展開する幅優先探索と同じ動作となる.
このアルゴリズムは,ゴールがどのあたりにあるのかということをまったく気にせず,とにかく,これまで進んできた経路のコストが最も小さいものを展開するので,「広く浅く」という感じの探索になりがちで,ゴール目指してシャープに突き進んでいくような動作は望めない.
6
均一コスト探索の実行
0
1 4
2
9 9
6 73
12 5
1
経路コスト g(n) の低い順に展開
待ち行列
INOUT
2
9
4
7
3
2 7
2
1
8経路コスト g(n) の昇順になるように挿入
経路コスト1+2=3
オペレータのコスト
このスライドは均一コスト探索の実行のようすをアニメーションで表現している.ノードを表す円の中の数値はg(n)の値である.未展開のノードのうち,その数値が最も小さいものが選ばれ,展開される.
その途中で,待ち行列のようすも確認しておこう.
7
均一コスト探索の最適性ただし,オペレータのコストは非負とする
S
A
B
C
Gstart goal
15 5
15
10
5
0
1 1551
5
15A B C
S
11 10G G
10 5
展開のために選択したときにゴールと判定する
展開のために選択してゴールと判定
均一コスト探索は最適性がある.つまり,最初に見つける解は,必ず最適解である.
そのデモとして簡単な例を見てみよう.
この例では,最適解は S→B→G で,そのコストは10である.
アルゴリズムでは,途中でコスト11の解 S→A→G が生成されるが,このノードはまだ展開されないので,アルゴリズムはまだこれがゴールだとは認識しない.
そのうち, S→B→G が生成され,これがさらに展開される段になって,これがゴール
であることに気付き,それを解とする.したがって,最初に見つけた解が最適解になっている.
一般に,このアルゴリズムに最適性があるのは自明であろう.ゴールの判定は,ノードの展開の直前に行われることがポイントである.経路コストが最小のものから展開するので,最適解のゴールノードより早くに経路コストがもっと大きな他のゴールノードが展開されることはない.
8
均一コスト探索の性質
最適性(optimality) あり
最適解を最初に見つける
完全性(completeness) あり
解があれば必ず見つける
時間計算量(time complexity)指数的 bd (b:分枝率,d:解の深さ)
空間計算量(space complexity)指数的 bd
幅優先探索と同じ
均一コスト探索の理論的性質をまとめるとこのスライドのようになる.
9
2.欲張り探索(greedy search)
a0
初期状態
35b5
n8
現在状態
g
h(n)ヒューリスティック関数ノードからゴールまでの最短経路コストの見積り
これの小さい順に展開
そのノードnからゴールまでの予想コスト h(n)をコスト関数とする最良優先探索
ゴール
2つめのアルゴリズム「欲張り探索」(greedy search)は,そのノードnからゴールまでの予想コスト h(n)をコスト関数とする最良優先探索である. h(n) は,ノードn からゴールまでの最短経路コストの見積りであり,ヒューリスティック関数と呼ばれている.これは,あくまでもこの問題分野独自に関する知識や経験からの「予想」とか「見積もり」であって,その情報が正確である保証はないことに注意しよう.しかし,まったくのでたらめではないことは期待したい.
このアルゴリズムは, h(n) の値の小さい順に未展開ノードを展開する.したがって,待ち行列はh(n) の値の小さい順に並べておく.
さきほどの均一コスト探索とは対照的に,このアルゴリズムはこれまでのコストがどうだったかという過去は一切問わない.とにかく,今後の予想コストh(n) のみに着目し,そ
れが現時点で最小の未展開ノードが最も有望である(ベストに見える)として展開する.
古い教科書などでは,この欲張り探索のことを最良優先探索と呼んでいることもあるので注意しよう.
10
ヒューリスティック(heuristic)とは?
語源: アルキメデスが風呂で浮力の法則を発見したときに叫んだ”Heurika !” (ユーリカ!
発見した!)
経験から発見した知識のこと
最悪ケースの性能は必ずしも上げないが,平均的にはたいていの場合はうまくいく手法
ここで出てきた「ヒューリスティック」という言葉は人工知能(AI)技術にとって,非常
に重要な用語である.
これは,アルキメデスが風呂で浮力の法則を発見したときに叫んだ”Heurika !” (ユーリカ!発見した!)という言葉が語源で,AIでは,経験から発見した知識のことを指してい
る.
しかし,有り得る可能性のすべてを経験したわけではないので,これは数学的に完全に正しい知識であるという保証はない.しかし,アルゴリズムの性能については,最悪ケースの性能は必ずしも上げないが,平均的にはたいていの場合はうまくいく手法であることが多い.
AIにはこのようなアルゴリズムが多いのである.理論家が(最悪のケースで)指数関数的な計算量になるので実用的でないとする難しい問題でも,AI研究者はあきらめず,ヒューリスティクスを利用して,たいていの場合には高速に解を見つける技術の開発を目指すのである.
11
ヒューリスティック関数の例:直線距離
A
Z
T
S
B
初期状態
ゴール
253
374
329
h(n) = nからゴールまでの直線距離
都市のナビゲーションの例では, h(n) を nからゴールまでの直線距離と定義すれば
よい.正しい値はもちろん「道のり」なのだが,2点の緯度と経度から三平方の定理で直線距離を算出すれば,ゴールまでの道のりの良い見積もりとなるだろう.
12
欲張り探索は最適解を見つける保証がない
A
Z
T
S
R
PB
F
329
253374
366 178
193
0
80
97
101
211
99
hの値(直線距離)
最短経路はこちら!(最適性がない)
欲張ってこっちにこだわった
(欲張り探索)
しかし多くの場合うまくいく
欲張り探索は最適解を見つける保証がない.この例(アニメーション)がその証拠である.最初に最適解でない方の
解を見つけてしまう.
13
欲張り探索は解を見つける保証(完全性)がない
A
Z
T
S
B
150
253374
366
0
T1
T2
150
150
不適切なヒューリスティクス
欲張り探索には完全性もない.この図のように,不適切なヒューリスティック関数を与えると,その間違った情報にミスリードされて,際限なく変な方向を探してしまう.
14
欲張り探索の性質
最適性(optimality) なし
最適解を見つける保証がない
完全性(completeness) なし
解を見つけないことがある
時間計算量(time complexity)bm (m: 探索木の最大の深さ)
空間計算量(space complexity)bm
深さ優先探索と同じ
欲張り探索の性質をまとめるとこのようになる.
15
3.A* 探索(A* search)
初期状態
35n8
現在状態
h(n)ここからの予想コスト
経路全体の予想コスト f(n)=g(n)+h(n)(ただし,h(n)は許容的なヒューリスティック関数)
をコスト関数とする最良優先探索
ゴール
エイスター
ここまでのコスト
g(n)
f(n) = g(n) + h(n)n 経由の最短経路の見積もりコスト
これの小さい順に展開
3つめのアルゴリズム「A*探索」(A* search)は,今回の授業の山場で,かつ,探索アルゴリズムの最も重要なものの1つである.このアルゴリズムは, n 経由の最短経路の見積もりコストを f(n)=g(n)+h(n) で定義し,それをコスト関数とする最良優先探索である.ただし,h(n)は許容的なヒューリスティック関数(次のスライドで定義する)であるものとす
る.
g(n) は「ここまでのコスト」という過去の実績を表し,h(n)は「ここからの予想コスト」という将来の見積もりを表している.その和は,初期状態から n を経由してゴールまでの最短経路のコストの見積もりになっている.この値の小さい順に未展開ノードを展開するのがこのアルゴリズムである.
16
許容的ヒューリスティック(admissible heuristic)
A
PR
S
B
初期状態
ゴール
253
実際の最小コスト h*(n)=278
予想最小コスト h(n)直線距離
予想最小コスト h(n) ≦ 実際の最小コスト h*(n)を満たすヒューリスティック関数のこと
楽観的(optimistic)ヒューリスティック
とも言う
ヒューリスティクスが許容的と限らないときは,Aアルゴリズムと呼ぶ.
A*アルゴリズムでは,ヒューリスティック関数 h(n) が許容的(admissible)であることが要求される.
(ヒューリスティクスが許容的と限らないときは,このアルゴリズムはAアルゴリズムと呼
ばれる.)
h(n) が許容的とは,すべてのノード n について,
予想最小コスト h(n) ≦ 実際の最小コスト h*(n)が成り立つことである.つまり,実際よりも小さめにコストを予想するので,楽観的なヒューリスティックとも言う.
ナビの例では,h(n) をゴールまでの直線距離とすれば,それは許容的なヒューリスティック関数である.
17
A* 探索の性質
最適性(optimality) あり!
最初に見つけた解は最適解
完全性(completeness) あり!
解があれば必ず見つける
時間計算量(time complexity)
空間計算量(space complexity)ヒューリスティックの
精度に依存
A* 探索の性質はこのようになる.
最適性と完全性があることは,このあとのスライドで直観的に(やや強引に)納得してもらう.
計算量はヒューリスティックの精度に依存することも,後のスライドでうすうすわかる.
18
経路コスト
h 関数の値
(直線距離)
329
253
374
366178
193
0
80
97
101
211
99
75
118140
AS
F
RP
B
T
98
ZO
380
151
160
146C 138
71
A*が最初に見つける解は最適解
450B
366449
447
393
413415
418
417
329
253
374
366178
193
0
80
97
101
211
99
75
118140
AS
F
RP
B
T
98
Z 526O
380
151
526160
146C 138
615 C最適解
これは,A*が最初に見つける解が最適解であることのデモである.
最適解でない方の経路が先に生成されるが,最終的に,先にゴールと判断されるのは最適解の経路の方であることに注意しよう.
19
20
450
366449
447
393
413
415418
417
526
526615
A*探索の振る舞い(1) 単調性
探索木に沿ったすべての経路でf のコストは非減少
しかし,すべての問題が単調性が成り立つわけではない.
先ほどの例題では,探索木に沿ったすべての経路で f のコストは非減少になっている.
これを単調性という.すべての問題で単調性が成り立つわけではないが,そうなることが多い.単調性の正式な定義と,その意味合いはつぎのスライドで.
21
A*探索の振る舞い(2) 単調性の定義
( ) ( ') ( , ')h n h n c n n≤ +
n'
n
ゴール
h(n)
h(n')
c(n,n')
単調性三角不等式に
似ている
先へ進んで,情報が得られてくるほど,楽観性が弱くなる
( ') ( ) ( , ')h n h n c n n≥ −
任意の n, n' についてここで示した不等式が成立するとき,ヒューリスティック関数 h(n) は単調であるという.
この不等式を2つめのように変形すればわかるように,これは,先へ進んで,情報が得られてくるほど,楽観性が弱くなるということを表している.つまり,最初は将来についてかなり楽観的だったのが,先へ進んできてみていろいろな情報が見えてくると,現実のきびしさがわかってきて,その楽観性が後退してくるというわけで,我々の人生に通ずるものがある.とほほほほ.
22
450
366
449
447
393
413415
418
417
526
526615
A*探索の振る舞い(3) 等高線A*アルゴリズムは f 値の山を
ゴールに向かって,見落としなく(シャープに)単調に登っていくf = 366
の等高線
393 413 415 417 418
準最適解
最適解の等高線
最適性あり!
完全性あり!
実際には,単調性がなくても,最適性と完全性がある.
単調性があるときには,A*の振る舞いは f(n) の等高線を低い方から高い方へ地道に
引いていく手順として理解できる.そうすると,完全性と最適性が成り立つことが納得できる.
23
最良優先探索の比較
○×○完全
○×○最適
△△×空間
△△×時間
A*欲張り均一コスト
幅優先的 深さ優先的 ヒューリスティクス次第
つねに h(n)=0 とすれば,A*は均一コスト探索と一致する.
今回学んだ3つのアルゴリズムに対して,4つの評価尺度を検討した結果を表にまとめておく.
24
ヒューリスティック関数について
ヒューリスティックの優位性
8パズルのヒューリスティック
ヒューリスティック関数の作り方
ヒューリスティック関数について,この3つの点から補足しておく.
25
ヒューリスティックの優位性
すべてのノード n において h1(n) ≦ h2(n) ≦ h*(n)
実際の値
h2 は h1 より優位
h2 で展開されたノード
h1 で展開されたノード
⊆すべてのノード n において
h1(n) ≦ h2(n) ≦ h*(n)=実際の値
であるとき, h2 は h1 より優位であるという.より精度の良い見積もりということである.
このとき, ヒューリスティック関数として優位な h2 を用いたA*アルゴリズムによって展開されるノードは,必ず,優位でない h1 を用いたA*アルゴリズムによっても展開される.
つまり,優位なヒューリスティック関数を用いた方が,はっきり効率が良いことが理論的に言えるのである.
26
8パズルのヒューリスティック関数
5 46 1 87 3 2
1 28
34
7 6 5
ゴール初期状態
候補1 h1=ゴールの位置にないタイルの数.上の例では7.
候補2 h2=各タイルのゴール状態までのマンハッタン距離
の和.上の例では18.
2+3+3+2+4+2+0+2 =18
■どちらも許容的(楽観的) ■h2はh1より優位.
8パズルのヒューリスティック関数として,このスライドで示す2つが良く知られている.明らかに,双方とも許容的(楽観的)で,さらに,h2 は h1 より優位である.
27
8パズルの実験結果
1641391352412191809422676727620363305618211130116113539347394114732273644041239934712710253963848182068061213112466102
A*(h2)A*(h1)反復深化
展開した平均ノード数解の長さ
8パズルの実験結果である.初期状態によって最適解の長さが違うので別々にデータを整理してある.
前回学んだ反復深化探索(知識を用いない探索で,前回学んだ範囲ではベストだったもの)よりも,知識 h1 を用いたA*探索が効率が良い.さらに,h1よりも優位なヒューリステッィク h2 を用いるとさらに効率
が改善されることがわかる.
28
ヒューリスティック関数の作り方(1)
弱条件問題緩和問題
(relaxed problem)
=オペレータに対する制限を減らして
解きやすくした問題
弱条件問題の正確な解のコストが元の問題の良いヒューリスティクスになっていることが多い
8パズルの場合:となりにタイルが置いてあってもそこに動かせる
ヒューリスティック関数は,経験あるいは「発見」によって見つけるものなのだが,それを見つけるおよそのガイドラインはある.
それは,弱条件問題あるいは緩和問題と呼ばれるものを利用することである.弱条件問題とは,オペレータに対する制限を減らして解きやすくした問題のことである.この問題の正確な解のコストが元の問題の良いヒューリスティクスになっていることが多い.弱条件問題はもとの問題より解を得やすいのだから,「楽観的」な解が得られるからである.
29
ヒューリスティック関数の作り方(2)
AがBのとなり Bが空& → AからBへタイル
を動かせる
弱条件問題の自動生成
AがBのとなり → AからBへタイル
を動かせる
Bが空 → AからBへタイル
を動かせる
relax
h1
h2
これは,8パズルのヒューリスティック関数を,弱条件問題を利用して自動生成する考え方を示している.
いずれも,重要な制限のうちの1つをはずして弱条件問題を生成し,その解をヒューリスティック関数の値としている.
30
ヒューリスティック関数の作り方(3)
h1,h2,…,hm という許容的ヒューリスティクスがあり,
どれも他の優位にないとき,どれを選ぶか?
h(n) = max (h1(n), h2(n), …, hm(n) )
■ hは一つひとつの関数より優位
互いに他よりも優位でないヒューリスティック関数が複数あれば,それらの最大値を求める関数をヒューリスティック関数とすれば,これは一つひとつのどのヒューリスティック関数よりも優位である.
31
ヒューリスティック関数の作り方(4)
統計情報の利用
h2(n)=14 → 90%の確率で実際の距離=18
h(n)=18
許容性の保証はなくなるが平均的に効率が向上する
統計情報を利用して,経験を補強して,より精度の高いヒューリスティック関数を作れば,平均的に効率が向上する.しかし,許容的でなくなるので,完全性と最適性は保証されない.
32
ヒューリスティック関数の作り方(5)
状態の「特徴」の利用
h(n)=α×駒の得点の差+β×駒の働きの差+γ×玉の囲いの差
将棋の例
αβγ:学習アルゴリズムで値を調整する
この将棋の例のように,その問題特有の状態の特徴からヒューリスティック関数をモデル化することも多い.
未知パラメータを含むモデルを作っておき,AIならではの「学習」という機能で,パラ
メータの値を動的に改善していく方法もある.