- •Лабораторная работа № 1. Малая экспертная система.
- •Теоретические сведения
- •Диагностические экспертные системы.
- •Пример применения байесовской стратегии оценки выводов
- •Контрольные задания:
- •Контрольные вопросы:
- •Лабораторная работа № 2. Знакомство с инструментальными средствами для создания экспертных систем.
- •Теоретические сведения
- •Контрольное задание:
- •Контрольное задание:
- •Контрольные вопросы:
- •Лабораторная работа № 4.
- •Теоретические сведения
- •Контрольное задание:
- •Основные стандартные домены
- •Основные стандартные предикаты:
- •Ключевые слова
- •Контрольные задания:
- •Контрольные вопросы:
- •Лабораторная работа №7. Предложения (факты и правила), цели на языке пролог.
- •Теоретические сведения Clauses (условия): Facts (факты) и Rules (правила)
- •О фактах
- •Контрольные вопросы:
- •Лабораторная работа №8. Переменные на языке программирования пролог.
- •Теоретические сведения
- •Анонимные переменные
- •Контрольное задание:
- •Принципы отката:
- •Контрольные задания:
- •Преимущества рекурсии
- •Оптимизация обратной рекурсии
- •Контрольные задания:
- •Объявление списков
- •Головы и хвосты
- •Обработка списков
- •Использование списков
- •Контрольное задание:
- •Контрольные вопросы:
- •Лабораторная работа №13. Секция фактов Лабораторная работа № 1.
- •Теоретические сведения
- •Объявление секций фактов
- •Модификация секции фактов
- •Добавление фактов в период исполнения программы
- •Загрузка фактов из файла в период исполнения программы
- •Удаление фактов в период исполнения программы
- •Удаление нескольких фактов сразу
- •Ключевые слова для объявления фактов
- •Описания Факты, объявленные с ключевым словом nondeterm
- •Факты, объявленные с ключевым словом determ
- •Факты, объявленные с ключевым словом single
- •Сохранение базы данных фактов во время выполнения программы
- •Контрольные задания:
- •Контрольные вопросы:
Лабораторная работа № 2. Знакомство с инструментальными средствами для создания экспертных систем.
Цель работы: знакомство с оболочкой GURU.EXE для создания и редактирования экспертных систем с использованием диалогового режима работы и выработка соответствующих умений и навыков.
Используемое программное обеспечение: GURU.EXE.
Теоретические сведения
Под экспертной системой понимается система, объединяющая возможности компьютера со знаниями и опытом работы, способная предложить разумный совет или осуществить разумное решение поставленной задачи, а также пояснить ход рассуждений в понятной для спрашивающего форме.
При создании своих пользовательских экспертных систем на каком-нибудь языке высокого уровня программист сталкивается с тем, что разработка интерфейса программы, реализация ее системных функций требуют больших затрат времени, чем создание самого набора правил экспертной системы. Для того чтобы разгрузить разработчика экспертных систем от такой работы, существуют специальные инструментальные средства (оболочки) экспертных систем. Такие инструментальные средства есть в экспертных системах MYCIN, GURU, LEONARDO, DENDRAL и др.
Характеристики экспертных систем: интерфейс пользователя, машина логических выводов и хранимые экспертизы.
Интерфейс пользователя описывает отношения между пользователем и системой. Пользователь ставит задачу, а машина должна ее выполнить или объяснить, почему нельзя ее выполнить.
Машина логических выводов - это программное обеспечение, которое можно использовать при решении задач путей аргументации.
Хранимые экспертизы - это набор правил, отображающих знания. В каждом правиле есть посылка (IF) и заключение (THEN).
Если машина логических выводов признает посылку верной, то и заключение будет верным.
Модели представления знаний
Любая предметная область характеризуется своим набором понятий и связей между ними, своими законами, связывающими между собой объекты данной предметной области, своими процессами, событиями. И конечно, каждая предметная область имеет свои, специфические методы решения задач. Знания о предметной области и способах решения в ней задач весьма разнообразны. Возможны различные классификации этих знаний.
В общем случае знания подразделяются на:
процедурные знания описывают последовательности действий, которые могут использоваться при решении задач. Это, например, программы для ЭВМ, словесные записи алгоритмов, инструкция по сборке некоторого изделия;
декларативные знания - это все знания, не являющиеся процедурными, например статьи в толковых словарях и энциклопедиях, формулировки законов в физике, химии и других науках и т.п. В отличие от процедурных знаний, отвечающих на вопрос: как сделать X, декларативные знания отвечают, скорее, на вопросы: что есть X или какие связи имеются между Х и Y, почему X и т.д.
Языки представления знаний можно разделить на типы по формальным моделям представления знаний, которые лежат в их основе:
продукционная;
семантические сети;
фреймовая;
нейронные сети;
основы нечетких множеств;
формально-логические.
Рассмотрим подробнее продукционную модель представления знаний.
Она основана на определенных правилах и позволяет представить знания в виде предложения типа:
Если (условие), то (действие).
В случае нескольких условий или действий их могут связывать логические операции И, ИЛИ.
Условие - некоторое предложение-образец, по которому осуществляется поиск в базе знаний.
Действия - операции, выполняемые при успешном исходе поиска.
Действия могут быть:
промежуточные;
выступающие далее, как условие;
терминальными (целевыми) - завершающие работу системы.
Обычно при описании баз знаний или экспертных систем правила представляются в более наглядном виде, например:
ПРАВИЛО 1:
ЕСЛИ Образование = Высшее
И
Возраст = Молодой
И
Коммуникабельность = Высокая,
ТО
Шансы найти работу = Высокие
И
Коэффициент доверия = 0.9.
При срабатывании этого правила в базу данных интеллектуальной системы (например, экспертной системы) добавляется факт, означающий, что шансы найти работу высоки с достоверностью 0.9 или 90 % (значение коэффициента достоверности). Понятия «Образование», «Возраст», «Коммуникабельность» служат для задания условия (в данном случае, конъюнкции), при котором срабатывает правило.
Стратегии управления
Один из важных вопросов для экспертных систем - какое правило рассматривать следующим. Этим процессом управляет машина логических выводов.
При выборе правила нужно пользоваться двумя основными стратегиями управления: прямым и обратным выводами.
Прямой вывод
Данный метод действует от посылки действия до тех пор, пока переменной не будет присвоено значение. Машина логических выводов начинает просматривать набор правил сначала и проводит просмотр его до тех пор, пока переменной не будет присвоено значение. Сначала ищется первое правило, в котором определено и истинно значение посылки. Это правило будет выполнено и полученный результат можно будет использовать для тестирования других правил. Далее система ищет следующее правило с определенным и истинным значением посылки. Это продолжается до тех пор, пока не будет выполнено правило для переменной цели.
Пример:
GOAL: HOWREST
RULE: R1
IF: (finance/acount)>=5000 and (finance/acount)<=10000
THEN: howrest="Vi mozhete neploho otdohnut na materike."
howrest= howrest+"Poezhaite k rodstvennikam."
RULE: R2
IF: (finance/acount)>10000 and (finance/acount)<70000
THEN: howrest="Vi mozhete neploho otdohnut za granicei."
howrest= howrest+"Nu, razumeetsja po putevke."
RULE: R3
IF: (finance/acount)>=70000
THEN: howrest="Vi mozhete chast sredstv vlozhit v SKV ili"
howrest= howrest+"akcii, a otpusk provesti kak pozhelaete."
RULE: R4
IF: (finance/acount) < 5000 and (finance/acount)>3000
THEN: howrest="Vam stoit podumat ob otdihe v lesu."
howrest= howrest+"U nas takaja krasivaja priroda. Vam ponravitsja."
RULE: R5
IF: (finance/acount)<=3000
THEN: input zarabot using "u" with "U vas est vozmozhnost podarabotat (y/n)?"
RULE: R6
IF: zarabot="Y"
THEN: input skolko num with "Skolko?"
RULE: R7
IF: skolko >=5000
THEN: howrest="Vi mozhete otdohnut neploho."
howrest= howrest+"Orientiruites na summu,"
howrest= howrest+"nakoplennyu v otpusknom periode."
RULE: R8
IF: skolko <5000
THEN: howrest="Etogo budet nedostatochno."
howrest= howrest+"Pridetsja otpusk otlozhit."
RULE: R9
IF: zarabot<>"Y"
THEN: howrest="Ochen zhal, no Vam pridetsja podozhdat."
howrest= howrest+"Vashi finansovie vozmoznosti ne"
howrest= howrest+"pozvoljaut Vam poehat v otpusk"
howrest= howrest+"v etom godu. Viezhaite na prirodu."
Пусть первоначально переменным FINANCE и ACOUNT присвоены значения 30000 и 3 соответственно, тогда результатом вычисления отношения (FINANCE/ACOUNT) будет 10000. Машина логического вывода ищет в наборе правил то правило, где определено и истинно значение посылки (это R1). Тогда переменной HOWREST присваивается значение "Vi mozhete neploho otdohnut na materike. Poezhaite k rodstvennikam.". Цель достигнута, система закончила работу.
Попробуйте объяснить, что получится, если FINANCE = 72000, ACOUNT=1.
Обратный вывод - наиболее часто используемый метод управления. При этом машина логического вывода начинает с цели и, просматривая набор правил, находит первое правило, с помощью которого можно достичь цели. Если посылка этого правила определима и верна, то система выполняет соответствующие действия. Если посылка неопределима, то машина логического вывода временно меняет цель - устанавливает в качестве цели переменную, которая позволит определить истинность первой найденной посылки и ищет первое правило, определимое и верное для новой поставленной цели.
Переменные
Рабочие переменные
Первоначально все рабочие переменные имеют значение UNKNOWN.
HOWREST=UNKNOWN
finance=UNKNOWN
acount=UNKNOWN
zarabot=UNKNOWN
skolko=UNKNOWN
Им можно присвоить значения любого типа (числового, строкового, логического).
Рассмотрим пример прямого и обратного вывода:
Факультет |
Направление подготовки / Специальность |
Курсы |
Группы |
Номер |
Список |
Физико-математический |
Прикладная математика и информатика |
1 |
ПМб-13 |
… |
… |
2 |
ПМб-12 |
… |
… |
||
3 |
ПМб-11 |
1
2 3 4 5 |
Базилева Юлия …
|
||
4 |
ПМИ-102 |
… |
… |
||
5 |
ПМИ-092 |
… |
… |
||
Профессиональное обучение |
5 |
ПО-091 |
… |
… |
|
… |
… |
… |
… |
… |
|
Социально-экономический |
… |
… |
… |
… |
… |
Иностранных языков |
… |
… |
… |
… |
… |
Филологический |
… |
… |
… |
… |
… |
Психолого-педагогический |
… |
… |
… |
… |
… |
Прямой вывод
Если (<Физико-математический факультет> и <Прикладная математика и информатика> и <3 курс> и <ПМб-11> и <Номер 1>), то (<Базилева Юлия>).
Обратный вывод
Если (<Базилева Юлия>), то (<Физико-математический факультет> и <Прикладная математика и информатика> и <3 курс> и <ПМб-11> и <Номер 1>).
Правила «GURU»
Система «GURU» базируется на правилах. Правило состоит из посылки (IF) и заключения (THEN).
Посылка может включать:
различные типы и виды переменных, поддерживаемых «GURU»;
логические операторы (например, AND, OR, XOR, NOT);
числовые операторы (+, -, /, *);
числовые функции (SIN, COS и т.д.);
символьные функции.
Заключение может включать команды:
присвоение значения различным переменным;
позволяющие проконсультироваться с другим набором правил;
различные команды «GURU» и т.д.
Правила хранятся в обычном текстовом файле с расширением *.rss.
Пример:
/*OTPUSK.RSS*/
ACCESS: a
GOAL: HOWREST
INITIAL:
CLEAR
E.LSTR=250
HOWREST=UNKNOWN
finance=UNKNOWN
acount=UNKNOWN
zarabot=UNKNOWN
skolko=UNKNOWN
OUTPUT"Kak vi mozhete provesti otpusk..."
DO:
CLEAR
OUTPUT"Vot chto priemlemo v dannoi situacii:"
OUTPUT HOWREST
RULE: R1
IF: (finance/acount)>=5000 and (finance/acount)<=10000
THEN: howrest="Vi mozhete neploho otdohnut na materike."
howrest= howrest+"Poezhaite k rodstvennikam."
RULE: R2
IF: (finance/acount)>10000 and (finance/acount)<70000
THEN: howrest="Vi mozhete neploho otdohnut za granicei."
howrest= howrest+"Nu,razumeetsja po putevke."
RULE: R3
IF: (finance/acount)>=70000
THEN: howrest="Vi mozhete chast sredstv vlozhit v SKV ili"
howrest= howrest+"akcii, a otpusk provesti kak pozhelaete."
RULE: R4
IF: (finance/acount) < 5000 and (finance/acount)>3000
THEN: howrest="Vam stoit podumat ob otdihe v lesu."
howrest= howrest+"U nas takaja krasivaja priroda. Vam ponravitsja."
RULE: R5
IF: (finance/acount)<=3000
THEN: input zarabot using "u" with "U vas est vozmozhnost podarabotat (y/n)?"
RULE: R6
IF: zarabot="Y"
THEN: input skolko num with "Skolko?"
RULE: R7
IF: skolko >=5000
THEN: howrest="Vi mozhete otdohnut neploho."
howrest= howrest+"Orientiruites na summu,"
howrest= howrest+"nakoplennyu v otpusknom periode."
RULE: R8
IF: skolko <5000
THEN: howrest="Etogo budet nedostatochno."
howrest= howrest+"Pridetsja otpusk otlozhit."
RULE: R9
IF: zarabot<>"Y"
THEN: howrest="Ochen zhal, no Vam pridetsja podozhdat."
howrest= howrest+"Vashi finansovie vozmoznosti ne"
howrest= howrest+"pozvoljaut Vam poehat v otpusk"
howrest= howrest+"v etom godu. Viezhaite na prirodu."
VAR: HOWREST
LABEL: Varianti ishodov pri zadannih parametrah.
VAR: FINANCE
FIND: input finance num with "Kakoi summoi Vi raspolagaete?"
LABEL: Denezhnie sredstva.
VAR: ACOUNT
FIND: input acount num with "Skolko chelovek budet otdihat za Vash schet?"
LABEL: Kolichstvo izhdivencev.
END:
Здесь HOWREST - имя переменной цели; R1, …, R9 - имена правил; HOWREST, FINANCE, ACOUNT - переменные.
Предварительно определенные переменные
Существует два типа предварительно определенных переменных: среды и утилиты. Среда «GURU» определяется переменными среды. Они определяют различные функциональные характеристики среды «GURU». Имя этой переменной всегда начинается с буквы Е.
Например:
E.LSTR=250
Максимальная длина символьной строки равна 250.
Переменные типа утилиты служат для различных вспомогательных целей. Они начинаются со знака #.
Например:
#GOAL=HOWREST
#GOAL определяет цель экспертной системы.
Синтаксис правил «GURU»
ACCESS: a
GOAL: HOWREST
INITIAL:
CLEAR
E.LSTR=250
HOWREST=UNKNOWN
finance=UNKNOWN
acount=UNKNOWN
zarabot=UNKNOWN
skolko=UNKNOWN
OUTPUT"Kak vi mozhete provesti otpusk..."
DO:
CLEAR
OUTPUT"Vot chto priemlemo v dannoi situacii:"
OUTPUT HOWREST
RULE: R1
IF: (finance/acount)>=5000 and (finance/acount)<=10000
THEN: howrest="Vi mozhete neploho otdohnut na materike."
howrest= howrest+"Poezhaite k rodstvennikam."
RULE: R2
IF: (finance/acount)>10000 and (finance/acount)<70000
THEN: howrest="Vi mozhete neploho otdohnut za granicei."
howrest= howrest+"Nu,razumeetsja po putevke."
RULE: R3
IF: (finance/acount)>=70000
THEN: howrest="Vi mozhete chast sredstv vlozhit v SKV ili"
howrest= howrest+"akcii, a otpusk provesti kak pozhelaete."
RULE: R4
IF: (finance/acount) < 5000 and (finance/acount)>3000
THEN: howrest="Vam stoit podumat ob otdihe v lesu."
howrest= howrest+"U nas takaja krasivaja priroda. Vam ponravitsja."
RULE: R5
IF: (finance/acount)<=3000
THEN: input zarabot using "u" with "U vas est vozmozhnost podarabotat (y/n)?"
RULE: R6
IF: zarabot="Y"
THEN: input skolko num with "Skolko?"
RULE: R7
IF: skolko >=5000
THEN: howrest="Vi mozhete otdohnut neploho."
howrest= howrest+"Orientiruites na summu,"
howrest= howrest+"nakoplennyu v otpusknom periode."
RULE: R8
IF: skolko <5000
THEN: howrest="Etogo budet nedostatochno."
howrest= howrest+"Pridetsja otpusk otlozhit."
RULE: R9
IF: zarabot<>"Y"
THEN: howrest="Ochen zhal, no Vam pridetsja podozhdat."
howrest= howrest+"Vashi finansovie vozmoznosti ne"
howrest= howrest+"pozvoljaut Vam poehat v otpusk"
howrest= howrest+"v etom godu. Viezhaite na prirodu."
VAR: HOWREST
LABEL: Varianti ishodov pri zadannih parametrah.
VAR: FINANCE
FIND: input finance num with "Kakoi summoi Vi raspolagaete?"
LABEL: Denezhnie sredstva.
VAR: ACOUNT
FIND: input acount num with "Skolko chelovek budet otdihat za Vash schet?"
LABEL: Kolichstvo izhdivencev.
END:
INITIAL: - это раздел инициализации, содержащий команды, которые должны выполниться до консультации с набором правил.
CLEAR - команда для очистки экрана.
E.LSTR = 250 - эта переменная устанавливает максимальную длину символьных строк.
HOWREST=UNKNOWN, finance=UNKNOWN, acount=UNKNOWN, zarabot=UNKNOWN, skolko=UNKNOWN - инициализация переменных, при которой им присваивается значение UNKNOWN.
OUTPUT "Kak vi mozhete provesti otpusk..." - выводит на экран символьную строку.
VARIABLE: HOWREST, FINANCE, ACOUNT - определяются переменные, используемые в наборе правил. Все переменные должны быть определены.
LABEL: - объяснение на естественном языке, зачем нужна данная переменная.
FIND: - если в посылке встречается переменная с неопределенным значением (UNKNOWN), которая не присутствует в заключении какого-либо правила, то выводятся те команды, которые находятся после FIND. Например, здесь находится команда ввода: input zarabot using "u" with "U vas est vozmozhnost podarabotat (y/n)?" Эта команда ждет ввода с экрана в переменную zarabot символов "Y" или "N". В этой команде ввода:
using "u" - шаблон ввода;
with "…" - выводятся на экран в виде запроса для подсказки;
RULE: R1, …, R9 - имена правил;
IF - посылка правила;
THEN - заключение правила;
DO - раздел завершения. Выполняются команды, которые необходимы для выполнения консультации с экспертной системой.
OUTPUT "Vot chto priemlemo v dannoi situacii:"
OUTPUT HOWREST - выводится строка "Vot chto priemlemo v dannoi situacii:" и вслед за ней переменная HOWREST.
Перейдем непосредственно к выполнению лабораторной работы.
Запустите GURU.EXE. Система выводит на экран: ИМЯ НОВОГО СЕАНСА…. (New session name) (его ввод необязателен, достаточно нажатия клавиши <ENTER>). Введите имя вашего сеанса работы. Это имя будет в последующей использоваться для загрузки сеанса вашей работы с «GURU» (рис. 1).
Рис. 1. GURU.EXE
Нажмите Enter.
Выберите в основном меню строку «Экспертные системы» (Expert Systems). В новом появившемся меню выберите строку «Создание экспертной системы» (Build an Expert System). Если вы будете вводить весь набор правил, описание переменных, разделы инициализации и завершения заново, выберите строку «Новая база знаний» (New Rule Set) (рис. 2).
Рис. 2. Создание новой базы знаний
Появляется подсказка и запрашивает имя нового набора правил - базы знаний (его ввод необязателен, достаточно нажатия клавиши <ENTER>) (рис. 3).
Рис. 3. Создание набора правил
Нажмите Enter.
Далее появляется меню текущего набора правил «Построитель базы знаний» (Build an Expert System).
Если вы будете редактировать имеющийся набор правил, выберите строку «Существующая база знаний» (Existing Rule Set) (рис. 4).
Рис. 4. Редактирование имеющегося набора правил
Ниже описанные действия, ориентированные на новую базу знаний.
Выберите строку меню «Определение» (Definition). Выберите строку меню «Цель» (Goal). В строке подсказки вводите цель и нажмите «ОК» (рис. 5).
Рис. 5. Создание цели
Выберите строку меню «Предыдущее меню» (Previous menu) (рис. 6).
Рис. 6. Выбор предыдущего меню
Выберите строку меню «Правила» (Rules). Выберите строку меню «Создание» (Create). Введите имя правила и нажмите «Enter». Вы попадаете в среду создания правил. Переход от одного к другому окну - с помощью клавиш PgDn и PgUp (рис. 7).
Рис. 7. Создание правила
В поле IF введите посылку. В поле THEN введите заключение. С помощью клавиши <ESC> выйдите из среды создания правил (рис. 8).
Рис. 8. Просмотр правила
Выберите строку меню «Редактирование» (Lookup/Edit). Просмотрите введенное правило. Исправьте, если есть ошибки.
Аналогично введите все правила. Выберите «Просмотр» (Browse). Просмотрите все введенные правила. Выберите «Предыдущее меню» (Previous Menu) и еще раз «Предыдущее меню» (Previous Menu).
Выберите строку меню «Переменные» (Variables). Выберите строку «Создание» (Create). Вы попадете в среду для создания переменных. Переход между окнами - с помощью клавиш PgDn и PgUp (рис. 9)
.
Рис. 9. Создание переменной
Введите в окно «LABEL» объяснение. Введите в окно «FIND» информацию (если необходимо) (рис. 10).
Рис. 10. Просмотр переменной
Нажмите <ESC>.
Выберите строку меню «Редактирование» (Lookup/Edit). Просмотрите созданную переменную. Введите, если нужно, исправления.
Аналогично создайте все необходимые переменные. Выберите строку меню «Просмотр» (Browse). Просмотрите все созданные переменные.
Выберите дважды строку «Предыдущее меню» (Previous Menu).
Выберите «Инициализация» (Initialization). На экране появится текстовый редактор построителя базы знаний. Здесь вводятся команды, которые отрабатываются до того, как будет запущена экспертная система (рис. 11).
Рис. 11. Режим инициализации
Нажмите <ESC>.
Выберите строку меню «Завершение» (Completion). На экране появляется текстовый редактор базы знаний. Здесь вводятся команды, которые выполняются после того, как выполнен сеанс работы с экспертной системой (рис. 12).
Рис. 12. Режим завершения
Нажмите <ESC>.
Выберите строку меню «Выход» (Exit).
Выберите строку меню «Сохранение» (Save) (рис. 13).
Рис. 13. Сохранение базы знаний
Ваш набор правил сохраняется в файле с расширением *.rss в папку с программой. Открыть и посмотреть этот файл можно с помощью Блокнота.
Выберите «Компилирование» (Compile). Откомпилируйте ваш набор правил (рис. 14).
Рис. 14. Компилирование набора правил
Просмотрите результаты компиляции. Исправьте базу знаний в соответствии с этими результатами и снова откомпилируйте (если это потребуется). Для этого вернитесь в предыдущее меню и повторите все операции по пунктам 4-15, исключая те, которые вам не потребуются. Выберите строку меню «Конец» (Quit).
Выберите строку меню «Предыдущее меню» (Previous Menu). Выберите строку «Консультация с экспертной системой» (Consult an Expert System) (рис. 15).
Рис. 15. Прохождение консультации
Проверьте работоспособность вашей экспертной системы. Если она не работает, то исправьте ее.
