Information Technology Reference
In-Depth Information
zu können. Dazu werden zwei Java-Schnittstellen
Sensor
und
Effector
definiert.
Gleichzeitig werden die Klasse
Clause
durch
SensorClause
und
EffectorClau-
se
erweitert.
Sensor
ist dabei eine Instanz von
SensorClause
und
Effector
eine Instanz
von
EffectorClause
.
SensorClause
gibt eine Anfrage an eine Sensormethode
aus, die durch eine beliebige Klasse definiert ist, welche die Schnittstelle
Sensor
imple-
mentiert und bei der
Rule
registriert.
Rule
sucht während der Laufzeit
sensorName
und ruft die Methode auf dem registrierten Sensorobjekt auf. Bei den Effektoren wird ein
ähnliches Verfahren eingesetzt. Die Schnittstelle
Sensor
besteht aus der einzigen Me-
thode
sensor()
, die drei Parameter benötigt: das Objekt
SensorClause
, das diese
Methode aufgerufen hat, den Namen des Sensors, der verwendet werden soll, und eine
RuleVariable
, in der die Ergebnisse gespeichert werden. Die Methode
sensor()
gibt einen booleschen Wert zurück. Die Klasse
SensorClause
erweitert
Clause
, in-
dem sie ein Objektdatenelement hinzufügt, das die Schnittstelle
Sensor
implementiert
und einen String, der
sensorName
angibt.
SensorClause()
benötigt zwei Parame-
ter: den Namen des zu überprüfenden Sensors und eine
RuleVariable
, die den Wahr-
heitswert enthält. Die Methode
check()
wird von einer Produktionsregel aufgerufen,
um den Wahrheitswert von
SensorClause
auszuwerten.
Die Schnittstelle
Effector
erlaubt den Aufruf einer beliebigen Klasse als Effektor
von einer Regel in einer Produktionsregelbasis. Sie muss die Schnittstelle implementie-
ren, indem sie eine einzelne Methode
effector()
bereitstellt, die auf ein Objekt, den
Namen eines Effektors und einen String als Argumentparameter zurückgreift. Die Klasse
EffectorClause
erweitert
Clause
, indem sie Elemente für die Namen der aufzuru-
fenden Effektoren hinzufügt: ein Datenelement, das einen Verweis auf das Objekt enthält,
das die Methode
effector()
implementiert und einen String von Argumenten. Der
Konstruktor
EffectorClause()
benötigt zwei Parameter: den Namen des aufzuru-
fenden Effektors und das Stringargument. Die Methode
perform()
wird eingesetzt, um
die Methode
effector()
auf dem Objekt aufzurufen, das sich registriert hat, um die
Funktion des Effektors bereitzustellen.
Um Tatsachen repräsentieren zu können, wird eine Klasse namens
Fakt
eingeführt,
deren Konstruktor eine einzige Klausel als Parameter benötigt. Ein Faktum kann die Zu-
weisung eines Wertes zu einer Regelvariablen, ein Sensoren- oder ein Effektorenaufruf
sein. Die Fakten sind als Teil der Produktionsregelbasis zusammen mit den anderen Regeln
definiert. Sie sind in der
Rule
-Klasse registriert. Die Methode
initializeFacts()
wird aufgerufen, um ein einzelnes Faktum zu setzen, bevor ein Schlussfolgerungszyklus
durchgeführt wird.
9.4
Genetische Algorithmen
Im Rahmen der Konzeptionalisierung und Implementierung wurde die Technik des Ge-
netischen Algorithmus eher theoretisch und generisch entwickelt. Im Folgenden werden