Точно Не проект 2 / Не books / Источник_1
.pdfЭкспертные системы |
401 |
|
|
/* ЭС для решения задачи диагностики */ инициализация: – retractall(сообщено( _,_ )).
диагностика(Н):– инициализация, Факт : причина(Н), найти(Н).
Дальнейшее совершенствование разработанной программы связано с включением возможности ответов на вопросы типа “почему?” и “как?”. Возможный сценарий диалога с ЭС при ответе на вопрос “почему?” приведен в таблице 7.1.
Таблица 7.1 – Ответы на вопросы “почему?”
|
|
Ответ или |
Вопрос или ответ системы |
|
вопрос поль- |
|
|
зователя |
лампа(светится)? |
|
нет |
плита(холодная)? |
|
почему |
пытаюсь доказать тока(нет) с помощью правила: пра- |
|
|
вило 4 |
|
|
плита(холодная)? |
|
почему |
пытаюсь доказать выключатель(не_включен) с |
помо- |
|
щью правила: правило 2 |
|
|
плита(холодная)? |
|
почему |
Моя гипотеза: выключатель(не_включен) |
|
|
плита(холодная)? |
|
почему |
Вы задаете слишком много вопросов |
|
|
Плита(холодная)? |
|
да |
Для того чтобы реализовать указанный диалог, необходимо переопределить предикат найти(Н). Введем в этот предикат второй аргумент, который будет представлять стек из имен доказываемых гипотез и имен правил. Тогда, анализируя содержимое стека, можно будет организовать соответствующий диалог. В момент вызова предиката найти в стек помещается имя доказываемой гипотезы:
найти(Н, [Н]).
Так как при обратном выводе в Пролог-системе осуществляется поиск в глубину, то в стеке фиксируется путь, состоящий из имен правил, обеспечивающих подтверждение основной гипотезы. Введение второго аргумента в предикат найти требует следующих переопределений:
Экспертные системы |
403 |
|
|
выключатель(не_включен)
правило 2
тока(нет)
правило 4
И
плита(холодная) лампа(не_светится)
Рисунок 7.6 – Дерево вывода
Пусть Д обозначает дерево вывода целевого утверждения Н. Тогда построение дерева вывода выполним на основе следующих правил:
1)если сообщено(Н), то Д = сообщено(Н);
2)если имеется Факт : Н, то Д = Факт : Н;
3)если имеется правило Правило : если Н1 то Н, и если Д1 – дерево выво-
да для Н1, то Д = Правило : если Д1 то Н;
4)если доказывается гипотеза Н = Н1 и Н2, то дерево вывода Д = Дерево1 и Дерево2, где Дерево1 – дерево вывода гипотезы Н1, а Де-
рево2 – гипотезы Н2.
Переопределим предикат найти, добавив третий аргумент, представляющий дерево вывода:
найти(Н, Стек, Дерево).
Воспользовавшись введенными выше правилами построения дерева вывода, получим:
/* правило1 */ найти(Н, Стек, сообщено(Н)):– сообщено(Н, да).
найти(Н, Стек, сообщено(Н)):– запрашиваемая(Н), not сообщено(Н, _), спроси(Н, Стек).
/* правило2 */ найти(Н, Стек, Факт : Н):– Факт : Н.
/* правило3 */ найти(Н, Стек, Правило : если Д1 то Н):–
Правило : если Н1 то Н, Найти(Н1, [Правило|Стек], Д1).
Экспертные системы |
407 |
|
|
объект – – ((атр1 : з1) – – ((атр2 : з2) – – (атр3 : з3))).
_ _
|
|
_ _ |
объект |
||
|
|
|
:
_ _
атр1 з1
_ _
:
атр2 |
|
з2 |
|
: |
|
… |
:
атр_n з_n
Рисунок 7.7 – Структура, соответствующая списку свойств
Доступ к значениям атрибутов объекта будем осуществлять с помощью предиката объект(О,А,З), где О – переменная, обозначающая объект; А – соответствующий атрибут объекта; З – значение атрибута. Предикат объект(О,А,З) определяется рекурсивно:
объект(О, А, З):– О – – Атрибуты, |
|
поиск(А, З, Атрибуты),!. |
|
поиск(А, З, А : З). |
% утверждение 1 |
поиск(А, З, А : З – – Атрибуты1). |
% утверждение 2 |
поиск(А, З, А1 : З1 – – Атрибуты1):– |
% утверждение 3 |
поиск(А, З, Атрибуты1). |
|
Здесь первое определение обеспечивает отделение имени объекта от его атрибутов с помощью оператора О – – Атрибуты. Переменная Атрибуты после выполнения данного оператора будет представлять правое поддерево древовидной структуры, изображенной на рисунке 7.7. Предикат
Экспертные системы |
409 |
|
|
стической причины неисправности автомобиля может выступать низкая температура (например, ниже –20о).
Представим вершины и листья дерева диагностики в виде следующей структуры:
объект |
|
|
– – вопрос |
: |
Q |
– – ответы |
: |
A |
– – причины |
: |
R |
– – объяснения : |
E. |
Здесь объект – имя, соответствующее вершине или листу дерева; Q – вопрос, задаваемый пользователю, относительно состояния объекта;
A = [1: A1, 2: A2, … ] – список возможных ответов; R – список возможных причин неисправности; E – текст, объясняющий причину неисправности. Список R может быть представлен в одной из форм:
R = [ i : Hi , j : Hj, … ] или
R = [H1, H2, … ].
Первая форма используется, когда Hi выступает в качестве возможного обоснования гипотезы H, в подтверждение которой был выбран ответ Аi из списка А. Вторая форма применяется, когда H1, H2, … являются возможными обоснованиями гипотезы H, но вопросы относительно H не формулировались.
В описании объекта атрибуты вопрос и ответы являются не обязательными, атрибут причины обязателен, атрибут объяснения обязателен только для объектов, представляющих листья дерева диагностики.
Приведем примеры описаний некоторых объектов на языке Пролог:
/* база знаний */
автомобиль
–– вопрос : ’Что случилось Вашим автомобилем?’
–– ответы : [1 : ‘не заводится’, 2 : ‘не едет’, 3 : другое]
–– причины : [1 : температура ,1 : электрооборудование, 2 : двигатель, 2 : шасси, 3 : двигатель, 3 : шасси].
температура
–– вопрос : ’Температура ниже –20?о’
–– ответы : [1 : да, 2 : нет]
–– причины : [1 : верно]
–– объяснения : ’Низкая температура. Нагрейте двигатель’.