0 / 0 / 0
Регистрация: 24.01.2015
Сообщений: 5
1

Задача Автоэксперт CLIPS

24.01.2015, 11:33. Показов 3424. Ответов 4
Метки нет (Все метки)

Нужно переделать задачу Автоэксперт. Пожалуйста,помогите!

Новые условия:
-факты- шаблоны-неупорядоченные;
-добавить свою неисправность(авто)


Код:
Lisp
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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
(deffunction ask-question (?question $?allowed-values)
(printout t ?question)
(bind ?answer (read))
(if (lexemep ?answer)
then
(bind ?answer (lowcase ?answer)))
(while (not (member ?answer ?allowed-values)) do
(printout t ?question)
(bind ?answer (read))
(if (lexemep ?answer)
then
(bind ?answer (lowcase ?answer))))
 
?answer
)
 
(deffunction yes-or-no-p (?question)
(bind ?response (ask-question ?question yes no y n))
(if (or (eq ?response yes) (eq ?response y))
then
TRUE
else
FALSE)
)
 
(defrule determine-engine-state ""
(not (working-state engine ?) )
(not (repair ?) )
=>
(if (yes-or-no-p "Does the engine start (yes/no)? ")
then
(if (yes-or-no-p "Does the engine run normally (yes/no)? ")
then
(assert (working-state engine normal) )
else
(assert (working-state engine unsatisfactory) ) )
else
(assert (working-state engine does-not-start) ) )
)
 
(defrule determine-rotation-state ""
(working-state engine does-not-start)
(not (rotation-state engine ?) )
(not (repair ?) )
=>
(if (yes-or-no-p "Does the engine rotate (yes/no) ? ")
then
(assert (rotation-state engine rotates) )
(assert (spark-state engine irregular-spark) )
else
(assert (rotation-state engine does-not-rotate) )
(assert (spark-state engine does-not-spark) ) )
)
 
(defrule determine-gas-level ""
(working-state engine does-not-start)
(rotation-state engine rotates)
(not (repair ?))
=>
(if (not (yes-or-no-p "Does the tank have any gas in it (yes/no)? "))
then
(assert (repair "Add gas.")))
)
 
(defrule determine-battery-state ""
(rotation-state engine does-not-rotate)
(not (charge-state battery ?))
(not (repair ?))
=>
(if (yes-or-no-p "Is the battery charged (yes/no)? ")
then
(assert (charge-state battery charged))
else
(assert (repair "Charge the battery."))
(assert (charge-state battery dead)))
)
 
(defrule determine-low-output ""
(working-state engine unsatisfactory)
(not (symptom engine low-output | not-low-output))
(not (repair ?))
=>
(if (yes-or-no-p "Is the output of the engine low (yes/no)? ")
then
(assert (symptom engine low-output))
else
(assert (symptom engine not-low-output)))
)
 
(defrule determine-point-surface-state ""
(or (and (working-state engine does-not-start)
(spark-state engine irregular-spark))
(symptom engine low-output))
(not (repair ?))
=>
(bind ?response (ask-question "What is the surface state of the
points (normal /burned /contaminated)?"
normal burned contaminated))
(if (eq ?response burned)
then
(assert (repair "Replace the points."))
else
(if (eq ?response contaminated)
then
(assert (repair "Clean the points."))))
)
 
( defrule determine-conductivity-test ""
(working-state engine does-not-start)
(spark-state engine does-not-spark)
(charge-state battery charged)
(not (repair ?))
=>
(if (yes-or-no-p "Is the conductivity test for the ignition coil positive(yes/no)? ")
then
(assert (repair "Repair the distributor lead wire."))
else
(assert (repair "Replace the ignition coil.")))
)
 
(defrule determine-sluggishness ""
(working-state engine unsatisfactory)
(not (repair ?))
=>
(if (yes-or-no-p "Is the engine sluggish (yes/no)? ") then
(assert (repair "Clean the fuel line."))) ) 
 
(defrule determine-misfiring ""
(working-state engine unsatisfactory)
(not (repair ?))
=>
(if (yes-or-no-p "Does the engine misfire (yes/no)? ")
then
(assert (repair "Point gap adjustment."))
(assert (spark-state engine irregular-spark)))
)
 
(defrule determine-knocking ""
(working-state engine unsatisfactory)
(not (repair ?))
=>
(if (yes-or-no-p "Does the engine knock (yes/no)? ")
then
(assert (repair "Timing adjustment.")))
)
 
