planner
Class PlanExecution

java.lang.Object
  |
  +--java.lang.Thread
        |
        +--planner.PlanExecution

public class PlanExecution
extends java.lang.Thread

Klasse deren Objekte die vom Planner generierten Pl?ne ausf?hrt. Die Ausf?hrung des Plans wird mit der run()-Methode gestartet. Die Methoden mySuspend() und myResume() verleihen der PlanExecution eine gewisse Thread-Funktionalit?t. Angehalten wird die PlanExecution jedoch nur zwischen der Ausf?hrung zweier Operatoren, damit eine gewisse Konsistenz im Planbaum und der A_Box zu gew?hrleisten.

Der Planausführer verläßt sich darauf, dass die {knowledge.T_Box} mindestens folgende Konzepte enthält:

Version:
1.7
Author:
Nils Malzahn
See Also:
Planner

Field Summary
protected  A_Box aBox
          Das ist die Referenz auf die lokale A_Box.
protected  java.util.LinkedList alreadyUsed
          Diese Liste ?berpr?ft, ob ein Operator zuvor schon einmal ausgef?hrt wurde.
private static boolean failed
          Konstante, die den Code lesbarer machen soll.
protected  int maxInstances
          Diese Variable gibt an, wieviele Instanzen h?chstens von einem PlanExecution f?r ein evtl.
protected  PlanTree plan
          Das PlanTree-Objekt, auf dem gearbeitet wird.
protected  PlanInformation planInfo
          Das PlanInformation-Objekt auf dem gearbeitet wird.
protected  ShellEvent shellEvent
          Das ShellEvent, dass diese PlanExecution ausl?st, um zu signalisieren, dass sie fertig ist.
protected  ShellEventListener shellEventListener
          Der ShellEventListener, der der Flowcontrol mitteilt, dass ein Event stattfand.
private static boolean success
          Konstante, die den Code lesbarer machen soll.
private  boolean suspended
          Thread-Semaphore für mySuspend()
protected  T_Box tBox
          Referenz auf die T_Box, die der aBox zugrunde liegt.
private  boolean toBeDestroyed
          Thread-Semaphore für myDestroy()
 
Fields inherited from class java.lang.Thread
contextClassLoader, daemon, eetop, group, inheritedAccessControlContext, initial_stack_memory, MAX_PRIORITY, MIN_PRIORITY, name, NORM_PRIORITY, priority, PrivateInfo, single_step, stillborn, stopThreadPermission, target, threadInitNumber, threadQ, values
 
Constructor Summary
PlanExecution(PlanInformation planInfo, int maxInstances)
          Konstruktor der PlanExecution-Klasse, durch die Systemkontrolle aufgerufen wird.
 
Method Summary
protected  boolean execOperator(PlanTree planNode)
          Diese Methode verifiziert zun?chst den Operator im ?bergebene planNode und f?hrt ihn anschließend aus.
protected  boolean execVerifiedOperator(PlanTree planNode)
          Diese Methode f?hrt den bereits verifizierten Operator im PlanNode aus.
Zwischen der Ausf?hrung von zwei Operatoren schaut die Methode nach, ob der Thread angehalten werden soll.

private  void fillABox(Operator op, OperatorCompareKey opkey)
          Diese Methode f?llt die A_Box mit den Ergebnissen der Operatorausf?hrung auf.
 int getMaxInstances()
          Liefert den Wert der Variablen maxInstances zur?ck.
 void myDestroy()
           
 void myResume()
           
 void mySuspend()
           
private  void putIntoABox(PredArgument predArg, Operator op)
          Diese Methode entpackt aus einem PredArgument die Instanz und f?gt sie der aBox hinzu.
private  void revertOpChanges(Operator op)
          Diese Methode soll die durch den ?bergebenen Operator verursachten ?nderungen der A_Box r?ckg?ngig machen.
 void run()
          Diese Methode startet die Planabarbeitung.
