Informe CLIPS

También podría gustarte

Está en la página 1de 10

Alfonso Adiego Gonzalez - 02664983L

ITI Informática de Gestión


Sistemas basados en el conocimiento I

PRACTIC A CLIPS
El informe de practica que se detalla corresponde con el ejercicio “Concesión de Créditos”
propuesto por el equipo docente de la asignatura.

Una vez estudiado el informe que sirve como enunciado del problema se ha resuelto dividir la
resolución del mismo en 3 partes fundamentales

I. Recogida de datos

II. Estudio y consideración de datos

III. Regla-atras para obtener dictamen

Datos iniciales y plantillas


Usaremos un sistema regla-atras, por lo que necesitaremos una plantilla que defina como son
esas reglas y una para definir el objetivo buscado. Así mismo necesitaremos unos hechos que definirán
la situación del cliente y otros datos donde recoger, a fin de evaluar, los datos que le solicitemos.

(deftemplate

datos (multislot propiedad)(slot valor (type INTEGER))
)
(deftemplate

hecho (slot datos)(slot valor)
)
(deftemplate

objetivo (slot propiedad)
)
(deftemplate regla-atras

(multislot antecedentes)

(multislot consecuentes)
)

La imagen inicial del sistema se compone de todas las regla-atras recogida en el informe del
experto, valores iniciales para los sumarios intermedios (mas adelante se explica su uso), el objetivo
buscado y el juego de hechos iniciales del usuario que serán modificados (o no) mas adelante.

(deffacts condiciones-inicio

(inicio (estado 0))

(datos (propiedad Sumpersonales)(valor 0))

(datos (propiedad Sumoperacion)(valor 0))

(datos (propiedad Sumriesgo)(valor 0))

(hecho (datos economicos)(valor positivos))

(hecho (datos personales)(valor positivos))

(hecho (datos operacion)(valor positivos))

(hecho (datos riesgo)(valor positivos))

(hecho (datos clientela)(valor positivos))

(hecho (datos garantias)(valor positivos))

(objetivo (propiedad dictamen))
)



