Pregunta

Estoy trabajando en un motor de decisión/motor de evaluación de reglas.Por ejemplo:

Aporte:Cliente y todas las infracciones cometidas por el cliente.

Producción:Consecuencias de las infracciones

Un caso de muestra sería:

Aporte:Cliente (Jhonny Chimpo, 999-00-1111), Infracciones (Rompió ventana, abofeteó al jefe, pateó al líder del equipo en la ingle)

Producción:Recibe nota rosa

Entonces, el fragmento de código que quiero escribir evalúa diferentes delitos según las reglas para cada delito y el delito combinado.El código actual es sólo un laberinto de declaraciones if y else.Estoy seguro de que estos problemas comerciales son comunes.¿Qué patrón de diseño/empresa se suele utilizar para resolver un problema como este?

¿Es el patrón de especificación?Quiero que el código esté abierto a extensiones, limpio y flexible.

¿Fue útil?

Solución

Básicamente se parecen las reglas comerciales

forall rules:
  if <condition> then doAction();

¿Qué hay de clasificar todos los delitos por gravedad utilizando puntajes, quizás una bonificación adicional para "malhumnas" frecuentes, algunos delitos pueden ser acortados en el tiempo y lo que sea necesario?

Entonces un borrador de un algoritmo podría ser:

  • Suma de todos los puntajes de un cliente (ponderado)
  • Comparar con el máximo

Esto sería sencillo utilizando estructuras de datos en lugar de muchas (posiblemente profundamente anidadas) si ... entonces ... else cosas.

Otros consejos

Puedo sugerirle una herramienta que usamos para resolver un problema similar.

Echa un vistazo a JBoss Brools: http://www.jboss.org/drools/

Es un BRMS: sistema de gestión de reglas comerciales

Aquí es un video introductorio: http://www.jboss.com/products/platforms/brms/

No estoy seguro de que ninguna de las respuestas anteriores haya sido tan útil.

He escrito componentes similares usando árboles de expresión. Puede construir expresiones lambda que representen predicados, compilarlas y ejecutarlas, todo dinámicamente, y luego activar alguna acción en respuesta. Este enfoque es poderoso, flexible y elimina todo el horror IF/Else (que definitivamente no es el camino a seguir).

Sin embargo, de lo que realmente estás hablando es la programación lógica. Existen numerosas implementaciones de Prolog sobre .NET. Prolog es un lenguaje basado en lógica, utilizado mucho para aplicaciones de IA, que comienza a ser muy poderosa una vez que tiene la cabeza alrededor de su paradigma.

Eche un vistazo a algunos de estos ...

Podrías probar algo similar a Este motor de reglas "basado en eventos"

Creo que cualquier motor de reglas basado en algoritmo REE funcionaría para su caso. Puedes probar babeos.

Creo que estás tratando de desarrollar un sistema experto. Puede verificar el término y luego verificar los lenguajes de programación apropiados como Prolog, etc.

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