Question

Dans le passé, j'ai dû développer un programme qui faisait office d'évaluateur de règles.Vous aviez un antécédent et quelques conséquences (actions), donc si l'antécédent était évalué comme vrai, les actions étaient exécutées.

A cette époque, j'utilisais une version modifiée du Algorithme RETE (il existe trois versions de RETE, seule la première étant publique) pour la correspondance de modèles antécédents.Nous parlons ici d'un gros système avec des millions d'opérations par règle et certains opérateurs "répétés" dans plusieurs règles.

Il est possible que je doive tout réimplémenter dans un autre langage et, même si j'ai de l'expérience en RETE, est-ce que quelqu'un connaît d'autres algorithmes de correspondance de modèles ?Des suggestions ou dois-je continuer à utiliser RETE ?

Était-ce utile?

La solution

L'algorithme TREAT est similaire à RETE, mais n'enregistre pas de correspondances partielles.Par conséquent, il peut utiliser moins de mémoire que RETE dans certaines situations.De plus, si vous modifiez un nombre important de faits connus, alors TREAT peut être beaucoup plus rapide car vous n'avez pas à consacrer de temps aux rétractations.

Il y a aussi RETÉ* qui équilibre entre RETE et TREAT en enregistrant un certain état du nœud de jointure en fonction de la quantité de mémoire que vous souhaitez utiliser.Ainsi, vous gagnez toujours du temps d'assertion, mais obtenez également des gains de mémoire et de temps de rétraction en fonction de la façon dont vous réglez votre système.

Vous voudrez peut-être également consulter SAUTS, qui utilise un schéma d'évaluation paresseux et intègre des éléments de RETE et TREAT.

Je n'ai qu'une expérience personnelle avec RETE, mais il semble que RETE* ou LEAPS soient les meilleurs choix et les plus flexibles.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top