250 likes | 357 Views
08 人工知能4:知識を用いる探索法 (ヒューリスティック探索). 2008 May2 田中美栄子(知識 A ). ヒューリスティック という概念を知る. これまでは知識を用いない探索 ( blind search )であった、、. 対象とする事柄に対し多少とも知識を持っている場合、ヒューリスティック・サーチが可能 ( Heuristic search :発見法的な探索) こういうときはこうするのがよい、という選択ができる、但し 100% 信頼は出来ない (うまく行くことが多い、または過去にうまく行ったことがある).
E N D
08人工知能4:知識を用いる探索法(ヒューリスティック探索)08人工知能4:知識を用いる探索法(ヒューリスティック探索) 2008 May2 田中美栄子(知識A)
ヒューリスティック という概念を知る
これまでは知識を用いない探索(blind search)であった、、 • 対象とする事柄に対し多少とも知識を持っている場合、ヒューリスティック・サーチが可能 (Heuristic search:発見法的な探索) • こういうときはこうするのがよい、という選択ができる、但し100%信頼は出来ない • (うまく行くことが多い、または過去にうまく行ったことがある)
Heuristic:発見に役立つモノ(定義曖昧) • 1957 Newell, Shaw, Simonの定義 「ある与えられた問題を解くかも知れないが、その可能性が保証されていないプロセス」 (つまり保証付きでない方策、といっている) • 1961: 問題解決の動作効率を改良するヒント
Heuristic:発見に役立つ知恵(定義曖昧) 1963FeigenbaumとFeldmanによる定義: 「ruleof thum のことである」 親指で1インチを測る程度の大雑把で、巨大な探索空間を大幅に制限する為の戦略、仕掛け、単純化、等の方法 解を保証しないが、多くの場合に良い解を提供する 後になってそれが,最適解だった,と判ることもある
ロボットの迷路抜け (1,1) • (1,1)から(4,4)へ (3,4) (4,4) (2,4) (2,3) (1,4) (2,4) (2,2) (2,3) (3,3) 2 (3,2) (1,4) (3,4) (3,2) (3,1) (2,2) 4 (3,3) (4,4) (3,1) (1,1)
知識を用いない探索(blind search) • 解がどのあたりにあるかの見当がつかない場合、総当たり的に探す(Brute-force search) • 深さ優先探索(Depth-first-search) • 幅優先探索(Breadth-first-search) • 最適探索(Optimal-search)複数解のうち,最適解
Depth-1ST 深さ優先探索(graph) depth-first-search algorithm{ 1.初期節点をopenリストに入れる 2.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を展開し、全ての子節点niをopenの先頭に入れる)。 niからnへポインタを付けておく。 7. 2へもどる}
Depth-1st:S→A→B→D→E→G S(1,1) • OpenList 1) S 2) A 3) BC 4) DEC 5) EC 6) GFC A(2,3) B(2,4) C(2,2) 2 H(3,2) D(1,4) E(3,4) I(3,1) 4 F(3,3) G(4,4)
Breadth-1ST 幅優先探索(graph) breadth-first-search algorithm { 1.初期節点をopenリストに入れる 2.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を展開し全ての子節点niをopenの最後に入れる)。 niからnへポインタを付けておく。 7. 2へもどる }
Breadth-1st:S→A→B→C→D→E→H →I→ G S(1,1) • OpenList 1) S 2) A 3) BC 4) CDE 5) DEHI 6) EHI 7) HIGF 8) IGF 9)GF A(2,3) B(2,4) C(2,2) 2 H(3,2) D(1,4) E(3,4) I(3,1) 4 F(3,3) G(4,4)
Optimal-search 最適探索 optimal-search algorithm { 1.初期節点をopenリストに入れる 2.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を展開し、全ての子節点niをopenに入れ、コストの昇順に並べる) niからnへポインタを付けておく 7. 2へもどる }
最適探索optimal search • 状態空間がグラフで表され • 状態遷移の枝に出発点からのコスト g(n) が計算済み • この時、ステップ6でopenの中身をコストの昇順に並べ、一番最初にコスト最小の節が来るようにする • 解が複数ある場合など、最小コストの解を探せる
Optimal:S→B→E→A→F→G2 S 1 • OpenList 1) S(0) 2) B(1)A(4) 3) E(3)A(4)F(4) 4) A(4)F(4)G1(6)H(7) 5) F(4)C(5)G1(6)H(7) 6) G2(5)C(5)G1(6)D(6)I(6)H(7) 4 B A 2 2 1 3 F E C D 2 1 3 4 H G1 I G2
これまでは知識を用いない探索(blind search)であった、、 • 対象とする事柄に対し多少とも知識を持っている場合、ヒューリスティック・サーチが可能 (Heuristic search:発見法的な探索) • こういうときはこうするのがよい、という選択ができる、但し100%信頼は出来ない(うまく行くことが多い、または過去にうまく行ったことがある)
探索の基本アルゴリズム • Search algorithm{ • 1.初期節点をopenリストに入れる • 2.if(open==empty)break;(探索失敗) • 3.n=first(open); • 4.if(goal(n))print(n);break;(探索終了) • 5.remove(n,open); • 6. 次に調べる節点をopenに入れる(順序) • 7. 2へもどる}
Heuristic search(1) 最良優先探索:best-first-search 各節点からゴールまでのコスト(距離)h(n)が予想出来るとき 全コストは f(n)=g(n)+h(n) h(n)の正確な値がわからないとき、予測値h’(n)で代用 • ステップ6で予想値h’(n)の昇順に並べる (次の例参照:出口までのx距離とy距離の和とする: → 駄目かも知れない)
問題点 ヒューリスティック関数 h’ の推定が間違っていれば失敗
Heuristic:ヒントを多用して解を発見 例:迷路問題 ヒューリスティック関数 h’: h’(n)=状態nから終点Gまでの距離の推定値,と仮定 h’(n)=|nx ー Gx|+|ny ー Gy| 迷路の形次第で成功することも失敗することもある ゼッタイに正しいかどうか解らないが使えそうなヒント
h = 点nから目標地Gまでの推測コスト S(1,1) • S(1,1)からG(4,4)へ (3,4) (4,4) (2,4) A(2,3) (1,4) B(2,4) C(2,2) (2,3) (3,3) 2 H(3,2) D(1,4) E(3,4) (3,2) I(3,1) (2,2) 4 F(3,3) G(4,4) (3,1) (1,1)
h =|nのx座標-Gのx座標|+| nのy座標-Gのy座標| S(1,1)6 • S(1,1)からG(4,4)へ (3,4) (4,4) (2,4) A(2,3)3 (1,4) B(2,4)2 C(2,2)4 (2,3) (3,3) 2 H(3,2) D(1,4)3 E(3,4)1 (3,2) I(3,1) (2,2) 4 F(3,3) G(4,4)0 (3,1) (1,1)
A*-アルゴリズム A*-search algorithm{ 1.初期節点をopenリストに入れる 2.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を展開し、全ての子節点niをopenに入れ、推定コストf(ni)の昇順に並べる) niからnへポインタを付けておく 7. 2へもどる}
A*-アルゴリズムとA-アルゴリズム 推定コスト f(ni)=g’(ni)+h’(ni) A*の条件 推定値h’(ni)<= 本当の値h(ni) (この条件が成立しなければ A-search となる.A-Search ならば 解は保証されない ) g’(ni)はg(ni)の推定値だが、出発点からniまでの、解っているコストの内で最小のもの。
A*-algorithm:S→A→B→E→G S(1,1)6 • OpenList 1) S(6) 2) A(6) 3) B(6)C(8) 4) E(6)D(8)C (8) 5) G(0)D(8)C(8) 3 A(2,3)3 1 1 B(2,4)2 C(2,2)4 2 H(3,2) D(1,4)3 E(3,4)1 I(3,1) 4 F(3,3) G(4,4)0
h = 点nから目標地Gまでの推測コスト S(1,1) • S(1,1)からG(4,4)へ (3,4) (4,4) (2,4) A(2,3) B(2,4) C(2,2) (3,3) (1,3) (2,3) 2 H(3,2) D(1,4) E(3,4) (3,2) I(3,1) (2,2) 4 F(3,3) G(4,4) (3,1) (1,1)