人工知能論 第1回

Similar documents
Microsoft PowerPoint - uninformed.ppt

PowerPoint Presentation

Microsoft PowerPoint - 06graph3.ppt [互換モード]

人工知能入門

グラフの探索 JAVA での実装

alg2015-6r3.ppt

Microsoft PowerPoint - mp13-07.pptx

soturon.dvi

Microsoft PowerPoint - DA2_2018.pptx

PowerPoint Template

Microsoft PowerPoint - mp11-06.pptx

離散数学

人工知能論 第1回

Microsoft PowerPoint - algo ppt [互換モード]

umeda_1118web(2).pptx

Microsoft PowerPoint - IntroAlgDs-05-4.ppt

Microsoft PowerPoint - H20第10回最短経路問題-掲示用.ppt

セゾン保険_PDF用.indd

オートマトン 形式言語及び演習 1. 有限オートマトンとは 酒井正彦 形式言語 言語とは : 文字列の集合例 : 偶数個の 1 の後に 0 を持つ列からなる集合 {0, 110, 11110,

人工知能論 第1回

Microsoft PowerPoint - H20第10回最短経路問題-掲示用.ppt

Microsoft PowerPoint - ad11-09.pptx

データ構造

AtCoder Regular Contest 073 Editorial Kohei Morita(yosupo) A: Shiritori if python3 a, b, c = input().split() if a[len(a)-1] == b[0] and b[len(

プログラミングI第10回

Microsoft Word - VBA基礎(3).docx

A Feasibility Study of Direct-Mapping-Type Parallel Processing Method to Solve Linear Equations in Load Flow Calculations Hiroaki Inayoshi, Non-member

<95DB8C9288E397C389C88A E696E6462>

How to read the marks and remarks used in this parts book. Section 1 : Explanation of Code Use In MRK Column OO : Interchangeable between the new part

東邦大学理学部情報科学科 2011 年度 卒業研究論文 Collatz 予想の変形について 提出日 2012 年 1 月 30 日 指導教員白柳潔 提出者 藤田純平

040402.ユニットテスト

Microsoft PowerPoint - DA2_2017.pptx

アルゴリズムとデータ構造

Numerical Analysis II, Exam End Term Spring 2017

コンピュータ工学講義プリント (7 月 17 日 ) 今回の講義では フローチャートについて学ぶ フローチャートとはフローチャートは コンピュータプログラムの処理の流れを視覚的に表し 処理の全体像を把握しやすくするために書く図である 日本語では流れ図という 図 1 は ユーザーに 0 以上の整数 n

How to read the marks and remarks used in this parts book. Section 1 : Explanation of Code Use In MRK Column OO : Interchangeable between the new part

cp-7. 配列

,,,,., C Java,,.,,.,., ,,.,, i


AI 三目並べ

How to read the marks and remarks used in this parts book. Section 1 : Explanation of Code Use In MRK Column OO : Interchangeable between the new part

T rank A max{rank Q[R Q, J] t-rank T [R T, C \ J] J C} 2 ([1, p.138, Theorem 4.2.5]) A = ( ) Q rank A = min{ρ(j) γ(j) J J C} C, (5) ρ(j) = rank Q[R Q,

A5 PDF.pwd

Taro-数値計算の誤差(公開版)

Microsoft Word - sample_adv-programming.docx

Taro-2分探索木Ⅰ(公開版).jtd

Microsoft PowerPoint - DA2_2017.pptx



2

プログラム言語及び演習Ⅲ

Transcription:

知能システム学 第 8 回ー第 9 回 探索による問題解決 (1) ソフトウェア情報学部 David Ramamonjisoa

問題解決エージェントの例 旅行者 ( エージェント ) が, ルーマニアの都市 Arad に滞在している. エージェントは, 次の日 Bucharest から飛び立つチケットを持っている. どうすればよいか. ゴールの定式化 : ドライブして Bucharest に行く を, ゴールとして設定すべきである. 問題の定式化 : 左足を前方に 18 インチ動かす あるいは ハンドルを左へ 6 度回す などは, 行為としては不適切である. 都市間をドライブするというレベルの行為を考える. 解の探索 : 都市間の隣接情報から,Arad から Bucharest に行く可能なコースを探索し, 最適なプランを立てる. 解の実行 : 実際に解に従って, Arad から Bucharest にドライブする.

例 : ロマニア (Romania)

問題を定式化すること 問題の構成要素 初期状態 : エージェントが認識している最初の状態 オペレータ : エージェントが利用できる可能な行為 ゴール検査 : エージェントが到達した状態がゴール状態であるかを決定する検査. 経路コスト : 経路をたどるのに必要なコスト. 経路コストは, 経路に沿った各々の行為のコストの総和. 問題の環境 状態空間 : 初期状態から行為の任意の系列によって到達可能なすべての状態の集合 経路 :1 つの状態を他の状態に導く行為列

解の探索 (1) 行為列の生成 Arad から Bucharest へのルート発見問題を解くためには, 初期状態 Arad から開始する. 最初のステップは, それがゴール状態であるかのテスト. それがゴール状態でないので, 他の状態を考える. そのために, 現在の状態にオペレータを適用し, それによって新しい状態の集合を生成する ( 状態の展開 ). ここでは,Sibiu,Timosoara,Zerind という三つの新しい状態が得られる. つぎに, この三つから一つの選択肢を選んで, 探索を続ける. 最初の選択が解に至らない場合, 他の選択肢を選んで, 探索を続ける. 最初にどの状態を展開させるかの選択は, 探索戦略によって決定される. 状態空間上に探索木を構成して, 探索過程を表現する.

解の探索 (2) 部分探索木 探索木のルートは, 初期状態を表す探索ノード. 木の葉ノードは, まだ展開していないか, あるいは展開したけれども空集合を生成したために後続ノードを持たない状態に対応する. 探索アルゴリズムは, 展開させる葉ノードを一つ選ぶ.

解の探索 (3) 部分探索木の例 ( a ) 初期状態 Arad ( b ) 展開の後 Arad Sibiu Timisoara Zerind ( c ) Sibiu を展開の後 Arad Sibiu Timisoara Zerind Arad Fagaras Oradea Rimnicu Vilcea

探索木の例 (Tree search example)

探索木の例 (Tree search example)

探索木の例 (Tree search example)

解の探索 (4) 探索木のためのデータ構造 ノードの構成要素 状態空間においてノードが対応している状態 探索木においてこのノードを生成したノード ( 親ノード ) ノードを生成するために適用されたオペレータ ルートからこのノードへの経路上のノードの数 ( ノードの深さ ) 初期状態からこのノードまでの経路の経路コスト ノードのデータタイプ datatype Node components: State, Parent-Node, Operator, Depth, Path-Cost

解の探索 (4) 一般的探索アルゴリズム function General-Search( 問題, 戦略 ) returns 一つの解 or 失敗問題の初期状態で, 探索木を初期設定する. loop do if 展開すべき候補ノードがない then return 失敗戦略によって展開すべき葉ノードを選ぶ if そのノードがゴール状態 then return 対応する解 else そのノードを展開して結果のノード群を探索木に加える end

実装 : 一般探索木 (Implementation: general tree search)

実装 : 状態対ノード (Implementation: states vs. nodes) 状態は物理的な表現 (A state is a (representation of) a physical configuration) ノードはデータ構造であり 木の一部の構成になる (A node is a data structure constituting part of a search tree includes state, parent node, action, path cost g(x), depth) Expand 関数は Successor-Fn 関数を用いてノードを生成し 問題の状態を生成する

8 クイーン問題定式化 #1 状態 : 0, 1, 2,..., 8 クイーンの盤上への任意の配置 初期状態 : 0 クイーン ( 一つも置かれていない盤 ) 後者関数 : クイーンを一つ 空いたマスに置く コスト : なし (irrelevant) ゴール検査 : 8 クイーンが盤上にあり どれも攻撃しない ~ 64x63x...x57 ~ 3x10 14 状態数 = ノード数 16

8 クイーン問題定式化 #2 状態 : 一番左から n 列 (0=<n=<8) 目までに n 個のクイーンを 1 列に一つずつ置き 互いに攻撃しない配列が状態である 初期状態 : 0 クイーン ( 一つも置かれていない盤 ) 後者関数 : クイーンが置かれていない最も左の列で 他のどのクイーンにも攻撃されない任意のマス一つにクイーンを加える コスト : なし (irrelevant) ゴール検査 : 8 クイーンが盤上にあり どれも攻撃しない 2,057 状態数 = ノード数 17

n- クイーン問題 解 : ゴールノードである パスではない 状態空間のサイズ : 8- クイーン 2,057 100- クイーン 10 52 通常の探索アルゴリズムでは計算厳しい 18

探索戦略 探索戦略選択のための四つの基準 完全性 : 解が存在するとき, それを見つけることが保証されているか? 最適性 : いくつか異なる解があるとき, 戦略は最も良い解を見つけるか? 時間計算量 : 解を見つけるまでにどれくらい時間が掛かるか? 空間計算量 : 探索を行うためにどのくらいメモリを必要とするか? 情報のない探索 (uniformed search), ある探索 現在の状態からゴールに至るステップ数や経路コストに関する情報を持っていないか, 持っているかによって, 区別する. ここでは, 情報のない探索 ( 盲目的探索ともいう ) を取り上げる.

情報のない探索戦略 (Uninformed search strategies) 情報のない探索戦略は問題定式化の使用可能情報のみ利用する (Uninformed search strategies use only the information available in the problem definition 幅優先探索 (Breadth-first search) 均一コスト探索 (Uniform-cost search) 深さ優先探索 (Depth-first search) 深さ制限探索 (Depth-limited search) 反復深化探索 (Iterative deepening search)

幅優先探索 ルートノードがまず展開され, つぎにルートノードによって生成されたすべてのノードが展開され, そしてそれらの後続ノードが展開される, というように続く. 一般に, 探索木における深さ d のすべてのノードが, 深さ d+1 のノードの前に展開される.

幅優先探索 (Breadth-first search) 展開されてない浅いノードを展開する Implementation: 縁は FIFO キューである 後続ノードは展開される

幅優先探索 (Breadth-first search) 展開されてない浅いノードを展開する Implementation: 縁は FIFO キューである 後続ノードは展開される

幅優先探索 (Breadth-first search) 展開されてない浅いノードを展開する Implementation: 縁は FIFO キューである 後続ノードは展開される

幅優先探索 (Breadth-first search) 展開されてない浅いノードを展開する Implementation: 縁は FIFO キューである 後続ノードは展開される

幅優先探索の性質 (Properties of breadth-first search) 幅優先探索は完全で, 経路コストがノードの深さとともに減少しなければ, 最適である. どの状態も b 個の新しい状態に展開されるものとする ( 分岐度 =b). この問題に対する解が, 経路長 d を持つと仮定する. 最悪の場合, レベル d の最後のノード以外をすべて展開する ( 最後のノードは解であり, それは展開されない ). 展開されるノード数は, 1+b+b 2 +b 3 + +(b d -1)=O(b d ) b=10, 1000 ノード / 秒 100 バイト / ノードとする. 深さ ノード 時間 メモリ 0 1 1 ミリ秒 100 バイト 2 111 0.1 秒 11 キロバイト 4 11,111 11 秒 1 メガバイト 6 10^6 18 分 111 メガバイト 8 10^8 31 時間 11 ギガバイト 10 10^10 128 日 1 テラバイト 12 10^12 35 年 111 テラバイト 14 10^14 3500 年 11,111 テラバイト

幅優先探索の性質 (Properties of breadth-first search) [ 尺度 ] 完全性? Yes (if b is finite) 時間複雑さ? 1+b+b 2 +b 3 + +b d + b(b d -1) = O(b d+1 ) 空間複雑さ? O(b d+1 ) (keeps every node in memory) 最適? Yes (if cost = 1 per step) 計算量よりメモリ量が大問題である (Space is the bigger problem (more than time))

均一コスト探索 (Uniform-cost search) 経路コスト g(n) によってコストが最も少ないノードを常に展開させることによって幅優先戦略を修正したものである (Expand least-cost unexpanded node) 実装 (Implementation): 縁 (fringe) = 経路コストによるキュー (queue ordered by path cost) 完全 (Complete)? Yes, if step cost ε 時間 (Time)? # of nodes with g cost of optimal solution, O(b ceiling(c*/ ε) ) where C * is the cost of the optimal solution メモリ (Space)? # of nodes with g cost of optimal solution, O(b ceiling(c*/ ε) ) 最適 (Optimal)? Yes nodes expanded in increasing order of g(n)

深さ優先探索 (Depth first search) 深さ優先探索のアルゴリズム 木の最も深いレベルのノードの一つをいつも展開する. 探索が行き止まりになるときに限り, 探索は後戻りし, より浅いレベルのノードを展開する. 深さ優先探索の性質 分岐度 b で最大の深さが m の状態空間に対して,bm 個のノードだけを格納すればよい. たとえば, 深さ d=12 において,111 テラバイトの代わりに,12 キロバイトしか必要としない. 時間計算量は, 幅優先探索と同様,O(b m ) である. 深さ優先探索は, 場合によっては, 無限にループして, 解が求まらないかもしれない. 深さ優先探索は, 完全でも最適でもない.

深さ優先探索 (Depth first search) 木の最も深いレベルのノードの一つをいつも展開する 実装 (Implementation): 縁 (fringe) = LIFO キュー (LIFO queue, i.e., put successors at front)

深さ優先探索 (Depth first search) 木の最も深いレベルのノードの一つをいつも展開する 実装 (Implementation): 縁 (fringe) = LIFO キュー (LIFO queue, i.e., put successors at front)

深さ優先探索 (Depth first search) 木の最も深いレベルのノードの一つをいつも展開する 実装 (Implementation): 縁 (fringe) = LIFO キュー (LIFO queue, i.e., put successors at front)

深さ優先探索 (Depth first search) 木の最も深いレベルのノードの一つをいつも展開する 実装 (Implementation): 縁 (fringe) = LIFO キュー (LIFO queue, i.e., put successors at front)

深さ優先探索 (Depth first search) 木の最も深いレベルのノードの一つをいつも展開する 実装 (Implementation): 縁 (fringe) = LIFO キュー (LIFO queue, i.e., put successors at front)

深さ優先探索 (Depth first search) 木の最も深いレベルのノードの一つをいつも展開する 実装 (Implementation): 縁 (fringe) = LIFO キュー (LIFO queue, i.e., put successors at front)

深さ優先探索 (Depth first search) 木の最も深いレベルのノードの一つをいつも展開する 実装 (Implementation): 縁 (fringe) = LIFO キュー (LIFO queue, i.e., put successors at front)

深さ優先探索 (Depth first search) 木の最も深いレベルのノードの一つをいつも展開する 実装 (Implementation): 縁 (fringe) = LIFO キュー (LIFO queue, i.e., put successors at front)

深さ優先探索 (Depth first search) 木の最も深いレベルのノードの一つをいつも展開する 実装 (Implementation): 縁 (fringe) = LIFO キュー (LIFO queue, i.e., put successors at front)

深さ優先探索 (Depth first search) 木の最も深いレベルのノードの一つをいつも展開する 実装 (Implementation): 縁 (fringe) = LIFO キュー (LIFO queue, i.e., put successors at front)

深さ優先探索 (Depth first search) 木の最も深いレベルのノードの一つをいつも展開する 実装 (Implementation): 縁 (fringe) = LIFO キュー (LIFO queue, i.e., put successors at front)

深さ優先探索 (Depth first search) 木の最も深いレベルのノードの一つをいつも展開する 実装 (Implementation): 縁 (fringe) = LIFO キュー (LIFO queue, i.e., put successors at front)

深さ優先探索の尺度 (Properties of depth-first search) 完全性? No: fails in infinite-depth spaces, spaces with loops Modify to avoid repeated states along path complete in finite spaces 時間? O(b m ): terrible if m is much larger than d but if solutions are dense, may be much faster than breadth-first 空間? O(bm), i.e., linear space! 最適? No

深さ制限探索 (Depth-limited search) = depth-first search with depth limit l, i.e., nodes at depth l have no successors Recursive implementation:

深さ制限探索 深さ優先探索の欠点を補うために, 探索の深さに一定の制限を置く方法. 深さの限界は, ある場合には, 問題の知識に基づいて選ぶことが出来る. たとえば, ルーマニアの地図では,20 都市しかないので, もし解があれば, それは最長でも長さが 19 でなければならない. 深さ制限探索は, つぎの反復深化探索で, 繰り返し利用される. 深さ制限探索では 最後のノードを展開して それが解でなかったら 探索は失敗する. そのため 時間計算量は 幅優先探索の時間計算量 +1 である.

反復深化探索 反復深化探索は, 最初は深さ 0, 次に深さ 1, さらに深さ 2, というようにすべての可能な深さを試すことによって, 最良の深さ制限を選ぶ問題を避ける戦略である. 反復深化探索は, 幅優先探索と同じように, 最適で完全であり, かつ, 深さ優先探索と同様のメモリの消費量である. 反復深化探索の時間計算量は, 分岐度 b が 10 のとき, 幅優先探索より 11% 多いだけである. 分岐度が 2 のときでも, 約 2 倍である.

反復深化探索 (Iterative deepening search)

反復深化探索 (Iterative deepening search) l =0

反復深化探索 (Iterative deepening search) l =1

反復深化探索 (Iterative deepening search) l =2

反復深化探索 (Iterative deepening search) l =3

反復深化探索 (Iterative deepening search) Number of nodes generated in a depth-limited search to depth d with branching factor b: N DLS = b 0 + b 1 + b 2 + + b d-2 + b d-1 + b d Number of nodes generated in an iterative deepening search to depth d with branching factor b: N IDS = (d+1)b 0 + d b^1 + (d-1)b^2 + + 3b d-2 +2b d-1 + 1b d For b = 10, d = 5, N DLS = 1 + 10 + 100 + 1,000 + 10,000 + 100,000 = 111,111 N IDS = 6 + 50 + 400 + 3,000 + 20,000 + 100,000 = 123,456

反復深化探索の性質 (Properties of iterative deepening search) 完全 (Complete)? Yes 時間計算量 (Time)? (d+1)b 0 + d b 1 + (d- 1)b 2 + + b d = O(b d ) メモリ計算量 (Space)? O(bd) 最適 (Optimal)? Yes, if step cost = 1

繰り返し状態の回避 複数の経路を通して, ある状態に到達できるとき, 同じ状態を繰り返し展開してしまうのを防ぎたい. 繰り返し展開を防ぐ 3 つの方法 : 親ノードに戻らない. ルートノードからの経路上のノードに戻らない. 以前に生成したどんなノードにも戻らない. A B C D A B B C C C C

探索戦略の比較 (Comparison of algorithms)

グラフ探索アルゴリズム (Graph search)

まとめ 問題解決エージェントは, ゴールが与えられて, そのゴールに至る解を探索する. はじめに, ゴールを定式化し, つぎに, 問題の定式化を行う. 問題は, 初期状態, オペレータ, ゴール検査, 経路コストから成り立つ. 探索アルゴリズムは, 完全性, 最適性, 時間計算量および空間計算量の基準で判断される. 計算量は, 状態空間の分岐度 b と最も浅い解の深さ d に依存する.

まとめ ( つづき ) 幅優先探索は, 探索木の浅いノード順に展開する. それは, 完全で,( 通常 ) 最適であるが, 時間, 空間計算量は, 膨大である. 深さ優先探索は, 探索木の最も深いノードを最初に展開する. それは, 完全でも最適でもない. 時間計算量は膨大であるが, 空間計算量は小さい. 深さ制限探索は, 深さ優先探索での深さの限界を設ける. 反復深化探索は, ゴールが見つかるまで限界を増やしながら深さ制限探索を呼び出す. それは, 幅優先探索と深さ優先探索の長所を併せ持つ.