2008-08-28 57 views
6

En el pasado tuve que desarrollar un programa que actuó como un evaluador de reglas. Tuviste un antecedente y algunos consecuents (acciones) así que si el antecedente evadió a verdadero las acciones donde se realizó.Algoritmos de reconocimiento de patrones

En ese momento utilicé una versión modificada de RETE algorithm (hay tres versiones de RETE, la primera de las cuales es pública) para el patrón de antecesos coincidente. Estamos hablando de un gran sistema aquí con millones de operaciones por regla y algunos operadores "repetidos" en varias reglas.

Es posible que tenga que volver a implementarlo en otro idioma y, aunque tengo experiencia en RETE, ¿alguien sabe de otros algoritmos de coincidencia de patrones? ¿Alguna sugerencia o debería seguir usando RETE?

Respuesta

4

El algoritmo TREAT es similar a RETE, pero no registra coincidencias parciales. Como resultado, puede usar menos memoria que RETE en ciertas situaciones. Además, si modifica una cantidad importante de hechos conocidos, entonces TRATAR puede ser mucho más rápido porque no tiene que perder tiempo en las retractaciones.

También hay RETE* que equilibra entre RETE y TREAT guardando un estado de nodo de unión según la cantidad de memoria que desee utilizar. Así que aún ahorra tiempo de aserción, pero también obtiene ahorros de memoria y tiempo de retracción dependiendo de cómo ajuste su sistema.

Es posible que también desee comprobar LEAPS, que utiliza un esquema de evaluación perezosa e incorpora elementos de RETE y TREAT.

Solo tengo experiencia personal con RETE, pero parece que RETE * o LEAPS son las opciones mejores y más flexibles.

+1

Enlace de LEAPS: ftp://ftp.cs.utexas.edu/pub/predator/tr-94-28.pdf – biziclop

Cuestiones relacionadas