Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Представление знаний в информационных системах.doc
Скачиваний:
33
Добавлен:
08.11.2018
Размер:
865.28 Кб
Скачать

Работа № 3. Анализ работы эс, разработанных на clips

Экспертная система – это компьютерная программа, которая моделирует рассуждения человека-эксперта в определенной предметной области и использует для этого базу знаний, содержащую факты и правила об этой области, и некоторую процедуру логического вывода. Экспертная система обладает рядом свойств, отличающих ее от других прикладных программ [7]. Она моделирует рассуждения человека относительно некоторой предметной области, обладает знаниями, представленными в специальном формате, использует приближенные методы, имеет дело с объектами из реальной предметной области, гарантирует решение (с определенной степенью уверенности), обладает способностью объяснить решение. В список основных задач, которые решаются с помощью ЭС, входят извлечение информации из первичных данных, диагностика неисправностей, структурный анализ сложных объектов, конструирование сложных систем, планирование последовательности операций.

В экспертных системах реализуются следующие функции:

  1. приобретение знаний;

  2. представление знаний;

  3. управление процессом поиска решения;

  4. объяснение принятого решения.

Экспертные системы состоят из 3х основных компонентов:

  1. база знаний - содержит информацию о конкретной предметной области в виде, удобном для ее использования в решении конкретных задач;

  2. механизм вывода - позволяет извлекать из базы знаний нужную информацию;

  3. пользовательский интерфейс.

Принято рассматривать механизм вывода и пользовательский интерфейс как один компонент, называемый оболочкой экспертной системы или просто оболочкой.

Рисунок 7. Базовая структура экспертной системы

Экспертные системы могут разрабатываться как с помощью структурных и объектно-ориентированных языков, так и с помощью специальных средств представления знаний: языка логического программирования Prolog; языков описания порождающих правил (OPS5); стандартных оболочек экспертных систем; созданных на основе каких-либо удачных систем из которых удалены все компоненты, специфичные для предметной области (EMYCIN); многофункциональных сред программирования (LOOPS, KEE, CLIPS).

Цель работы: ознакомиться с вариантами структурирования ЭС, реализованных на CLIPS.

Задачи работы.

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

    Категория

    Характеристики категории

    Формулировки вопросов, последовательно задаваемых для данной категории

  2. Модифицировать базу фактов системы animals – вместо определения животного она должна теперь решать классификационную задачу предметной области заданного варианта. Одну из произвольно выбранных целей представить в виде И/ИЛИ дерева. Уметь объяснить на отладочной информации, каким образом «рассуждает» система.

  3. Разобрать по схеме, использованной в лабораторной работе для animals систему, предложенную преподавателем.

Проанализируем структуру учебной экспертной системы animal.clp (ее можно найти в каталоге CLIPS\samples). Цель системы – определить задуманное пользователем животное, задавая вопросы о характерных признаках отличающих его от животных других типов, семейств, родов, видов и классов. Исходя из пользовательских ответов на эти вопросы, система делает вывод о принадлежности заранее задуманного животного той или иной классификационной категории. Структура системы основана на древовидной иерархии классификационных категорий: царство включает в себя виды, каждый вид принадлежит единственному царству, вид включает в себя род, каждый род принадлежит единственному виду и т.п. Система, используя прямую цепочку рассуждений (более подробно о прямой и обратной цепочке рассуждений [7, с.118]), начнет проверять выполнение сначала наиболее общих условий, то есть выяснит, что животное принадлежит к царству позвоночных (backbone). Системе известно, что царство позвоночных составляют теплокровные и хладнокровные. Теперь подцель системы – определить является животное теплокровным(warm blooded) или хладнокровным(cold). После получения положительного ответа на вопрос «является ли животное теплокровным?», подцелью системы становится определить, является ли животное млекопитающим (breasts). Таким образом, получение новых данных сужает пространство альтернатив системы и заставляет ее задавать вопросы, отталкиваясь от условий, о которых уже известно, что они выполняются.