protected  java.util.LinkedList selectConcreteRoles(Role r)
          Diese Methode entspricht der Methode selectInstances(Concept).
protected  java.util.LinkedList selectConcreteRoles(Role r, PlanTree pn, Predicate pred)
          Deprecated.  
 java.util.LinkedList selectInstances(Concept c)
          Deprecated.  
 java.util.LinkedList selectInstances(Concept c, PlanTree pn, PredArgument predArg)
          Diese Methode w?hlt aus der A-Box heuristisch Instanzen eines T-Box Konzeptes aus.
private  int setMaxInstances(int maxcount)
          Diese Methode setzt die maximale Anzahl der A-Box-Instanzen desselben Konzepts, die fuer eine Task im Plan in Frage kommen.
 PlanTree setPlan()
          Diese Methode entpackt den PlanTree aus planInfo.
private  boolean verifyPredicate(PlanTree planNode, int depth, Operator op)
          Versucht nichtbelegte Argumente zu belegen.
private  boolean verifyPredicateA1(Predicate pred, PlanTree planNode, int depth, Operator op)
          Diese Methode belegt nicht mit Instanzen versehene PredArgument einstelliger Predicates.
private  boolean verifyPredicateA2(Predicate pred, PlanTree planNode, int depth, Operator op)
          Diese Methode belegt nicht mit Instanzen versehene PredArgument zweistelliger Predicates.
 
Methods inherited from class java.lang.Thread
, activeCount, checkAccess, countStackFrames, currentThread, destroy, dumpStack, enumerate, exit, getContextClassLoader, getName, getPriority, getThreadGroup, init, interrupt, interrupt0, interrupted, isAlive, isDaemon, isInterrupted, isInterrupted, join, join, join, nextThreadNum, registerNatives, resume, resume0, setContextClassLoader, setDaemon, setName, setPriority, setPriority0, sleep, sleep, start, stop, stop, stop0, suspend, suspend0, toString, yield
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

alreadyUsed

protected java.util.LinkedList alreadyUsed
Diese Liste ?berpr?ft, ob ein Operator zuvor schon einmal ausgef?hrt wurde. Wenn ja, dann wird das Ergebnis nicht in die aBox eingetragen. since 1.6

tBox

protected T_Box tBox
Referenz auf die T_Box, die der aBox zugrunde liegt.
Since:
1.3

aBox

protected A_Box aBox
Das ist die Referenz auf die lokale A_Box.
Since:
1.0

maxInstances

