Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Solomon.doc
Скачиваний:
17
Добавлен:
08.05.2019
Размер:
3.38 Mб
Скачать

Глава 10. Создание экспертных систем

Введение

Настоящая глава посвящена реализованным средствами Тур-

бо-Пролога экспертным системам - наиболее быстро развивающейся

и наиболее плодотворной области применения Турбо-Пролога. Очень

важно понимать , как работают экспертные системы, так как они

могут использоваться, фактически, в любой области.

В первом разделе этой главы описываются принципы

построения и организации экспертных систем в терминах их

компонент: базы знаний, механизма вывода и системы

пользовательского интерфейса. Здесь также рассматриваются

основные характеристики и работа системы, использующей

правила, и системы, основанной на логике.

Во втором разделе на примере системы для выбора породы со-

баки показано, как проектировать и реализовать две экспертные

системы. Одна базируется на правилах, а вторая - на логике . В

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

так, что база знаний может хранится на диске как файл базы дан-

ных. Эта экспертная система предназначена для постановки меди-

цинского диагноза.

10.1 Принципы построения экспертных систем

Экспертная система - это компьютерная программа, которая в

некоторой области проявляет степень познаний равнозначную сте-

пени познания человека-эксперта. Обычно эта область строго ог-

раничена. Однако, количество приложений огромно. Сюда входят

понимание речи, анализ изображений, прогноз погоды, оценка бу-

дущего урожая, медицинская диагностика, разработка интегральных

схем, финансирование, управление воздушным движением, управле-

ние боем и т.д.

Несколько экспертных систем уже считаются классическими.

Примером могут служить разработанные в Стендфордском универси-

тете такие системы как DENDRAL, определяющая молекулярную

структуру неизвестного химического соединения с помощью данных

масс-спектрометрии и MYCIN, определяющая наличие инфекции у па-

циента , идентифицирующая микроорганизмы, выбирающая подходящее

лекарство и назначающая эффективный режим приема лекарства. А

так же разработанная в миланском университете Карнеги эксперт-

ная система XCON, определяющая конфигурацию компьютерных систем

VAX фирмы DEC, проверяющая спецификацию частей и правильность

соединения в требуемую компьютерную систему.

10.2 Структура экспертных систем

Чтобы проводить эспертизу, компьютерная программа должна

быть способна решать задачи посредством логического вывода и

получать при этом достаточно надежные результаты. Программа

должна иметь доступ к системе фактов, называемой базой знаний.

Программа также должна во время консультации выводить

заключения из информации, имеющейся в базе знаний. Некоторые

экспертные системы могут также использовать новую информацию,

добавляемую во время консультации. Экспертную систему, таким

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

1. База знаний (БЗ).

2. Механизм вывода (МВ).

3. Система пользовательского интерфейса (СПИ).

Взаимное расположение этих трех частей показано на рис. 10.1.

Рис.10.1 Общая структура экспертной системы.

База знаний - центральная часть экспертной системы. Она

содержит правила, описывающие отношения или явления, методы и

знания для решения задач из области применения системы. Можно

представлять базу знаний состоящей из фактических знаний и зна-

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

"Джон Ф. Кеннеди был 35-м президентом Соединенных Штатов" -

пример фактического знания. "Если у вас болит голова,то примите

две таблетки цитрамона" - пример знания для вывода. Сама база

знаний обычно располагается на диске или другом носителе.

Механизм вывода содержит принципы и правила работы.

Механизм вывода "знает", как использовать базу знаний так,

чтобы можно было получать разумно согласующиеся заключения

(выводы) из информации, находящейся в ней.

Когда экспертной системе задается вопрос, механизм вывода

выбирает способ применения правил базы знаний для решения зада-

чи, поставленной в вопросе. Фактически, механизм вывода запус-

кает экспертную систему в работу, определяя какие правила нужно

вызвать и организуя к ним доступ в базу знаний. Механизм вывода

выполняет правила, определяет когда найдено приемлемое решение

и передает результаты программе интерфейса с пользователем.

Когда вопрос должен быть предварительно обработан, то доступ к

базе знаний осуществляется через интерфейс с пользователем. Ин-

терфейс - это часть экспертной системы, которая взаимодействует

с пользователем.

Как правило, пользователи мало знают об организации базы

знаний, поэтому интерфейс может помочь им работать с экспертной

системой даже, если они не знают, как она организована. Интер-

фейс может также объяснить пользователю , каким образом экспер-

тная система выводит результат.

Система интерфейса с пользователем принимает информацию от

пользователя и передает ему информацию. Просто говоря, система

интерфейса должна убедиться, что, после того как пользователь

описал задачу, вся необходимая информация получена. Интерфейс,

основываясь на виде и природе информации, введенной пользовате-

лем, передает необходимую информацию механизму вывода. Когда

механизм вывода возвращает знания, выведенные из базы знаний,

интерфейс передает их обратно пользователю в удобной форме. Ин-

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

как "приложение" к базе знаний. Они вместе составляют оболочку

экспертной системы как показано на рис. 10.1. Для базы знаний,

которая содержит обширную и разнообразную информацию, могут

быть разработаны и реализованы несколько разных оболочек. Хоро-

шо разработанные оболочки экспертных систем обычно содержат ме-

ханизм для добавления и обновления информации в базе знаний.

Как видем , экспертная система состоит из трех основных

частей. Взаимосвязь между частями может быть сложной, зависящей

от природы и организации знаний, а также от методов и целей вы-

вода. Следующие разделы описывают эти аспекты экспертных сис-

тем. Сначала описывается представление знаний вместе с некото-

рыми простыми примерами. Это описание применимо как к системам,

основанным на правилах,так и к системам, базирующимся на логи-

ке. Затем рассматриваются методы вывода. Далее следует описание

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

ввода и вывода. Затем предполагается, что читатель готов к рас-

смотрению двух конкретных методик проектирования экспертных

систем: систем, базирующихся на правилах, и систем, базирующих-

ся на логике.

10.3 Представление знаний

Представление знаний - это множество соглашений по син-

таксису и семантике, согласно которым описываются объекты. Хо-

рошее правило при проектировании представления знаний - это

организация знаний в такой форме, которая позволяет легко

осуществлять доступ с помощью естественных и простых механиз-

мов. "Чем проще, тем лучше" - правило, которое нужно помнить,

при работе с представлением знаний.

Экспертные системы часто создаются "инженером по знаниям"

(или проектировщиками экспертных систем), которые работают с

человеком-экспертом, чтобы закодировать знания эксперта в базе

знаний. Проектировщик экспертной системы должен иметь возмож-

ность манипулировать представленными знаниями и работать с че-

ловеком экспертом. Эти работы составляют развивающуюся область

инженерии знаний.

В экспертных системах на Турбо-Прологе, описываемых в этой

главе, знания будут всегда представлены одним из двух спосо-

бов.Первый способ - это классификация и помещение фактов и чи-

сел (фрагментов фактического знания) в правила Турбо-Пролога.

Это представление подходит для использования в экспертных сис-

темах, базирующихся на правилах. Другой способ - это организа-

ция фактов и числовой информации в утверждениях, которые обра-

зуют базу знаний на утверждениях. Представление знаний в утвер-

ждениях подходит для использования в экспертных системах, бази-

рующихся на логике.

Существуют и другие системы представления знаний. К ним

относятся система на фреймах и разработанная недавно система на

моделях. Система на фреймах использует представление знаний,

основанное на логических группах атрибутов объекта.Для хранения

и обработки логические группы описываются во фреймах. Для сис-

тем , базирующихся на моделях, проект и структура системы осно-

ваны на знании структуры и поведения устройства, которое явля-

ется предметом исследования. Пример - это экспертная система,

моделирующая автомобиль. Детальное обсуждение таких систем вы-

ходит за рамками этой книги.

В настоящее время системы, базирующиеся на правилах, наи-

более популярны. Они разработаны и используются в широком диа-

пазоне приложений от науки и инженерной работы до бизнеса. Поэ-

тому системы на правилах были выбраны для включения в эту гла-

ву. Здесь же рассматриваются экспертные системы , базирующиеся

на логике, так как они естественным образом укладываются в

структуру языка Турбо-Пролог.

Конструирование экспертной системы, можно начать с табли-

цы, состоящей из двух колонок. Одна колонка содержит названия

стран, а другая - названия соответствующих столиц. Эта таблица

составляет маленькую базу знаний:

Страна Столица

США Вашингтон (Округ Колумбия)

Англия Лондон

Испания Мадрид

Конечно, подобная таблица используется только для планиро-

вания базы знаний; в экспертных системах способы представления

знаний более соответствуют языку программирования, используемо-

му для разработки системы. Утверждения Турбо-Пролога , содержа-

щие эти знания можно записать таким образом:

capital("Washington DC","USA").

capital("London","England").

capital("Madrid","Spain").

Подобные утверждения составляют базис экспертной системы,

основанной на логике.

Эти же знания можно представить в форме правил "если-то".

Правила для предыдущих трех утверждений выглядят так:

capital_is("Washington DC") :-

country(is,"USA"),!.

capital_is("London") :-

country(is,"England"),!.

capital_is("Madrid") :-

country(is,"Spain"),!.

Эти правила могут служить основой экспертной системы на

правилах. Как видим представление знаний в экспертной системе