(deffacts reglas
Alfonso Adiego Gonzalez - 02664983L


(regla-atras


(antecedentes economicos positivos personales duda clientela duda riesgo duda)


(consecuentes dictamen negativo)

)
Se incluye una de las numerosas reglas atrás a fin de ver su aspecto

Recogida de datos
Para definir el estado en que se encuentra el sistema en cada instante tendremos un hecho
(inicio) que define de forma numéricamente la situación sobre la que trabajar.

Para recoger los datos, empezamos en el estadio 0. Esto activa la regla solicitar-datos donde se
requieren al usuario todos los datos pertinentes para obtener el dictamen sobre el credito

(defrule solicitar-datos

?inicio <- (inicio (estado ?estado&:(= ?estado 0)))

=>

(modify ?inicio (estado 1))

(printout t "Destino Credito (2 Riesgo alto / 1 Riesgo bajo"crlf)(bind ?dato (read))(assert (datos (propiedad
operacion destino)(valor ?dato)))

etc....
A su vez se modifica el hecho de estado para activar las reglas de determinación de datos finales,
los cuales alimentaran la regla atrás.

Todos los datos requeridos han de ser enteros para poder definir numéricamente el grado de
riesgo que representa cada uno de ellos. Los datos aceptados se encuentran indicados cada vez que
son solicitados

Estudio y consideración de datos


Una vez tenemos todos los datos almacenamos en unos hechos especiales (previamente
definidos) el sumario de los valores introducidos atendiendo a sobre que informe aportan datos. Así
por ejemplo para los datos personales tenemos

(defrule sumatorio_personal

(inicio (estado ?estado&:(= ?estado 1)))

?dato<-(datos (propiedad personales $?)(valor ?valor))

?general <-(datos (propiedad Sumpersonales)(valor ?oldValor))

=>

(modify ?general (valor (+ ?valor ?oldValor)))

(retract ?dato)
)

Debemos conocer por tanto el rango de valores mínimo y máximo de cada sumatorio para
poder estimar a que llamaremos un informe positivo, uno negativo o uno dudoso. En el indicado
anteriormente el sumatorio únicamente podrá valores desde 5 hasta 20, pudiendo definir así que
aquellos usuarios cuyos datos personales sumen de 5 a 12 puntos de riesgo tienen un informe
positivo,13 o 14 dudoso, y mayor negativo

(defrule PersonalesPositivos

(inicio (estado ?estado&:(= ?estado 1)))

?hecho <- (hecho (datos personales))

?dato <- (datos (propiedad Sumpersonales)(valor ?valor))

(test (> 12 ?valor))

=>

(retract ?dato)
Alfonso Adiego Gonzalez - 02664983L

)
(defrule PersonalesNegativos

(inicio (estado ?estado&:(= ?estado 1)))

?hecho <- (hecho (datos personales))

?dato <- (datos (propiedad Sumpersonales)(valor ?valor))

(test (< 13 ?valor))

=>

(modify ?hecho (valor negativos))

(retract ?dato)
)
(defrule PersonalesDuda

(inicio (estado ?estado&:(= ?estado 1)))

?hecho <- (hecho (datos personales))

?dato <- (datos (propiedad Sumpersonales)(valor ?valor))

(test (< 11 ?valor))

(test (> 14 ?valor))

=>

(modify ?hecho (valor duda))

(retract ?dato)
)

Notese que los datos personales positivos no se modifican dado que estaban incluidos como hechos de inicio.
Unicamente se elimina el sumatorio

Actuando de forma análoga para los datos de operacion, relación, clientela y garantias obtenemos
todos los datos positivos o negativos necesarios para obtener el dictamen (se incluye copia del código
completo al final de este informe).

Para los datos economicos se ha seguido otra estrategia, ya que no es posible definir mediante un
rango los requisitos pedidos en el informe. Para ello se han creado reglas especificas que detectan si
un credito o cliente no cumple los requisitos economicos necesarios.

(defrule BalanceNegativo (declare (salience 19))



(inicio (estado ?estado&:(= ?estado 1)))

?hecho <- (hecho (datos economicos))

?dato <- (datos (propiedad balance)(valor ?valor&:(< ?valor 0)))

=>

(retract ?hecho)

(retract ?dato)

(assert (hecho (datos economicos)(valor negativos)))
)
(defrule PlazoExcesivo (declare (salience 19))

(inicio (estado ?estado&:(= ?estado 1)))

?hecho <- (hecho (datos economicos))

?dato <- (datos (propiedad plazo)(valor ?valor))

(test (< 36 ?valor))

=>

(modify ?hecho (valor negativos))

(retract ?dato)
)
(defrule PlazoJusto (declare (salience 19))

(inicio (estado ?estado&:(= ?estado 1)))

?hecho <- (hecho (datos economicos))

?dato <- (datos (propiedad plazo)(valor ?valor))

(test (= 36 ?valor))

=>

(modify ?hecho (valor duda))

(retract ?dato)
)
(defrule MuchaPasta (declare (salience 19))
Alfonso Adiego Gonzalez - 02664983L


(inicio (estado ?estado&:(= ?estado 1)))

?hecho <- (hecho (datos garantias))

?dato <- (datos (propiedad importe)(valor ?valor))

?dato2<- (datos (propiedad casa)(valor ?valor2))

(test (< 1500000 ?valor))

(test (> 1 ?valor2))

=>

(modify ?hecho (valor negativos))

(retract ?dato)

(retract ?dato2)
)
Estas funciones deben tener una prioridad mayor en la agenda, ya que no han sido contempladas en la condicion para
pasar al siguiente estadio y por tanto garantizar así su ejecución.

Establecemos el siguiente nivel y entra la inferencia de la regla-atras en juego

(defrule nextLevel

(not (datos (propiedad Sumpcliente)))

(not (datos (propiedad Sumpriesgo)))

(not (datos (propiedad Sumpoperacion)))

(not (datos (propiedad Sumpersonales)))

?x <- (inicio (estado ?estado&:(= ?estado 1)))

=>

(modify ?x (estado 2))
)

Regla Atrás
En el problema propuesto, no existen consecuentes que puedan ser contenidos en antecedentes
de otras reglas atrás, por tanto no nos hace falta evaluar reglas para añadir esos antecedente como
objetivos.

Buscaremos aquellos antecedentes que contengan los datos economicos, personales, etc que
hemos obtenido anteriormente y los iremos eliminando de dichos antecedentes

(defrule sig-antecedente (declare (salience 10))



(inicio (estado ?estado&:(= ?estado 2)))

(objetivo (propiedad ?obj))

(hecho (datos ?propiedad)(valor ?valor))

?regla <- (regla-atras (antecedentes ?propiedad ?valor $?resto)(consecuentes ?obj ?valor-obj))

=>

(modify ?regla (antecedentes $?resto))
)

Una vez nos encontremos en el punto en que existe una regla atrás que solo tiene un ultimo
dato en su antecedente, habremos llegado a la solución, resultando el antecedente la solución del
problema, en este caso el dictamen

(defrule afirmar-consecuente (declare (salience 15))



?x <- (inicio (estado ?estado&:(= ?estado 2)))

?objetivo <- (objetivo (propiedad ?obj))

(hecho (datos ?propiedad)(valor ?valor))

(regla-atras (antecedentes ?propiedad ?valor)(consecuentes ?obj ?valor-obj))

=>

(retract ?objetivo)

(printout t "El Dictamen resulta:"?valor-obj crlf)

(modify ?x (estado 3))

Alfonso Adiego Gonzalez - 02664983L

)
Esta regla presenta un prioridad mayor que sig-antecedente para que esta ultima no elimine el ultimo antecedente y
nos deje con una regla inservible

Se añade también una regla que detecta y elimina regla-atras que resulten fallidas, no validas

(defrule regla-fallida (declare (salience 10))



(inicio (estado ?estado&:(= ?estado 2)))

(objetivo (propiedad ?obj))

(hecho (datos ?propiedad)(valor ?valor))

?regla <- (regla-atras (antecedentes ?propiedad ~?valor)(consecuentes ?obj ?valor-obj))

=>

(retract ?regla)
)

Código completo
Alfonso Adiego Gonzalez - 02664983L

(deftemplate

inicio (slot estado(type INTEGER)))
(deftemplate

datos (multislot propiedad)(slot valor (type INTEGER))
)
(deftemplate

hecho (slot datos)(slot valor)
)
;Plantilla de los objetivos
(deftemplate

objetivo (slot propiedad)
)
;Plantilla de las reglas atras
(deftemplate regla-atras

(multislot antecedentes)

(multislot consecuentes)
)
(deffacts reglas

(regla-atras


(antecedentes economicos negativos)


(consecuentes dictamen negativo)

)

(regla-atras


(antecedentes economicos positivos personales negativos riesgo negativo)


(consecuentes dictamen negativo)

)

(regla-atras


(antecedentes economicos positivos personales negativos riesgo duda)


(consecuentes dictamen negativo)

)

(regla-atras


(antecedentes economicos positivos personales negativos clientela negativo)


(consecuentes dictamen negativo)

)

(regla-atras


(antecedentes economicos positivos personales negativos clientela duda)


(consecuentes dictamen negativo)

)



(regla-atras


(antecedentes economicos duda garantias negativos)


(consecuentes dictamen negativo)

)

(regla-atras


(antecedentes economicos duda personales negativos )


(consecuentes dictamen negativo)

)

(regla-atras


(antecedentes economicos duda personales duda )


(consecuentes dictamen negativo)

)

(regla-atras


(antecedentes economicos duda clientela negativos)


(consecuentes dictamen negativo)

)

(regla-atras


(antecedentes economicos duda clientela duda)


(consecuentes dictamen negativo)

)

(regla-atras


(antecedentes economicos duda riesgo negativos)


(consecuentes dictamen negativo)

)

(regla-atras


(antecedentes economicos duda riesgo duda)


(consecuentes dictamen negativo)

)



(regla-atras


(antecedentes economicos positivos personales duda clientela duda riesgo duda)


(consecuentes dictamen negativo)

)

(regla-atras


(antecedentes economicos positivos personales duda clientela duda riesgo negativos)


(consecuentes dictamen negativo)

)

(regla-atras


(antecedentes economicos positivos personales duda clientela negativos riesgo duda)


(consecuentes dictamen negativo)

)

(regla-atras


(antecedentes economicos positivos personales duda clientela negativos riesgo negativos)


(consecuentes dictamen negativo)

)

(regla-atras


(antecedentes economicos positivos personales duda clientela positivos riesgo negativos)


(consecuentes dictamen negativo)

)

(regla-atras


(antecedentes economicos positivos personales duda negativos duda riesgo positivos)


(consecuentes dictamen negativo)

)



(regla-atras


(antecedentes economicos positivos personales positivos clientela positivos riesgo positivos)


(consecuentes dictamen positivo)

)

(regla-atras


(antecedentes economicos positivos personales positivos clientela positivos riesgo duda)
Alfonso Adiego Gonzalez - 02664983L



(consecuentes dictamen positivo)

)

(regla-atras


(antecedentes economicos positivos personales positivos clientela duda riesgo positivos)


(consecuentes dictamen positivo)

)

(regla-atras


(antecedentes economicos positivos personales positivos clientela duda riesgo duda)


(consecuentes dictamen positivo)

)

(regla-atras


(antecedentes economicos positivos personales positivos clientela negativos riesgo negativos garantias positivos)


(consecuentes dictamen positivo)

)

(regla-atras


(antecedentes economicos positivos personales positivos clientela negativos riesgo positivos)


(consecuentes dictamen positivo)

)

(regla-atras


(antecedentes economicos positivos personales positivos clientela negativos riesgo duda)


(consecuentes dictamen positivo)

)

(regla-atras


(antecedentes economicos positivos personales positivos clientela positivos riesgo negativos)


(consecuentes dictamen positivo)

)



(regla-atras


(antecedentes economicos positivos personales positivos clientela duda riesgo negativos)


(consecuentes dictamen positivo)

)



(regla-atras


(antecedentes economicos positivos personales duda clientela positivos riesgo positivos)


(consecuentes dictamen positivo)

)

(regla-atras


(antecedentes economicos positivos personales duda clientela duda riesgo duda garantias positivos)


(consecuentes dictamen positivo)

)

(regla-atras


(antecedentes economicos positivos personales duda clientela positivos riesgo positivos garantias positivos)


(consecuentes dictamen positivo)

)

(regla-atras


(antecedentes economicos positivos personales negativos clientela positivos riesgo positivos)


(consecuentes dictamen positivo)

)

(regla-atras


(antecedentes economicos positivos personales duda clientela positivos riesgo duda garantias negativos)


(consecuentes dictamen duda)

)

(regla-atras


(antecedentes economicos positivos personales duda clientela duda riesgo positivos garantias negativos)


(consecuentes dictamen duda)

)

(regla-atras


(antecedentes economicos positivos personales positivos clientela negativos riesgo negativos garantias negativos)


(consecuentes dictamen duda)

)








)
;Ahora sacamos la regla para pedir los datos
(deffacts condiciones-inicio

(inicio (estado 0))

(datos (propiedad Sumpersonales)(valor 0))

(datos (propiedad Sumoperacion)(valor 0))

(datos (propiedad Sumriesgo)(valor 0))

(hecho (datos economicos)(valor positivos))

(hecho (datos personales)(valor positivos))

(hecho (datos operacion)(valor positivos))

(hecho (datos riesgo)(valor positivos))

(hecho (datos clientela)(valor positivos))

(hecho (datos garantias)(valor positivos))



(objetivo (propiedad dictamen))
)


;Si nos encontramos en el estadio 0 entonces cogemos todos los datos y pasamos a estadio 1
(defrule solicitar-datos

?inicio <- (inicio (estado ?estado&:(= ?estado 0)))

=>

(modify ?inicio (estado 1))

;Datos de la operacion (pto min 2, medio 4, max 6)

(printout t "Destino Credito (2 Riesgo alto / 1 Riesgo bajo"crlf)(bind ?dato (read))(assert (datos (propiedad operacion destino)(valor ?
dato)))

(printout t "Tipo Articulo (Introduzca Nivel de riesgo 1-4)"crlf)(bind ?dato (read))(assert (datos (propiedad operacion tipo)(valor ?
dato)))



;Datos economicos

(printout t "Importe (En Euros)"crlf)(bind ?dato (read))(assert (datos (propiedad importe)(valor ?dato)))

(printout t "Plazo operacion (En meses)"crlf)(bind ?dato (read))(assert (datos (propiedad plazo)(valor ?dato)))

(printout t "Patrimonio o vivienda"crlf)(bind ?dato (read))(assert (datos (propiedad casa)(valor ?dato)))

(printout t "Balance de Cja"crlf)(bind ?dato (read))(assert (datos (propiedad balance)(valor ?dato)))



Alfonso Adiego Gonzalez - 02664983L


;Datos Personales (pto medio = 10)

(printout t "Tramo Edad (1 +55, 2 +-45, 3 +-30, 4 18 a 25, 5 mas de 70)"crlf)(bind ?dato (read))(assert (datos (propiedad
personales edad)(valor ?dato)))

(printout t "Estado Civil (1 Casado, 2 Viudo, 3 Soltero, 4 Divorciado)"crlf)(bind ?dato (read))(assert (datos (propiedad personales
status)(valor ?dato)))

(printout t "Situacion Laboral(1 Fijo, 2 Autonomo, 3 Temporal, 4 eventual, 5 Parado)"crlf)(bind ?dato (read))(assert (datos (propiedad
personales curro)(valor ?dato)))

(printout t "antigüedad(1 +5, 2 3a5, 3 1a2, 4 menos de 1)"crlf)(bind ?dato (read))(assert (datos (propiedad personales antigu)
(valor ?dato)))

(printout t "Cargo (0 alto cargo, 1 ejecutivo, 2 Obrero especializado, 3 No especializado, 4 Comercial)"crlf)(bind ?dato (read))(assert
(datos (propiedad personales cargo)(valor ?dato)))



;Datos Riesgo y Relacion

(printout t "Relacion como cliente de este banco (1 Buen cliente, 2 No es Cliente, 3 Es mal cliente)"crlf)(bind ?dato (read))(assert
(datos (propiedad Sumcliente)(valor ?dato)))

(printout t "Filtros economicos (1 limpio, 2 deudas, 3 impagos)"crlf)(bind ?dato (read))(assert (datos (propiedad riesgo filtro)(valor ?
dato)))

(printout t "Referencias con otras entidades (1 buenas, 2 alguna mora, 3 impagos"crlf)(bind ?dato (read))(assert (datos (propiedad
riesgo referencias)(valor ?dato)))
)
;Segun el informe, si el balance de caja es negativo, el prestamo es para mas de 36 meses o se pide mas de 1,5 millones sin tener casa se
deniega.
;Usaremos tambien el criterio economico para denegar directamente a los parados y a los abuelos, ya que un criterio economivo negativo
deniega directamente.
(defrule BalanceNegativo (declare (salience 19))

(inicio (estado ?estado&:(= ?estado 1)))

?hecho <- (hecho (datos economicos))

?dato <- (datos (propiedad balance)(valor ?valor&:(< ?valor 0)))

=>

(retract ?hecho)

(retract ?dato)

(assert (hecho (datos economicos)(valor negativos)))
)
(defrule PlazoExcesivo (declare (salience 19))

(inicio (estado ?estado&:(= ?estado 1)))

?hecho <- (hecho (datos economicos))

?dato <- (datos (propiedad plazo)(valor ?valor))

(test (< 36 ?valor))

=>

(modify ?hecho (valor negativos))

(retract ?dato)
)
(defrule PlazoJusto (declare (salience 19))

(inicio (estado ?estado&:(= ?estado 1)))

?hecho <- (hecho (datos economicos))

?dato <- (datos (propiedad plazo)(valor ?valor))

(test (= 36 ?valor))

=>

(modify ?hecho (valor duda))

(retract ?dato)
)
(defrule MuchaPasta (declare (salience 19))

(inicio (estado ?estado&:(= ?estado 1)))

?hecho <- (hecho (datos garantias))

?dato <- (datos (propiedad importe)(valor ?valor))

?dato2<- (datos (propiedad casa)(valor ?valor2))

(test (< 1500000 ?valor))

(test (> 1 ?valor2))

=>

(modify ?hecho (valor negativos))

(retract ?dato)

(retract ?dato2)
)

;control de datos personales. Rango de 5 a 20


(defrule sumatorio_personal

(inicio (estado ?estado&:(= ?estado 1)))

?dato<-(datos (propiedad personales $?)(valor ?valor))

?general <-(datos (propiedad Sumpersonales)(valor ?oldValor))

=>

(modify ?general (valor (+ ?valor ?oldValor)))

(retract ?dato)
)
(defrule PersonalesPositivos

(inicio (estado ?estado&:(= ?estado 1)))

?hecho <- (hecho (datos personales))

?dato <- (datos (propiedad Sumpersonales)(valor ?valor))

(test (> 12 ?valor))

=>

(retract ?dato)
)
(defrule PersonalesNegativos

(inicio (estado ?estado&:(= ?estado 1)))

?hecho <- (hecho (datos personales))

?dato <- (datos (propiedad Sumpersonales)(valor ?valor))

(test (< 13 ?valor))

=>

(modify ?hecho (valor negativos))

(retract ?dato)
)
(defrule PersonalesDuda

(inicio (estado ?estado&:(= ?estado 1)))

?hecho <- (hecho (datos personales))

?dato <- (datos (propiedad Sumpersonales)(valor ?valor))

(test (< 11 ?valor))

(test (> 14 ?valor))
Alfonso Adiego Gonzalez - 02664983L


=>

(modify ?hecho (valor duda))

(retract ?dato)
)
;Control de datos de operacion. Rango 2 a 6
(defrule sumatorio_operacion

(inicio (estado ?estado&:(= ?estado 1)))

?dato<-(datos (propiedad operacion $?)(valor ?valor))

?general <-(datos (propiedad Sumoperacion)(valor ?oldValor))

=>

(modify ?general (valor (+ ?valor ?oldValor)))

(retract ?dato)
)
(defrule OperacionNegativos

(inicio (estado ?estado&:(= ?estado 1)))

?hecho <- (hecho (datos operacion))

?dato <- (datos (propiedad Sumoperacion)(valor ?valor))

(test (< 4 ?valor))

=>

(modify ?hecho (valor negativos))

(retract ?dato)
)
(defrule OperacionPositivos

(inicio (estado ?estado&:(= ?estado 1)))

?hecho <- (hecho (datos operacion))

?dato <- (datos (propiedad Sumoperacion)(valor ?valor))

(test (> 4 ?valor))

=>

(retract ?dato)
)
(defrule OperacionDuda

(inicio (estado ?estado&:(= ?estado 1)))

?hecho <- (hecho (datos operacion))

?dato <- (datos (propiedad Sumoperacion)(valor ?valor))

(test (= 4 ?valor))

=>

(modify ?hecho (valor duda))

(retract ?dato)
)
;Control de datos de riesgo. Rango de 2 a 6
(defrule sumatorio_relacion

(inicio (estado ?estado&:(= ?estado 1)))

?dato<-(datos (propiedad riesgo $?)(valor ?valor))

?general <-(datos (propiedad Sumriesgo)(valor ?oldValor))

=>

(modify ?general (valor (+ ?valor ?oldValor)))

(retract ?dato)
)
(defrule RelacionPositivos

(inicio (estado ?estado&:(= ?estado 1)))

?hecho <- (hecho (datos riesgo))

?dato <- (datos (propiedad Sumriesgo)(valor ?valor))

(test (> 4 ?valor))

=>

(retract ?dato)
)
(defrule RelacionNegativos

(inicio (estado ?estado&:(= ?estado 1)))

?hecho <- (hecho (datos riesgo))

?dato <- (datos (propiedad Sumriesgo)(valor ?valor))

(test (< 4 ?valor))

=>

(modify ?hecho (valor negativos))

(retract ?dato)
)
(defrule RelacionDuda

(inicio (estado ?estado&:(= ?estado 1)))

?hecho <- (hecho (datos riesgo))

?dato <- (datos (propiedad Sumriesgo)(valor ?valor))

(test (= 4 ?valor))

=>

(modify ?hecho (valor duda))

(retract ?dato)
)
;Control de datos de cliente y relacion. Rango 1 a 3
(defrule RiesgoPositivos

(inicio (estado ?estado&:(= ?estado 1)))

?hecho <- (hecho (datos clientela))

?dato <- (datos (propiedad Sumcliente)(valor ?valor))

(test (> 2 ?valor))

=>

(retract ?dato)
)
(defrule RiesgoNegativos

(inicio (estado ?estado&:(= ?estado 1)))

?hecho <- (hecho (datos clientela))

?dato <- (datos (propiedad Sumcliente)(valor ?valor))

(test (< 2 ?valor))

=>

(modify ?hecho (valor negativos))

(retract ?dato)
)
(defrule RiesgoDuda

(inicio (estado ?estado&:(= ?estado 1)))

?hecho <- (hecho (datos clientela))

?dato <- (datos (propiedad Sumcliente)(valor ?valor))
Alfonso Adiego Gonzalez - 02664983L


(test (= 2 ?valor))

=>

(modify ?hecho (valor duda))

(retract ?dato)
)
;Establecemos el siguiente nivel que lanza la regla atras
(defrule nextLevel

(not (datos (propiedad Sumpcliente)))

(not (datos (propiedad Sumpriesgo)))

(not (datos (propiedad Sumpoperacion)))

(not (datos (propiedad Sumpersonales)))

?x <- (inicio (estado ?estado&:(= ?estado 1)))

=>

(modify ?x (estado 2))
)
(defrule sig-antecedente (declare (salience 10))

(inicio (estado ?estado&:(= ?estado 2)))

(objetivo (propiedad ?obj))

(hecho (datos ?propiedad)(valor ?valor))

?regla <- (regla-atras (antecedentes ?propiedad ?valor $?resto)(consecuentes ?obj ?valor-obj))

=>

(modify ?regla (antecedentes $?resto))
)
(defrule afirmar-consecuente (declare (salience 15))

?x <- (inicio (estado ?estado&:(= ?estado 2)))

?objetivo <- (objetivo (propiedad ?obj))

(hecho (datos ?propiedad)(valor ?valor))

(regla-atras (antecedentes ?propiedad ?valor)(consecuentes ?obj ?valor-obj))

=>

(retract ?objetivo)

(printout t "El Dictamen resulta:"?valor-obj crlf)

(modify ?x (estado 3))

)
(defrule regla-fallida (declare (salience 10))

(inicio (estado ?estado&:(= ?estado 2)))

(objetivo (propiedad ?obj))

(hecho (datos ?propiedad)(valor ?valor))

?regla <- (regla-atras (antecedentes ?propiedad ~?valor)(consecuentes ?obj ?valor-obj))

=>

(retract ?regla)
)

También podría gustarte