(defrule normal-engine-state-conclusions ""
(declare (salience 10))
(working-state engine normal)
=>
(assert (repair "No repair needed."))   
(assert (spark-state engine normal))    
(assert (charge-state battery charged)) 
(assert (rotation-state engine rotates))
)
 
(defrule unsatisfactory-engine-state-conclusions ""
(declare (salience 10))
(working-state engine unsatisfactory)
=>
(assert (charge-state battery charged)) 
(assert (rotation-state engine rotates))
)
 
(defrule no-repairs ""
(declare (salience -10))
(not (repair ?))
=>
(assert (repair "Take your car to a mechanic."))
)
 
(defrule print-repair ""
(declare (salience 10))
(repair ?item)
=>
(printout t crlf crlf)
(printout t "Suggested Repair:")
(printout t crlf crlf)
(format t " %s%n%n%n" ?item)
)
 
(defrule system-banner " каждом новом запуске."
(declare (salience 10))
=>
(printout t crlf crlf)
(printout t "****************************************" crlf)
(printout t "* The Engine Diagnosis Expert System *" crlf)
(printout t "****************************************" crlf)
(printout t crlf crlf))
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.01.2015, 11:33
Ответы с готовыми решениями:

Интерфейс для Clips
Здравствуйте. Нужно сделать графический интерфейс для экспертной системы. Кто нибудь выполнял такую...

Интерфейс для CLIPS в C++
Всем привет! Нужна помощь. Надо связать CLIPS с C++(builder или Visual) через интерфейс на них...

Русификация CLIPS для windows
Кто-нибудь разобрался в данном вопросе. Нашел похожую тему, но только для Linux.

Соединение CLIPS с C++ или DELPHI
Здравствуйте,скажите пожалуйста,возможно ли соединить программу,состоящую из правил продукций...

4
0 / 0 / 0
Регистрация: 24.01.2015
Сообщений: 5
24.01.2015, 12:53  [ТС] 2
Вот с пояснениями тот же код:
Lisp
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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
;    Пример экспертной системы на языке CLIPS
;   Приведенная ниже экспертная система способна
;   диагностировать некоторые неисправности автомобиля и
;   предоставлять пользователю рекомендации по устранению
;   неисправности.
 
