140 likes | 226 Views
人工知能 計画 Lecture 11. 場所を指定した 積み木. ロボットアームが箱を積み替えるオペレータ 机 α の 上から箱を持ち上げる: PICKUP ( x,α ) 机 α の 上に箱を置く:上の逆= PICKUP -1 ( x,α ) 別 に名前をつけても良い ( 例 ) PUTDOWN( x,α ) 箱 y の上に箱 x を置く: PUTON( x,y ) 箱の y 上から箱 x を持ち上げる: PUTON -1 ( x,y ) 別に名前をつけても良い ( 例 )TAKEOFF( x,y ) 順序が大事:前提条件が満たされていなくては適用できないオペレータ.
E N D
場所を指定した積み木 • ロボットアームが箱を積み替えるオペレータ • 机αの上から箱を持ち上げる:PICKUP(x,α) • 机αの上に箱を置く:上の逆=PICKUP-1(x,α) 別に名前をつけても良い(例)PUTDOWN(x,α) • 箱yの上に箱xを置く:PUTON(x,y) 箱のy上から箱xを持ち上げる: PUTON-1(x,y) 別に名前をつけても良い(例)TAKEOFF(x,y) • 順序が大事:前提条件が満たされていなくては適用できないオペレータ
初期状態→(オペレータ)→目標状態 初期状態: 目標状態 ONTABLE(A,1)ON(B,C) ONTABLE(C,2)ONTABLE(A,1) ON(B,A)ONTABLE(C,2) EMPTYEMPTY B B A C A C 12 12
状態(state)の定義 • 箱xが机αの上にある ONTABLE(x,α) • 箱xが箱yの上にある ON(x,y) • 箱xの上は何もない CLEAR (x) • ロボットアームは何も持っていない EMPTY • ロボットアームは箱xを持っている HOLD(x)
必要なoperatorsを定義する • PUTON(x,y):xをyの上に置く • TAKEOFF(x,y):yの上にあるxを掴む • PUTDOWN(x,α):xをテーブルαの上に置く • PICKUP(x,α):テーブルαの上にあるxを掴む
各operatorに対するpc,D,Aで定義 • pc:Prerequisite condition前提条件 そのoperatorを適用できる条件 • D:削除delete状態リスト そのoperatorを適用後に削除される状態 • A:追加add状態リスト そのoperatorを適用後に追加される状態
各operatorの前提条件,削除/追加リスト • PUTON(x,y):xをyの上に載せる 前提条件:HOLD(x),CLEAR(y):yの上が空きxを保持 削除リスト:HOLD(x),CLEAR(y):yの上は詰まり,手は空 追加リスト:ON(x,y),CLEAR(x),EMPTY:yにxが載り,上は空、手は空 • TAKEOFF(x,y):yの上からxを除去 前提条件: ON(x,y),CLEAR(x),EMPTY:xがyに載り,その上は空き,手は空 削除リスト: ON(x,y),CLEAR(x),EMPTY: 追加リスト:HOLD(x),CLEAR(y):xを保持し、yの上は空
各operatorの前提条件,削除/追加リスト • PUTDOWN(x,α):xをテーブルαに置く P&D:HOLD(x) A:ONTABLE(x,α),CLEAR(x),EMPTY • PICKUP(x,α):テーブルαにあるxを拾う P&D: ONTABLE(x,α),CLEAR(x),EMPTY A: HOLD(x)
オペレータ(operator)の定義 • PICKUP(x,α): <P&D>:ONTABLE(x,α),CLEAR(x),EMPTY <A>: HOLD(x) • PUTON(x,α): <P&D>:HOLD(x) <A>:ONTABLE(x,α),CLEAR(x),EMPTY • PUTON(x,y): <P&D>: HOLD(x), CLEAR(y) <A>:ON(x,y),CLEAR(x),EMPTY • TAKEOFF(x,y): <P&D>: ON(x,y), CLEAR(x),EMPTY <A>:HOLD(x), CLEAR(y)
一般的な問題解決法 • 目標状態の状態記述のうちで、初期状態によって達成されていない命題はどれかを探し • それを一つ達成する という操作を繰り返す。 命題Cを達成するには、 Cを追加リストとするオペレータOを求める。そのオペレータの前提条件が初期条件によって満たされているかを調べ、満たされていればOを適用。満たされていなければそれを満たすのに必要な命題を達成することを目標にする
Local planning function LocalPlanning(S,G) 1.LOOP1: if satisfy G exit (S); 2.Sによって満たされないGの命題をgoal-listに入 3.LOOP2: if empty(goal-list) return(fail); 4.C=first(goal-list); remove(C,goal-list); Cを達成するオペレータを全て求めoplistに入 5.LOOP3:if empty (oplist) goto LOOP2 6.operator=first(oplist); remove(operator,oplist); if not applicable(operator), goto LOOP3 7.Gからoperatorの追加リストを除き、前提条件を加えた状態をG1とする 8.G2= LocalPlanning(S,G1) 9.if G2=fail, goto LOOP3 10. S=operator(S) 11. Goto LOOP1
LOOP1の最初のタスク: 1. SはGを満たさないので次へ行く 2. ON(B,C)をgoal-listに入れる (LOOP2へ) 3. goal-listはEMPTYでない 4.T=ON(B,C) としてgoal-listから外す Tを達成するオペレータを全て求め、oplistに入れる>>PUTON(B,C)をoplistへ (LOOP3へ) 5. oplistはemptyではない 6. operator= PUTON(B,C),適用可能なら次へ,oplistが空ならLOOP2へ 7. GからPUTON(B,C)の追加リストを除き、前提条件HOLD(B);CLEAR(C)を加えた状態をG1として、LocalPlanning(S,G1)を解く (LOOP1の次のタスク)
Loop1の次のタスク: 2.HOLD(B);CLEAR(C)をgoal-listへ 4.goal-listを達成するのに必要なオペレータをoplistへ;これらはHOLD(B);CLEAR(C)を追加条件とするTAKEOFF(B,x)またはPICKUP(x,α)である 6. operator= TAKEOFF(B,x)); remove(TAKEOFF(B,x),oplist); 7. HOLD(B) はG1から除かれ、代わりにG1にTAKEOFF(B,x)の前提条件であるON(B,x),CLEAR(B),EMPTYを入れてG2とし LocalPlanning(S,G2)を解く x=Aならg2はSに一致し ここで終了.
注意 ONTABLE(A,1) ONTABLE(C,2) は初期状態S,終状態Gの両方にあるのでそのまま