то же, что и представление фактов и правил, которое ранее ис-

пользовалось в этой книге.

Приведенные примеры, конечно, просты , однако, они очень

полезны для демонстрации принципов построения экспертных систем

на Турбо-Прологе. В следующем разделе будет показано, как можно

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

10.4 Методы вывода

Метод вывода - это систематический способ для доказатель-

ства того, что из множества предположений следует некоторое

заключение. Этот систематический метод закодирован в правилах

вывода, которые специфицируют принятую логику получения заклю-

чения. Вывод осуществляется посредством поиска и сопоставления

по образцу. Другие языки требуют написания собственных правил

поиска и сопоставления по образцу. В Турбо-Прологе эти задачи

выполняются с помощью внутренних программ унификации, поэтому в

данном случае требуется только написать необходимые специфика-

цию. Как в системах, базирующихся на правилах, так и в систе-

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

свои запросы в соответствии с логикой, заложенной в системе. В

первом случае запросы пользователя трансформируются в форму,

сопоставимую с формой правил базы знаний. Механизм вывода ини-

циализирует процесс сопоставления, начиная с "верхнего" прави-

ла. Обращение к правилу называется "вызовом". Вызов соответст-

вующих правил в процессе сопоставления продолжается до тех пор,

пока не произошло сопоставление или не исчерпана вся база зна-

ний, а сопоставление не найдено. Во втором случае трансформиро-

ванные запросы являются значениями, которые сопоставляются со

значениями, находящимися в базе знаний.

Если механизм вывода обнаруживает, что можно вызвать более

одного правила, то необходимо осуществить определенный выбор.

При этом приоритет отдается обычно либо правилам, которые более

специфицированы, либо правилам, которые учитывают больше теку-

щих данных. Этот процесс называется разрешением конфликта.

Чтобы продемонстрировать процесс вывода, предположим, что

нужно выяснить является ли Мадрид столицей Испании. Для вопро-

са (В) "Мадрид столица Испании?" механизм вывода в системе,

базирующейся на логике, образует цель:

capital("Madrid","Spain").

Если сопоставимый факт найден в системе,то она выдает от-

вет (О), т.е. "верно".

Система на правилах использует форму в виде правила для

поиска ответа (О)на вопрос (В): "Если в базе знаний есть прави-

ло вида "Если <условие> тогда В ", то ищи <условие>, чтобы по-

лучить ответ О". Вопрос представляется в виде:

capital_is("Madrid"):-

country(is,"Spain"), !.

Это пример обратного вывода. Заключение из правила специ-

фицировано и механизм вывода ищет в базе знаний все условия,

которые приводят к этому заключению.

Экспертные системы на Турбо-Прологе , рассматриваемые в

этой главе, объединяют методы вывода, базирующиеся на логике,

и методы, базирующиеся на правилах.

10.5 Система пользовательского интерфейса

Система пользовательского интерфейса обеспечивает взаимо-

действие между экспертной системой и пользователем. Это взаи-

модействие обычно включает несколько функций:

1. Обработка данных, полученных с клавиатуры, и высвечива-

ние вводимых и выводимых данных на экране.

2. Поддержка диалога между пользователем и системой.

3. Распознавание ситуации непонимания между пользователем

и системой.

4. Обеспечение "дружественности" по отношению к

пользователю.

Система интерфейса с пользователем должна эффективно

обрабатывать ввод и вывод. Для этого необходимо обрабатывать

вводимые и выводимые данные быстро, в ясной и выразительной

форме. Необходимо также включить возможность работы с

дополнительными средствами такими, как печатающие устройства,

магнитные диски и дополнительные файлы данных.

Кроме того, система интерфейса должна поддерживать

соответствующий диалог между пользователем и системой. Диалог

- это общая форма консультации с экспертной системой.

Консультация должна завершаться ясным утверждением, выдаваемым

системой, и объяснением последовательности вывода, приведшей к

этому утверждению.

Система пользовательского интерфейса должна также распоз-

навать непонимание,между пользователем и системой, возникшее

либо из-за ошибки, либо на принципиальной основе . Система долж-

на реагировать соответствующим образом на эту ситуацию. Напри-

мер, не должно произойти сбоя системы, если пользователь вводит

1, когда ожидается "да" или "нет", или когда пользователь зада-

ет бессмысленный вопрос.

Способность экспертной системы моделировать человека экс-

перта может меняться от простых познавательных процессов до

включения новых знаний или новых способов решения задачи. Сис-

тема интерфеса должна информировать пользователя о методике

работы системы и ее развитии, если такое развитие предусмотре-

но в системе.

Наконец, система пользовательского интерфейса должна быть

"дружелюбной" к пользователю. Например, последовательность ме-

ню, показывающая задачи, которые пользователь может выбрать,

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

также должен иметь возможность взаимодействовать с экспертной

системой естественным образом. В идеале пользователь должен

иметь возможность использовать естественный язык. Напечатать

"Что рекомендуется при аллергической головной боли?" легче,чем

ввести:

medication(Prescription,"allergy headache").

Хотя обработка естественного языка очень нужна в эксперт-

ных системах, такую возможность трудно спроектировать и реали-

зовать. Экспертные системы на Турбо-Прологе, представленные в

этой главе, будут использовать меню. Обработка естественного

языка рассматривается в гл. 11. Позже вы можете ввести интер-

фейс на естественном языке в вашу систему.

10.6 Экспертная система на правилах

Во всех экспертных системах существует зависимость между

входным потоком данных и данными в базе знаний. Во время кон-

сультации входные данные сопоставляются с данными в базе зна-

ний. Результатом сопоставления является отрицательный или ут-

вердительный ответ. В системе, базирующейся на правилах утвер-

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

правил. Эти продукционные правила определяются входными данны-

ми.

Таким образом, экспертная система, базирующаяся на прави-

лах (на Турбо-Прологе) содержит множество правил, которые вызы-

ваются посредством входных данных в момент сопоставления. Экс-

пертная система также содержит интерпретатор в механизме выво-

да, который выбирает и активизирует различные модули системы.

Работу этого интерпретатора можно описать последовательностью

трех шагов:

1. Интерпретатор сопоставляет образец правила с

элементами данных в базе знаний.

2. Если можно вызвать более одного правила,то интерпретатор

использует механизм разрешения конфликта для выбора правила.

3. Интерпретатор применяет выбранное правила , чтобы най-

ти ответ на вопрос.

Этот трехшаговый процесс интерпретации является цикличес-

ким и называется циклом "распознавание-действие".

В системе, базирующейся на правилах, количество продукци-

онных правил определяет размер базы знаний. Некоторые наиболее

сложные системы имеют базы знаний с более чем 5000 продукцион-

ных правил. Вы можете начать с небольшого количества правил и

добавлять их в базу знаний по мере расширения экспертной систе-

мы.

Может быть более важным, чем размеры базы знаний, является

структура самих продукционных правил. Проектировщик базы знаний

отвечает за построение совместимых правил. В настоящее время не

существует строгих принципов, которыми надо руководствоваться

при проектировании структуры правил. По этому поводу лишь ве-

дутся дискуссии. Однако за последние несколько лет некоторые

рекомендации стали очевидными и их нужно выполнять как можно

точнее:

1. Использовать минимально достаточное множество условий

при определении продукционного правила.

2. Избегать противоречащих продукционных правил.

3. Конструировать правила, опираясь на структуру присущую

предметной области.

Первая экспертная система на Турбо-Прологе в этой главе

- система для идентификации породы собак. Она помогает потен-

циальному хозяину выбрать породу собаки в соответствии с опре-

деленными критериями.

Предположим, что пользователь сообщил множество

характеристик собаки в ответ на вопросы экспертной системы.

Интерпретатор работает в цикле распознавание-действие . Если

характеристики сопоставимы с характеристиками породы собаки,

составляющими часть базы знаний, тогда вызывается

соответствующее продукционное правило и в результате

идентифицируется порода. Затем результат сообщается

пользователю. Аналогично, если порода не идентифицирована, это

тоже сообщается пользователю.

Теперь рассмотрим две характеристики породы собак , кото-

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

рост меньше 22 дюймов, длинные уши и хороший характер. Датский

дог имеет короткую шерсть, свисающий хвост, длинные уши, хоро-

ший характер и вес более 100 фунтов.

Вы видите из этого описания , что обе породы имеют корот-

кую шерсть, длинные уши и хороший характер. Рост гончей меньше

22 дюймов в то время , как ничего не сказано о росте дога. Дог

имеет свисающий хвост и вес более 100 фунтов - характеристики

отсутствующие для гончей. Описание двух собак в терминах ука-

занных характеристик достаточно, чтобы различить эти две поро-

ды, и даже отличить их от любой другой породы в базе знаний.

Следующие продукционные правила могут быть составлены по

указанным характеристикам:

dog_is("Beagle"):-

it_is("short-haired dog"),

positive(has,"height under 22 inches"),

positive(has,"long ears"),

positive(has,"good natured personality"), !.

dog_is("Great Dane"):-

it_is("short-haired dog"),

positive(has,"low-set tail"),

positive(has,"longer ears"),

positive(has,"good natured personality"),

positive(has,"weight over 100 lb"), !.

В предыдущем правиле длина шерсти может быть представлена

с помощью предиката positive в виде:

positive(has,"short-hair").

Но использование предиката it_is позволяет ограничить

