Information Technology Reference
In-Depth Information
die Methode den Vektor
conflictRuleSet
fest. Die Methode
match()
wird mit
einem booleschen Wahrheitsparameter aufgerufen, um eine anfängliche Überprüfung aller
Regeln der Regelbasis herbeizuführen. Das Ergebnis hiervon stellt den Anfangsvektor
conflictRuleSet
dar, der die Regeln anzeigt, die bereit sind zu feuern. Daraufhin
wird in eine
while()
-Schleife gesprungen, die solange andauert, bis die Konfliktmenge
leer ist. Innerhalb der Schleife wird zuerst die Methode
selectRule()
aufgerufen,
der der Vektor
conflictRuleSet
als Parameter übergeben wird. Diese Methode führt
die Konfliktauflösungsstrategie aus und gibt eine einzelne Regel zum Feuern zurück. Da-
bei wird die Methode
fire()
der Klasse
Rule
aufgerufen, um die Schlussfolgerung
durchzuführen und um eine Überprüfung auf alle Klauseln und Regeln vorzunehmen,
die auf die aktualisierte Variable zugreifen. Mit der aktualisierten
variableList
wird
wiederum
match()
aufgerufen, um die Wahrheitswerte zu betrachten und nicht um jede
Regel überprüfen zu müssen. Die Methode
match()
der Klasse
BooleanRuleSet
übernimmt einen einzelnen Parameter und geht die Liste der Variablen durch. Wenn der
Parameter
test
wahr ist, ruft sie die Methode
check()
der Klasse
Rule
auf, um alle
Prämissen der Regel zu überprüfen und die Wahrheitswerte der Regel zu setzen. Wenn
test
jedoch falsch sein sollte, betrachtet
match()
einfach den aktuellen Wahrheits-
wert der Regel. Wenn diese Regel wahr ist und noch nicht gefeuert hat, wird sie dem
Vektor
matchList
hinzugefügt. Andernfalls wird auf die nächste Regel der Regelliste
ruleList
zugegriffen. Um den Ablauf verfolgen zu können, wird die jeweils aktuelle
Konfliktmenge angezeigt. Die Methode
selectRule()
der Klasse
BooleanRule-
Set
übernimmt einen Vektor von Regeln, nämlich die der aktuellen Konfliktmenge, als
Eingabeparameter. Dabei wird als Hauptmethode die Genauigkeit verwendet, das heißt
die Anzahl der Prämissen, um eine zu feuernde Regel auszuwählen. Wenn zwei oder mehr
Regeln gleich viele Prämissen aufweisen, wird die erste Regel ausgewählt. Diese erste
Regel wird demnach in die Liste aufgenommen und als „beste“
bestRule
bezeichnet.
Die Anzahl der Prämissen wird als höchster
max
-Wert festgehalten. In einer
while()
-
Schleife erfolgt die Abarbeitung der restlichen Regeln aus der Konfliktmenge. Wenn dabei
eine Regel entdeckt wird, die mehr Prämissen hat als der vorherige
max
-Wert angibt, wird
diese Regel zur
bestRule
ernannt und die neue Höchstzahl dem
max
-Wert entspre-
chend zugeordnet. Nachdem alle Regeln der Konfliktmenge überprüft wurden, wird die
endgültige
bestRule
zum Feuern zurückgeliefert.
Die Methode
check()
der Klasse
Rule
wird während der Vorwärtsverkettung ver-
wendet, um die Prämissen der einzelnen Regeln zu überprüfen. Wenn eine dieser Prä-
missen einen nicht definierten Wahrheitswert hat, gibt
check()
einen Nullwert zurück.
Wenn eine der Prämissen falsch ist, wird der Wahrheitswert der Regel auf falsch gesetzt
und der entsprechende Wert
false
zurückgegeben. Wenn alle Prämissen wahr sind, wird
der Wahrheitswert der Regel auf wahr gesetzt und der Wert
true
zurückgegeben. In
dieser Implementierungsvariante sind zwischen den Prämissen nur Konjunktionen (
and
)
erlaubt, aber keine Disjunktionen (
or
).
Die Methode
fire()
der Klasse
Rule
wird während der Vorwärtsverkettung ver-
wendet, wenn eine Regel mit einem wahren Wahrheitswert zum Feuern ausgewählt wur-