Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ИИЭС(I семестр)-2007.doc
Скачиваний:
17
Добавлен:
21.08.2019
Размер:
3.14 Mб
Скачать

База знаний и структуры данных при обратной цепочке рассуждений.

Кроме базы знаний выполняющая цепочку обратных рассуждений экспертная система должна включать блоки, реализующие три структуры данных.

  1. Набор логических переменных, подобный использованному при прямой цепочке.

  2. Список логических выводов.

  3. Стек логических выводов.

Набор логических переменных.

Этот набор включает в себя имена всех переменных, которые входят в части «ЕСЛИ» правил базы знаний. Каждой переменной ставится в соответствие значение, которое отражает, присвоено ли ей уже какое-то конкретное значение при синтезе алгоритма цепочки, другими словами идентифицирована переменная или нет.

База знаний

В таблице данных характерный пример – начало работы системы, когда все переменные ещё не идентифицированы. Кроме того, каждой переменной ставится в соответствие текст, который выводится пользователю, когда переменная идентифицируется. Структура содержит номера правил, в которой каждая из переменных встречается в условной части.

Список логических выводов

Он включает упорядоченный список возможных решений, которые система принимала во время рассуждений, как окончательных, так и промежуточных.

Список включает одну запись на каждое правило.

Запись состоит из номера правила, по которому на неё ссылаются, и имени переменной, которая формирует вывод в этом правиле.

Для рассмотренного примера список логических выводов имеет вид:

Номер правила

Переменная

1

Posit

2

Qual

3

Posit

4

Posit

5

Posit

6

Posit

Список используется для поиска правила по его выводу.

Стек логических выводов.

Основной структурой данных, которая формирует цепочку, и поддерживает её целостность до получения окончательного вывода, является стек логических выводов.

В каждый момент времени этот стек содержит правила и условия, которые система должна ещё проверить, чтобы продолжить процесс рассуждений.

Причём, в вершине стека хранится номер правила и условия, которое проверяется в данный момент.

Стек, например, может иметь вид

Вершина стека

4

1

№ правила

№ условия

И так, проверяется первое условие правила 4.

ЕСЛИ Qual = да (Условие 1)

и Grade < 3,5 (Условие 2)

и Exper >= 2 (Условие 3)

ТО Posit = «инженер по эксплуатации».

При помещении условия и правила в стек, система сначала пытается получить значение переменной, входящей в условие из некоторого правила. Оно проверяет по набору логических переменных, определено или нет значение переменной Qual.

По заданным нами условиям, она не идентифицирована. Тогда система проверяет список логических выводов. Согласно этому списку, Qual входит в правило с номером 2. То есть, чтобы получить значение этой переменной, нужно обеспечить срабатывание правила № 2. И система помещает это правило 2 с номером условия 1 в стек.

Стек логических выводов приобретает вид:

Вершина стека

2

1

4

1

Номер правила

Номер условия

Правило 2 система будет обрабатывать так же, как правило 4.

Что бы сработало правило 2, согласно набору логических переменных должно быть присвоено значение переменной Degree. Система попытается найти переменную Degree в списке логических выводов. Но этот список включает только переменные Qual и Posit, поэтому система должна запросить у пользователя значение этой переменной. Она задаст посетителю вопрос, имеет ли он учёное звание. Пусть, посетитель ответил «Да», тогда правило 2: «ЕСЛИ DEGREE=ДА, ТО QUAL=ДА» сработает.

В результате, переменная QUAL идентифицирована, получила значение ДА и теперь правило 2 можно удалить из стека. Далее система продолжит обрабатывать правило 4, которое теперь опять находится в вершине стека, но номер условия вырастет на 1 и стек приобретёт вид:

Вершина стека

4

2

Номер правила

Номер условия

Так, взаимодействуя между собой, эти три структуры и БЗ позволяют построить любую цепочку обратных рассуждений.

Рассмотрим построение такой цепочки в ответ на вопрос пользователя «Будет ли он принят на работу?»

Этому вопросу в системе соответствует переменная POSIT. Система в простейшем случае, используя список логических выводов, начнет перебирать правила, в которые она входит в качестве вывода, в том порядке, в котором они записаны в базу знаний. В этом примере это правило 1.

Оно будет помещено в стек логических выводов с № условия 1.

Согласно набору логических переменных, чтобы получить вывод по этому правилу нужно идентифицировать переменную Degree. Аналогично рассмотренному выше будет проверен список логических выводов, в который она не входит, и посетителю будет задан вопрос, имеет ли он учёное звание. Пусть посетитель ответил – «ДА». При этом значении правило 1 не срабатывает, в этом случае оно так же исключается из стека, а система, используя список логических выводов попытается найти другое правило, с помощью которого можно присвоить значение переменной POSIT, в нашем случае, это правило 3 с № условия 1. Оно будет перемещено в стек логических выводов и система сделает попытку присвоить значение всем переменным, входящим в условную часть этого правила 3.

Мы рассмотрели все возможные ситуации, которые возникают при синтезе простейшей цепочки обратных рассуждений. Система, помещая и исключая правила из стека, делает попытку присвоить значение всем переменным, входящим в условную часть правила, беря эти значения либо из срабатывания других правил, либо запрашивая их у пользователя. При этом номера правил и условий помещаются или исключаются из стека. И наконец, система добирается до проверки единственного последнего правила и его последнего условия. И когда это правило сработало, система получает окончательный вывод. Если в рассматриваемом примере это окажется правило 4, то пользователь получает ответ «Инженер по эксплуатации », независимо от конкретного содержания БЗ.

Универсальная программа, реализующая обратную цепочку рассуждений, должна включать следующие десять шагов.

Шаг 1. Определить переменную логического вывода, соответствующую вводимой в систему ситуации.

Шаг 2. В списке логических выводов искать первое вхождение этой переменной в правило.

Если переменная найдена, в стек логических выводов поместить № соответствующего правила и установить номер условия 1.

Если переменная не найдена, то сообщить пользователю, что ответ найти невозможно.

Шаг 3. Присвоить значение всем переменным условия из данного правила.

Шаг 4. Если в списке переменных указано, что какой-либо переменой условия не присвоено значение, и ее нет среди переменных логического вывода (нет в списке логических выводов), запросить это значение у пользователя.

Шаг 5. Если какая-либо переменная условия входит в переменные логического вывода, поместить в стек № соответствующего правила из списка логических выводов, и вернутся к шагу 3.

Шаг 6. Если из рассматриваемого правила нельзя определить значение переменной, удалить соответствующую ему запись из стека и в списке логических выводов продолжить поиск правила с этой переменной логического вывода.

Шаг 7. Если такое правило найдено, перейти к шагу 3.

Шаг 8. Проверочный. Если переменная не найдена ни в одном из правил в списке переменных логического вывода, правило для предыдущего вывода не верно. Сообщить пользователю, что ответ получить нельзя (проверка на целостность цепочки рассуждений)

Шаг 9. Определить значение переменной из правила, расположенного в начале стека, и правило из стека удалить. Увеличить значение номера условия, если есть еще переменные, соответствующие условной части этого правила, и для проверки их значений, вернутся к шагу 3.

Шаг 10. Если исчерпаны все значения переменных логического вывода, сообщить пользователю окончательный вывод.