Information Technology Reference
In-Depth Information
de. Das boolesche Flag
fired
wird gesetzt, um anzuzeigen, dass die Regel gefeuert hat.
Die Regelvariable auf der linken Seite der Konsequenz wird auf den Wert der rechten
Seite gesetzt. Danach wird die Methode
checkRule()
aufgerufen, um die Regeln zu
überprüfen, die auf die Variable der Konsequenz zugreifen. Die Methode
checkRule()
der Klasse
Produktionsregel
überprüft jede Klausel, die auf die Regelvariable zu-
greift, welche durch das Feuern geändert wurde. Weil die Regelvariable nun einen Wert
hat, können alle Prämissen auf wahr oder falsch gesetzt werden, die auf sie zurückgegrif-
fen haben und einen nichtdefinierten oder Nullwert hatten. Dies bedeutet, dass die Regeln,
die auf jene Klauseln verwiesen haben, nun als wahr oder falsch eingeschätzt werden
können. Die Methode
display()
der Klasse
Rule
dient zur Darstellung der Regel auf
einer entsprechenden gestalteten Bedieneroberfläche. Dies ermöglicht es dem Anwender,
die boolesche Regelbasis zu untersuchen, um eine Schlussfolgerungskette zu verfolgen.
Die Rückwärtsverkettung erfolgt in der Methode
backwardChain()
der Klasse
BooleanRuleSet
, indem diese lediglich einen einzelnen Parameter in Form eines
Strings, der den Namen der Zielvariablen aufnimmt, übergeben werden muss. Mit diesem
Namen wird die Instanz der Regelvariablen des Ziels abgerufen. Alle Klauseln, die auf
die Regelvariable zugreifen, werden nummeriert. Für die Verarbeitung der Objekte aller
Klauseln wird das Konstrukt einer while-Schleife gewählt. Wenn die einzelne Klausel
keine Konklusion darstellt, wird sie einfach ignoriert und die Schleife fortgesetzt, um die
nächste Zielklausel (
goalClause
) zu untersuchen. Wenn sie hingegen Konklusion ist,
wird sie in den
goalClauseStack
übertragen. Damit erhält man einen Verweis auf die
Regel, die diese Klausel als Konklusion aufweist. Daran anschließend wird die Methode
backChain()
der Klasse
Rule
auf diese Regel angewendet, um zu sehen, ob sie wahr
ist oder nicht. Die Methode
backChain()
ruft, sofern nötig, rekursiv
backward-
Chain()
auf, um eine Schlussfolgerungskette durch die Regelbasis zu verfolgen und um
damit herauszufinden, ob die ursprüngliche Zielklausel wahr oder falsch ist. Die Methode
backChain()
gibt dann den Wahrheitswert der Regel zurück. Dabei gilt:
• Wenn der Wahrheitswert der Regel null ist, kann nicht festgestellt werden, ob die aktu-
elle Zielklausel wahr ist oder nicht. Entweder ist die Regelbasis nicht vollständig oder
der Anwender hat einen ungültigen Wert eingegeben, als er um eine Eingabe gebeten
wurde.
• Wenn sich die Regel als wahr herausstellt, feuert sie, indem die aktuelle Zielvariable
auf den Wert der rechten Seite der Zielklausel gesetzt wird. Dabei wird der Variablen
ein Verweis hinzugefügt, um ihr zu zeigen, welche Regel ihren Wert ergeben hat. Da-
nach wird die Klausel aus dem
goalClauseStack
entfernt und eine entsprechende
Erfolgsmeldung ausgegeben. Wenn der
goalClauseStack
leer ist, ist die Rück-
wärtsverkettung abgeschlossen, also wird auch in diesem Fall eine Erfolgsmeldung
ausgegeben und danach die Schleife abgebrochen.
• Wenn die Regel falsch war, wird die Zielklausel aus dem
goalClauseStack
ent-
fernt, eine Fehlermeldung ausgegeben und die while-Schleife mit der nächsten Ziel-
klausel fortgesetzt.