Si l'on regarde les manuels (peut-être plus anciens) de Drools ou d'autres moteurs de règles, l'une des illustrations de leur valeur ajoutée est de résoudre des énigmes telles que le casse-tête de Miss Manners (manuel de Drools). Maintenant, de tels puzzles sont naturellement formulés et résolus à l'aide de Prolog ou des langages de programmation par contraintes les plus récents, et on se demande pourquoi quelqu'un utiliserait Drools à cette fin. La valeur ajoutée que Prolog et CPL apportent dans ce cas est leur capacité à formuler naturellement le puzzle comme un ensemble de prédicats logiques et à rechercher automatiquement l'espace des solutions (CPL étant plus efficace à cet égard). Mais quelle est la valeur ajoutée d'un produit tel que Drools (je veux dire en plus des cloches et des sifflets de prendre, par exemple, un fichier Excel et de le traduire en un ensemble de règles)?
Plus précisément, Prolog implémente la recherche de backtrack, CLP implémente la recherche de backtrack avec propagation de contraintes, et donc au lieu de rechercher, pour ainsi dire, l'ensemble du produit cartésien des espaces pour les variables individuelles, ils élaguent de grandes parties de cet espace de produit. C'est ce qui les rend efficaces et utiles. Prolog et CLP sont tous deux largement discutés dans la littérature.
D'un autre côté, bien qu'il soit clair que l'algorithme Rete met en cache l'ensemble de règles sous la forme d'une ou plusieurs structures de données, ce qui (à ma connaissance) le rend plus efficace pour évaluer la sortie si certaines des entrées ont changé, et donnant des moyens de mettre à jour efficacement cette structure de données pour des changements incrémentiels, il est difficile (pour moi) de comprendre l'idée de base, et plus encore, son efficacité (par rapport à quoi? à Prolog? à CLP)? Malheureusement, il est difficile de trouver de bonnes références qui voient l'algorithme Rete dans ce contexte plus large.
La documentation de Drools n'est malheureusement pas très informative à cet égard. Le plus que j'ai pu trouver était "L'algorithme Rete, l'algorithme Leaps et ses descendants tels que Reteoo (et Leaps) de Drools, fournissent des moyens très efficaces de faire correspondre les modèles de règles à vos données d'objet de domaine. Ceux-ci sont particulièrement efficaces lorsque vous avez des ensembles de données qui ne changent pas complètement (car le moteur de règles peut se souvenir des matchs passés). Ces algorithmes ont fait leurs preuves ". Très efficace - par rapport à quoi? Éprouvé au combat - pourrait-on pointer vers des applications réelles?
J'apprécierais que l'on puisse éclairer davantage ce sujet ou donner une référence valable.
la source
Réponses:
Je pense que l'argument en faveur de nombreux systèmes commerciaux de règles commerciales utilisant des moteurs de chaînage avant (par exemple, Drools) par rapport au chaînage arrière (Prolog) est que de nombreux "programmeurs Joe" sont habitués à gérer la logique IF / THEN / ELSE - et cela en fait un tout beaucoup plus facile à commercialiser auprès des masses. Je ne pense pas que le mérite technique y soit pour quelque chose.
Je poste ceci comme wiki communautaire parce que c'est mon opinion plutôt colorée et pas une vraie réponse.
la source
Drools a récemment ajouté un chaînage arrière, de manière transparente dans le langage drl. Alors maintenant, vous obtenez les avantages des deux mots.
Il n'a pas encore toutes les fonctionnalités de prolog, par exemple pas de "coupe". Mais ce sont les résultats des arbres d'unification et de dérivation qui fonctionneront comme les gens de prologue s'y attendent, c'est-à-dire un support complet des fermetures transitoires. Et les fonctionnalités continueront de croître, telles que la prise en charge du dépôt, de la coupe, de l'unification des expressions.
Vous pouvez utiliser séparément les règles "réactives" en avant ou "en arrière", ou les utiliser ensemble; où la règle réactive peut se joindre aux résultats d'une requête.
Une chose que nous avons ajoutée est que nos requêtes peuvent être entièrement matérialisées comme une vue réactive. Vous pouvez donc appeler une requête de fermeture transitoire et elle restera ouverte de manière réactive et répondra aux changements des données sous-jacentes - sans avoir à relancer la requête.
Voir les sections New & Noteworth pour savoir quand le "chaînage arrière" a été ajouté: http://blog.athico.com/2012/05/drools-540final-released.html
Je pense donc que votre question serait mieux formulée, pourquoi voudriez-vous utiliser autre chose, quand vous avez un système de raisonnement hybride comme Drools? http://blog.athico.com/2012/05/drools-54-artificial-intelligence.html
la source
Je suis d'accord avec vous que Prolog est plus puissant que Drools. Mais je pense que Drools est attrayant pour les clients d'entreprise en raison des outils frontaux et des intégrations sophistiqués que Drools a avec d'autres applications d'entreprise populaires. Je pense que ces règles sont ensuite conservées dans la base de données où de nombreux moteurs Drools peuvent les utiliser immédiatement.
La modification des règles pendant l'exécution est une manière assez dynamique d'utiliser le moteur Drools et elle est prise en charge. Je crois que Prolog pourrait avoir un système similaire, mais cela n'existe pas AFAIK. Où iraient ces règles ou règles modifiées? affirmé dans la base de données du programme? Au redémarrage, ces règles seraient perdues. Les conserverions-nous dans une base de données partagée, puis les revendiquerions-nous dans le programme selon les besoins? Prolog peut être utilisable, mais Drools est déjà bien intégré dans la pile d'applications d'entreprise, alors pourquoi vous rendre fou (sauf pour le plaisir)?
"Je suis d'accord avec vous que Prolog est plus puissant que Drools. Mais je pense que Drools fait appel au client d'entreprise en raison des outils frontaux et des intégrations sophistiqués que Drools a avec d'autres applications d'entreprise populaires"
Selon mon commentaire ci-dessus, Drools implémente désormais des arbres de dérivation basés sur les objectifs de la même manière que Prolog. D'autres Drools peuvent faire quelque chose avec cet arbre de déivation que la plupart des autres systèmes Prolog ne peuvent pas. Drools peut matérialiser l'arbre de dérivation dans une vue et recevoir des mises à jour réactives à mesure que les termes grouond sous-jacents changent.
la source
Drools a commencé par être basé sur CLIPS . CLIPS était un " système de production " plus ancien , et comme tous les systèmes de production, il s'agit d'un système de chaînage avant. De nombreuses recherches sur Rete sont «devenues obscures», car l'initiateur a fini par travailler pour des entreprises où les algoritmes étaient la propriété intellectuelle. La version 3 de Rete appartient aux gens qui font des scores FICO , alors oui, c'est "éprouvé au combat".
la source