"пространство поиска" (количество данных, проверяемых при поис-

ке решения) одним поддеревом древовидной структуры , содержащей

информацию о разных породах собак (см. рис. 10.2). Экспертная

система, базирующаяся на правилах, позволяет проектировщику

(программисту) строить правила, которые естественным образом

объединяют в группы связанные фрагменты знаний. Каждое продук-

ционное правило может быть независимым от других. Эта независи-

мость делает базу продукционных правил семантически модульной,

т.е. группы информации не влияют друг на друга. Более того, мо-

дульность базы правил позволяет развивать базу знаний, увеличи-

вая ее. Эта особенность крайне необходима во многих приложени-

ях. Турбо-Пролог позволяет легко ее реализовать в экспертной

системе.

10.7 Экспертные системы, базирующиеся на логике

В экспертных системах, базирующихся на логике, база знаний

состоит из утверждений в виде предложений логики предикатов.

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

Турбо-Пролога. Правила могут либо описывать данные либо управ-

лять процессом внутренней унификации Турбо-Пролога.

Так же как и в системе на правилах экспертная система, ба-

зирующаяся на логике, имеет множество правил, которые могут вы-

зываться с помощью данных из входного потока. Система имеет

также интерпретатор, который может выбирать и активизировать

модули, включаемые в работу системы.

Интерпретатор выполняет различные функции внутри системы

на основе следующей схемы:

1. Система имеет предложения в базе знаний, которые уп-

равляют поиском и сопоставлением. Интерпретатор сопоставляет

эти предложения с элементами данных в базе данных.

2. Если может быть вызвано более одного правила , то сис-

тема использует возможности Турбо-Пролога для разрешения

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

рассматривать потенциально возможные конфликты.

3. Система получает результаты унификационного процесса

автоматически, поэтому они могут направляться на нужное уст-

ройство вывода информации.

Так же как и в системе, базирующейся на правилах, данный

циклический процесс является процессом распознавание-действие.

Красота и большие возможности системы, основанной на логике,

заключаются в том, что она отражает структуру самого Турбо-Про-

лога. Этим объясняется тот факт, что она очень эффективна в ра-

боте.

Наиболее важным аспектом для базы знаний в системе, осно-

ванной на логике, является проектирование базы знаний, ее ут-

верждений и их структуры. База знаний должна иметь недвусмыс-

ленную логическую организацию, и она должна содержать минимум

избыточной информации. Так же как и в системе, базирующейся на

правилах, минимально достаточное количество данных образуют на-

иболее эффективную систему. Утверждения базы знаний для гончей

и дога выглядят так:

rule(1,"dog","Beagle",[1,2,3,4]).

rule(2,"dog","Great Dane",[1,5,3,4,6]).

cond(1,"short-haired").

cond(2,"height under 22 inches").

cond(3,"longer ears").

cond(4,"good natured personality").

cond(5,"low-set tail").

cond(6,"weight over 100 lb").

Заметьте, что в каждом предложении типа rule первый аргу-

мент - номер правила, второй аргумент - тип объекта ("собака")

и третий аргумент - порода собаки. В нашем случае это гончая

или дог. Список целых чисел задает номера условий из предложе-

ний типа cond ( условие ). Предложения типа cond содержат все

характеристики для любой породы, представленной в базе знаний.

Списки номеров условий служат для хранения множества фак-

тов, согласно которым выбираются предложения типа rule. Интерп-

ретатор в экспертной системе, базирующейся на логике, использу-

ет эти номера условий, чтобы делать соответствующий выбор.

Добавление и обновление предложений базы знаний являются

простыми опреациями. Для повторения этой методики вы можете

вернуться к материалу гл. 9 о предикатах retract и assert. Экс-

пертные системы, базирующиеся на логике, легко проектировать,

ширения базы знаний программа не требует модификации. Расшире-

ние прежде всего заключается в постепенном добавлении новых ут-

верждений.

10.8 Главное в разработке экспертных систем

Разработка экспертной системы требует большой организован-

ности и внимания к мелочам. Это требование меняется, естествен-

но, с изменением размера и сложности разрабатываемой экспертной

системы. Если экспертная система, которую Вы хотите сделать, в

конечном счете может содержать сотни продукционных правил, то

трудно определить эффект от добавления дополнительных правил. В

Турбо-Прологе продукционные правила помещаются в программу,и,

следовательно, размеры програмы увеличиваются по мере добавле-

ния правил. Размеры памяти в конце концов ограничивают число

правил. В этом случае использование системы на правилах стано-

вится проблематичным. В то же время, в системе, базирующейся на

логике, где база знаний находится в файле на диске, ограничения

на размеры базы знаний не накладываются. Поэтому система, осно-

ванная на логике, предпочтительнее в этом случае.

Если же ваша экспертная система будет содержать не более

нескольких сотен правил, использование системы, базирующейся на

правилах более предподчительно. В силу того, что продукционные

правила почти не зависят друг от друга, создание и тестирование

такой экспертной системы проще. Просто осуществляется и измене-

ние правил с целью изучить эффект, вызванный таким изменением.

В системах, базирующихся на логике, изменение параметров внутри

базы знаний должно производится с большей осторожностью, так

как изменения менее заметны , а результат может быть разруши-

тельным и восстановление затруднительным.

Если быстрота является главным требованием к разрабатывае-

мой экспертной системе,то можно выбрать либо логическую систе-

му, полностью находящуюся в оперативной памяти, либо систему,

нако, экспертная система должна содержать большую базу знаний,

то у разработчика имеется единственный вариант - логическая

система, находящаяся на диске.

После того как выбор между системой, базирующейся на пра-

вилах и системой базирующейся на логике, сделан и тщательно

изучены данные, которые войдут в базу знаний, можно начать про-

ектировать базу знаний , содержащую специфицированные функции и

имеющую необходимые свойства.

Следующим шагом является разработка диаграмм потоков дан-

ных и структурной схемы экспертной системы. Это поможет сконст-

руировать модули, составляющие систему. Затем можно приступить

к написанию программы, исходя из диаграммы потоков данных и

структурной схемы. После завершения программирования необходимо

проверить результаты с помощью человека-эксперта, участвующего

в проекте.

Программа для выбора породы собаки, рассматриваемая в сле-

дующем разделе, используется для иллюстрации методов построения

системы, базирующейся на правилах, и системы, базирующейся на

логике. Таким образом есть возможность сравнить два различных

подхода при работе с одними и теми же данными. В последнем раз-

деле данной главы рассматривается базирующаяся на логике расши-

ренная экспертная система для медицинской диагностики.

10.9 База знаний для выбора породы собаки.

В различных экспертных системах для выбора породы основные

данные одинаковы. Вы знакомы с ними, так как выбраны распрост-

раненные породы собак. Классификация в базе знаний может осно-

вываться на древовидной структуре, как показано на рис. 10.2.

Согласно этой древовидной классификации породы разделены на ко-

роткошерстные и длинношерстные. Английский бульдог, гончая, дог

и американский фокстерьер являются короткошерстными, а кок-

кер-спаниэль, ирландский сеттер, колли и сенбернар - длинношер-

стные.

Рис. 10.2 Древовидная структура базы знаний экспертной системы

для выбора породы собаки.

Для идентификации породы внутри каждого подмножества можно

использовать список атрибутов. Количество характеристик будет

определять степень точности классификации. Различающей не обя-

зательно является какая-нибудь единственная характеристика -

все множество атрибутов используется для достижения целей в

строящихся правилах. Все восемь перечисленных ниже атрибутов

являются необходимыми, так как ни один из них не характерен для

всех пород одновременно. Вспомните главу 9 , где говорилось,

что атрибут, который характеризует все объекты одновременно,

возможно, не является необходимым в множестве данных. В нашей

экспертной системе используются следующие характеристики:

1) короткая шерсть;

2) длинная шерсть;

3) рост меньше 22 дюймов;

4) рост меньше 30 дюймов;

5) низкопосаженный хвост;

6) длинные уши;

7) хороший характер;

8) вес больше 100 фунтов.

Каждая характеристика для конкретной породы либо верна,

либо не верна. Для каждой породы справедливы следующие характе-

ристики:

Порода Характеристики

Английский бульдог 1,3,5,7

Гончая 1,3,6,7

Дог 1,4,6,7,8

Американская гончая 1,5,6,7,

Коккер спаниэль 2,3,5,6,7

Ирландский сеттер 2,4,6

Колли 2,4,5,7

Сенбернар 2,5,7,8,

Способ использования этой информации зависит от

реализации экспертной системы.

В нашем случае при проектировании базы знаний древовидная

структура, множество идентифицирующих характеристик и наборы

номеров характеристик для каждой породы составляют рабочую мо-

дель базы знаний для выбора породы.

Заметьте, что номера характеристик являются искусственными

фактами, необходимыми проектировщику, и введены они для того,

чтобы функциональным модулям экспертной системы было легче

идентифицировать характеристики и манипулировать ими.

10.10 Проектирование и реализация системы, базирующейся на

правилах

Когда спроектирована база знаний, можно написать программу

на Турбо-Прологе для манипулирования ею. Для простоты и большей

ясности,в программе, которая рассматривается в этом разделе,ос-

новное внимание уделяется процессам, возникающим во время кон-

сультации с экспертной системой. Эти процессы включают управле-

