知能型システム論 -...
TRANSCRIPT
知能型システム論
前回の復習【1】知能システムのモデル化【1】知能システムのモデル化知能=知識+推論プログラム=データ構造+アルゴリズム【2】状態空間の探索による問題解決【 】状態空間の探索による問題解決状態空間=節点:問題の状態+枝:オペレータ(I)系統的な探索
1.縦型探索2.横型探索
(II) 適解の探索1.g(n)を使ったoptimal search2.h(n)を使ったbest first search3.f(n)=g(n)+h(n)を使ったA*アルゴリズム
【3】ゲームの木の探索探索1.Min-Max探索
2.αβ探索【4】AND-ORグラフの探索
戦略(ストラテジー) メタレベルのアルゴリズム 分割統治法
問題の分割による解法
戦略(ストラテジ ) メタレ ルのアルゴリズム 分割統治法
文脈自由型文法 (Context Free Grammar)クイックソート具体的なアルゴリズム
文法規則
SR1AND-ORグラフ
R1 S → SUB PREDR2 SUB → PRON(代名詞)
文法規則 (SUB PRED)
PREDAND
R2 SUB → PRON(代名詞)R3 SUB → NP(名詞句)R4 PRED → V NP
PRED
(VNP)R4SUB
R5 NP → DET NR6 PRON → HeR7 V → saw
R2 NPR5(DET N)R8 DET → a
R9 N → dogR10 N → cat
PRON V
(DET N)
NDETR10 N cat
R6
He saw
R7 R8 R9
a dog|…OR N → dog | cat
AND/ORグラフで表現される問題を解くということは、AND/ORグラフの中に含まれる解グラフを探すということである。 S
前ページのスライドの文法によって定義される
AND/ORグラフということである。 SR1
(SUB PRED)AND節点
AND/ORグラフ
(SUB PRED)
PRED
AND同節点
“He saw a dog”が目標として
与えられた時の解グラフ PRED
(V NP)R4
SUBOR
与えられた時の解グラ
(V NP)
R2 NPNPR3
R5(DET N)(DET N)
R5
PRON
R6V
R7
NDET
R8 R9
N
R8 R9
DET
R10 R10
He saw a dog cata dog cat
AND-ORグラフの例(連立方程式)0),...,,( 211 =nxxxf0),...,,(
), ,,(
212
211
=n
n
xxxff
L
0),...,,( 21 =nm xxxf
0),...,,( 211 =nxxxf 0),...,,( 212 =nxxxf 0),...,,( 21 =nm xxxf・・・
0),...,,(),...,,(),...,,( 21221222121 =k xxxfxxxfxxxf L
| |), ,,( 211 nf ), ,,( 212 nf ), ,,( 21 nmf
0),...,,(),...,,(),...,,( 21221222121 2 nknn xxxfxxxfxxxf
0),...,,( 2121 =nxxxf 0),...,,( 212 2=nk xxxf 0),...,,( 2122 =nxxxf・・・
| || |
012 1 =+x
形式言語理論正規文法(有限状態オ ト ト )• 正規文法(有限状態オートマトン)
【右線形文法】 は終端記号)は非終端記号、 ( xBAxBA→ ,は終端記号) (xxA→
きない)は正規文法では生成で( )1( ≥nba nn
• 文脈自由文法
【Chomsky標準形】 は非終端記号)( CBABCA→
きない)は正規文法では生成で( )1( ≥nba
【Chomsky標準形】
は終端記号) (
は非終端記号) (
xxACBABCA
→
→ ,,
• 文脈依存文法
成できない)は文脈自由文法では生( )0( >ncba nnn
個以上の並びは非終端 終端記号のは非終端記号(
0βααγββα
AA →
個以上の並び)は非終端、終端記号の
個以上の並び、は非終端、終端記号のは非終端記号、(
10,
γβαA
【レポート課題8】【レポ ト課題 】数式の構造を表す文法(問題の分割法を表す規則)R1: <算術式>::= <項> | <算術式> <加減演算子> <項>R2: <変数>::=A | B |・・・| ZR3: <項>::<因子> | <項> <乗除演算子> <因子>R4: <加減演算子> ::= + |R4: <加減演算子> ::= + | -R5: <因子>::= <変数> | (<算術式>)R6: <乗除演算子> ::= * | /6: 乗除演算子 :: | /をとする。・上記の文法によって表される状態空間をAND-ORグラフとして描きなさ描きなさい。
・算術式 (A + B/C)*(D-E) を表す解木(木の葉接点を左から右へ走査したとき この算術式が得られるような解木)をへ走査したとき、この算術式が得られるような解木)をdepth-first-and-or探索によって求めなさい。
・上記の文法では、‘-’は減算演算子として定義されている。記 文法 は、 は減算演算子 し 定義され る。‘~’を負の数を表す記号として導入し、文法を拡張しなさい。
AND/ORグラフの性質と解グラフの性質を整理するとAND/ORグラフの性質と解グラフの性質を整理すると….
1. 終端節点は解決されている節点である
2. ある節点の子節点がAND節点の場合は、そのすべてのAND節点が解決されていれば、その節点も解決てのAND節点が解決されていれば、その節点も解決されている。
3 ある節点の子節点がOR節点の場合は そのOR節点3. ある節点の子節点がOR節点の場合は、そのOR節点のいずれか一つでも解決されていれば、その節点も解決されている。解決
4. 解グラフは、問題のAND/ORグラフの一部であり、出発節点を含み、どの節点もOR節点への枝を2本以上発節点を含み、どの節点もOR節点 の枝を2本以上持たず、すべての節点が解決されているAND/ORグラフである。
問題AがBとCに分解しても解かれてもよく、またDを解くことによっても解かれることを示している。
(b)(a) (c)
成形
AAA E
成形
M DC DB C DB
CB
ANDとORが混在する場合は、補助節点を設けることによって、子節点にAND節点とOR節点が混在しないAND/ORグラフに変換できる。
⇒ (b)の場合:ただし、コストを問題とする場合には、節点AからMへ向かう枝のコストはAをBとCに分解するコストとしなければならない。
(c)の場合:AND/ORグラフの節点は、ある親節点のAND節点であり、時に別の親節点のOR節点となることがある。
AND/ORグラフの探索
AND/ORグラフの解グラフは それ自身グラフであるAND/ORグラフの解グラフは、それ自身グラフである。探索によって解グラフを求める過程は、解グラフをしだいに成長させてゆくことに相当する。
未解決グラフ(partial solution graph)
探索の途中では、解グラフの候補の一部しか求められていない。真に解グラフの一部となるかどうか解らないためこう呼ぶことにする。真に解グラフの 部となるかどうか解らないため う呼ぶ とにする。
(a)未解決グラフの評価と展開
1 未解決グラフの節点が解決されているか 解決不可能か それともいず1. 未解決グラフの節点が解決されているか、解決不可能か、それともいずれとも断定できないかを決める。必要があれば節点のコストを求める。
(i) (ii)
Sunsolved Ssolved
Aunsolved Asolved
CBsolved unsolved CBsolved solved
Sがsolvedとなれば解グラフとなるSがunsolvedとなれば解グラフとなりえない
solved unsolved solved solved
1. 節点のコストを求める。
(b)未解決グラフの評価と展開
未解決グラフの端点のコストを用いてすべての節点のコストをつぎのように求めていく。
AND節点の親節点のコスト; すべての子節点のコストから下記の式によって計算する。式によ て計算する。
f ( n ) = max{ f ( n1 ), f ( n2 ),…., f ( nm )} ;全子供の も難しいものをとる
f ( n ) = f ( n1) + f ( n2 ) +….+ f ( nm ) ;全子供の総和
OR節点の親節点のコスト; OR節点のコストと枝のコストの和。
n )(nf
n2n1 nm….)( 1nf )( mnf
2 未解決グラフを展開して成長させる。
(c)未解決グラフの評価と展開
2. 未解決グラフを展開して成長させる。
p p p
n
(i) (ii)
n n
n2n1 n1 n2
(i) AND節点の時 (ii) OR節点の時
nにすべての子節点を加えて新しい未解決グラフを生成する。
nにそれぞれの子節点を1個だけ加えた未解決グラフを子節点の数だけ生成する。子節点の数だけ 成する。
AND/ORグラフの縦型探索AND/ORグラフの縦型探索
procedure depth-first-and-or
出発節点だけからなる未解決グラフを open に入れる。
LOOP: if open = 空 then exit ( fail ) ;
も 節 終 ば終もしすべての節点を調べ終わったならば終了し、
探索結果は失敗である
f ( ) の 初の要素(未解決グラフ)を取り出すp : first ( open ) ; open の 初の要素(未解決グラフ)を取り出す
if solved( p ) then exit ( success );
もし が解グラフであれば探索は成功し が解であるもし p が解グラフであれば探索は成功し、 p が解である
remove ( p, open ) ; openから p を取り除く
pを展開し 新しく生成されたすべての未解決グラフを評価し 出発節がpを展開し、新しく生成されたすべての未解決グラフを評価し、出発節がUNSOLVEDでない未解決グラフをopenの先頭に入れる。
goto LOOP
繰り返し回数
Openリスト内の未解決グラフ
1
2
S部分グラフ
2
A
S S
B
SA、SBという部分グラフUNSOLVED SA SB→OPENに入れる
3
A
S S
B
未解決の部分グラフをOPENからとりだす
S
4
C DB
SFailが来るため終了
S
5 SB
B
S
A B
6
BB
E HSS
B
DC E
B
H
BE
t3 t4
Ht1F t4t3Gt2 FailFail
AND/ORグラフの探索、 t1~t4が終端節点
AND/ORグラフの縦型探索の効率的アルゴリズム
先に示したprocedure depth-first-and-orでは、先 p p f 、未解決グラフ p を展開する場合に、 p の端点 n の子節点がAND節点である場合に、すべての子節点を p につけ加えている。
未解決グラフ p を展開する場合に、 p の端点 n の子節点を1つpに付け加えて探索・評価を行い pがunsolvedになったら1つ上の親接点に戻り 他の子接点を探索 評価を行い、pがunsolvedになったら1つ上の親接点に戻り、他の子接点をpに付加してその先の探索・評価を行う。こうすればopenに多くの未解決解グラフを記憶しておく必要がなくなる。
procedure depth-first-and-or-1
出発節点だけからなる未解決グラフ p を作る。n:=S
p を評価する
LOOP: if unsolved ( p ) then exit ( fail ) ;
もしすべての節点を調べ終わったならば終了し、探索結果は失敗である
if solved ( p ) then exit ( success );
もし に クが けられ ればもし n にsolved/unsolvedのマークがつけられていれば
goto EVALUATE
t t hild ( ) Nextchild(n) = n 1 0≦ i < m{nextn: = nextchild ( n )
p に nextn をつけ加え、p を評価する
n: = nextn
Nextchild(n) ni+1 , 0≦ i < mNIL, i = m{
n: = nextn
goto LOOP
EVALUATE: p を評価するEVALUATE: p を評価する
もし n がUNSOLVEDならば、 n を p から切り離す。
n : = n の親節点n : n の親節点
goto LOOP
S
A B
DC E
Ht1F t4t3Gt2 FailFail 1 4t32 FailFailAND/ORグラフの探索、 t1~t4が終端節点
S→A → C→ F→ C→A →S → B→E → t3 → E→ t4
探索の途中でORの節点がUNSOLVED直前の親節点ま もど 別の枝を探索 (後戻り)→直前の親節点までもどって別の枝を探索;(後戻り)
節点を展開してすべての子節点を生成し、それをOPENにリストに蓄える必要がないので節点を展開してすべての子節点を生成し、それをOPENにリストに蓄える必要がないので効率的な処理が実現できる
(c)AND/ORグラフの 適解の探索
AND/ORグラフのOR節点に向かっている枝にコストが定義されてるAND/ORグラフのOR節点に向かっている枝にコストが定義されてる場合、全コストを 小とする解グラフを求める問題を考えてみる。
;節点n のコストの推定値とする)(ˆ nh 未解決グラフのコストの推定かっこの中の数値 ; h)(
もしこのヒューリスティックな関数が与えられていなければ
)(ˆ nh
かっこの中の数値 ;かっこ無しの数値 ;コストの評価値
h
S 6が与えられていなければ→ と同じことである。0)(ˆ ≡nh
0)(h すべての枝のコスト 定 とすれば A 5 B
1 1
0)( ≡nh 、すべての枝のコスト一定、とすればAND/ORグラフの横型探索となる。
)(f 未解決グ ト推定値とする
A 5 B
)(pf ;未解決グラフ p のコスト推定値とするpの端点のコストの推定値を用いてpを評価して得られるコスト推定値
D (2)C (3)
ˆ ˆ
AND節点のコストf ( n ) = f ( n1 ) + f ( n2 ) + …. + f ( nm )
3)( =Ch 2)( =Dh
)(ˆ)(ˆ)(ˆ DhChAh +=ˆˆf ( ) f ( 1 ) f ( 2 ) f ( m )
;OR節点に入る枝のコストはすべて1とする。 1)(ˆ)(ˆ += AhSh6)(ˆ =pfしたがって、
Aアルゴリズムと同様に、 が 小の未解決グラフを展開してゆく。)(ˆ pf
procedure optimal-and-or
出発節点 S だけからなる未解決グラフ p をopenに入れる。 )(ˆ:)(ˆ Shpf =
LOOP: if open = 空 then exit( fail ) ; もしすべての節点を知らべ終わったならば
終了し、探索結果は失敗である
初 要素 未解決グ を取り出すp : first(open) ; openの 初の要素(未解決グラフ)を取り出す
if solved( p ) then exit( success );
もし が解グラフであれば探索は成功し が解であるもし p が解グラフであれば探索は成功し、 p が解である
remove( p, open ) ; openからpを取り除く
pを展開し 新しく生成されたすべての未解決グラフ p を評価し )(ˆ pfpを展開し、新しく生成されたすべての未解決グラフ pi を評価し、
を求め、 pi がUNSOLVEDでなければ open に入れる。OPEN内の未解決グラフを
の小さい順位並べる
)( ipf
f の小さい順位並べる
goto LOOPf
必ずしも 適解を得るとは限らな が もしすべ 節点に対し が成ˆ必ずしも 適解を得るとは限らないが、もしすべての節点に対して、 が成立すれば、必ず 適解を得られることが証明される。枝のコストをすべて0とすれば、将来の探索コストの 小化をはかることになる。
hh ≤
AND/ORグラフの 適解の探索
S (4)
繰り返し回数
Openリスト内の未解決グラフ
1
A (3) B (3)
1
2 S 4 S 4
S(4)p1
p2 p3
D (2)C (3)3
A (3) B(3)
S 6( )C ( )
F (2) G (1) 4
A5(3)C D(2)
p3 p4
I (1)
F (2) G (1)
H (1)B3
S 4
(2)D I(1)
p5 p4
t1 (0) t
5(2)D I(1)
B3S 4D 2
I(1)
B4S 5D 3
I(1)
p4p7p6
(0)t1 (0) t2
6G(1)
S5
B4D 3
I(1)F(2)
I(1)(0)
子節点の生成回数を 小にするためには、展開しようとする未解決グラフの p の節点 n の子
H(1)
B4D 3
G2I(1)
p8 p7 p4
節点がAND節点である場合には、一度にすべ
ての子節点を生成しないで、一個だけ生成して評価すればよい。
S
(d)AND/OR木探索のゲームへの応用
S
MAX
A B
MIN
MAX:AND接点MIN :OR接点
D E FC( 評価値) コストと逆で5 2 1 6
*枝コストはすべて0である。
適な を決定
(←評価値) ; コストと逆で大きいほどよい
適な手を決定・・・・子節点がAND節点であれば、子節点の評価値の 小値をその節点の値とする。子節点がOR節点であれば、子節点の評価値の 大値をその節点の値とする。
青の解木での節点nの値をf(n)とすれば、f( A ) = 2, f( S ) = 2
もう一つの黒の解木で、その値は1である→したがってf( A ) = 2が 適解
ゲームの木の探索にもAND/ORグラフの適解の探索法を利用できる
終点以外は が与えられていない。適解( 大評価値)を得るためには が成立しなければならない。
)ˆ(ˆ fh =)()(ˆ nfnf ≥
ˆ
適解の探索法を利用できる
【参考】コストを 小とする場合、 であったことに注意しよう。
したがって、端点の値が得られていなければ….
)()( ff)()(ˆ nhnh ≤
したが て、端点の値が得られて なければ未解決木の値の推定値は無限大である。
未解決木の非終端節点を展開する場合…節点が 節点 あれば ず くも す子節点がAND節点であれば、ひとつずつ展開していくものとする。
n1 ; 節点 n の 初の子節点(AND節点)とし、f(n1)の値が求まった時点でnはMINなので、f( 1)
となることから、)()( 1nfnf ≤
。の推定値が更新されるとnnfnf )()(ˆ1= 。推 値 新ff )()( 1
このように、探索の途中で を計算して更新してゆくのである。【後に詳述】f
探索の原理は ti l d と同様に 常に 大の推定値を持つ未解決木を探索の原理は… optimal-and-orと同様に、常に 大の推定値を持つ未解決木をopenから取り出して展開していく。
ゲームのAND/OR木の 適解を得る場合には…解を解木の形で求める代わりに、解木の値を与える終端節点だけを求めてもよい。(終節点がわかれば それを逆にたどって出発節点に達することができるため)(終節点がわかれば、それを逆にたどって出発節点に達することができるため)(n,s,v) 接点nの状態の表現s; SOLVEDかLIVEかをあらわすv; s がSOLVEDならf( n ) LIVEなら を表すものとする)(ˆ nfv; s がSOLVEDならf( n ) 、 LIVEなら を表すものとするSOLVED; 探索している節点 n の値が決まれば n につける
LIVE; SOLVEDでない節点につける
)(nf
procedure game tree searchprocedure game-tree-search
1 putopen( S, LIVE,∞ ) ; 初期設定
2 LOOP if 空 th it( f il )2 LOOP: if open = 空 then exit( fail ) ; もしすべての節点を知らべ終わったならば終了し、探索結果は失敗である
3 n : first( open ) ; openの 初の要素(未解決グラフ)を取り出す3 n : first( open ) ; openの 初の要素(未解決グラフ)を取り出す
4 if ( n=S solved( n ) then exit( success );
5 remove(n open) ; openから n を取り除く
∧5 remove(n,open) ; openから n を取り除く
6 AND/OR木における n の位置と n の状態に応じて、表4.3に示す処理を行う。open 内の節点を の大きい順に並べる。 が同じ場合は、SOLVEDの節f fopen 内の節点を の大きい順に並 る。 が同じ場合は、SOLVEDの節点を優先する
goto LOOP
f f
game - tree - searchparent( n ) ; n の親節点 親接点
type( n ) ; n がAND節点(MAX)かOR節点(MIN)かを求めるterminal ( n ) ; n が終端節点であるかどうかを求めるputopen( n, s, v ) ;節点 n をopenに入れる
子接点
番号 nの条件 処理手続き
1 s=LIVE nのすべての子節点 ni に対して、
p p ( , , ) ;節点 を p に入れる
type( n )=ANDnot terminal( n )
のす ての子節点 i に対して、
putopen(ni , LIVE, ))(ˆ nf
2 s=LIVEtype( n )=OR
t t i l( )
nextn:= nextchild( n )if nextn = NIL then putopen(n, SOLVED, f( n ))l t ( t LIVE ))(fnot terminal( n ) else putopen(nextn, LIVE, )
3 s=LIVEterminal( n )
putopen(n, SOLVED, ))(nf
))(),(ˆmin( nfnfterminal( n )
4 s=SOLVEDtype( n )=AND
putopen(parent( n ), LIVE, ))(ˆ nfyp ( )
5 s=SOLVEDtype( n )=OR
m=parent( n ). open内にあるmの子孫節点をすべて取り除く
putopen(m, SOLVED, ))(ˆ nf
ゲームのAND/OR木の 適解の探索
0
1 2 3
6 7 94 10 125 8 11
151413 16 17 18 22 23 2419 20 21 28 29 30
6 83
25 26 27X X X X X X X X X X X X X X X X
34 3 2 6 5 4 3 64 2 3
↑ (評価値)
4 6 83 5 5
X :アルファ・ベ タ法で表される終端節点: 適解探索を行った枝 X :アルファ・ベータ法で表される終端節点: 適解:探索を行った枝
AND = MAX OR = MINSOLVEDLIVE
ゲームのAND/OR木の 適解を得る順序
順番 適用した処理の番号
open リスト
(出発節点は0 SOLVEはS LIVEはLで表理の番号 (出発節点は0, SOLVEはS, LIVEはLで表す)
1 (0 L )∞2 1 (1 L ), (2 L ), (3 L )3 2 (4 L ), (2 L ), (3 L )
∞∞ ∞ ∞
∞ ∞
4 1 (13 L ), (14 L ), (2 L ), (3 L )5 3 (14 L ), (2 L ), (3 L ), (13 S 4 )6 3 (2 ) (3 ) (13 S 4 ) (14 S 3 )
∞ ∞∞∞ ∞ ∞
∞
6 3 (2 L ), (3 L ), (13 S 4 ), (14 S 3 )∞ ∞
ゲームのAND/OR木の 適解の探索
•AND-OR木の 適解の探索法はアルファ・ベータ法より効率がよいが…いくつもの解の候補をopenリストに入れておく必要があるいくつもの解の候補をopenリストに入れておく必要がある。
•アルファ・ベータ法は、αとβの値だけを知っていればよいため(深さ優先探索)…計算に必要な記憶容量が少なくて済む計算に必要な記憶容量が少なくて済む。ORの順番を入れ替えて探索しても変わらないので、そのコストを見ながらやると効率がよくなる (optimal search)
【レポート課題9】
プリント図4.10のゲームの木に対して1.αβ法2.AND-OR 適探索法でそれぞれ探索を行い、 適解を求めなさい。