Functional Strips
Die flexiblere Planungs-Sprache
23.01.2002 M. Lunzenauer - Functional Strips 2
Einleitung
! Effektives Planen erfordert gute Algorithmen und gute Sprachen.
! Die Sprache beeinflußt, wie man denkt, ja
sogar, was man denken kann. (Worf)
23.01.2002 M. Lunzenauer - Functional Strips 3
STRIPS
! Planen: STRIPS seit Anfang der 70er
! Neuere Erkenntnisse in ‚action
representation‘ und ‚planning algorithms‘
legen nahe, dass alternative Sprachen
Planung und Modellbildung vereinfachen
könnten.
23.01.2002 M. Lunzenauer - Functional Strips 4
Verbesserung = Functional Strips
! Hinzunahme von ‚first-class function symbols‘
! Führt zu zusätzlicher Flexibilität in der
Kodierung von Problemen beim Planen
23.01.2002 M. Lunzenauer - Functional Strips 5
Verbesserung ... - konkreter
! Durch die Verschachtelung von ‚function
symbols‘ braucht man Objekte nicht mehr mit ihrem ‚wahren‘ Namen ansprechen.
! Beim 8-Puzzle führt das zur Reduzierung auf
4 ‚ground actions‘!
23.01.2002 M. Lunzenauer - Functional Strips 6
Verbesserung ... – konkreter II
! Wie performant ein Planer ist, hängt entscheidend ab von:
" ‚branching factor‘
" ‚ground actions‘
! Wichtig: (Fast ?) jeder Planer überprüft alle
‚ground actions‘ auf Anwendbarkeit
23.01.2002 M. Lunzenauer - Functional Strips 7
FS – Ein Beispiel
Türme von Hanoi
23.01.2002 M. Lunzenauer - Functional Strips 8
FS – Ein Beispiel II
! Domains:
" Pegs: p 1 , p 2 , p 3 :die Stäbe
" Disk: d 1 , d 2 , d 3 , d 4 :die Scheiben
" Disk*: Disk, d 0 :die Scheiben und eine
Dummyscheibe d 0
23.01.2002 M. Lunzenauer - Functional Strips 9
FS – Ein Beispiel III
! Fluents:
"
top: Peg # Disk*
:gibt die oberste Scheibe eines Stabes an
"
loc: Disk # Disk*
:liefert die Scheibe unter einer Scheibe
"
size: Disk* # Integer
:repräsentiert die Größe einer Scheibe
23.01.2002 M. Lunzenauer - Functional Strips 10
FS – Ein Beispiel IV
! Action:
" move( p i ; p j : Peg)
: Bewegungen zwischen Stäben
!
Prec:
top(p i ) <> d 0 ; size(top(p i )) < size(top(p j ))
!
Post:
top(p i ) := loc(top(p i ));
loc(top(p i )) := top(p j );
top(p j ):=top(p i )
23.01.2002 M. Lunzenauer - Functional Strips 11
FS – Ein Beispiel V
! Init:
" loc(d 1 )=d 0 ; loc(d 2 )=d 1 ;loc(d 3 )=d 2 ;loc(d 4 )=d 3
" top(p 1 )=d 4 ; top(p 2 )=d 0 ; top(p 3 )=d 0 ;
" size(d 0 )=4; size(d 1 )=3; size(d 2 )=2; size(d 3 )=1;
size(d 4 )=0
23.01.2002 M. Lunzenauer - Functional Strips 12
FS – Ein Beispiel VI
! Goal:
" loc(d 1 )=d 0 ; loc(d 2 )=d 1 ;loc(d 3 )=d 2 ;loc(d 4 )=d 3
" top(p 3 )=d 4
23.01.2002 M. Lunzenauer - Functional Strips 13
Erläuterungen
! Post condition in der Form:
f (t) := w statt ‚ADD‘ und ‚DEL‘
! loc(top(p i )) := top(p j ) bedeutet also
"
loc(d k ) := d l wird wahr, wenn top(p i ) = d k und top(p i ) = d k
beide wahr sind.
! Update: f s a (t s ) = w s
! Offentsichtlich: Beschränkung der ‚ground actions‘
durch Anzahl der Stäbe
23.01.2002 M. Lunzenauer - Functional Strips 14
FS: Sprache
! Es gibt constant, function, relational symbols, jedoch keine Variablen
! fluents werden auf function symbols abgebildet
! Functional Strips sind typisiert (Peg, Disk, Disk*)
23.01.2002 M. Lunzenauer - Functional Strips 15
FS: Operatoren
! Operatoren werden durch ihre Signatur und durch zwei Mengen charakterisiert:
" Pre(op): eine Menge von Formeln
" Post(op): eine Menge von ‚updates‘ der Form:
f(t) := w
Anmerkung: Postconditions interagieren nicht
miteinander!
23.01.2002 M. Lunzenauer - Functional Strips 16
FS: State Model I
! States werden durch Fluents und Konstanten definiert.
! Aus einem state s und einer anwendbaren Action a fliesst s a = next (a, s).
! Nicht veränderte Fluents f sind persistent.
! Veränderte Fluents f bekommen den neuen Wert f s
a.
23.01.2002 M. Lunzenauer - Functional Strips 17
FS: State Model II
! State Model für ein Problem P = {L F , O F , I F , G F }
"
L
Fist die Sprache
"
O
Fsind die Operatoren
"
I
Fist der Initialzustand
"
G
Fist der Zielzustand
23.01.2002 M. Lunzenauer - Functional Strips 18
Gripper - ein weiteres Beispiel
23.01.2002 M. Lunzenauer - Functional Strips 19
Gripper - ein weiteres Beispiel II
! Domains:
" Room: a,b,c .... #die Räume
! Fluents:
" loc: Room #der Raum, wo der Roboter ist
" G: Int #Anzahl Greifer
" B: Room # Int #Anzahl Bälle im Raum
" H: Int #Anzahl der haltenden Bälle
23.01.2002 M. Lunzenauer - Functional Strips 20
Gripper - ein weiteres Beispiel III
! Action:
" move (dest: Room)
!
Prec: -
!
Post: loc := dest
" pick
!
Prec: H < G; B (loc) > 0
!
Post: H:=H+1; B(loc) := B(loc) - 1
23.01.2002 M. Lunzenauer - Functional Strips 21
Gripper - ein weiteres Beispiel IV
! Action:
" drop
!
Prec: H > 0
!