ние потоком данных, поступающих от пользователя, получение ин-

формации из базы данных и выдачу результатов консультации. Ил-

люстрирующая эти процессы, диаграмма потока данных приведена на

рис. 10.3.

Рис. 10.3 Диаграмма потоков данных для экспертной системы, ба-

зирующейся на правилах, для выбора породы собаки

На рис. 10.3 показаны линии потока данных, выходящие из

клавиатуры. Эти линии обозначают поток входных данных от поль-

зователя. Также линии потоков данных выходят из базы знаний.

Эти линии соответствуют данным полученным из базы знаний. Линии

потока данных, идущие к монитору, представляют собой выводимые

на экран данные .Теперь основываясь на диаграмме потоков дан-

ных, можно разработать структурную схему, чтобы зафиксировать

организацию программных модулей и правил. Рис. 10.4 показывает

результирующую структурную схему.

На рис. 10.4 можно видеть, что главным модулем (или цель)

является - do_expert_job (выполни экспертную работу). Модули

ask(X,Y) (спроси) и remember(X,Y,Reply) (запомни) управляют по-

током данных от пользователя. Другие модули обновляют рабочие

данные и выдают результаты консультации.

Используя эту схему, Вы можете теперь разработать эксперт-

ную систему на Турбо-Прологе, базирующуюся на правилах. Сначала

необходимо сделать декларации базы данных. База данных будет

хранить ответы пользователя на вопросы системы пользовательско-

го интерфейса (СПИ). Эти данные являются утвердительными или

отрицательными ответами. Далее нужно объявить предикаты для вы-

полнения вывода (машина вывода) и для взаимодействия с пользо-

вателем (система пользовательского интерфейса).

Все вместе это следующие декларации:

database

xpositive(symbol,symbol)

xnegative(symbol,symbol)

predicates

do_expert_job

do_consulting

ask(symbol,symbol)

dog_is(symbol)

it_is(symbol)

positive(symbol,symbol)

negative(symbol,symbol)

remember(symbol,symbol,symbol)

clear_facts

Предикаты базы данных xpositive и xnegative используются

для хранения утвердительных и отрицательных ответов

пользователя. Первые четыре предиката нужны для взаимодействия

с пользователем, а остальные шесть - для механизма вывода.

Рис 10.4 Структурная диаграмма для экспертной системы, базирую-

щейся на правилах, для выбора породы собаки

Должны быть составлены восемь продукционных правил : по

одному для каждой породы. Каждое правило должно идентифициро-

вать породу по признаку принадлежности к группе длинношерстных

или короткошерстных. Это главные подкатегории, как следует из

данных и как показано на древовидной структуре (см. рис. 10.2).

Правило it_is производит эту идентификацию. Затем правило

positive идентифицирует характеристики собаки в каждом случае.

И it_is и positive используются механизмом вывода. Ниже приве-

дено полное продукционное правило для коккер-спаниэля:

dog_is("Cocker Spaniel") :-

it_is("long-haired dog"),

positive(has,"height under 22 inches"),

positive(has,"low set tail"),

positive(has,"longer ears"),

positive(has,"good natural personality"),!.

Механизм вывода должен иметь правила для управления данны-

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

ными правилами и сохранения "трассы" (или запоминания) отрица-

тельных и утвердительных ответов. Правила positive и negative

используются для сопоставления данных пользователя с данными в

продукционных правилах. Правило remember (запоминание) произво-

дит добавление предложений с ответами yes (да) и no (нет), для

использования при сопоставлении с образцом:

positive(X,Y) :-

xpositive(X,Y),!.

positive(X,Y) :-

not(negative(X,Y)),!,

ask(X,Y).

negative(X,Y) :-

xnegative(X,Y),!.

remember(X,Y,yes) :-

asserta(xpositive(X,Y)).

remember(X,Y,no) :-

asserta(xnegative(X,Y)),

fail.

clear_facts :-

retract(xpositive(_,_)),

fail.

clear_facts :-

retract(xnegative(_,_)),

fail.

Назначение системы пользовательского интерфейса (СПИ) -

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

вывода. Главный модуль do_expert_job (выполни экспертную

работу) и модуль do_consulting (выполни консультацию)

осуществляют эту связь. Модуль ask(X,Y) (спроси) запрашивает

данные у пользователя и сохраняет ответы в базе знаний. Кроме

того, окно обеспечивает дополнительное удобство во время

консультации. Система пользовательского интерфейса полностью

приведена ниже:

do_expert_job :-

setup_window,

do_consulting,

write("Press space bar."),nl,

readch(_),

removewindow,

exit.

setup_window :-

makewindow(1,7,7,"AN EXPERT SYSTEM",1,16,22,58),

nl,write("* * * * * * * * * * * * * * * * * * * *"),

nl,write(" A Dog Expert "),

nl,write(" "),

nl,write("This is a dog identification system. "),

nl,write("Please answer the question about "),

nl,write("the dog you would like by typing in "),

nl,write("'yes' or 'no'. "),

nl,write("* * * * * * * * * * * * * * * * * * * *"),

nl,nl.

do_consulting :-

dog_is(X),!,nl,

write("the dog you have indicated is a(n)",X,"."),nl,

clear_facts.

do_consulting :-

nl,write("Sorry I can't help you ! "),

clear_facts.

ask(X,Y) :-

write(" Question :- ",X," it ",Y," ?"),

readln(Reply),

remember(X,Y,Reply).

Заметьте, что главный модуль do_expert_job вызывает

модули setup_window (установи окно) и do_consulting (выполни

консультацию). Консультирующий модуль имеет две альтернативные

формы. Первая взаимодействует с механизмом вывода; если

результат цикла "распознавание - действие" положительный, то

результат сообщается пользователю. Вторая форма сообщает о

негативном результате.

Теперь можно соединить отдельные компоненты и сформировать

полную экспертную систему на правилах для выбора породы собаки.

Листинг 10.1 содержит эту программу.

Эта программа просит пользователя выбрать режим консульта-

ции или выход из программы. Затем экспертная система выбирает

породу собаки на основании ответов пользователя на вопросы, или

в конце неудачного поиска выдает сообщение Sorry I can't help

you (извините, я не могу помочь Вам) . На рис. 10.5 показан эк-

ран во время консультации.

Программные правила вывода , спроектированные в соответст-

вии с описанным процессом, гарантируют нормальное выполнение

программы при диалоге с пользователем и при поиске, обеспечивая

удобный и "дружелюбный" к пользователю язык . Внутренние прог-

раммы унификации Турбо-Пролога , его возможности поиска и со-

поставления по образцу обеспечивают эффективный и исчерпывающий

процесс.

Рис 10.5 Диалог с экспертной системой, базирующейся на прави-

лах, для выбора породы собаки

Упражнения

10.1 Вызовите экспертную систему, базирующуюся на правилах, для

выбора породы собаки. Введите различные последовательности от-

ветов "yes"( да) и "no"(нет), наблюдая как работает программа.

10.2 Пронаблюдайте, что происходит, когда ваши ответы подобраны

так, что их нельзя сопоставить с породами, характеристики кото-

рых хранятся в базе знаний. Вы увидите, что внутренние програм-

мы унификиции Турбо-Пролога производят исчерпывающее сопостав-

ление. Только когда никакое сопоставление не возможно , система

выдает сообщение Sorry.

10.3 Модифицируйте базирующуюся на правилах экспертную систему

для выбора породы собаки, добавив гипотетическую породу. Напи-

шите продукционное правило для этой породы собаки и включите

правило в программу. Проверьте программу и убедитесь, что она

идентифицирует породу, которую вы "спроектировали". Заметьте,

что ваши характеристики собаки должны быть комбинацией характе-

ристик уже существующих в программе, но комбинация должна отли-

чаться от комбинаций для других пород. Небольшая таблица может

помочь вам спроектировать характеристики породы.

10.10 Проектирование и реализация системы, базирующейся на ло-

гике

Структура экспертной системы, основанной на логике, анало-

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

Опять для простоты и большей ясности в рассматриваемой в этом

разделе программе основное внимание уделено консультации с экс-

пертной системой. Программа должна управлять потоком данных от

пользователя, выводить заключения из базы знаний и выдавать ре-

зультаты консультации. Диаграмма, иллюстрирующая потоки данных,

приведена на рис. 10.6.

Рис. 10.6 Диаграмма потоков данных для экспертной системы, ба-

зирующейся на логике, для выбора породы собаки

На рис. 10.6 выходящие из клавиатуры линии потока данных предс-

тавляют собой входной поток данных от пользователя. Другие ли-

нии потока данных выходят из базы знаний; они обозначают извле-

каемые данные. Линии потока данных также направлены к видеоэк-

рану. Исходя из диаграммы потока данных, можно сконструировать

структурную схему, как показано на рис. 10.7.

Рис.10.7 Структурная диаграмма для экспертной системы, базирую-

щейся на логике, для выбора породы собаки

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

do_expert_job вызывает модуль show_menu. Этот модуль предлагает

пользователю выбрать программную функцию. Ответ пользователя

считывается в целочисленную переменную Choice (выбор) и вызов

process(Choice) приводит к выполнению соответствующей программ-

ной функции. Модули process(0) и process(2) служат для выхода

из программы. Модуль process(1) вызывает модуль do_consulting

