-
Notifications
You must be signed in to change notification settings - Fork 0
/
3.coche.CLP
134 lines (118 loc) · 4.08 KB
/
3.coche.CLP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
; Ejercicio 3:
; La figura 1 muestra un fragmento de una red causal que modela conocimiento
; del dominio para la tarea de diagnosis en el dominio de los automóviles. La
; red asocia posibles causas de fallo –fusible fundido, batería baja o depósito
; de combustible vacío–con estados intermedios –potencia, combustible en
; motor– y síntomas –comportamiento motor, inspección fusible, indicador
; batería... –. Se puede observar que la red refleja la dirección causal: la
; causa “Depósito de combustible vacío” tiene como efecto “Combustible en
; motor falso” que a su vez es causa de “Comportamiento motor se para”.
; a) A partir de la Red de la figura 1, elaborar una base de conocimiento
; basada en reglas utilizando el formalismo objeto-atributo-valor y un
; lenguaje proposicional (sin variables).
; b) Codificar la base de reglas elaborada en a) en CLIPS, utilizando
; patrones ordenados.
; c) Probar los siguientes escenarios:
; 1. Se observa que el motor no arranca y que el indicador de batería
; marca cero.
; 2. Se observa que el motor se para y que el indicador de combustible
; marca cero
;; Objetos:
;; O = {coche, motor, potencia, batería, fusible, combustible, depósito}
;; DA = {
;; coche.seParas: {true, false},
;; motor.arrancas: {true, false},
;; motor.combustibles: {true, false},
;; potencia.conectadas: {true, false},
;; bateria.indicadors:number,
;; bateria.estados: {alta, baja},
;; fusible.inspeccions: {roto, correcto},
;; fusible.estados: {fundido, funcional},
;; combustible.indicadors:number,
;; deposito.estados: {vacio, lleno}
;; }
;;;;;;;;;;;;;;;;;;;;;; Plantilla o-a-v
; (oav (objeto O) (atributo A) (valor V))
(deftemplate oav
(slot objeto)
(slot atributo)
(slot valor)
)
;;;;;;;;;;;;;;;;;;;;;; Hechos (casos nombrados en el punto c)
; Descomentar el que se vaya a comprobar
;(deffacts escenario1
; (oav (objeto motor)
; (atributo arranca)
; (valor false)
; )
; (oav (objeto bateria)
; (atributo indicador)
; (valor 0))
;)
(deffacts escenario2
(oav (objeto motor)
(atributo se_para)
(valor true)
)
(oav (objeto combustible)
(atributo indicador)
(valor 0))
)
;;;;;;;;;;;;;;;;;;;;;; Reglas
(defrule potencia_desconectada "Si el motor no arranca, puede que tenga
la potencia desconectada"
(oav (objeto motor) (atributo arranca) (valor false))
=>
(assert (oav
(objeto potencia)
(atributo conectada)
(valor false)))
)
(defrule combustible_motor1 "Si el motor se para, puede que no llegue
combustible a él"
(oav (objeto motor) (atributo se_para) (valor true))
=>
(assert (oav
(objeto motor)
(atributo combustible)
(valor false)))
)
(defrule combustible_motor "Si el motor no arranca, puede que no
llegue combustible a él"
(oav (objeto motor) (atributo arranca) (valor false))
=>
(assert (oav
(objeto motor)
(atributo combustible)
(valor false)))
)
(defrule fusible_fundido "Si la potencia esta desconectada y el fusible se
detecta como roto, puede que el fusible este fundido"
(oav (objeto potencia)(atributo conectada) (valor false))
(oav (objeto fusible) (atributo inspeccion) (valor roto))
=>
(assert (oav
(objeto fusible)
(atributo estado)
(valor fundido)))
)
(defrule bateria_baja "Si la potencia esta desconectada y el indicador
de bateria marca cero, es posible que la bateria este baja"
(oav (objeto potencia)(atributo conectada) (valor false))
(oav (objeto bateria) (atributo indicador) (valor 0))
=>
(assert (oav
(objeto bateria)
(atributo estado)
(valor baja)))
)
(defrule deposito_vacio "Si no llega combustible al motor y el indicador de
combustible marca cero, es posible que el deposito este vacio"
(oav (objeto motor)(atributo combustible) (valor false))
(oav (objeto combustible) (atributo indicador) (valor 0))
=>
(assert (oav
(objeto deposito)
(atributo estado)
(valor vacio)))
)