protected int maxInstances
Diese Variable gibt an, wieviele Instanzen h?chstens von einem PlanExecution f?r ein evtl. Backtracking nacheinander in Betracht gezogen werden. (Das beeinflusst evtl. das Verhalten der Heuristik in selectInstances(Concept).
See Also:
PlannerTypeC, PlannerTypeA
Since:
1.0

planInfo

protected PlanInformation planInfo
Das PlanInformation-Objekt auf dem gearbeitet wird.
Since:
1.0

plan

protected PlanTree plan
Das PlanTree-Objekt, auf dem gearbeitet wird.
Since:
1.0

success

private static boolean success
Konstante, die den Code lesbarer machen soll. success:=true
Since:
1.2

failed

private static boolean failed
Konstante, die den Code lesbarer machen soll. failed:=false;
Since:
1.2

shellEvent

protected ShellEvent shellEvent
Das ShellEvent, dass diese PlanExecution ausl?st, um zu signalisieren, dass sie fertig ist.

shellEventListener

protected ShellEventListener shellEventListener
Der ShellEventListener, der der Flowcontrol mitteilt, dass ein Event stattfand.

suspended

private boolean suspended
Thread-Semaphore für mySuspend()
Since:
1.7

toBeDestroyed

private boolean toBeDestroyed
Thread-Semaphore für myDestroy()
Since:
1.7
Constructor Detail

PlanExecution

public PlanExecution(PlanInformation planInfo,
                     int maxInstances)
Konstruktor der PlanExecution-Klasse, durch die Systemkontrolle aufgerufen wird. Er initialisiert alle Variablen des Objekts mit den Daten aus der Signatur und dem uebergebenen PlanInformation-Objekt. Da der Planausf?hrer davon ausgeht, dass die vom Planner gelieferten Pl?ne scheitern, setzt er das Flag PlanInformation.planSuccess zun?chst auf false.
Parameters:
planInfo - Das PlanInformation-Objekt welches den auszuf?hrenden Plan enth?lt.
maxInstances - setzt die maximale Anzahl A-Box-Instanzen, die bei der Planausf?hrung ber?cksichtigt werden.
Since:
1.0
Method Detail

selectInstances

public java.util.LinkedList selectInstances(Concept c)
Deprecated.  
Diese Methode w?hlt aus der A-Box heuristisch Instanzen eines T-Box Konzeptes aus. Mit diesen Instanzen kann (iteriert ?ber Backtracking) genau ein Argument eines Vorbedingungspr?dikats belegt werden. Die Methode gibt eine List mit h?chstens maxInstances- vielen Instanzen zur?ck. Darauf verl?sst sich execOperator(PlanTree).

Diese spezielle Heuristik nimmt einfach die ersten maxInstances -vielen Instanzen, die die A-Box zur?ckliefert.

Parameters:
c - das Konzept, dessen Instanzen dazu benutzt werden sollen ein PredArgument zu f?llen.
Returns:
LinkedList von Instance-Objekten, mit LinkedList.size()<maxInstances.
Since:
1.2


selectInstances

public java.util.LinkedList selectInstances(Concept c,
                                            PlanTree pn,
                                            PredArgument predArg)
Diese Methode w?hlt aus der A-Box heuristisch Instanzen eines T-Box Konzeptes aus. Mit diesen Instanzen kann (iteriert ?ber Backtracking) genau ein Argument eines Vorbedingungspr?dikats belegt werden. Die Methode gibt eine List mit h?chstens maxInstances- vielen Instanzen zur?ck. Darauf verl?sst sich execOperator(PlanTree).

Diese spezielle Heuristik nimmt einfach die ersten maxInstances -vielen Instanzen, die die A-Box zur?ckliefert.

Parameters:
c - das Konzept, dessen Instanzen dazu benutzt werden sollen ein PredArgument zu f?llen.
pn - der aktuelle PlanNode, dessen Operator belegt werden soll.
predArg - das PredArgument f?r das die Instanz gew?hlt werden soll.
Returns:
LinkedList von Instance-Objekten, mit LinkedList.size()<maxInstances.
Since:
1.6


setMaxInstances

private int setMaxInstances(int maxcount)
Diese Methode setzt die maximale Anzahl der A-Box-Instanzen desselben Konzepts, die fuer eine Task im Plan in Frage kommen.
Parameters:
maxcount - Maximale Anzahl der Instanzen.
Returns:
int, der die maximale Anzahl angibt.
Since:
Version 1.0

setPlan

public PlanTree setPlan()
Diese Methode entpackt den PlanTree aus planInfo.
Returns:
PlanTree der den Plan repr?sentiert.
Since:
1.0

execOperator

protected boolean execOperator(PlanTree planNode)
                        throws OperatorFailedException,
                               DestroyException
Diese Methode verifiziert zun?chst den Operator im ?bergebene planNode und f?hrt ihn anschließend aus.
Parameters:
planNode - der aktuelle Knoten des PlanTrees, der bearbeitet werden soll.
Returns:
Ob der Plan ausgehend von diesem Operator erfolgreich durchgef?hrt werden konnte.
Since:
Version 1.3

execVerifiedOperator

protected boolean execVerifiedOperator(PlanTree planNode)
                                throws DestroyException,
                                       OperatorFailedException
Diese Methode f?hrt den bereits verifizierten Operator im PlanNode aus.
Zwischen der Ausf?hrung von zwei Operatoren schaut die Methode nach, ob der Thread angehalten werden soll.
Parameters:
planNode - der aktuelle Knoten des PlanTrees, der bearbeitet werden soll.
Returns:
Ob der Plan ausgehend von diesem Operator erfolgreich durchgef?hrt werden konnte.
Since:
Version 1.3


revertOpChanges

private void revertOpChanges(Operator op)
                      throws OperatorNotEvaluatedException
Diese Methode soll die durch den ?bergebenen Operator verursachten ?nderungen der A_Box r?ckg?ngig machen. Das geschieht, indem der Operator alle Instanzen aus der AddList l?scht und alle Instanzen aus der DeleteListe wiederherstellt.
Parameters:
op - der Operator, dessen Folgen r?ckg?ngig gemacht werden sollen.
Since:
1.3

run

public void run()
Diese Methode startet die Planabarbeitung.
Overrides:
run in class java.lang.Thread
Since:
1.4

putIntoABox

private void putIntoABox(PredArgument predArg,
                         Operator op)
Diese Methode entpackt aus einem PredArgument die Instanz und f?gt sie der aBox hinzu. Wenn sich herausstellt, dass das zu behandelnde PredArgument eine Menge von Instanzen des zugeh?rigen Konzepts enth?lt, dann werden die Einzelinstanzen in die A_Box eingetragen.
Parameters:
predArg - das PredArgument, das bearbeitet werden soll.
op - der Operator aus dem das PredArgument stammt.
Since:
1.5

fillABox

private void fillABox(Operator op,
                      OperatorCompareKey opkey)
               throws OperatorNotEvaluatedException
Diese Methode f?llt die A_Box mit den Ergebnissen der Operatorausf?hrung auf. Ausserdem wird hier ein {operators.Operator} ggf. in alreadyUsed eingetragen.
Parameters:
op - der Operator dessen Ergebnis (Nachbedingungspr?dikate) in die A_Box gef?llt werden sollen. Soll durch einen Operator eine Menge von zweistelligen Pr?dikaten in die A_Box eingetragen werden, dann hasolcher {operators.Operator Operatoren} daf?r Sorge zu tragen, dass im ersten und zweiten PredArgument genau gleich viele Eintr?ge in PredArgument.otherInstances stehen, da die beiden PredArguments parallel durchlaufen werden und zwischen beiden Instanzen dann eine Rolleninstanz gebildet wird.
opkey - der zu diesem Operator gehörende OperatorCompareKey
Throws:
OperatorNotEvaluatedException - diese Exception wird dann geworfen, wenn der Operator zum Zeitpunkt des Aufrufs der Methode nicht oder nicht vollst?ndig ausgewertet wurde.
Since:
1.2

verifyPredicate

private boolean verifyPredicate(PlanTree planNode,
                                int depth,
                                Operator op)
                         throws OperatorFailedException,
                                DestroyException
Versucht nichtbelegte Argumente zu belegen. F?r einstellige Pr?dikate -- wie c(x:c) -- wird eine Instanz x des Konzeptes c gesucht, F?r zweistellige Pr?dikate -- wie r(x1: c1, x2:c2) -- werden Instanzen x1, x2 zu Konzepten c1, c2 gesucht, die in der Rollenrelation r stehen. Dabei kann x1 oder x2 schon gegeben sein, so dass nur noch Domain oder Range der {link knowledge.Role Rolle} belegt werden muss. Mehr als zweistellige Pr?dikate kann diese Methode nicht belegen. Auch nullstellige Pr?dikate sind nicht vorgesehen, da beides nicht von der Standard-T- bzw. Standard-A-Box modelliert werden kann.
Parameters:
planNode - der den Operator enth?lt zu dem das Predicate geh?rt.
depth - Damit die Methode nicht endlos versucht den Operator aus dem planNode zu belegen, wird die Anzahl der Belegungsversuche in dieser Variable mitgef?hrt. Die Anzahl entspricht der Rekursionstiefe, daher der Name. zu belegen, weil keine Instanzkombination gefunden werden konnte,
op - der zu überprüfende Operator.
Returns:
success, wenn der Operator belegt werden konnte und der ?bergebene planNode auf einem Weg zum Ziel liegt. Sonst failed.
Since:
1.2

verifyPredicateA1

private boolean verifyPredicateA1(Predicate pred,
                                  PlanTree planNode,
                                  int depth,
                                  Operator op)
                           throws OperatorFailedException,
                                  java.lang.CloneNotSupportedException,
                                  DestroyException
Diese Methode belegt nicht mit Instanzen versehene PredArgument einstelliger Predicates.
Parameters:
pred - das einstellige Predicate, das noch fertig belegt werden muss.
planNode - der planNode wird nur durchgereicht.
depth - siehe verifyPredicate(PlanTree,int,Operator)
op - der Operator, dessen {operators.Predicate} hier belegt wird.
Returns:
success, wenn der Operator belegt werden konnte und der ?bergebene planNode auf einem Weg zum Ziel liegt. Sonst failed.
Throws:
java.lang.CloneNotSupportedException - wird nur weitergereicht
Since:
1.2

verifyPredicateA2

private boolean verifyPredicateA2(Predicate pred,
                                  PlanTree planNode,
                                  int depth,
                                  Operator op)
                           throws OperatorFailedException,
                                  java.lang.CloneNotSupportedException,
                                  DestroyException
Diese Methode belegt nicht mit Instanzen versehene PredArgument zweistelliger Predicates.
Parameters:
pred - das einstellige Predicate, das noch fertig belegt werden muss.
planNode - der den Operator enth?lt, dessen Predicate hier belegt wird. Wird nur durchgereicht.
depth - siehe execOperator(PlanTree)
op - der Operator, der belegt wird.
Returns:
success, wenn der Operator belegt werden konnte.
Throws:
java.lang.CloneNotSupportedException - wird nur weitergereicht und der ?bergebene planNode auf einem Weg zum Ziel liegt. Sonst failed.
Since:
1.2

selectConcreteRoles

protected java.util.LinkedList selectConcreteRoles(Role r)
Diese Methode entspricht der Methode selectInstances(Concept). Sie w?hlt h?chstens maxInstances viele RollenInstanzen nach einer durch diese Methode zu bestimmenden Heuristik aus. Die Standardimplementation w?hlt einfach die ersten maxInstances Rolleninstanzen aus der von A_Box durch A_Box.getConcreteRoles(Role) zur?ckgelieferten Rolleninstanzliste aus.
Parameters:
r - die Rolle zu der die ConcreteRoles ausgew?hlt werden sollen.
Returns:
LinkedList der Rolleninstanzen. Es handelt sich um h?chstens maxInstances-viele.
Since:
1.3

selectConcreteRoles

protected java.util.LinkedList selectConcreteRoles(Role r,
                                                   PlanTree pn,
                                                   Predicate pred)
Deprecated.  
Diese Methode entspricht der Methode selectInstances(Concept). Sie w?hlt h?chstens maxInstances viele RollenInstanzen nach einer durch diese Methode zu bestimmenden Heuristik aus. Die Standardimplementation w?hlt einfach die ersten maxInstances Rolleninstanzen aus der von A_Box durch A_Box.getConcreteRoles(Role) zur?ckgelieferten Rolleninstanzliste aus.
Parameters:
r - die Rolle zu der die Rolleninstanzen ausgew?hlt werden sollen.
pn - der aktuelle PlanNode, dessen Operator belegt werden soll.
pred - das Predicate das belegt werden soll.
Returns:
LinkedList der Rolleninstanzen. Es handelt sich um h?chstens maxInstances-viele.
Since:
1.6

getMaxInstances

public int getMaxInstances()
Liefert den Wert der Variablen maxInstances zur?ck.
Since:
1.0

mySuspend

public void mySuspend()

myResume

public void myResume()

myDestroy

public void myDestroy()