В состав документации, которая прилагается
1. В состав документации, которая прилагается к большинству приборов и технических изделий, как правило, входят и руководства по поиску неисправностей. При отсутствии эксперта такие руководства можно с успехом использовать в качестве учебного материала для выполнения упражнений по извлечению знаний.
Например, руководство к пистолету "Кольт .45" включает шесть страниц советов, большинство из которых представлено в форме подобных таблиц.
Где? |
Что? |
Проверить |
Примечание |
||
Боек |
Зажимается |
Прямизну |
При необходимости заменить |
||
Эжектор |
Неустойчивое выбрасывание |
Зажимается ли возвратная пружина |
Установить длинную направляющую |
||
Экстрактор |
Неправильно направляет гильзу |
Угол установки дна |
При необходимости выровнять |
||
Для того чтобы разобраться в такой таблице, требуется обладать некоторыми знаниями о принципах работы описываемого устройства. В частности, нужно иметь представление о том, что
Применение онтологического анализа позволяет систематизировать такое ознакомление. Самый верный путь к неудаче — приступить к записи диагностических правил до того, как будет понятен принцип работы устройства.
I) Выберите ту предметную область, которая вам более всего знакома, и разработайте для нее примерную онтологию в терминах:
;; изделия,
(defrule part-no
(model ?mod£Tnil)
?rep <- (repair (part ?part)
(action replace) (check part-no)) =>
(bind ?no (send (symbol-to-instance-name ?mod)
part-no ?part))
(printout t crlf
" The part number of the " ?mod " " ?part "
is " ?no crlf) ;; "Номер узла " ?mod " " ?part ?no
(modify ?rep (check done)) )
;; Правила BARREL (ствол)
;; Правило BARREL-SYMPTOM
;; ЕСЛИ: Неисправность не имеет признаков
;; ТО: Выяснить признак (симптом),
(defrule barrel-symptom
?prob <- (problem (part barrel)
(symptom nil) (subpart nil))
=>
(printout t crlf
"Is there a problem inside barrel? " crlf)
;; "Есть ли повреждения внутри ствола?"
(prompt)
(bind ?answer(read))
(if (eq ?answer yes)
then (modify ?prob (subpart bore))
) )
;; Правило BARREL-INSIDE
;; ЕСЛИ: Имеется повреждение канала ствола
;; ТО: Выяснить у пользователя,
;; какое (и предложить помощь).
(defrule barrel-inside
?prob <- (problem (part barrel) (symptom nil) (subpart bore))
=>
(printout t crlf
"What is the problem inside the barrel? " crlf)
;; "Характер повреждения канала ствола?"
(choose-list) (printout t crlf "
leading rust jam" crlf)
;; " наличие ржавчины"
(prompt)
(bind ?answer (read))
(modify ?prob (symptom ?answer)) )
;; Правило BARREL-RUST
;; ЕСЛИ: Имеется ржавчина в канапе ствола
;; ТО: Проверить наличие раковин.
(defrule barrel-rust
?prob <- (problem (part barrel) (symptom rust) =>
(printout t crlf
"Are there pits inside the barrel? " crlf)
;; "Нет ли раковин в канале ствола?" (prompt)
(bind ?answer (read))
(if (eq ?answer yes) then (assert (repair
(action replace) (part barrel) (subpart bore))
(remark "Please consult your local dealer")))
;; Проконсультируйтесь с местным дилером
else (assert (repair
(action clean) (part barrel) (subpart bore))
(remark " Gun should be kept clean and dry"))
;; Оружие нужно содержать в чистоте и
;; предохранять от сырости
) )
;; Правило BARREL-LEADING
;; ЕСЛИ: Имеется налет свинца в канале ствола
;; ТО: Проверить качество патронов,
(defrule barrel-leading
?prob .<- (problem (part barrel) (symptom
leading) (check nil))
=>
(modify ?prob (check ammo))
(printout t crlf
"You may be using the wrong ammunition " crlf)
;; "Возможно, вы пользуетесь некачественными
;; патронами" )
;; Правило BARREL-LEADING-CHECK
;; ЕСЛИ: Имеется налет свинца в канале ствола
;; ТО: Проверить качество патронов,
(defrule barrel-leading-check
Pprob <- (problem (part barrel) (symptom
leading) (check ammo))
=>
(assert (repair (part barrel)
(action clean) (subpart bore)
(remark "Use Lewis Lead Remover"))
;; Воспользуйтесь средством для удаления свинца
;; фирмы Lewis )
Если посчитаете нужным, скопируйте из этой программы вспомогательные функции и структуры определения правил, но используйте знания из другой предметной области, которые были приобретены при выполнении предыдущего упражнения.
3. Рассмотрите ситуацию, которая возникает при планировании покупки какой-нибудь дорогостоящей вещи. Пусть, например, у вас появилась идея приобрести новый автомобиль. Эту проблему можно будет считать хорошо определенной только после того, как вы решите, какую сумму можно потратить на эту покупку, для каких поездок будет в основном использоваться новый автомобиль, какой изготовитель и какая модель для вас предпочтительны, и т.п. Для подобных упражнений можно использовать не только пример с автомобилем, но и с другими видами дорогостоящих покупок, — загородный дом, высококачественная электронная аппаратура и т.д. Далее уточните спецификацию покупки следующим образом.
I) Составьте список ключевых концепций и отношений между ними, которые нужно учитывать при решении проблемы. В случае с автомобилем такой список, очевидно, будет включать атрибуты фирмы-изготовителя и модели автомобиля, разнообразные эксплуатационные характеристики (мощность двигателя, расход топлива), связи между этими атрибутами и параметрами, определяющими ваш "стиль жизни", — частота и продолжительность поездок, предполагаете ли вы брать в поездку каких-либо экзотических попутчиков (лошадь или собаку) или необычный груз (например, лодку, домик на колесах) и т.п.
II) Попробуйте найти способ формального представления перечисленных концепций и отношений между ними. Например, изготовитель автомобиля и его модель могли бы быть выбраны из существующего набора классов — седан, спортивное авто, микроавтобус и т.д. Проанализируйте, не нужно ли при этом использовать многомерную классификацию концепций, при которой придется использовать множественное наследование.
III) Обратите внимание на важность учета приоритета разных свойств рассматриваемого объекта и необходимость использования средств разрешения конфликтов между ними. Если, например, хочется купить автомобиль, который, с одной стороны, имеет мощный двигатель, а с другой стороны, потребляет мало бензина, то нужно подумать над тем, как найти компромисс между этими противоречивыми требованиями.
4. Составьте на языке CLIPS несложную консультационную программу, которая помогла бы пользователю в решении проблемы целесообразности покупки, сформулированной при выполнении предыдущего упражнения. При разработке программы главное внимание нужно уделить тому, как представить сформулированные ранее концепции и отношения между ними в виде структур данных. Нужно также продумать и режимы управления, которые учитывали бы как структуру пространства состояний (например, способ классификации автомобилей), так и механизм обработки приоритетов свойств и разрешения конфликтов между ними.
5. До какого уровня детализации, по вашему мнению, можно спроектировать экспертную систему, не зная, как она будет внедряться? Какие опасности, по-вашему, подстерегают разработчика, который слишком рано принимает решение о способе внедрения экспертной системы?