un pequeño sistema experto

Anuncio
ARTURO GARDUÑO APARICIO.
ICO 9
UN PEQUEÑO SISTEMA EXPERTO
El siguiente sistema plantea el siguiente problema:
Se tienen tres tanques de de gas, cada tanque tiene un respectivo sensor y un
indicador. El sensor es encargado de activar un solo ventilador el cual es
compartido por los tanques para disminuir su temperatura, ya que si los
tanques al calentarse no se enfrían pueden explotar.
El indicador de tanque mostrará que el ventilador está ocupado por otro tanque,
por lo que la atención de enfriado después de que el ventilador esta libre recae
en el tanque que muestre atención en su indicador.
Finalmente, existe una alarma la cual se activa si el sistema de vigilancia esta
apagado y los tanques se encuentren funcionando.
(clear)
(reset)
;PLANTILLAS
(deftemplate activar-ventilador(slot sensor))
(deftemplate indicador(slot sensor)(slot sensor2)(slot estado))
(deftemplate sistemaVigilancia(slot ShutD)(slot TanqF))
;REGLAS
;1
(defrule stanque3
(activar-ventilador(sensor tanque3))
=>
(printout t "Activar ventilador de tanque3" crlf)
)
;2
(defrule stanque2
(activar-ventilador(sensor tanque2))
=>
(printout t "Activar ventilador de tanque2" crlf)
)
;3
(defrule stanque1
(activar-ventilador(sensor tanque1))
=>
(printout t "Activar ventilador de tanque1" crlf)
)
;4
;Comienzan las reglas para indicador de bomba ocupada
(defrule SeItanque3_2
(indicador(sensor tanque3)(sensor2 tanque2)(estado ocupadoT3))
=>
(printout t "Ventilador de tanque3 activado indicador de tanque 2 activado" crlf)
)
ARTURO GARDUÑO APARICIO.
ICO 9
;5
(defrule SeItanque3_1
(indicador(sensor tanque3)(sensor2 tanque1)(estado ocupadoT3))
=>
(printout t "Ventilador de tanque3 activado indicador de tanque 1 activado" crlf)
)
;6
(defrule SeItanque2_3
(indicador(sensor tanque2)(sensor2 tanque3)(estado ocupadoT2))
=>
(printout t "Ventilador de tanque2 activado indicador de tanque 3 activado" crlf)
)
;7
(defrule SeItanque2_1
(indicador(sensor tanque2)(sensor2 tanque1)(estado ocupadoT2))
=>
(printout t "Ventilador de tanque2 activado indicador de tanque 1 activado" crlf)
)
;8
(defrule SeItanque1_3
(indicador(sensor tanque1)(sensor2 tanque3)(estado ocupadoT1))
=>
(printout t "Ventilador de tanque1 activado indicador de tanque 3 activado" crlf)
)
;9
(defrule SeItanque1_2
(indicador(sensor tanque1)(sensor2 tanque2)(estado ocupadoT1))
=>
(printout t "Ventilador de tanque1 activado indicador de tanque 2 activado" crlf)
)
;10
;Verificar estado de sistema de vigilancia
(defrule SV
(sistemaVigilancia(ShutD verdadero)(TanqF verdadero))
=>
(printout t "Activar sirena" crlf)
)
;11
;************INSERTANDO LOS HECHOS********************
;(assert(activar-ventilador(sensor tanque3)))
;(assert(activar-ventilador(sensor tanque2)))
;(assert(activar-ventilador(sensor tanque1)))
;(assert(indicador(sensor tanque3)(sensor2 tanque2)(estado ocupadoT3)))
;(assert(indicador(sensor tanque3)(sensor2 tanque1)(estado ocupadoT3)))
;(assert(indicador(sensor tanque2)(sensor2 tanque3)(estado ocupadoT2)))
;(assert(indicador(sensor tanque2)(sensor2 tanque1)(estado ocupadoT2)))
ARTURO GARDUÑO APARICIO.
ICO 9
;(assert(indicador(sensor tanque1)(sensor2 tanque3)(estado ocupadoT1)))
;(assert(indicador(sensor tanque1)(sensor2 tanque2)(estado ocupadoT1)))
;(assert(sistemaVigilancia(ShutD verdadero)(TanqF verdadero)))
(run)
Descargar