140 likes | 321 Views
人工知能 計画 Lecture 9. GPS (general problem solver) および 計画. 最も簡単な問題 : 積み木. ロボットアームが箱を積み替えるオペレータ 机の上から箱を持ち上げる: 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)ON(A,C) ONTABLE(C) ON(B,C) B A A C B C
一般的な問題解決法 • 目標状態の状態記述のうちで、初期状態によって達成されていない命題はどれかを探し • それを一つ達成する という操作を繰り返す。 命題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
必要な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を下に置く 前提条件:HOLD(x) 削除リスト:HOLD(x) 追加リスト:ONTABLE(x),CLEAR(x),EMPTY • PICKUP(x):xを拾う 前提条件: ONTABLE(x),CLEAR(x),EMPTY 削除リスト: ONTABLE(x),CLEAR(x),EMPTY 追加リスト: HOLD(x)
最初のタスク: 1. SはGを満たさない 2. ON(A,C)をgoal-listに入れる 3. goal-listはemptyでない 4.T=ON(A,C) としてgoal-listから外す Tを達成するオペレータを全て求め、oplistに入れる>>PUTON(A,C)をoplistへ 5. oplistはemptyではない 6. operator= PUTON(A,C)、適用可能でないLOOP3へ、oplistが空ならLOOP2へ>>fail(????) 7. GからPUTON(A,C)の追加リストを除き、前提条件HOLD(A);CLEAR(C)を加えた状態をG1として、LocalPlanning(S,G1)を解く
次のタスク: 2. HOLD(A);CLEAR(C)をgoal-listへ 4.goal-listを達成するのに必要なオペレータをoplistへ;これらはHOLD(A);CLEAR(C)を追加条件とするTAKEOFF(A,C)またはPICKUP(A)である 6. operator= PICKUP(A); remove(PICKUP(A),oplist); 7. HOLD(A) はG1から除かれ、代わりにG1にONTABLE(A),CLEAR(A),EMPTYを入れて LocalPlanning(S,G1)を解く これを繰り返す
初期状態→(オペレータ)→目標状態 初期状態 S 目標状態 G ONTABLE(A)&&ON(B,C)ON(A,C)&&ONTABLE(C) SからGへは直接行けない ON(A,C)を実行するにはoperatorPUTON(A,C)が必要 PUTON(A,C)の前提条件としてHOLD(A)&&CLEAR(C)が必要。 これらをsubgoal=G1とする。SからG1へは直接行けない。 HOLD(A)の実行にはoperatorPICKUP(A)またはTAKEOFF(A,x)が必要。 CLEAR(C)の実行にはOPERATORTAKEOFF(B,C)が必要。 PICKUP(A)の前提条件としてONTABLE(A)&&CLEAR(A)&&EMPTYが必要。 TAKEOFF(B,C)の前提条件としてON(B,C)&&EMPTY&&CLEAR(B)が必要。 これらは初期条件Sにより満たされているので実行可能。 B A A C C B
ONTABLE(C)は最初からあるので、そのままいじらないONTABLE(C)は最初からあるので、そのままいじらない S → ON(A,C)goallistに S → HOLD(A)&CLEAR(C) S → CLEAR(A)& ONTABLE(A)&EMPTY&CLEAR(C) CLEAR(C)が実現されないので Cの上に載っている物を下ろす S → HOLD(B)&CLEAR(A) &ONTABLE(A)&CLEAR(C) S → EMPTY & CLEAR(A) &ONTABLE(A)&ON(B,C) PUTON(A,C) PICKUP(A) TAKEOFF(A,x) PUTDOWN(y):y=B PUTON(y,z) TAKEOFF(B,C)