(выполни консультацию). Различные модули, вызываемые

do_consulting, выдают породы собак, выполняют вывод и обновляют

рабочие данные. Модуль eval_reply обеспечивает удобное заверше-

ние диалога консультации.

Теперь можно начать разработку на Турбо-Прологе экспертной

системы, базирующейся на логике. Первый раздел, который нужно

написать, - это раздел domains.

domains

CONDITIONS = BNO *

HISTORY = RNO *

RNO, BNO, FNO = INTEGER

CATEGORY = SYMBOL

и декларации database для базы знаний:

database

rule(RNO, CATEGORY, CONDITIONS)

cond(BNO, STRING)

yes(BNO)

no(BNO)

topic(string)

Предикат базы знаний rule (правило) содержит данные о

собаке и предикат cond (условие) хранит условия (или атрибуты

) , которые характеризуют различные породы. Предикаты yes (да)

и no (нет) хранят ответы пользователя. Предикат topic (тема)

содержит данные о типах собак (длинно- или короткошерстная

порода).

Раздел predicates имеет восемь предикатов для

интерфейса с пользователем:

do_expert_job

show_menu

do_consulting

process(integer)

info(CATEGORY)

goes(CATEGORY)

listopt

erase

clear

eval_reply(char)

Предикат do_expert_job (выполни экспертную работу) являет-

ся целью программы. Правило erase (исключение) исключает данные

из базы знаний после завершения цикла распознавание - действие.

Правило clear (очистить) уничтожает в базе данных все ответы

yes (да) и no (нет) . Остальные семь предикатов используемся в

механизме вывода.

go(HISTORY, CATEGORY)

check(RNO, HISTORY, CONDITIONS)

notes(BNO)

inpo(HISTORY, RNO, BNO, STRING)

do_answer(HISTORY, RNO, STRING, BNO, INTEGER)

Эти предикаты и правила осуществляют поиск в базе знаний и

сохраняют трассу значений объектов базы знаний и ввода пользо-

вателя для целей логического вывода. Правило check (проверка)

ищет образцы данных, сопоставимые с входными данными пользова-

теля.Альтернативы правила notest сохраняют трассу ответов yes

(да) и no (нет) . Предикат do_answer (обработай ответ) добавля-

ет данные от пользователя в динамическую базу данных.

Экспертная система, базирующаяся на логике, состоит из

базы знаний , содержащей утверждения логики предикатов.

Утверждения имеют одну из двух форм: rule или cond. База

знаний приведена ниже:

topic("dog").

topic("short-haired dog").

topic("long-haired dog").

rule(1, "dog", "short-haired dog", [1] ).

rule(2, "dog", "longt-haired dog", [2] ).

rule(3, "short-haired dog","English Bulldog ", [3,5,7] ).

rule(4, "short-haired dog","Beagle", [3,6,7] ).

rule(5, "short-haired dog","Great Dane", [5,6,7,8] ).

rule(6, "short-haired dog","American Foxhound",[4,6,7] ).

rule(7, "long-haired dog", "Cocker Spaniel", [3,5,6,7] ).

rule(8, "long-haired dog", "Irish Setter", [4,6] ).

rule(9, "long-haired dog", "Collie", [4,5,7] ).

rule(9, "long-haired dog", "St. Bernard", [5,7,8] ).

cond(1, "short-haired" ).

cond(2, "long-haired" ).

cond(3, "height under 22 inches" ).

cond(4, "height under 30 inches" ).

cond(5, "low-set tail" ).

cond(6, "longer ears" ).

cond(7, "good natured personality" ).

cond(8, "weight over 100 lb" ).

Вы помните, что в разд. "Построение базы знаний" было ска-

зано, что последний объект в утверждении rule - список целых

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

каждую породу собаки в базе знаний. Предложения cond содержат

все возможные характеристики собак.

Теперь необходимо "сконструировать" предикаты и правила

для механизма вывода. Практически механизм вывода должен иметь

начальное правило, такое как go , для принятия цели пользовате-

ля и инициализации цикла распознавание - действие. Механизм

просматривает утверждения базы знаний rule и cond для выяснения

существования или отсутствия подходящих значений данных.

Начальное правило вызывает правила, например check (про-

верка), для выполнения подзадач соответствующим образом. Это

правило содержит трассу номеров правил, номеров условий и клас-

сифицированные объекты в базе знаний. Оно пытается сопоставить

классифицированные объекты в терминах номеров условий.

Если сопоставление происходит,то этот модуль программы

должен добавить в программу сопоставленные значения и продол-

жить процесс с новыми данными, полученными от пользователя. Ес-

ли сопоставление не происходит, механизм останавливает текущий

процесс и выбирает для сопоставления другую трассу. Поиск и со-

поставление продолжаются до тех пор, пока не исчерпаны все воз-

можности.

По завершении вывода начальное правило с помощью интерфей-

са передает результаты пользователю.

Ниже приводится полная программа, реализующая механизм

вывода для экспертной системы, базирующейся на логике.

go(HISTORY, Mygoal) :-

rule(RNO,Mygoal,NY,COND),

check(RNO,HISTORY,COND),

go([RNO|HISTORY],NY).

check(RNO,HISTORY,[BNO|REST]) :-

yes(BNO),!,

check(RNO,HISTORY,REST).

check(_,_,[BNO|_]) :- no(BNO),!,fail.

check(RNO,HISTORY,[BNO|REST]) :-

cond(BNO,NCOND),

fronttoken(NCOND,"not",_,COND),

frontchar(_,COND,_,COND),

cond(BNO1,COND),

notest(BNO1),!,

check(RNO,HISTORY,REST).

check(_,_,[BNO|_]) :-

cond(BNO,NCOND),

fronttoken(NCOND,"not",_,COND),

frontchar(_,COND,_,COND),

cond(BNO1,COND),

yes(BNO1),

!,fail.

check(RNO,HISTORY,[BNO|REST]) :-

cond(BNO,TEXT),

inpo(HISTORY,RNO,BNO,TEXT),

check(RNO,HISTORY,REST).

check(_,_,[]).

notest(BNO) :- no(BNO),!.

notest(BNO) :- not(yes(BNO)),!.

do_answer(_,_,_,_,0) :- exit.

do_answer(_,_,_,BNO,1) :-

assert(yes(BNO)),

shiftwindow(1),

write(yes),nl.

do_answer(_,_,_,BNO,2) :-

assert(no(BNO)),

write(no),nl,

fail.

erase :- retract(_),fail.

erase.

clear :- retract(yes(_)),retract(no(_)),fail,!.

clear.

Для описания работы механизма вывода далее приводится

пример. Предположим, что задачей механизма вывода является

идентификация собаки, чьи характеристики соответствуют коккер

спаниэлю и специфицируются в базе знаний номерами 3, 5, 6, и 7.

Во время выполнения программы цель программы обеспечивает

выдачу полезной информации посредством интерфейса с пользовате-

лем. После этого вызывается модуль do_consulting (выполни кон-

сультацию), который в свою очередь вызывает правило go. Это

правило - начальное правило механизма вывода.

go(HISTORY, Mygoal) :-

rule(RNO,Mygoal,NY,COND),

check(RNO,HISTORY,COND),

go([RNO|HISTORY],NY).

Вначале ввод пользователем слова dog приводит к тому, что

переменная Mygoal (моя цель) получает значение "dog" (собака).

