La aplicación en la que estoy trabajando es una especie de "configurador". Está escrito en C# e incluso escribí un motor de reglas para ir con él. La idea es que hay un montón de declaraciones lógicas proposicionales, y el usuario puede hacer selecciones. En función de lo que hayan seleccionado, algunos otros elementos son necesarios o no están disponibles por completo.Prolog Beginner - ¿Es esta una mala idea?
Las declaraciones lógica proposicional generalmente toman las siguientes formas:
A => ~X
ABC => ~(X+Y)
A+B => Q
A(~(B+C)) => ~Q A <=> B
Los símbolos:
=> -- Implication
<=> -- Material Equivalence
~ -- Not
+ -- Or
Two letters side-by-side -- And
que soy muy nuevo en Prolog, pero parece que podría ser capaz de manejar todos del "procesamiento de reglas" para mí, lo que me permite salir de mi actual motor de reglas (funciona, pero no es tan rápido o fácil de mantener como me gustaría).
Además, todas las opciones disponibles caen en una jerarquía. Por ejemplo:
Outside
Color
Red
Blue
Green
Material
Wood
Metal
Si un artículo en el segundo nivel (función, como el color) se da a entender, a continuación, un artículo en el tercer nivel (opción, tal como Red) se debe seleccionar. De manera similar, si sabemos que una característica es falsa, todas las opciones debajo de ella también son falsas.
El problema es que cada producto tiene su propio conjunto de reglas. ¿Es un enfoque razonable establecer una base de conocimiento que contenga estos operadores como predicados, y luego, en tiempo de ejecución, comenzar a compilar todas las reglas del producto?
La forma en que imagino que podría funcionar sería establecer la idea de los componentes, las funciones y las opciones. Luego configure las relaciones entre entonces (por ejemplo, si la característica es falsa, entonces todas sus opciones son falsas). En tiempo de ejecución, agregue las reglas específicas del producto. Luego pase todas las selecciones del usuario a una función, recuperando como salida qué elementos son verdaderos y qué elementos son falsos.
No sé todas las implicaciones de lo que estoy preguntando, ya que estoy entrando en Prolog, pero estoy tratando de evitar tomar un mal camino y perder mucho tiempo en el proceso.
Algunas preguntas que pueden ayudar a orientar lo que estoy tratando de averiguar:
- ¿Suena esto factible?
- ¿Estoy ladrando en el árbol equivocado?
- ¿Existen inconvenientes o inquietudes al tratar de crear todas estas reglas en tiempo de ejecución?
- ¿Existe un mejor sistema para este tipo de cosas que pueda ser capaz de exprimir en una aplicación C# (Silverlight, para ser exactos)?
- ¿Hay otros sistemas de la competencia que deba examinar?
- ¿Tiene algún consejo general sobre este tipo de cosas?
Gracias de antemano por su consejo!
Me gustaría cambiar el título de esta pregunta, por lo que contiene la frase "configuración del producto" o algo así. Usted se escribe a sí mismo "El problema es que cada producto tiene su propio conjunto de reglas", por lo que creo que está más interesado en este campo que en la lógica en general. –