Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ККР-2013 (БЗ и ЭС).docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
233.53 Кб
Скачать
    1. База знаний

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

Разработку простейшей экспертной системы в соответствии с заданием следует начать с определения формата хранения знаний. В данной работе знания будут храниться в виде вопросов и ответов на них. Предполагается следующая логика работы экспертной системы: приложение предлагает пользователю вопросы о симптомах, которые возможны. При ответе на данные вопросы формируются факты, с помощью которых и будет выбрано заболевание.

Разделение фактов по группам удобно представить в виде таблицы (табл. 2).

Табл. 2. Факты, используемые в экспертной системе

Факты

Состояние

Общее состояние человека

horosho

normal

not notmal

Головная боль

gol

yes

no

Температура

temperatura

yes

no

Озноб

ozn

yes

no

Боль в мышцах

mish

yes

no

Кашель

kashel’

yes

no

Боль или комок в горле

gor

yes

no

Ощущение сухости или першения в горле

far

yes

no

Наличие мокроты при кашле

mok

yes

no

Насморк

nasm

yes

no

Боли в горле при глотании

glot

yes

no

Увеличение лимфатических узлов

lim

yes

no

Онемение шеи

onem

yes

no

Чувствительность к свету или звукам

men

yes

no

Рвота

enc

yes

no

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

Рис. 1. Схема базы знаний в виде дерева

В экспертной системе реализуются правила консультации, которые в зависимости от той или иной ситуации будут задавать пользователю необхо­димые вопросы и получать ответ в строго заданной форме. Дальнейшая консультация будет производиться с учетом предыдущих ответов на вопросы, заданные пользователю. Эти ответы будут формировать описание текущей ситуации с помощью фактов, приведенных выше.

Для реализации подобной архитектуры будет необходимо реализовать функцию, задающую пользователю произвольный вопрос и получающую ответ из заданного набора корректных ответов:

(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)

Функция принимает два аргумента: простую переменную question, которая содержит текст вопроса, и составную переменную allowed-values с набором допустимых ответов. Сразу после своего вызова функция выводит на экран соответствующий вопрос и читает ответ пользователя в переменную answer. Если переменная answer содержит текст, то она будет принудительно приве­дена к прописному алфавиту. После этого функция проверяет, является ли полученный ответ одним из заданных корректных ответов. Если нет, то процесс повторится до получения корректного ответа, иначе функция вер­нет ответ, введенный пользователем.

Будет также очень полезно определить функцию, задающую пользователю вопрос и допускающий ответ в виде да/нет, т. к. это один из самых распро­страненных типов вопросов. С учетом реализации функции ask-question эта функция примет вид, представленный ниже:

(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))

Функция yes-or-no-p вызывает функцию yes-or-no-p с постоянным набо­ром допустимых ответов: yes, no, у и n. В случае если пользователь ввел от­вет yes или у, функция возвращает значение true, иначе — false. Поскольку функция yes-or-no-p использует функцию ask-question, то она должна быть определена после нее.

Механизм логического вывода, используя исходные данные из рабочего поля и знания из базы знаний, формирует такую последовательность правил, которая приводит к решению задачи. Продукционная модель знаний с прямым логическим выводом подразумевает присутствие условия ЕСЛИ(Х) – ТО(Y). Причем, под X подразумевается наличие некоторых фактов, соединенных между собой через «И»/«ИЛИ». Последовательно отвечая на вопросы системы, пользователь формирует совокупность фактов X. При достаточном накоплении этих фактов система делает необходимый вывод. При обратном выводе отправной точкой служат цели, после выбора которых производится проход по графу фактов, принадлежащих выбранной цели.

В языке CLIPS для реализации системы логического вывода используются: правила и факты.

  • Правила (defrule) –основа механизма логического вывода в языке CLIPS, пример которой приведён ниже.

(defrule determine-vi-horosho ""

(not(norm ?))

(not (repair ?) )

=>

(if (yes-or-no-p "Вы чувствуете недомогание (y/n)? ")

then

(assert (norm normal))

else

(assert (repair "У Вас нет причин к беспокойству. Вы здоровы"))))

Правила представляют собой логическую конструкцию «ЕСЛИ-ТО», а знак « => » является разделителем условия и действия.

  • Факты (facts) – запись в базе данных (в данной работе динамической) в виде списка, который может содержать одно или несколько полей, принимающих символьные либо числовые значения.

При запуске программы интерпретатор CLIPS запускает машину логического вывода, которая выясняет, какие из правил могут быть активированы. Это действие выполняется циклически. Каждый цикл проверки состоит из 3 шагов:

  • Сопоставление фактов находящихся в БД и всех правил программы.

  • Выбор правила условия, которого совпадают с фактами в БД и текущим состоянием системы.

  • Выполнение действий, предписанных правилом.

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

(defrule system-banner ""

(declare (salience 10))

=>

(printout t crlf crlf)

(printout t ************************************************")

(printout t crlf crlf)

(printout t "* Экспертная система медицинской консультации")

(printout t crlf crlf)

(printout t "Выполнил студент группы 220291 Гусева Светлана Львовна")

(printout t crlf crlf)

(printout t*************************************************")

(printout t crlf crlf))

(defrule print-repair ""

(declare (salience 10))

(repair ?item)

=>

(printout t crlf crlf)

(printout t "Скорее всего у Вас:")

(printout t crlf crlf)

(format t " %s%n%n%n" ?item))

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]