Применяется утверждение базы знаний rule(1,"dog","short-haired

dog",[1]) и списочная переменная COND получает значение [1].

Далее правило rule передает этот параметр правилу check (про-

верка). В свою очередь правило check осуществляет доступ к пра-

вилу cond базы знаний с параметром BNO равным 1. Правило check

передает это значение предикату fronttoken, чтобы создать зна-

чение _COND. Это правило дает неуспех.

Правило check возвращается к правилу cond и COND содержит

значение параметра. Затем правило check осуществляет доступ к

значению "short-haired" (короткошерстный) и передает его в

переменной TEXT правилу inpq. Правило inpq выдает на экран

текстовую строку:

Question:- short-haired? (Вопрос:- короткошерстный?)

Пользователю сообщается, что он должен нажать 1 для утвер-

дительного ответа и 2 для отрицательного. Правило inpq принима-

ет ответ пользователя в нашем примере это 2, и интерпретирует

его как отрицательный.

Процесс продолжается со следующим утверждением rule базы

знаний, т.е. RNO равным 2. Теперь правило check использует

значение COND равное 2 для текущего правила rule , повторяет

цикл построения списка значений COND и запрашивает

пользователя о дополнительном вводе.

Основываясь на вводимых ответах пользователя (рис. 10.12),

доступ к утверждениям rule и cond происходит в следующим поряд-

ке:

rule(1), cond(1),

rule(2), cond(2),

rule(7), cond(3),

rule(7), cond(5),

rule(7), cond(6),

rule(7), cond(7).

В конце этого процесса переменная COND типа список имеет

значение [3,5,6,7]. Этот список сопоставляется со списком усло-

вий в правиле 7. Сопоставление связывается с классифицированным

объектом "Cocker Spaniel" (коккер спаниэль) в утверждении rule,

и механизм вывода, таким образом, нашел требуемый результат.

Система пользовательского интерфейса имеет три части.

Большая часть состоит в основном из правил для организации

меню и уничтожения окна, когда оно больше не нужно. Работа

второй части СПИ зависит от выбора пользователем программной

функции. Подправило process(1) вызывает правило do_consulting,

которое в свою очередь вызывает goes(Mygoal). Это подправило

выдает список пород собак и вызывает правило go(Mygoal),

которое инициализирует процесс поиска и сопоставления по

образцу.

Третья часть СПИ запрашивает и получает ответы yes и no

от пользователя. Она реализована следующим образом:

inpo(HISTORY,RNO,BNO,TEXT) :-

write("Question :-",TEXT," ? "),

makewindow(2,7,7,"Response",10,54,7,20),

write("Type 1 for 'yes' ,"),nl,

write("Type 2 for 'no' : "),nl,

readint(RESPONSE),

clearwindow,

shiftwindow(1),

do_answer(HISTORY,RNO,TEXT,BNO,RESPONSE).

Заметьте, что это правило взаимодействует и с

пользователем и с механизмом вывода. Предикаты write и readint

используются для взаимодействия с пользователем, а правило

do_answer взаимодействует с МВ.

Теперь можно соединить отдельные компоненты вместе, чтобы

сформировать полную экспертную систему для выбора собаки, бази-

рующуюся на логике. Листинг 10.2 - это реализация данного про-

екта:

Эта программа выдает начальное меню , предлагая

пользователю выбор между consultation (консультацией) и exit

from the system (выход из системы) . Если пользователь

выбирает консультацию, то между пользователем и системой

происходит диалог. Затем пользователю сообщается результат.

Результатом является либо выбранная порода, либо сообщение

Sorry I can't help you (Извините, я не могу помочь Вам).

На рис. 10.8 показан диалог во время консультации. Заметь-

те, что этот диалог приводит к утвердительному результату. То

есть база знаний содержит информацию о породе собаки, которая

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

Упражнения

10.4. Вызовите программу экспертной системы для выбора породы,

основанную на логике. Проведите несколько консультаций и по-

наблюдайте, как работает система .

10.5. Модифицируйте программу, включив информацию о другой по-

роде собаки. Напишите соответствующее утверждение логики преди-

катов, содержащее ее характеристики в виде списка целых чисел.

Убедитесь, что каждый список уникален.

10.6. Вместо информации о собаке введите абсолютно новую кате-

горию знаний, например, "рыба" или "человек, занимающийся поли-

тикой". Начните с организации атрибутов по выбранному объекту,

делая это систематическим образом. Затем определите, какие ат-

рибуты будут отличать один объект от остальных. Когда закончи-

те, проверьте все категории чтобы убедиться, что каждая катего-

рия сконструирована правильно.

Рис. 10.8 Диалог с экспертной системой, базирующейся на логике,

для выбора породы собаки

10.11 Расширенная экспертная система, базирующаяся на логике.

Две экспертные системы, рассматриваемые в предыдущих

разделах представляются простыми и легко реализуются. Важной

чертой обоих систем является,возможность их расширения для под-

держки больших баз знаний. Механизмы вывода в этих экспертных

системах структурированы таким образом, чтобы их можно было

легко расширять, включая более специфических утверждений. Эти

утверждения могут формировать большие и неоднородные базы зна-

ний.

Медицинская диагностическая экспертная система может

проиллюстрировать расширение системы указанным образом. Назна-

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

ной болезни. Пользователь дает информацию о симптомах в ответ

на вопросы экспертной системы.

Обсуждение проекта

Проект медицинской диагностической экспертной системы ана-

логичен базирующейся на логике экспертной системе для выбора

породы собаки. Дополнительно в нее включенны модули для загруз-

ки и сохранения базы знаний.

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

рис. 10.9. Заметьте, что диаграмма схожа с диаграммой потоков

данных, приведенной на рис. 10.6, поэтому детали потоков данных

на рис.10.9 не специфицированы . Добавлены модули process(1)

для загрузки файла базы знаний в память и process(3) для сохра-

нения базы знаний на диске. ( Обратите внимание на линии пото-

ков данных между базой знаний в памяти и файлом базы знаний на

диске).

Рис. 10.9 Диаграмма потоков данных для медицинской диагности-

ческой экспертной системы

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

показана на рис. 10.10. Эта структурная схема аналогична схеме,

приведенной на рис. 10.7 для базирующейся на логике системы вы-

бора собаки . Однако обратите внимание на два дополнительных

модуля process(1) и process(3), которые загружают и сохраняют

базу знаний.

Содержание базы знаний для медицинской экспертной системы

приведено на рис. 10.11. База знаний имеет информацию по 15 бо-

лезням; эта информация хранится в 15 утверждениях rule базы

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

rule характеризует болезнь. Утверждения rule и cond связаны

посредством списков в конце каждого правила для медицинской эк-

спертной проблемы. Например правило:

Рис. 10.10 Структурная диаграмма для медицинской диагностичес-

кой экспертной системы

rule(11,"illness","social anxiety",[12,15,16,17,18,13])

связано со следующими симптомами (условиями):

cond(12,"feel anxious most of time")

cond(15,"anxious since giving up tobacco,alcohol, drugs")

cond(16,"recently had a major upset in file")

cond(17,"loss weight or eyes bulding")

cond(18,"have sex life problem")

cond(13,"feel anxious in meeting, particles, interviews")

Утверждение topic("illness") предоставляет пользователю выбор

базы знаний. В нашем случае выбор - "illness". При желании ,

например, создать базу знаний для инфекционных болезней, следо-

вало бы добавить утверждение topic("infectious diseases") (ин-

фекционные болезни). Затем требуется спроектировать и реализо-

вать rule и cond утверждения для построения базы знаний по бо-

лезням.

10.12 Построение медицинской диагностической экспертной системы

Листинг программы, реализующей систему для выбора собаки,

базирующуюся на правилах, может быть использован как отправная

точка для программы экспертной системы медицинской диагностики.

Структуры двух программ аналогичны. При желании можно получить

медицинскую диагностическую экспертную систему. Полная програм-

ма, показанная на листинге 10.3, - реализация такой модифика-

ции.

Заметьте, что база знаний не приведена на листинге. Она

содержится в файле на диске. Этот файл создается с помощью ре-

дактора Турбо-Пролога. Предикаты работы с файлами consult и

save используются для загрузки файла базы знаний и записи его

на диск. Меню в программе для пользователя обеспечивает удобную

загрузку и сохранение модулей базы знаний.

Рис 10.11 База знаний для медицинской диагностической эксперт-

ной системы

При выполнении программы пользователю предоставляется меню

программных функций. Затем производится консультация на основе

вопросов и ответов пользователя. Ответы дают экспертной системе

информацию для процесса сопоставления по образцу. Модули поль-

зовательского интерфейса обеспечивают соответствующую графику и

удобный для пользователя естественный язык взаимодействия во

время диалога. Когда заканчивается цикл распознавание - дейст-

вие экспертной системы, система выдает конечное сообщение: либо

вероятную болезнь, либо , совет обратиться к врачу. Типичный

диалог во время консультации показан на рис. 10.12. Консульта-

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

Ядро медицинской диагностической экспертной системы, бази-

рующейся на логике, - механизм вывода. Работа механизма вывода

аналогична работе механизма вывода в базирующейся на логике эк-

спертной системе для выбора собаки.

Начальной точкой работы механизма вывода является получе-

ние ввода пользователя illness. Первый задаваемый пользователю

вопрос исходит из первого утверждения cond.

На экране появляется:

Question: - continually on edge?

Оставшиеся вопросы базируются на утверждениях cond co 2-го

номера по 8-й. Ответы на вопросы 5 и 8 отрицательные, поэтому

переменная COND типа список имеет значение [1,2,3,4,6,7]. Дан-

ный список сопоставляется со списком условий правила 6. Это со-

поставления связывается с классифицированным объектом

"hypothyroidism" в утверждении rule, и механизм вывода нашел,

таким образом, решение - увеличение щетовидной железы.

Рис.10.12 Диалог с медицинской диагностической экспертной сис-

темой

Упражнения

10.7. Вызовите медицинскую диагностическую экспертную систему.

Вспомните, что база знаний не существует пока Вы не "создали"

ее, то есть пока Вы не загрузили файл базы знаний, как это об-

суждалось ранее. Проведите несколько консультаций, чтобы полу-

чить и удачные и неудачные результаты.

10.8. Добавьте в базу знаний информацию о нескольких других бо-

лезнях ( о лихорадке и др. ). Используйте редактор Турбо-Проло-

га для добавления в файл базы знаний. Вызовите программу и убе-

дитесь, что система правильно диагностирует болезни.

Обзор главы

В данной главе описаны принципы работы двух широко расп-

ространенных типов экспертных систем: системы на правилах и

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

этих систем: база знаний, механизм вывода и система пользова-

тельского интерфейса.

Вы научились проектировать базу знаний в соответствии с

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

правила для систем, базирующихся на правилах, и базу знаний ут-

верждений для систем , базирующихся на логике.

Наконец, при обсуждении медицинской экспертной системы,

показано как создавать базу знаний на диске. Использование

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

загрузки и сохранения базы знаний.

На протяжении этой главы демонстрировались, что графика и

средства редактирования, мощные внутренние программы унифика-

ции, средства поиска и сопоставления Турбо-Пролога обеспечивают

эффективность программ. Так как разработка экспертных систем

становится многообещающей областью практического применения

программирования для задач искусственного интеллекта, рост ис-

пользования возможностей Турбо-Пролога оказывается неограничен-

ным.

Названия рисунков

10.1. Общая структура экспертной системы

10.2.Древовидная структура базы знаний экспертной системы для

выбора породы собаки

10.3. Диаграмма потоков данных для экспертной системы,

базирующейся на правилах, для выбора породы собаки

10.4. Структурная диаграмма для экспертной системы,

базирующейся на правилах, для выбора породы собаки

10.5. Диалог с экспертной системой, базирующейся на правилах,

для выбора породы собаки

10.6. Диаграмма потоков данных для экспертной системы,

базирующейся на логике, для выбора породы собаки

10.7. Структурная диаграмма для экспертной системы,

базирующейся на логике, для выбора породы собаки

10.8. Диалог с экспертной системой, базирующейся на логике, для

выбора породы собаки

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

экспертной системы

10.10. Структурная диаграмма для медицинской диагностической

экспертной системы

10.11. База знаний для медицинской диагностической экспертной

системы

10.12. Диалог с медицинской диагностической экспертной системой

Перевод рисунков

10.1 1-оболочка, 2-пользователь, 3-система пользователь-

ского интерфейса (СПИ), 4-механизм вывода (МВ), 5-база знаний

(БЗ).

10.2 1-собака, 2-короткошерстная собака, 3-длинношнрстная

собака, 4-английский бульдог, 5-гончая, 6-дог, 7-американский

фокстерьер, 8-коккер-спаниэль, 9-ирландский сеттер, 10-колли,

11- сенбернар

10.3 1-клавиатура, 2-дисплей, 3-база знаний

10.4

10.5

10.6 1-клавиатура, 2-дисплей, 3-база знаний

10.7

10.8

10.9 1-клавиатура, 2-дисплей, 3-база знаний, 4-основная

диаграмма потоков данных (см. рис. 10.6), 5-файл базы знаний

Листинг 10.1

/* Программа: Эксперт по породам собак Файл:prog1001.pro */

/* Назначение. Демонстрация работы экспертной системы. */

/* Это продукционная система, базирующаяся на правилах */

/* Замечание: это система для идентификации породы. Система */

/* использует множество продукционных правил для вывода */

/* решения */

domains

database

xpositive(symbol,symbol)

xnegative(symbol,symbol)

predicates

do_expert_job

do_consulting

ask(symbol,symbol)

dog_is(symbol)

it_is(symbol)

positive(symbol,symbol)

negative(symbol,symbol)

remember(symbol,symbol,symbol)

clear_facts

goal

do_expert_job

clauses

/* Система пользовательского интерфейса (СПИ) */

do_expert_job :-

makewindow(1,7,7,"AN EXPERT SYSTEM",1,16,22,58),

nl,write("* * * * * * * * * * * * * * * * * * * *"),

nl,write(" WELCOME TO A DOG EXPERT SYSTEM "),

nl,write(" "),

nl,write("This is a dog identification system. "),

nl,write("Please answer the question about "),

nl,write("the dog you would like by typing in "),

nl,write("'yes' or 'no'. "),

nl,write("* * * * * * * * * * * * * * * * * * * *"),

nl,nl.

do_consulting,

write("Press space bar."),nl,

readch(_),

removewindow,

exit.

do_consulting :-

dog_is(X),!,nl,

write("the dog you have indicated is a(n)",X,"."),nl,

clear_facts.

do_consulting :-

nl,write("Sorry I can't help you ! "),

clear_facts.

ask(X,Y) :-

write(" Question :- ",X," it ",Y," ?"),

readln(Reply),

remember(X,Y,Reply).

/* МЕХАНИЗМ ВЫВОДА */

positive(X,Y) :-

xpositive(X,Y),!.

positive(X,Y) :-

not(negative(X,Y)),!,

ask(X,Y).

negative(X,Y) :-

xnegative(X,Y),!.

remember(X,Y,yes) :-

asserta(xpositive(X,Y)).

remember(X,Y,no) :-

asserta(xnegative(X,Y)),

fail.

clear_facts :-

retract(xpositive(_,_)),

fail.

clear_facts :-

retract(xnegative(_,_)),

fail.

/* ПРОДУКЦИОННЫЕ ПРАВИЛА */

dog_is("English Bulldog") :-

it_is("short-haired dog"),

positive(has,"height under 22 inches"),

positive(has,"low-set tail"),

positive(has,"good natured personality"),!.

dog_is("Beagle") :-

it_is("short-haired dog"),

positive(has,"height under 22 inches"),

positive(has,"longer ears"),

positive(has,"good natured personality"),!.

dog_is("Great Dane") :-

it_is("short-haired dog"),

positive(has,"low-set tail"),

positive(has,"good natured personality"),

positive(has,"weight over 100 lb"),!.

dog_is("American Foxhound") :-

it_is("short-haired dog"),

positive(has,"height under 30 inches"),

positive(has,"longer ears"),

positive(has,"good natured personality"),!.

dog_is("Cocker Spaniel") :-

it_is("long-haired dog"),

positive(has,"height under 22 inches"),

positive(has,"low-set tail"),

positive(has,"longer ears"),

positive(has,"good natured personality"),!.

dog_is("Irish Setter") :-

it_is("long-haired dog"),

positive(has,"height under 30 inches"),

positive(has,"longer ears"),!.

dog_is("Collie") :-

it_is("long-haired dog"),

positive(has,"height under 30 inches"),

positive(has,"low-set tail"),

positive(has,"good natured personality"),!.

dog_is("St. Bernard") :-

it_is("long-haired dog"),

positive(has,"low-set tail"),

positive(has,"good natured personality"),

positive(has,"weight over 100 lb"),!.

it_is("short-haired dog") :-

positive(has,"short-haired"),!.

it_is("long-haired dog") :-

positive(has,"long-haired"),!.

/* КОНЕЦ ПРОГРАММЫ */

Листинг 10.2

/* Программа: Эксперт по породам собак Файл:prog1002.pro */

/* Назначение. Демонстрация работы экспертной системы, */

/* базирующейся на логике */

/* Замечание: это система для идентификации породы. Система */

/* состоит из базы знаний (БЗ), механизма вывода (МВ) */

/* и системы пользовательского интерфейса (СПИ). */

/* База знаний располагается в оперативной памяти */

domains

CONDITIONS = BNO *

HISTORY = RNO *

RNO, BNO, FNO = INTEGER

CATEGORY = SYMBOL

database

/* Предикаты базы данных */

rule(RNO, CATEGORY, CONDITIONS)

cond(BNO, STRING)

yes(BNO)

no(BNO)

topic(string)

predicates

/* Предикаты системы пользовательского интерфейса */

do_expert_job

show_menu

do_consulting

process(integer)

info(CATEGORY)

goes(CATEGORY)

listopt

erase

clear

eval_reply(char)

/* Предикаты механизма вывода */

go(HISTORY, CATEGORY)

check(RNO, HISTORY, CONDITIONS)

notes(BNO)

inpo(HISTORY, RNO, BNO, STRING)

do_answer(HISTORY, RNO, STRING, BNO, INTEGER)

goal

do_expert_job

clauses

/* База знаний (БЗ) */

topic("dog").

topic("short-haired dog").

topic("long-haired dog").

rule(1, "dog", "short-haired dog", [1] ).

rule(2, "dog", "longt-haired dog", [2] ).

rule(3, "short-haired dog","English Bulldog ", [3,5,7] ).

rule(4, "short-haired dog","Beagle", [3,6,7] ).

rule(5, "short-haired dog","Great Dane", [5,6,7,8] ).

rule(6, "short-haired dog","American Foxhound",[4,6,7] ).

rule(7, "long-haired dog", "Cocker Spaniel", [3,5,6,7] ).

rule(8, "long-haired dog", "Irish Setter", [4,6] ).

rule(9, "long-haired dog", "Collie", [4,5,7] ).

rule(9, "long-haired dog", "St. Bernard", [5,7,8] ).

cond(1, "short-haired" ).

cond(2, "long-haired" ).

cond(3, "height under 22 inches" ).

cond(4, "height under 30 inches" ).

cond(5, "low-set tail" ).

cond(6, "longer ears" ).

cond(7, "good natured personality" ).

cond(8, "weight over 100 lb" ).

/* Система пользовательского интерфейса */

do_expert_job :-

makewindow(1,7,7," DOG EXPERT SYSTEM ",0,0,25,80),

show_menu,

nl,write(" Press space bar. "),

readchar(_),

exit.

show_menu :-

write(" "),nl,

write(" * * * * * * * * * * * * * * * * * * "),nl,

write(" * DOG EXPERT * "),nl,

write(" * * "),nl,

write(" * 1. Consultation * "),nl,

write(" * * "),nl,

write(" * * "),nl,

write(" * 2. Exit the system * "),nl,

write(" * * "),nl,

write(" * * * * * * * * * * * * * * * * * * "),nl,

write(" "),nl,

write("Please enter your choice: 1 or 2 : "),nl,

readint(Choice),

process (Choice).

process(1) :-

do_consulting.

process(2) :-

removewindow,

exit.

do_consulting :-

goes(Mygoal),

go([],Mygoal),

!.

do_consulting :-

nl, write(" Sorry I can't help yuo."),

clear.

do_consulting.

goes(Mygoal) :-

clear,

clearwindow,

nl,nl,

write(" "),nl,

write(" WELCOME TO THE DOG EXPERT SYSTEM "),nl,

write(" "),nl,

write("This is a dog identification system. "),nl,

write("To begin the process of choosing a "),nl,

write("dog, please type in 'dog'. If you "),nl,

write("wish to see the dog types, please "),nl,

write("type in a question mark (?). "),nl,

write(" "),nl,

readin(Mygoal),

info(Mygoal),!.

info("?") :-

clearwindow,

write("Reply from the KBS."),nl,

listopt,

nl,write("Please any key. "),

readchar(_),

clearwindow,

exit.

info(X) :-

X >< "?".

listopt :-

write("The dog types are : "),nl,nl,

topic(Dog),

write(" ",Dog),nl,

fail.

listopt.

inpo(HISTORY,RNO,BNO,TEXT) :-

write("Question :- ",TEXT," ? "),

makewindow(2,7,7,"Response",10,54,7,20),

write("Type 1 for 'yes' ,"),nl,

write("Type 2 for 'no' : "),nl,

readint(RESPONSE),

clearwindow,

shiftwindow(1),

do_answer(HISTORY,RNO,TEXT,BNO,RESPONSE).

eval_reply('y') :-

write(" I hope you have found this helpful !").

eval_reply('n') :-

write(" I am sorry I can't help you !").

go(_,Mygoal) :-

not(rule(_,Mygoal,_,_)),!,

nl,write(" The dog you have indicated is a(n) ",

Mygoal,"."),nl,

write("Is a dog you would like to have (y/n) ?"),

nl,readchar(R),

eval_reply(R).

/* Механизм вывода */

go(HISTORY, Mygoal) :-

rule(RNO,Mygoal,NY,COND),

check(RNO,HISTORY,COND),

go([RNO|HISTORY],NY).

check(RNO,HISTORY,[BNO|REST]) :-

yes(BNO),!,

check(RNO,HISTORY,REST).

check(_,_,[BNO|_]) :- no(BNO),!,fail.

check(RNO,HISTORY,[BNO|REST]) :-

cond(BNO,NCOND),

fronttoken(NCOND,"not",_,COND),

frontchar(_,COND,_,COND),

cond(BNO1,COND),

notest(BNO1),!,

check(RNO,HISTORY,REST).

check(_,_,[BNO|_]) :-

cond(BNO,NCOND),

fronttoken(NCOND,"not",_,COND),

frontchar(_,COND,_,COND),

cond(BNO1,COND),

yes(BNO1),

!,fail.

check(RNO,HISTORY,[BNO|REST]) :-

cond(BNO,TEXT),

inpo(HISTORY,RNO,BNO,TEXT),

check(RNO,HISTORY,REST).

check(_,_,[]).

notest(BNO) :- no(BNO),!.

notest(BNO) :- not(yes(BNO)),!.

do_answer(_,_,_,0) :- exit.

do_answer(_,_,BNO,1) :-

assert(yes(BNO)),

shiftwindow(1),

write(yes),nl.

do_answer(_,_,_,BNO,2) :-

assert(no(BNO)),

write(no),nl,

fail.

erase :- retract(_),fail.

erase.

clear :- retract(yes(_)),retract(no(_)),fail,!.

clear.

/* Конец программы */

Листинг 10.3

/* Программа: Медицинская экспертная система Файл: prog1003.pro */

/* */

/* Назначение. Демонстрация работы экспертной системы,

/* базирующейся на диске */

/* Замечание: Это медицинская экспертная система. Система */

/* состоит из базы знаний (БЗ), механизма вывода (МВ) */

/* и системы пользовательского интерфейса (СПИ). */

/* База знаний загружается с диска */

domains

CONDITIONS = BNO *

HISTORY = RNO *

RNO, BNO, FNO = INTEGER

CATEGORY = SYMBOL

database

/* Предикаты базы данных */

rule(RNO, CATEGORY, CONDITIONS)

cond(BNO, STRING)

yes(BNO)

no(BNO)

topic(string)

predicates

/* Предикаты системы пользовательского интерфейса */

do_expert_job

show_menu

do_consulting

process(integer)

listopt

evalans(char)

info(CATEGORY)

goes(CATEGORY)

/* Предикаты механизма вывода */

go(HISTORY, CATEGORY)

check(RNO, HISTORY, CONDITIONS)

notes(BNO)

inpo(HISTORY, RNO, BNO, STRING)

do_answer(HISTORY, RNO, STRING, BNO, INTEGER)

erase

clear

goal

do_expert_job

clauses

/* Cистема пользовательского интерфейса (часть 1) */

do_expert_job :-

makewindow(1,7,7,"MEDICAL EXPERT SYSTEM ",0,0,25,80),

show_menu,

nl,write(" Press space bar. "),

readchar(_),

exit.

show_menu :-

write(" "),nl,

write(" * * * * * * * * * * * * * * * * * * "),nl,

write(" * MEDICAL EXPERT * "),nl,

write(" * * "),nl,

write(" * 1. Load KBS * "),nl,

write(" * 2. Consultation * "),nl,

write(" * 3. Save KBS * "),nl,

write(" * 4. Exit the system * "),nl,

write(" * * "),nl,

write(" * * * * * * * * * * * * * * * * * * "),nl,

write(" "),nl,

write("Please enter your choice: 1,2,3 or 4 : "),nl,

readint(Choice),

process (Choice).

process(0).

process(1) :-

consult("illness.dba").

process(2) :-

do_consulting.

process(3) :-

save("ILLNESS.DBA").

process(4) :-

exit.

do_consulting :-

goes(Mygoal),nl,nl,

go([],Mygoal),

!.

do_consulting :-

nl, write(" Sorry I can't determine that one"),

nl,write(" Please see a physician. "),nl,

clear.

goes(Mygoal) :-

clear,

clearwindow,

nl,nl,

write(" "),nl,

write(" WELCOME TO THE MEDICAL EXPERT SYSTEM "),nl,

write(" "),nl,

write("This is an illnes identification system."),nl,

write("To start the consultation process, "),nl,

write("please type in 'illness'. "),nl,

readin(Mygoal),

info(Mygoal),!.

go(_,Mygoal) :-

not(rule(_,Mygoal,_,__,!,nl,

write(" I think it is ",MYgoal,"."),nl,nl,

write(" Is my diagnosis right (y/n) ?"),nl,

readchar(Answer),

evalans(Answer).

/* МЕХАНИЗМ ВЫВОДА */

go(HISTORY,Mygoal) :-

rule(RNO,Mygoal,NY,COND),

check(RNO,HISTORY,COND),

go([RNO|HISTORY],NY).

check(RNO,HISTORY,[BNO|REST]) :-

yes(BNO),!,

check(RNO,HISTORY,REST).

check(_,_,[BNO|_]) :- no(BNO),!,fail.

check(RNO,HISTORY,[BNO|REST]) :-

cond(BNO,NCOND),

fronttoken(NCOND,"not",_,COND),

frontchar(_,COND,_,COND),

cond(BNO1,COND),

notest(BNO1),!,

check(RNO,HISTORY,REST).

check(_,_,[BNO|_]) :-

cond(BNO,NCOND),

fronttoken(NCOND,"not",_,COND),

frontchar(_,COND,_,COND),

cond(BNO1,COND),

yes(BNO1),

!,fail.

check(RNO,HISTORY,[BNO|REST]) :-

cond(BNO,TEXT),

inpo(HISTORY,RNO,BNO,TEXT),

check(RNO,HISTORY,REST).

check(_,_,[]).

notest(BNO) :- no(BNO),!.

notest(BNO) :- not(yes(BNO)),!.

do_answer(_,_,_,0) :- exit.

do_answer(_,_,BNO,1) :-

assert(yes(BNO)),

shiftwindow(1),

write(yes),nl.

do_answer(_,_,_,BNO,2) :-

assert(no(BNO)),

write(no),nl,

fail.

erase :- retract(_),fail.

erase.

clear :- retract(yes(_)),retract(no(_)),fail,!.

clear.

/* СИСТЕМА ПОЛЬЗОВАТЕЛЬСКОГО ИНТЕРФЕЙСА (часть 2) */

inpo(HISTORY,RNO,BNO,TEXT) :-

write("Question :-",TEXT," ? "),

makewindow(2,7,7,"Response",10,54,7,20),

write("Type 1 for 'yes' ,"),nl,

write("Type 2 for 'no' : "),nl,

readint(RESPONSE),

clearwindow,

shiftwindow(1),

do_answer(HISTORY,RNO,TEXT,BNO,RESPONSE).

info("?") :-

clearwindow,

write("Reply from the KBS."),nl,

listopt,

nl,write("Please any key. "),

readchar(_),

clearwindow,

show_menu.

info(X) :-

X >< "?".

listopt :-

write("The illnesses are : "),nl,nl,

topic(Ins),

write(" ",Ins," "),nl,

fail.

listopt.

evalans('y') :-

write(" I am glad I can help you !"),nl,nl,

write(" Press the space bar."),

readchar(_),

clearwindow,

show_menu.

evalans('n') :-

write(" I am sorry I can't help you !"),nl,nl,

write(" Please press space bar ."),

readchar(_),

clearwindow,

show_menu.

/* Конец программы */

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