Rubylabor: Schließen mit Regeln

 
Develop-Zone

Schließen mit Regeln

Der Zweck dieses Bespielcodes ist die Demonstration der Verarbeitung von regelbasierten Wissen. Speziell sind dies die folgenden:

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.

UML Diagramm der Klassenstruktur
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.