База фактов системы animal представляет собой набор фактов организованных в виде правил развития рассуждения при классификации объектов предметной области (не путать с правилами defrule). Эти правила описаны шаблоном rule.

(deftemplate rule

(multislot if)

(multislot then))

База фактов используется несколькими правилами по следующей общей схеме.

    1. Система переходит от более общей цели к менее общей.

    2. Если существует вопрос, позволяющий проверить, удовлетворяется ли новая частная цель, то система задает этот вопрос.

    3. В соответствие с ответом пользователя система отсекает направления рассуждения, ставшие неверными после ответа пользователя, удаляя соответствующие факты из базы фактов. Система также удаляет факты соответствующие уже заданным вопросам.

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

    5. Последовательность действий 1 – 4 повторяется до тех пор, пока не будет удовлетворяться наиболее общая цель: классифицировать животное.

(deffacts knowledge-base

(goal is type.animal)

(legalanswers are yes no)

Помимо правил база фактов содержит факт цели, содержащий по окончании классификации название определенного животного (goal), вопросы для получения дополнительной информации о классифицируемом объекте (факты question), факт допустимых значений ответов на вопросы (legalanswers), факт содержащий шаблон ответа, который остается дополнить названием классифицированного объекта (answer).

superphylum / царство

backbone (позвоночные)

jellyback(беспозвоночные)

phylum / тип

warm (теплокровные)

cold (хладнокровные)

soil (живут в почве)

elsewhere (всякие)

class / класс

breasts (звери)

water (живут в воде)

dry (живут на суше)

segments (членистые)

unified (цельные)

order / отряд

meat (мясоеды)

vegy (вегетерианцы)

scales (чешуйчатые)

soft (мягкие)

shell (имеющие оболочку)

cells (клетки)

stomach(имеющие желудок)

family / семейство

nowings (бескрылые)

hooves (копытное)

feet (некопытное, но с ногами)

noshell (без оболочки)

stationary (неподвижные)

multicelled (многоклеточные)

genus / род

thumb (имеют отстоящий большой палец)

nothumb (не имеют такового)

twotoes (парнокопытные)

onetoe (непарнококопытные)

water (обитают в воде)

dry (обитают на суше)

noshell (без оболочки)

species / вид

notail (бесхвостые)

400 (весят больше 400 фунтов)

under400 (вестя менее 400 фунтов)

horns (с рогами)

nohorns (безрогие)

teeth (с зубами)

noteeth (без оных)

subspecies / подвид

hair (волосатые)

nohorn (безрогие)

subsubspecies / подподвид

nofleece (бесшерстные)

type.animal

flatworm (плоский червь)

worm/leech (червь/пиявка)

fish (рыба)

shark/ray (акула/ скат)

centipede/millipede/insect (многоножка/насекомое)

bat (летучая мышь)

turtle (черепаха)

frog (лягушка)

salamander (саламандра)

lobster (лобстер)

crab (краб)

jellyfish (медуза)

protozoa (простейший одноклеточный организм)

crocodile/alligator (крокодил/аллигатор)

snake (змея)

sea anemone (морской анемон)

coral/sponge (коралл/ губка)

snail (улитка)

monkey (обезьяна)

rhinoceros (носорог)

horse/zebra (лошадь/зебра)

whale (кит)

dolphin/porpoise (дельфин)

clam/oyster (моллюск)

squid/octopus (кальмар/осьминог)

man (человек)

bear/tiger/lion (медведь/ тигр/ лев)

walrus (морж)

cat (кот)

coyote/wolf/fox/dog (койот/волк/лиса/собака)

hippopotamus (гиппопотам)

camel (верблюд)

giraffe (жираф)

rabbit (кролик)

rat/mouse/squirrel/beaver/

porcupine

(крыса/мышь/белка/бобр/ дикобраз)

kangaroo/koala bear

(кенгуру/коала)

mole/shrew/elephant

(крот/землеройка/слон)

orangutan/gorilla/ chimpanzee

(орангутан/горилла/шимпанзе)

baboon(бабуин)

sheep/goat (овца/коза)

cow (корова)

deer/moose/antelope

(олень/лось/антилопа)

Система использует обратную цепочку рассуждений, которую удобно представить с помощью И/ИЛИ графа[6]. Графы И/ИЛИ являются одним из инструментов описания областей поиска[8].

Рисунок 8. Фрагмент И/ИЛИ графа для классификационной цели «Орангутанг/Горилла/Шимпанзе»

База правил системы animals включает следующие правила.

    1. Размножение цели: увеличивает количество целей, начиная с самой общей, постепенно расширяя спектр поиска.

(defrule propagate-goal ""

(goal is ?goal)

(rule (if ?variable $?)

(then ?goal ? ?value))

=>

;добавление факта в базу фактов

(assert (goal is ?variable)))

Если в базе фактов имеется факт цели goal со значением ?goal, и факт rule, у которого в правой части достигается эта цель, то новой целью становится установить истинность левой части. Следующая отладочная информация (получена при запуске animals в CLIPS) иллюстрирует работу этого правила. Первоначально в базе фактов было одно правило цели (goal type.animal) и множество правил вида (rule (if subsubspecies is nofleece and domesticated is no) (then type.animal is deer/moose/antelope)). Последовательное использование таких фактов правилом propagate-goal (?goal = type.animal; ?variable = subsubspecies) приводит к размножению цели.

FIRE 1 propagate-goal: f-1,f-127

==> f-130 (goal is subsubspecies)

FIRE 2 propagate-goal: f-130,f-124

==> f-131 (goal is subspecies)

FIRE 3 propagate-goal: f-131,f-109

    1. Задать вопрос со стандартными ответами: срабатывает при наличии цели, которую можно уточнить с помощью вопроса; удаляет уточненную цель и соответствующий вопрос; сохраняет ответ в факте-переменной.

(defrule ask-question-legalvalues ""

(declare (salience 10))

(legalanswers ? $?answers)

?f1 <- (goal is ?variable)

?f2 <- (question ?variable ? ?text)

=>

(retract ?f1) ;удалить факт из базы фактов

(format t "%s " ?text) ;задать вопрос

(printout t ?answers " ")

(bind ?reply (read))

;если дан допустимый ответ – сохранить его в переменной и

;удалить вопрос из базы фактов

(if (member (lowcase ?reply) ?answers)

then (assert (variable ?variable ?reply))

(retract ?f2)

;если дан недопустимый ответ

;вернуть на место факт цели (тот же вопрос будет задан снова)

else (assert (goal is ?variable))))

Следующая отладочная информация иллюстрирует работу этого правила. В результате размножения цели в базе фактов появился факт цели

==> f-139 (goal is backbone)

Там уже был факт вопроса:

==> f-5 (question backbone is "Does your animal have a backbone?")

Использование таких фактов правилом ask-question-legalvalues (?variable = backbone; ?text = "Does your animal have a backbone?") приводит к тому, что пользователю будет задан вопрос, позвоночное ли животное, ответ будет сохранен в переменной (variable backbone yes), а ненужные более факты вопроса и цели будут удалены из базы фактов.

FIRE 10 propagate-goal: f-138,f-4

==> f-139 (goal is backbone)

FIRE 11 ask-question-legalvalues: f-2,f-139,f-5

<== f-139 (goal is backbone)

Does your animal have a backbone? (yes no) yes

==> f-140 (variable backbone yes)

<== f-5 (question backbone is "Does your animal have a backbone?")

    1. Правило подобрано: если полученные с помощью вопросов уточнения совпадают с предпосылкой правила “if”, то категория цели сохраняется в переменной

(defrule rule-satisfied ""

(declare (salience 20))

(variable ?variable ?value)

?f <- (rule (if ?variable ? ?value)

(then ?goal ? ?goal-value))

=>

(retract ?f)

(assert (variable ?goal ?goal-value)))

Следующая отладочная информация иллюстрирует работу этого правила. После ответа на вопрос, в базе фактов появился факт переменной:

==> f-140 (variable backbone yes)

В базе фактов уже присутствовал факт:

f-3 (rule (if backbone is yes) (then superphylum is backbone))

Применение правила rule-satisfied (?variable = backbone; ?value = yes; ?goal = superphylum; ?goal-value = backbone) приводит к сохранению промежуточной цели в новой переменной.

FIRE 13 rule-satisfied: f-140,f-3

<== f-3 (rule (if backbone is yes) (then superphylum is backbone))

==> f-141 (variable superphylum backbone)

    1. Удалить несоответствующее правило: если предпосылка, заданная в правиле не соответствует полученным данным, сохраненным в переменных, то правило удаляется.

(defrule remove-rule-no-match ""

(declare (salience 20))

(variable ?variable ?value)

;~ - “не”

?f <- (rule (if ?variable ? ~?value $?))

=>

(retract ?f))

Следующая отладочная информация иллюстрирует работу этого правила. После ответа на вопрос, в базе фактов появился факт переменной:

==> f-140 (variable backbone yes)

Существующий в базе фактов факт:

==> f-4 (rule (if backbone is no) (then superphylum is jellyback))

в результате работы правила remove-rule-no-match (?variable = backbone; ?value =yes) будет удален.

FIRE 12 remove-rule-no-match: f-140,f-4

<== f-4 (rule (if backbone is no) (then superphylum is jellyback))

    1. Изменить имеющееся правило: если предпосылка, заданная в правиле, является комплексной, т.е. состоит из нескольких фактов, то часть правила, которая была «удовлетворена», вырезается.

(defrule modify-rule-match ""

(declare (salience 20))

(variable ?variable ?value)

?f <- (rule (if ?variable ? ?value and $?rest))

=>

;изменить заданный факт

(modify ?f (if ?rest)))

Следующая отладочная информация иллюстрирует работу этого правила. После срабатывания правила rule-satisfied в базе фактов появился факт переменной:

==> f-141 (variable superphylum backbone)

Существующий в базе фактов факт:

==> f-6 (rule (if superphylum is backbone and warm.blooded is yes) (then phylum is warm))

в результате работы правила modify-rule-match (?variable=backbone; ?value=yes) будет изменен так, что в предпосылке останется только та часть, относительно которой еще ничего не известно.

FIRE 17 modify-rule-match: f-141,f-6

<== f-6 (rule (if superphylum is backbone and warm.blooded is yes) (then phylum is warm))

==> f-143 (rule (if warm.blooded is yes) (then phylum is warm))

    1. Цель подобрана: если спектр поиска сужен максимально и имеется подходящий ответ, сохраненный в переменной, то вывести его на экран.

(defrule goal-satified ""

(declare (salience 30))

?f <- (goal is ?goal)

(variable ?goal ?value)

(answer ? ?text ?goal)

=>

(retract ?f)

(format t "%s%s%n" ?text ?value))

Следующая отладочная информация иллюстрирует работу этого правила.

Факты

==> f-1 (goal is type.animal)

==> f-129 (answer is "I think your animal is a " type.animal)

появились в базе фактов при инициализации.

Факт

==> f-181 (variable type.animal orangutan/gorilla/chimpanzie)

был помещен в базу фактов применением правила rule-satisfied к базе фактов, подвергшейся неоднократной обработке всеми перечисленными правилами. Применение правила goal-satisfied приводит к выполнению задачи системы animal – определению задуманного пользователем животного.

FIRE 125 goal-satified: f-1,f-181,f-129

<== f-1 (goal is type.animal)

I think your animal is a orangutan/gorilla/chimpanzie