La relación entre los motores de reglas de negocio y los lenguajes de programación de restricciones

20

Si uno mira los manuales (tal vez más antiguos) de Drools u otros motores de reglas, una de las ilustraciones de su valor agregado es resolver acertijos como el rompecabezas Miss Manners (manual de Drools). Ahora, tales acertijos se formulan y resuelven naturalmente usando Prolog o los lenguajes de programación de restricción más recientes, y uno se pregunta por qué alguien usaría Drools para este propósito. El valor agregado que Prolog y CPL dan en este caso es su capacidad para formular naturalmente el rompecabezas como un conjunto de predicados lógicos y para buscar automáticamente el espacio de soluciones (con CPL siendo más eficiente a este respecto). Pero, ¿cuál es el valor agregado de un producto como Drools (quiero decir, además de las campanas y los silbidos de tomar, por ejemplo, un archivo Excel y traducirlo en un conjunto de reglas)?

Más específicamente, Prolog implementa la búsqueda de retroceso, CLP implementa la búsqueda de retroceso con propagación de restricciones y, por lo tanto, en lugar de buscar, por así decirlo, todo el producto cartesiano de espacios para variables individuales, eliminan grandes porciones de este espacio de producto. Esto es lo que los hace efectivos y útiles. Tanto Prolog como CLP se discuten ampliamente en la literatura.

Por otro lado, si bien está claro que el algoritmo Rete almacena en caché el conjunto de reglas en forma de algunas estructuras de datos, por lo tanto (a mi entender) hace que sea más efectivo evaluar la salida si algunas de las entradas han cambiado, y dando medios para actualizar efectivamente esta estructura de datos para cambios incrementales, ¿es difícil (para mí) entender la idea básica, y aún más, su efectividad (en comparación con qué? a Prolog? a CLP)? Desafortunadamente, es difícil encontrar buenas referencias que vean el algoritmo Rete en este contexto más amplio.

La documentación de Drools lamentablemente no es muy informativa a este respecto. Lo máximo que pude encontrar fue "El algoritmo Rete, el algoritmo Leaps y sus descendientes, como el Drote 'Reteoo (y Leaps), proporcionan formas muy eficientes de hacer coincidir los patrones de las reglas con los datos del objeto de dominio. Estos son especialmente eficientes cuando tienes conjuntos de datos que no cambien por completo (ya que el motor de reglas puede recordar partidos pasados). Estos algoritmos están probados en batalla ". Muy eficiente, ¿en comparación con qué? Probada en batalla: ¿podría uno apuntar a aplicaciones del mundo real?

Agradecería si uno pudiera arrojar algo más de luz sobre este tema o dar una referencia válida.

John Donn
fuente
1
Esta pregunta es un poco amplia y realmente no 'pertenece' aquí ...
3
Bueno, me temo que para cstheory.stackexchange.com está demasiado "orientado a la industria". Lo que realmente me interesa es cuál es el punto básico sobre los motores de reglas de negocios y por qué usarlos es más ventajoso que usar Prolog o CLP. Si tiene alguna sugerencia sobre un lugar mejor para publicarla, me complacerá escucharla.

Respuestas:

7

Creo que el argumento para muchos sistemas comerciales de reglas de negocios que usan motores de encadenamiento hacia adelante (por ejemplo, Drools) frente al encadenamiento hacia atrás (Prolog) es que muchos "programadores de Joe" están acostumbrados a lidiar con la lógica SI / ENTONCES / MÁS - y esto lo hace un todo Mucho más fácil de comercializar a las masas. No creo que el mérito técnico tenga nada que ver con eso.

Estoy publicando esto como wiki de la comunidad porque es mi opinión bastante coloreada y no una respuesta real.

NealB
fuente
4

Drools agregó recientemente encadenamiento hacia atrás, sin problemas en el lenguaje drl. Entonces ahora obtienes los beneficios de ambas palabras.

Todavía no tiene todas las características de prolog, por ejemplo, sin 'corte'. Pero los resultados del árbol de unificación y derivación funcionarán como lo espera la gente del prólogo, es decir, soporte completo para cierres transitorios. Y las características continuarán creciendo, como el soporte para tabulación, corte, unificación en expresiones.

Puede usar reglas de "consulta" hacia adelante "reactivas" o hacia atrás por separado, o usarlas juntas; donde la regla reactiva puede unirse con los resultados de una consulta.

Una cosa que agregamos es que nuestras consultas se pueden materializar completamente como una vista reactiva. Por lo tanto, puede llamar a una consulta de cierre de tránsito y permanecerá abierta de manera reactiva y responderá a los cambios en los datos básicos subyacentes, sin tener que volver a sondear la consulta.

Consulte las secciones de New & Noteworth para saber cuándo se agregó "encadenamiento hacia atrás": http://blog.athico.com/2012/05/drools-540final-released.html

Entonces, creo que su pregunta estaría mejor redactada, ¿por qué desearía usar cualquier otra cosa, cuando tiene un sistema de razonamiento híbrido como Drools? http://blog.athico.com/2012/05/drools-54-artificial-intelligence.html

Mark Proctor
fuente
3

Estoy de acuerdo con usted en que Prolog es más poderoso que Drools. Pero creo que Drools es atractivo para el cliente empresarial debido a las sofisticadas herramientas e integraciones front-end que Drools tiene con otras aplicaciones empresariales populares. Creo que estas reglas persisten en la base de datos donde muchos motores Drools pueden usarlas de inmediato.

Cambiar las reglas durante el tiempo de ejecución es una forma bastante dinámica de usar el motor Drools y es compatible. Creo que Prolog podría tener un sistema similar, pero esto no existe AFAIK. ¿A dónde irían estas reglas o reglas editadas? afirmado en la base de datos del programa? Al reiniciar, estas reglas se perderían. ¿Los persistiríamos en una base de datos compartida y luego los incluiríamos en el programa según sea necesario? Prolog puede ser utilizable, pero Drools ya está bien integrado en la pila de aplicaciones empresariales, entonces, ¿por qué volverse loco (excepto por diversión)?


"Estoy de acuerdo con usted en que Prolog es más poderoso que Drools. Pero creo que Drools es atractivo para el cliente empresarial debido a las sofisticadas herramientas e integraciones front-end que Drools tiene con otras aplicaciones empresariales populares".

Según mi comentario anterior, Drools ahora implementa árboles de derivación basados ​​en objetivos de la misma manera que Prolog. Drools adicionales pueden hacer algo con ese árbol de deivación que la mayoría de los otros sistemas Prolog no pueden. Los drools pueden materializar el árbol de derivación en una vista y recibir actualizaciones reactivas a medida que cambian los términos del grupo subyacente.

DaveEdelstein
fuente
2
@MarkProctor, en general, las cosas que son objeciones en lugar de correcciones deben hacerse generalmente mediante comentarios y (posiblemente) rechazo, en lugar de editar el contenido de la respuesta de otra persona.
Charles Duffy
2

Drools comenzó por basarse en CLIPS . CLIPS era un " sistema de producción " más antiguo y, como todos los sistemas de producción, es un sistema de encadenamiento avanzado. Una gran cantidad de investigación sobre Rete se ha "oscurecido" ya que el creador terminó trabajando para empresas donde los algoritmos eran propiedad intelectual. La versión 3 de Rete es propiedad de las personas que obtienen puntajes FICO , así que sí, está "probada en batalla".

Tangurena
fuente