tipos source reglas open negocio motor rule-engine

rule engine - source - ¿Ha tenido éxito alguna vez un sistema que incorpore un motor de reglas?



motor de reglas de negocio open source (11)

Nuestro sistema (captura de comercio de derivados de productos básicos exóticos y gestión de riesgos) se está reconstruyendo en breve. Una propuesta que he escuchado es que se incorporará un motor de reglas para facilitar a los usuarios finales (comerciantes de productos básicos, bastante sofisticados) realizar ciertos cambios en la lógica comercial.

Soy un poco escéptico de los motores de reglas. El agilista en mí se pregunta si no son más que una solución técnica a un problema de proceso ... es decir. lleva demasiado tiempo para que nuestros desarrolladores respondan a las necesidades de cambio de la empresa. La solución a ese problema debería ser un enfoque más colaborativo para el desarrollo, una mejor cobertura de prueba, prácticas más ágiles en todas partes.

La audiencia sobre situaciones en las que un motor de reglas fue realmente una bendición (especialmente en un entorno comercial) sería ciertamente útil.


Ciertamente tengo, pero no puedo hablar públicamente sobre ellos, pero es probable que haya interactuado con uno varias veces este año;)

Lo veo en 2 campos: los programadores lógicos y los usuarios comerciales. Diferentes herramientas se dirigen a diferentes conjuntos, algunos a ambos. Los casos exitosos de usuarios comerciales solo han funcionado cuando se trataba de un subconjunto de la lógica, y también tenían una forma de definir casos de prueba y ejecutarlos ellos mismos (y están preparados para pensar lógicamente). Los programadores lógicos son más raros, pero a menudo pueden encontrarse provenientes de fondos de programación no imperativos (también son el tipo de personas que encuentran que la programación funcional es intuitiva).

Tenga en cuenta al final del día, incluso con herramientas visuales, si le está diciendo a una computadora que haga algo, todavía está programando.


Durante un tiempo trabajé para el proyecto informático distribuido PEATE, que estaba desarrollando un sistema para el cálculo de datos atmosféricos a gran escala y gran volumen. El sistema tenía tres partes: el administrador de datos, el programador y el componente de ejecución del algoritmo. Podría haber varios de estos componentes, todos hechos a través de servicios web, pero lo que permitió fue que diferentes investigadores ejecutaran trabajos arbitrarios contra datos arbitrarios, y también permitieron que se conectaran diferentes mecanismos de programación a medida que cambiaban los requisitos.

Dejé el proyecto antes de que fuera demasiado lejos del terreno, pero parece que podría encajar en el escenario y servir como otro ejemplo para algún tipo de motor de reglas. Dicho esto, sin embargo, si los desarrolladores originales van a seguir elaborando los algoritmos, no veo mucho beneficio en tener un motor de reglas a menos que maneje una sobrecarga sustancial en la que incurriría cada regla o algoritmo. su propio.

Esto parece un poco más complicado que un simple motor de reglas, pero una arquitectura así podría aplicarse también a un motor de reglas.


El problema con muchos de estos motores de reglas es la falta de velocidad y el hecho de que reemplazar o aumentar las reglas puede romper las reglas de trabajo existentes de manera sutil. Por lo tanto, aún debe volver a probar el sistema después de cada cambio de regla. Entonces, básicamente, solo cambias un idioma de computadora por otro, uno con una base de usuarios mucho más pequeña. Como se menciona en otro cartel, todavía no he visto a un analista de negocios usar con éxito un motor de reglas. Necesitas un programador de todos modos.


Mi experiencia se limita a (i) no mucho y (ii) a prólogo; pero puedo decir con seguridad que un motor de reglas puede ayudarlo a expresar conceptos proposicionales mucho más limpios que el código de procedimiento.


No sé si diría que alguna vez son realmente una bendición, pero creo que ciertamente pueden ser valiosos. Trabajé en un sistema durante algunos años en la industria de seguros, donde se empleó con bastante éxito un motor de reglas para permitir a los usuarios comerciales crear reglas que determinaran qué políticas eran legales, según el estado.

Por ejemplo, si tuvo que pagar un copago en ciertos estados, o ciertas combinaciones de deducible y copago no se permitieron, ya sea por consideraciones del producto, o porque simplemente era ilegal debido a la ley estatal.

El número de estados en los que operaba la empresa, junto con el cambio constante en las reglas (trimestrales), haría de esto una práctica de codificación vertiginosa. Más importante aún, no está en la experiencia de un programador. Agrega una comunicación extra sin sentido donde el usuario final describe la regla que se aplicará a un programador que no es un experto en la industria de seguros como lo son ellos.

Diseñado correctamente, un motor de reglas aún puede habilitar un sistema de flujo de trabajo que permita realizar buenas pruebas. En este caso, las reglas se almacenaron en una base de datos, y hubo bases de datos de QA y PROD. Entonces, los BA pueden poner a prueba sus reglas en QA y luego promocionarlas a PROD.

