Database Reference
In-Depth Information
Tisch.
block
und
lasttime
werden ebenso wie die Konstante
grippers
,diedie
Anzahl der Greifarme festlegt, im Programmteil in Abbildung 11.19 definiert. Dabei
ist
block(1..6).
als eine Abkurzung fur die sechs Regeln
block(1).
,
block(2).
,
block(3).
,
block(4).
,
block(5).
,
block(6).
zu verstehen; entsprechendes gilt
fur die Regel
time(0..lasttime).
in Abbildung 11.17.
Die Regel unter
GENERATE
in Abbildung 11.17 verwendet die in Abschnitt 11.8.1
skizzierten
SMODELS
-Sprachelemente und spezifiziert Antwortmengen der Form
{
move
(
B
1
,
L
1
,
T
),...,
move
(
B
n
,
L
n
,
T
)
}
wobei die Anzahl der enthaltenen
move
-Atome durch die Konstante
grippers
nach
oben beschrankt ist. Dabei muss
B
i
ein Block,
L
i
eine Ortsangabe und
T
eine Zahl
kleiner als
lasttime
sein. Diese Regel spezifiziert eine mogliche Losung als eine be-
liebige Menge von
move
-Aktionen, die vor
lasttime
ausgefuhrt werden, so dass fur
jeden Zeitpunkt
T
die Anzahl der
move
-Aktionen zu diesem Zeitpunkt die Anzahl der
vorhandenen Greifarme nicht ubersteigt. Eine Literalmenge S,diedie
GENERATE
-
Regel erfullt, konnte z.B. die Literale
move(3,5,0)
und
move(1,table,0)
ent-
halten. Enthielte S jedoch noch zusatzlich das Literal
move(5,table,0)
,ware das
Kardinalitatskriterium wegen
grippers
=
2
verletzt.
Wahrend die bereits vorgestellten sechs
DEFINE
-Regeln in Abbildung 11.19 die
initialen Positionen aller Blocke zum Zeitpunkt
0
wiedergeben, beschreiben die drei
Regeln unterhalb von
DEFINE
in Abbildung 11.17 die Zustande, die der Ausfuhrung
eines potentiellen Plans entsprechen.
Die ersten beiden
DEFINE
-Regeln in Abbildung 11.17 spezifizieren die positiven
on
-Literale, die die Positionen aller Blocke zum Zeitpunkt
T+1
in Relation zu ihrer
Position zum Zeitpunkt
T
beschreiben. Enthalt beispielsweise eine Literalmenge S
die Literale
move(3,5,0)
,
block(3)
,
location(5)
und
time(0)
,somussS auch
% TEST
% zwei verschiedene Blocke konnen nicht auf demselben Block sein
:- 2
{
on(B1,B,T) : block(B1)
}
,
block(B), time(T).
% ein Block, der nicht frei ist, kann nicht bewegt werden
:- move(B,L,T), on(B1,B,T),
block(B), block(B1), location(L), time(T), T < lasttime.
% ein Block kann nicht auf einen Block gestellt werden, der
% zur gleichen Zeit bewegt wird
:- move(B,B1,T), move(B1,L,T),
block(B), block(B1), location(L), time(T), T < lasttime.
% DISPLAY
hide.
show move(B,L,T).
Abbildung 11.18
Planen mit
SMODELS
, Teil 2 (nach [140])