Wenn man sich (vielleicht ältere) Handbücher von Drools oder andere Regelmaschinen ansieht, ist eines der Beispiele für ihren Mehrwert das Lösen von Rätseln wie das Miss Manners-Puzzle (Handbuch von Drools). Jetzt werden solche Rätsel auf natürliche Weise mit Prolog oder den neueren Constraint-Programmiersprachen formuliert und gelöst, und man fragt sich, warum irgendjemand Drools für diesen Zweck verwenden würde. Der Mehrwert, den Prolog und CPL in diesem Fall bieten, ist ihre Fähigkeit, das Rätsel auf natürliche Weise als Satz logischer Prädikate zu formulieren und den Lösungsraum automatisch zu durchsuchen (wobei CPL in dieser Hinsicht effizienter ist). Aber was ist der Mehrwert von Produkten wie Drools (ich meine neben dem Schnickschnack, zum Beispiel eine Excel-Datei zu nehmen und sie in ein Regelwerk zu übersetzen)?
Insbesondere implementiert Prolog die Rückverfolgungssuche, CLP implementiert die Rückverfolgungssuche mit Einschränkungsausbreitung, und daher beschneiden sie, anstatt sozusagen das gesamte kartesische Produkt von Räumen nach einzelnen Variablen zu durchsuchen, große Teile dieses Produktraums. Das macht sie effektiv und nützlich. Sowohl Prolog als auch CLP werden in der Literatur ausführlich diskutiert.
Auf der anderen Seite ist zwar klar, dass der Rete-Algorithmus den Regelsatz in Form einiger Datenstrukturen zwischenspeichert, was es (meines Wissens nach) effektiver macht, die Ausgabe zu bewerten, wenn sich einige der Eingaben geändert haben. Wenn ich die Möglichkeit gebe, diese Datenstruktur für inkrementelle Änderungen effektiv zu aktualisieren, ist es (für mich) schwierig, die Grundidee und vor allem ihre Wirksamkeit zu verstehen (im Vergleich zu was? zu Prolog? zu CLP). Leider ist es schwierig, gute Referenzen zu finden, die den Rete-Algorithmus in diesem weiteren Kontext anzeigen.
Die Dokumentation von Drools ist in dieser Hinsicht leider nicht sehr aussagekräftig. Das meiste, was ich finden konnte, war "Der Rete-Algorithmus, der Leaps-Algorithmus und seine Nachkommen wie Drools 'Reteoo (und Leaps) bieten sehr effiziente Möglichkeiten zum Anpassen von Regelmustern an Ihre Domain-Objektdaten. Diese sind besonders effizient, wenn Sie über Datasets verfügen, die nicht vollständig ändern (da sich die Regelmaschine an vergangene Übereinstimmungen erinnern kann). Diese Algorithmen sind kampferprobt ". Sehr effizient - im Vergleich zu was? Kampferprobt - könnte man auf reale Anwendungen verweisen?
Ich würde mich freuen, wenn man mehr Licht auf dieses Thema werfen oder einen gültigen Verweis geben könnte.
quelle
Antworten:
Ich denke, das Argument für viele kommerzielle Business Rules Systeme, die Forward Chaining Engines (zB Drools) und Backward Chaining (Prolog) verwenden, ist, dass viele "Joe-Programmierer" es gewohnt sind, sich mit IF / THEN / ELSE-Logik auseinanderzusetzen - und das macht es zu einem Ganzen viel einfacher an die Massen zu vermarkten. Ich glaube nicht, dass technischer Wert etwas damit zu tun hat.
Ich poste dies als Community-Wiki, weil es meine eher kolorierte Meinung ist und keine echte Antwort.
quelle
Drools fügten kürzlich eine Rückwärtsverkettung hinzu, die sich nahtlos in die Drl-Sprache einfügt. Jetzt profitieren Sie von beiden Wörtern.
Es hat noch nicht alle Eigenschaften eines Prologs, zum Beispiel keinen "Schnitt". Die Ergebnisse der Vereinheitlichung und des Ableitungsbaums werden jedoch den Erwartungen der Prologen entsprechen, dh die vollständige Unterstützung für Transit-Closures. Und die Funktionen werden weiter zunehmen, z. B. Unterstützung für das Tablettieren, Ausschneiden und Vereinheitlichen von Ausdrücken.
Sie können vorwärts "reaktive" oder rückwärts "Abfrage" Regeln separat verwenden oder sie zusammen verwenden; Dabei kann die reaktive Regel mit den Ergebnissen einer Abfrage verknüpft werden.
Eine Sache, die wir hinzugefügt haben, ist, dass unsere Abfragen als reaktive Ansicht vollständig materialisiert werden können. Sie können also eine Transitveverschlussabfrage aufrufen, die auf reaktive Weise geöffnet bleibt und auf Änderungen der unterirdischen Daten reagiert, ohne die Abfrage erneut abrufen zu müssen.
Weitere Informationen zum Hinzufügen von "Rückwärtsverkettung" finden Sie in den Abschnitten "Neu" und "Bemerkenswert": http://blog.athico.com/2012/05/drools-540final-released.html
Ich denke, Ihre Frage wäre besser formuliert, warum sollten Sie etwas anderes verwenden, wenn Sie ein Hybrid-Reasoning-System wie Drools haben? http://blog.athico.com/2012/05/drools-54-artificial-intelligence.html
quelle
Ich stimme dir zu, dass Prolog mächtiger ist als Drools. Ich denke jedoch, dass Drools für Unternehmenskunden aufgrund der ausgefallenen Front-End-Tools und Integrationen, die Drools mit anderen beliebten Unternehmensanwendungen hat, attraktiv ist. Ich denke, diese Regeln werden dann in der Datenbank beibehalten, wo viele Drools-Engines sie sofort verwenden können.
Das Ändern von Regeln zur Laufzeit ist eine recht dynamische Methode zur Verwendung der Drools-Engine und wird unterstützt. Ich glaube, Prolog könnte ein ähnliches System haben, aber AFAIK gibt es nicht. Wohin würden diese Regeln oder bearbeiteten Regeln gehen? in der db des programms behauptet? Beim Neustart gehen diese Regeln verloren. Würden wir sie in einer gemeinsam genutzten Datenbank speichern und sie dann nach Bedarf in das Programm übernehmen? Prolog kann verwendet werden, aber Drools ist bereits gut in den Enterprise-Anwendungsstapel integriert. Warum also verrückt werden (außer zum Spaß)?
"Ich stimme Ihnen zu, dass Prolog leistungsstärker ist als Drools. Aber ich denke, Drools spricht Unternehmenskunden wegen der ausgefallenen Front-End-Tools und Integrationen an, die Drools mit anderen beliebten Unternehmensanwendungen hat."
Nach meinem obigen Kommentar implementiert Drools jetzt zielbasierte Ableitungsbäume auf die gleiche Weise wie Prolog. Weitere Drools können mit diesem Deivierungsbaum etwas anfangen, was die meisten anderen Prolog-Systeme nicht können. Drools können den Ableitungsbaum in eine Ansicht verwandeln und reaktive Aktualisierungen erhalten, wenn sich die zugrunde liegenden Gruppenterme ändern.
quelle
Drools basierte zunächst auf CLIPS . CLIPS war ein älteres " Produktionssystem " und wie alle Produktionssysteme ist es ein Vorwärtskettensystem. Viele Forschungen zu Rete wurden "dunkel", als der Urheber schließlich für Unternehmen arbeitete, in denen die Algorithmen geistiges Eigentum waren. Rete Version 3 gehört den Leuten, die FICO- Scores machen, also ist es "kampferprobt".
quelle