Rubylabor: Schließen mit Regeln |
Schließen mit Regeln
Der Zweck dieses Bespielcodes ist die Demonstration der Verarbeitung von regelbasierten Wissen. Speziell sind dies die folgenden:
- Forward Chaining
- Backward Chaining
Mein Beispielcode
Ich habe das Applet wieder als Commandozeilenprogram umgeschrieben. Ferner habe ich eine Ablaufverfolgung hinzugefügt, die den aktuellen Stand der Regelvariablen und Regeln als Webseite formattiert ausgibt.
Erfahrungen mit Ruby
Der Rubycode erscheint mir wesentlich klarer als der Javacode. Allerdings erkennt man im Vergleich zu einer Lösung in Prolog, das immer noch sehr viel Buchhaltungscode geschrieben wird.
Erfahrungen mit dem Beispiel
Das Orginal Beispiel empfand ich als schwierig nachzuvollziehen. Die Klassen Rulebase, Rule, Clause und RuleVariable arbeiten sehr eng zusammen, so dass man sie einzeln nicht erfassen kann. Zwischen den Klassen gibt es vielfältige Beziehungen, die zum Teil entgegengesetzt der Denkrichtung laufen, weil sie schnellen Updates ermöglichen sollen. Ein Beispiel ist, dass alle RuleVariablen ein Array mit den Clause Objekten besitzen, in denen sie Mitglied sind.
In der Umsetzung fiel mir ein logischer Fehler in der check methode der Klasse Rule auf: False und NIL werden nicht korrekt behandelt, so das je nach Reihenfolge eine Regel als unbestimmt gelten kann, obwohl schon klar ist dass die Regel "falsch" ist. Solche Probleme fallen einem mit Rubycode leichter ins Auge.
Der Code wird demnächst hier veröffentlicht.
Quelle: Joseph P. Bigus, Jennifer Bigus: "Constructing Intelligent Agents Using Java", 1998, Wiley Computer Publishing, Beschreibung bei Wiley
home - contact - dev-zone
Copyright © 2004 by Karsten Meier. All Rights reserved.