
![]()
Un sistema de producción consta de una base de hechos, una base de implicaciones (llamadas producciones o reglas) y aparte un mecanismo de control (motor de inferencia)
Al contrario que en la lógica de predicados, en los sistemas de producción se realiza la suposición de que si un hecho no está presente en la base de hechos, ese hecho es falso.

El motor de la inferencia consta de los siguientes pasos:
El ciclo termina cuando en la base de hechos aparece el hecho que resuelve el problema. Los sistemas de producción son una generalización del proceso de deducción lógica. En deducción nuestro paso 3 del sistema de producción consistía exclusivamente en añadir nuevos hechos a la base de hechos.
Cuando trabajamos en lógica de predicados se supone que las fórmulas de las que partimos son consistentes, es decir que no van a generar hechos que estén en contradicción de los ya existentes. Pero en sistemas de producción, los consecuentes de las reglas son acciones a ejecutar sobre la base de hechos. En particular, esas acciones pueden añadir nuevos hechos o borrar hechos de las bases. Podría ser que se disparen dos reglas al mismo tiempo una de las cuales intenta añadir un hecho a la base y otra intenta borrarlo. Es debido a casos como este que es necesario que el paso 2 del ciclo de sistemas de producción (seleccionar una o varias reglas de todas las activas en lugar de disparar todas las reglas activas) En otras ocasiones conviene que la base de reglas puede contener producciones consistentes y dejar al sistema de resolución de conflictos que decida qué regla se va a disparar.
A veces por cuestiones de eficiencia o para comprender mejor el comportamiento de los sistemas de producción se desea que sólo se dispare una regla en cada ciclo de entre todas las posibles.
Regla 1
If Traiciona(Traidor_X, Vito_Corleonne) and
Paga_A(Vito_Corleonne, Traidor_X)
Then añade(Abrazo_Siciliano(Traidor_X))
Regla 2
If Traiciona(Traidor_X, Vito_Corleonne) and
Not Paga_A(Vito_Corleonne, Traidor_X)
Then añade(Beso_Calabrés(Traidor_X))
Regla 3
If Traiciona(Traidor_X, Vito_Corleonne) and
Paga_A(Vito_Corleonne, Traidor_X) and
Not Amigo_Personal(Traidor_X, Vito_Corleonne)
Then añade(Estrujón_Siciliano(Traidor_X))
Hechos
Emparejar:
Regla 1 con hechos A y B
If Traiciona(Mc_Cluskey, Vito_Corleonne) and
Paga_A(Vito_Corleonne, Mc_Cluskey)
Then añade(Abrazo_Siciliano(Mc_Cluskey))
Regla 3 con hechos A y B
If Traiciona(Mc_Cluskey, Vito_Corleonne) and
Paga_A(Vito_Corleonne, Mc_Cluskey) and
Not Amigo_Personal(Mc_Cluskey, Vito_Corleonne)
Then añade(Estrujón_Siciliano(Mc_Cluskey))
Resolución de Conflictos
Si se dispara la regla 1 se le aplicará a Mc_Cluskey el Abrazo Siciliano. Si se dispara la regla 3 se le aplicará a Mc_Cluskey el Estrujón Siciliano.
Estrategias:
Supongamos que don Vito le quiere encargar un trabajo fácil a su robot mafioso. Le ha dispuesto un escenario de 3 habitaciones. En la habitación C ha colocado una pistola y en la habitación A ha colocado un muñeco con gran parecido a Mc.Cluskey. El robot mismo comienza en la habitación B. En este caso, la base de hechos contendrá el estado del mundo y las reglas contendrán las formas de transformar el mundo (o lo que es lo mismo, de transformar la base de hechos) Así pues, la base de hechos inicial podría contener lo siguiente:
H1 Está (Pistola, C)
H2 Está (Robot, B)
H3 Está (figura_Mc_Cluskey, A)
H4 Hay_Puerta(B,A)
H5 Hay_Puerta(B,C)
Reglas:
Regla 1
If Está(Robot, ?Sitio) and
Está(?Objeto, ?Sitio)
Then añadir(Tiene(Robot,?Objeto)),
quitar(Está(?Objeto, ?Sitio))
Regla 2
If Está(Robot, ?Sitio1) and
Hay_Puerta(?Sitio1, ?Sitio2)
Then quitar (Está(Robot,?Sitio1)),
añadir (Está(Robot, ?Sitio2))
Regla 3
If Hay_Puerta(?Sitio1, ?Sitio2)
Then añadir (Hay_Puerta(?Sitio2, ?Sitio1))
Regla 4
If Está(Figura_Mc_Cluskey, ?Sitio) and
Está(Robot, ?Sitio) and
Not Tiene (Robot, Pistola)
Then quitar (esta(robot,?sitio))
Regla 5
If Está(Figura_Mc_Cluskey, ?Sitio) and
Está(Robot, ?Sitio) and
Tiene (Robot, Pistola)
Then quitar (esta(Figura_Mc_Cluskey,?sitio))
El ejercicio va a finalizar cuando desaparezca una de los siguientes hechos:
Está(Figura_Mc_Cluskey, ?Sitio)
Está(Robot, ?Sitio)
En el primer caso el robot ha triunfado en su misión y en el segundo habría fracasado.
Las dos únicas reglas que se pueden disparar al inicio son la 2 y la 3. Las reglas 4 y 5 hacen mención de una función que no se encuentra en la base de hechos: tiene(...) y la regla 1 no se cumple aún porque el robot se encuentra en una habitación sin ningún objeto. Emparejaremos como muestra, la regla 1 con el hecho 2:
If Está(Robot, B) and ;hemos reemplazado ?sitio=B
Está(Robot, B) ;?objeto=Robot, ?sitio=B
Then añadir(Tiene(Robot,Robot)),
quitar(Está(Robot, B)) ;no hay consistencia
Analizaremos en paralelo los disparos de las reglas que equiparan con hechos en la base:

Después de haber seleccionado la regla 2 con los hechos H2 y H5, la base de hechos se verá modificada:
H1 Está (Pistola, C)
H2 Está (Robot, C)
H3 Está (figura_Mc_Cluskey, A)
H4 Hay_Puerta(B,A)
H5 Hay_Puerta(B,C)

Si seleccionamos la regla 3 con H5, a la base de hechos se le agregará un nuevo hecho:
H1 Está (Pistola, C)
H2 Está (Robot, C)
H3 Está (figura_Mc_Cluskey, A)
H4 Hay_Puerta(B,A)
H5 Hay_Puerta(B,C)
H6 Hay_Puerta(C,B)
Ahora, sí podríamos emparejar la regla 1 con H2:
If Está(Robot, C) and
Está(Pistola, C)
Then añadir(Tiene(Robot,Pistola)),
quitar(Está(Pistola, C))
Al dispararse esta regla la base de hechos va a presentar un nuevo cambio:
H1 Tiene (Robot, Pistola)
H2 Está (Robot, C)
H3 Está (figura_Mc_Cluskey, A)
H4 Hay_Puerta(B,A)
H5 Hay_Puerta(B,C)
H6 Hay_Puerta(C,B)
Ahora emparejamos la regla 2 con H2 y con H6:
If Está(Robot, C) and
Hay_Puerta(C, B)
Then quitar (Está(Robot,C)),
añadir (Está(Robot, B))
Con esto la base de hechos se modificó una vez más:
H1 Tiene (Robot, Pistola)
H2 Está (Robot, B)
H3 Está (figura_Mc_Cluskey, A)
H4 Hay_Puerta(B,A)
H5 Hay_Puerta(B,C)
H6 Hay_Puerta(C,B)
Si se vuelve a disparar la regla 2 con H2 y con H4:
If Está(Robot, B) and
Hay_Puerta(B, A)
Then quitar (Está(Robot,B)),
añadir (Está(Robot, A))
Con esto la base de hechos otra vez ha sido alterada:
H1 Tiene (Robot, Pistola)
H2 Está (Robot, A)
H3 Está (figura_Mc_Cluskey, A)
H4 Hay_Puerta(B,A)
H5 Hay_Puerta(B,C)
H6 Hay_Puerta(C,B)
Ahora emparejaremos la regla 5 con H1, H2 y H3:
If Está(Figura_Mc_Cluskey, A) and
Está(Robot, A) and
Tiene (Robot, Pistola)
Then quitar (esta(Figura_Mc_Cluskey,A))
Por lo tanto, la base quedará así:
H1 Tiene (Robot, Pistola)
H2 Está (Robot, A)
H4 Hay_Puerta(B,A)
H5 Hay_Puerta(B,C)
H6 Hay_Puerta(C,B)
Y el robot ha cumplido su misión!!! A lo largo del ejercicio anterior (para ahorrar espacio) hemos supuesto que nuestra estrategia de resolución de conflictos siempre va a seleccionar la regla correcta en cada situación. En la realidad sería prácticamente imposible alcanzar esta perfección, por lo que serían necesarias muchas vueltas atrás en cuanto el motor de inferencia se encontrará en un callejón sin salida.