Al igual que con cualquier cosa, generalmente se trata de la implementación, y no la técnica real.


Sí, Microsoft tiene un Business Rule Engine (BRE) en BizTalk que se ha utilizado con éxito durante años. He oído que han tenido clientes que compran BizTalk (muy caro) solo para el BRE.

En mi experiencia, la practicidad de tener un usuario de negocios actualizando las reglas es casi nula. Por lo general, se necesita una persona técnica para trabajar en el editor de reglas de negocios.


Un motor de reglas es poco más que algo que ejecuta declaraciones declarativas. Vienen con dos ventajas principales (que veo):

  1. La lógica de su negocio se mantiene desde un solo lugar en lugar de ser rociada a través del código de la aplicación. Técnicamente, una aplicación bien diseñada ya debería hacer esto con la arquitectura, independientemente de si un motor de reglas está presente o no.
  2. Debe preocuparse [menos] por las dependencias entre declaraciones declarativas. El motor de reglas debe ser lo suficientemente inteligente como para decidir el orden para ejecutar reglas basadas en dependencias. Puede encontrar que algunos motores de reglas soportan un orden secuencial de reglas dentro de un conjunto de reglas o llamar a conjuntos de reglas (grupos de reglas) en un orden particular, pero esto no es realmente en el espíritu de la programación declarativa. Muchos motores de reglas usan Rete (un algoritmo) para decidir cuándo programar la ejecución de declaraciones declarativas.

Sospecho que la mayoría, si no todos, los motores de reglas agregan más sobrecarga que si escribiera el mejor programa posible que no use un motor de reglas. Esto es similar a cómo escribir código en ensamblado es generalmente más rápido que un compilador (pero generalmente no se escribe ensamblado porque es más conveniente y productivo usar abstracciones de mayor nivel).

Si tuviera que detenerse aquí, probablemente usaría programadores para mantener las reglas y usar un motor de reglas como una manera conveniente de crear un nivel lógico de negocios en su aplicación. Algunos motores de reglas ofrecen algo llamado plantillas que le permiten definir plantillas para reglas. La ventaja aquí es que se supone que los usuarios no técnicos pueden escribir sus propias reglas y modificar las reglas existentes.

Un motor de reglas es una herramienta más en su cofre de herramientas que, cuando se usa adecuadamente, puede ser valioso.


Los motores de reglas se usan de forma rutinaria en el negocio de seguros. He trabajado en sistemas con cientos (600,000) reglas que se implementaron en un motor de reglas. Funcionó muy bien.


¿Tiene una calificación crediticia? Un puntaje FICO , tal vez? Eso es F Air I saac CO rporation, los desarrolladores del motor de reglas Blaze.


Trabajo con muchos proveedores en el espacio y una de las mejores cosas de esto es que puedo hablar con muchos de sus clientes. Entonces, sí, cientos de compañías obtuvieron exactamente los beneficios que les prometieron: mayor agilidad, mejor colaboración empresarial / TI, cumplimiento regulatorio más sencillo, mejor coherencia en la toma de decisiones, menores costos de mantenimiento, tiempos más rápidos de comercialización, etc.

Una y otra vez, en todos los principales proveedores y reproductores de código abierto, veo que se usa correctamente: para automatizar y mejorar las decisiones operativas de gran volumen con muchas reglas, reglas que cambian mucho, reglas que interactúan de manera compleja o reglas con un alto contenido de dominio empresarial: funcionan los sistemas de gestión de reglas empresariales.

De Verdad.


He visto dos aplicaciones que utilizan el motor Blaze Rete de Fair Issac.

Una aplicación rompió miles de reglas en una sola base de conocimiento, tuvo problemas de memoria terribles, se convirtió en una caja negra que pocos entienden. No lo llamaría un éxito, pero se está ejecutando en producción.

Otra aplicación usó árboles de decisión para representar del orden de cientos de preguntas en un formulario médico a clientes de disposición. Fue hecho tan elegantemente que la gente de negocios puede actualizar las reglas según sea necesario, sin tener que involucrar a un desarrollador. (Todavía tiene que ser desplegado por uno, sin embargo). Llamaría a eso un gran éxito.

Entonces depende de cuán bien enfocado esté el problema, el tamaño del conjunto de reglas, el conocimiento de los desarrolladores. Mi prejuicio es que simplemente hacer de un motor de reglas un único punto de falla y de verter reglas en él probablemente no sea un buen enfoque. Comenzaría con un enfoque basado en datos o basado en tablas y crecería hasta que se necesitara un motor de reglas. También me esforzaría por encapsular el motor de reglas como parte del comportamiento de un objeto. Ocultaría el motor de reglas de los usuarios y trataría de dividir el espacio de reglas en el modelo de dominio.