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:

  1. Obtener el conjunto de posibles reglas que se puedan combinar con algún hecho de la base de hechos. Esta fase se denomina equiparación de reglas con hechos. A las reglas emparejadas se las denomina reglas activas.
  2. Seleccionar algún o algunos objetos de los equiparamientos obtenidos en el paso anterior. Este paso se denomina resolución de conflictos.
  3. Disparar los equiparamientos seleccionados en la fase 2 y modificar la base de hechos según dictan los consecuentes de las reglas activas disparadas.

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

  1. Traiciona(Mc_Cluskey, Vito_Corleonne)
  2. Paga_A(Vito_Corleonne, Mc_Cluskey)

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:

  1. Seleccionar la primera regla que se equipare con la base de hechos. Esto presupone que las reglas de la base de reglas han sido ordenadas de acuerdo a algún criterio.
  2. Seleccionar la regla de prioridad más alta. Es un criterio similar al anterior salvo que a cada regla se le asigna un número que representa la prioridad.
  3. La regla más específica, es decir, aquella que se puede equiparar con un mayor número de hechos en la base de hechos.
  4. La regla que concierne al hecho añadido más recientemente a la base de hechos.
  5. Seleccionar aquella regla que nunca se ha disparado o lo contrario seleccionar aquella que se disparó más recientemente.
  6. Seleccionar una regla al azar.
  7. Explorar en paralelo los disparos de todas las reglas que equiparan con hechos de la base de hechos.

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.