¿Alguna vez un sistema que incorporó un motor de reglas ha sido REALMENTE exitoso? [cerrado]

StackOverflow https://stackoverflow.com/questions/206425

  •  03-07-2019
  •  | 
  •  

Pregunta

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, por lo que son bastante sofisticados) realizar ciertos cambios en la lógica empresarial.

Soy un poco escéptico de los motores de reglas. El agilista en mí se pregunta si son solo una solución técnica a un problema de proceso ... es decir, los desarrolladores necesitan mucho tiempo para responder a la necesidad 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 pruebas, prácticas más ágiles en todos los aspectos.

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

¿Fue útil?

Solución

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

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

Otra aplicación utilizó árboles de decisión para representar en el orden de cientos de preguntas en un formulario médico a disposición de los clientes. Se hizo con tanta elegancia que los empresarios pueden actualizar las reglas según sea necesario, sin tener que involucrar a un desarrollador. (Sin embargo, aún tiene que ser implementado por uno). Yo lo llamaría un gran éxito.

Por lo tanto, depende de qué tan bien enfocado esté el problema, el tamaño del conjunto de reglas, el conocimiento de los desarrolladores. Mi prejuicio es que simplemente hacer que un motor de reglas sea un punto único de falla y volcar reglas en él probablemente no sea un buen enfoque. Comenzaría con un enfoque basado en datos o en tablas y lo crecería hasta que fuera necesario un motor de reglas. También me esforzaría por encapsular el motor de reglas como parte del comportamiento de un objeto. Escondría el motor de reglas de los usuarios e intentaría particionar el espacio de reglas en el modelo de dominio.

Otros consejos

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ó un motor de reglas con bastante éxito para permitir a los usuarios de negocios crear reglas que determinaran qué políticas eran legales, dependiendo del estado.

Por ejemplo, si tenía que tener un copago en ciertos estados, o ciertas combinaciones de deducible y copago no estaban permitidas, ya sea por consideraciones del producto o simplemente porque era ilegal debido a la ley estatal.

El número de estados en los que operaba la compañía, junto con el cambio constante en las reglas (trimestral) haría que esto fuera una práctica de codificación vertiginosa. Más importante aún, no está en la experiencia de un programador. Agrega una comunicación inútil adicional en la que el usuario final está describiendo la regla que se debe 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 control de calidad y PROD. Así que los licenciados pueden probar sus reglas en el control de calidad y luego promoverlos a PROD.

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

Sí, Microsoft tiene un motor de reglas de negocios (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 que un usuario comercial actualice 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 sentencias declarativas. Vienen con dos ventajas principales (que veo):

  1. Su lógica de negocios se mantiene desde un solo lugar en lugar de ser rociada en todo el código de la aplicación. Técnicamente, una aplicación bien diseñada ya debería hacer esto con la arquitectura, independientemente de que un motor de reglas esté presente o no.
  2. Debe preocuparse [menos] acerca de 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. Es posible que algunos motores de reglas admitan un orden secuencial de reglas dentro de un conjunto de reglas o conjuntos de reglas de llamada (grupos de reglas) en un orden particular, pero esto no está 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 tuvieras que escribir el mejor programa posible que no use un motor de reglas. Esto es similar a cómo escribir código en un ensamblaje es generalmente más rápido que un compilador (pero normalmente no se escribe un ensamblaje porque es más conveniente y productivo usar abstracciones de alto nivel).

Si se detuviera aquí, probablemente usaría programadores para mantener las reglas y utilizar un motor de reglas como una forma conveniente de crear un nivel de lógica 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 existentes.

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

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 tiene que volver a probar el sistema a fondo después de cada cambio de regla. Básicamente, solo estás intercambiando un lenguaje de computadora por otro, uno con una base de usuarios mucho más pequeña. Como se mencionó en otro póster, todavía no he visto a un analista de negocios que use con éxito un motor de reglas. Necesitas un programador de todos modos.

Ciertamente lo he hecho, 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 de negocios. Diferentes herramientas apuntan a diferentes conjuntos, algunos a ambos. Los casos exitosos de usuarios de negocios solo han funcionado cuando era 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 de manera lógica). Los programadores lógicos son más raros, pero a menudo se pueden encontrar en entornos de programación no imperativos (también son el tipo de personas que encuentran la programación funcional intuitiva).

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

Trabajo con muchos proveedores en el espacio y una de las mejores cosas de esto es que puedo hablar con muchos de sus clientes. Así que, sí, cientos de compañías han obtenido exactamente los beneficios que se les prometieron: mayor agilidad, mejor colaboración entre negocios y TI, cumplimiento normativo más sencillo, mejor coherencia en la toma de decisiones, menores costos de mantenimiento, tiempos más rápidos para el mercado etc.

Una y otra vez, a través de los principales proveedores y los jugadores 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: los sistemas de administración de reglas empresariales funcionan.

En serio.

Mi experiencia se limita a (i) no mucho y (ii) 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.

Los motores de reglas se utilizan habitualmente en el negocio de seguros. He trabajado en sistemas con cientos (600ish) de reglas que se implementaron en un motor de reglas. Funcionó muy bien.

¿Tiene una calificación crediticia? Una puntuación de FICO , ¿quizás? Eso es F air I saac CO , los desarrolladores del motor de reglas Blaze.

Durante un tiempo trabajé para el proyecto de computación distribuida PEATE que estaba desarrollando un sistema para el cálculo de datos atmosféricos a gran escala y de 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 cualquier número de cualquiera de estos componentes, todos realizados a través de servicios web, pero lo que permitió fue que diferentes investigadores ejecutaran trabajos arbitrarios contra datos arbitrarios, y también permitieron la conexión de diferentes mecanismos de programación a medida que cambiaran los requisitos.

Dejé el proyecto antes de que fuera demasiado lejos del suelo, 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 seguirán siendo los que están haciendo los algoritmos para ejecutarse, no puedo ver mucho beneficio en tener un motor de reglas a menos que manejara una sobrecarga considerable en la que incurriría cada regla o algoritmo. es propio.

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top