;  Вспомогательные функции
; Функция ask-question задает пользователю вопрос, полученный
;  в переменной ?question, и получает от пользователя ответ,
;  принадлежащий списку допустимых ответов, заданному в $?allowed-values
(deffunction ask-question (?question $?allowed-values)
(printout t ?question)
(bind ?answer (read))
(if (lexemep ?answer)
then
(bind ?answer (lowcase ?answer)))
(while (not (member ?answer ?allowed-values)) do
(printout t ?question)
(bind ?answer (read))
(if (lexemep ?answer)
then
(bind ?answer (lowcase ?answer))))
 
?answer
)
;  Функция yes-or-no-p задает пользователю вопрос, полученный
;  в переменной ?question, и получает от пользователя ответ yes(у) или
;  no(n). В случае положительного ответа функция возвращает значение TRUE,
;   иначе — FALSE
(deffunction yes-or-no-p (?question)
(bind ?response (ask-question ?question yes no у n))
(if (or (eq ?response yes) (eq ?response y))
then
TRUE
else
FALSE)
)
;  Диагностические правила
;  Правило determine-engine-state определяет текущее состояние двигателя
;  машины по ответам, получаемым от пользователя. Двигатель может
;  находиться в одном из трех состояний: работать нормально
;  (working-state engine normal), работать неудовлетворительно
;  (working-state engine unsatisfactory) и не заводиться
;  (working-state engine;does-not-start) (см. правило 1).
(defrule determine-engine-state ""
(not (working-state engine ?))
(not (repair ?))
(if (yes-or-no-p "Does the engine start (yes/no)? ")
then
(if (yes-or-no-p "Does the engine run normally
(yes/no)? ")
then
(assert (working-state engine normal))
else
(assert (working-state engine unsatisfactory)))
else
(assert (working-state engine does-not-start)))
)
;  Правило determine-rotation-state определяет состояние вращения
;  двигателя по ответу, получаемому от пользователя.
 
;Двигатель может вращаться (rotation-state engine rotates) или
;не вращаться (spark-state engine does-not-spark) (см. правило 4).
   ;Кроме того, правило делает предположение о наличии плохой искры
;или ее отсутствии в системе зажигания
(defrule determine-rotation-state ""
(working-state engine does-not-start)
(not (rotation-state engine ?))
(not (repair ?))
(if (yes-or-no-p "Does the engine rotate (yes/no)? ")
then
; Двигатель вращается
(assert (rotation-state engine rotates))
; Плохая искра
(assert (spark-state engine irregular-spark))
else
; Двигатель не вращается
(assert (rotation-state engine does-not-rotate))
; Нет искры
(assert (spark-state engine does-not-spark)))
)
;  Правило determine-gas-level по ответу пользователя определяет
;  наличие топлива в баке. В случае если топлива нет, пользователю
;  выдается рекомендация по ремонту — машину необходимо заправить (repair
;  "Add gas.") (см. правило 5). При появлении соответствующей 
;  рекомендации выполнение диагностических правил прекращается.
(defrule determine-gas-level ""
(working-state engine does-not-start)
(rotation-state engine rotates)
(not (repair ?))
(if (not (yes-or-no-p "Does the tank have any gas in it
(yes/no)? "))
then
; Машину необходимо заправить
(assert (repair "Add gas.")))
)
;   Правило determine-battery-state по ответу пользователя определяет,
;   заряжен ли аккумулятор. В случае если это не так, пользователю
;   выдается рекомендация по ремонту — Зарядите аккумулятор (repair
;   "Charge the battery.") (см. правило 6).
 
;  Кроме того, правило добавляет факт, описывающий состояние аккумулятора.
;  Выполнение диагностических правил прекращается,
(defrule determine-battery-state ""
(rotation-state engine does-not-rotate)
; Состояние аккумулятора еще не определено
(not (charge-state battery ?))
(not (repair ?))
=>
(if (yes-or-no-p "Is the battery charged (yes/no)? ")
then
; Аккумулятор заряжен
(assert (charge-state battery charged))
else
; Зарядите аккумулятор
(assert (repair "Charge the battery."))
; Аккумулятор разряжен
(assert (charge-state battery dead)))
)
;  Правило determine-low-output определяет, развивает ли двигатель
;  нормальную выходную мощность или нет и добавляет в систему факт,
;  описывающий эту характеристику (см. правило 12).
(defrule determine-low-output ""
(working-state engine unsatisfactory)
; Мощность работы двигателя еще не определена
(not (symptom engine low-output | not-low-output))
(not (repair ?) )
=>
(if (yes-or-no-p "Is the output of the engine low (yes/no)? ")
then
; Низкая выходная мощность двигателя
(assert (symptom engine low-output))
  else
; Нормальная выходная мощность двигателя
(assert (symptom engine not-low-output)))
;   Правило determine-point-surface-state определяет по ответу
;   пользователя состояние контактов (см. правила 7, 12). Контакты могут
;   находиться в одном из трех состояний: чистые, опаленные и
;   загрязненные. В двух последних случаях пользователю выдаются
;   соответствующие рекомендации.
;   Выполнение диагностических правил прекращается.
 
(defrule determine-point-surface-state ""
(or (and (working-state engine does-not-start);не заводится
(spark-state engine irregular-spark));и плохая искра
(symptom engine low-output));или низкая мощность
(not (repair ?))
=>
(bind ?response (ask-question "What is the surface state of the
points (normal /burned /contaminated)?"
normal burned contaminated))
(if (eq ?response burned)
then
; Контакты опалены — замените контакты
(assert (repair "Replace the points."))
else
(if (eq ?response contaminated)
then
; Контакты загрязнены - почистите их
(assert (repair "Clean the points."))))
)
;  Правило determine-conductivity-test по ответу пользователя определяет,
;  пропускает ли ток катушка зажигания. Если нет, то ее следует заменить.
;  Если пропускает, то причина неисправности — распределительные провода.
; Для нормальной работы правила необходимо убедиться, что аккумулятор
;  заряжен и искры нет (см. правило 8)
;  Выполнение диагностических правил прекращается.
(defrule determine-conductivity-test ""
(working-state engine does-not-start)
(spark-state engine does-not-spark)  ;нет искры
(charge-state battery charged)      ;аккумулятор заряжен
(not (repair ?))
=>
(if (yes-or-no-p "Is the conductivity test for the ignition coil
positive(yes/no)? ")
then
; Замените распределительные провода
(assert (repair "Repair the distributor lead wire."))
else
; Замените катушку зажигания
(assert (repair "Replace the ignition coil.")))
)
;  Правило determine-sluggishness спрашивает пользователя, не ведет ли
;  себя машина инертно (не сразу реагирует на подачу топлива).
 
;  Если такой факт обнаружен, то необходимо прочистить
;  топливную систему (см. правило 9) и выполнение диагностических правил
;  прекращается.
(defrule determine-sluggishness ""
(working-state engine unsatisfactory)
(not (repair ?))
=>
(if (yes-or-no-p "Is the engine sluggish (yes/no)? ")
then
; Прочистите систему подачи топлива
(assert (repair "Clean the fuel line.")))
)
;  Правило determine-misfiring узнает — нет ли перебоев с зажиганием.
;  Если это так, то необходимо отрегулировать зазоры между контактами
;  (см. правило 10).
; Выполнение диагностических правил прекращается.
(defrule determine-misfiring ""
(working-state engine unsatisfactory)
(not (repair ?))
=>
(if (yes-or-no-p "Does the engine misfire (yes/no)? ")
then
; Отрегулируйте зазоры между контактами
(assert (repair "Point gap adjustment."))
; Плохая искра
(assert (spark-state engine irregular-spark)))
)
; Правило determine-knocking узнает — не стучит ли двигатель.
; Если это так, то необходимо отрегулировать зажигание (см. правило 11).
;  Выполнение диагностических правил прекращается.
(defrule determine-knocking ""
(working-state engine unsatisfactory)
(not (repair ?))
=>
(if (yes-or-no-p "Does the engine knock (yes/no)? ")
then
; Отрегулируйте положение зажигания
(assert (repair "Timing adjustment.")))
)
 
;Правила, определяющие состояние некоторых подсистем автомобиля
;по характерным состояниям двигателя
;Правило normal-engine-state-conclusions реализует правило 2
(defrule normal-engine-state-conclusions ""
(declare (salience 10))
; Если двигатель работает неудовлетворительно
(working-state engine normal)
=>
; то
(assert (repair "No repair needed."))   ; ремонт не нужен
(assert (spark-state engine normal))    ; зажигание в норме
(assert (charge-state battery charged)) ; аккумулятор заряжен
(assert (rotation-state engine rotates)); двигатель вращается
;  Правило unsatisfactory-engine-state-conclusions реализует правило 3
(defrule unsatisfactory-engine-state-conclusions ""
(declare (salience 10))
; Если двигатель работает нормально
(working-state engine unsatisfactory)
=>
; то
(assert (charge-state battery charged)) ; аккумулятор заряжен
(assert (rotation-state engine rotates)); двигатель вращается
)
;  Запуск и завершение
; Правило no-repairs запускается в случае, если ни одно
; из диагностических правил не способно определить неисправность.
; Правило корректно прерывает выполнение экспертной системы и предлагает
; пройти более тщательную проверку (см. правило 13).
(defrule no-repairs ""
(declare (salience -10))
(not (repair ?))
=>
(assert (repair "Take your car to a mechanic."))
)
 
;  Правило print-repair выводит на экран диагностическое сообщение
;  по устранению найденной неисправности,
(defrule print-repair ""
(declare (salience 10))
(repair ?item)
=>
(printout t crlf crlf)
(printout t "Suggested Repair:")
(printout t crlf crlf)
(format t " %s%n%n%n" ?item)
)
;  Правило system-banner выводит на экран название экспертной системы
;  при каждом новом запуске.
(defrule system-banner " каждом новом запуске."
(declare (salience 10))
=>; каждом новом запуске.
(printout t crlf crlf)
(printout t "****************************************" crlf)
(printout t "* The Engine Diagnosis Expert System *" crlf)
(printout t "****************************************" crlf)
(printout t crlf crlf)
0
1 / 1 / 0
Регистрация: 24.07.2014
Сообщений: 7
26.01.2015, 18:23 3
У вас приведённый код запускается и работает?
1
0 / 0 / 0
Регистрация: 24.01.2015
Сообщений: 5
27.01.2015, 04:46  [ТС] 4
Да.
Препод принял у других, мне сказал переделать.
0
volvo
02.02.2015, 16:32     Задача Автоэксперт CLIPS
  #5
 Комментарий модератора 
Дубль во фрилансе.
Закрыто
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.02.2015, 16:32

Задание функции CLIPS. Выдает ошибку
Нужно написать код для подсчета функции f(x)= lg(x+e^x). И результат обязательно вывести через bind...

Найти все двузначные числа, сумма цифр которых не меняется при умножении на 2, 3 , 4 , 5 , 6 , 7, 8, 9. clips
Найти все двузначные числа, сумма цифр которых не меняется при умножении на 2, 3 , 4 , 5 , 6 , 7,...

Интеграция C++ и CLIPS
Всем привет и с праздниками!!! Друзья, подскажите пожалуйста как интегрировать С++ и CLIPS на носу...

Интерфейс для CLIPS
Всем привет! никак не могу справиться с задачей. Необходимо создать интерфейс на builder C++ для...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Закрытая тема Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru