- •Лабораторная работа 1 Знакомство с инструментальными средствами для создания экспертных систем.
- •Краткие теоретические сведения
- •Режимы работы
- •Характеристики эс
- •Оперативная помощь
- •Правила "guru"
- •Стратегии управления
- •5.1. Прямой вывод
- •Обратный вывод
- •6. Переменные
- •6.1. Рабочие переменные
- •6.2. Предварительно определенные переменные
- •6.3. Выражения с переменными
- •7. Объяснение аргументации
- •8. Синтаксис правил "guru"
- •9. Отладка зс
- •9.1. Запрос во время консультации
- •9.2. Запрос после консультации
- •Порядок выполнения работы
- •Описание переменных среды
- •Основные команды "guru"
- •Выражения и функции "guru"
- •Контрольные вопросы
- •Лабораторная работа 2 Создание пробной экспертной системы.
- •Подготовка и работе
- •Порядок выполнения работы
- •Контрольные вопросы
- •Лабораторная работа 3 Учет факторов уверенности при создании экспертной системы
- •Факторы уверенности
- •Объединение фу
- •3. Методы объединения фу для переменной е.Gfjo, описывающей среду
- •4. Методы объединения фу для переменной e.Cfco, описывающей среду
- •5.Методы объединения фу для переменной e.Cfva, описывающей среду
- •6.Значения фу для выражений, содержащих переменные
- •Подготовка к работе
- •Порядок выполнения работы
- •Контрольные вопросы.
- •Лабораторная работа 4 Командный режим "guru"
- •Краткие теоретические сведения
- •1. Основные команды
- •Команда build
- •Команда compile
- •Команда consult
- •Команда run
- •Команда dir
- •Команда let
- •Команда output
- •Команда input
- •Команда if-theh-else
- •Подготовка к работе
- •Порядок выполнения работы
- •Контрольные вопросы
- •Лабораторная работа 5 Электронные таблицы "guru"
- •Краткие теоретические сведения
- •Режим обработки эв
- •2. Команды эв
- •2.13 Использование эв в программе
- •3. Пример программы с использованием эв
- •Подготовка к лабораторной работе
- •Порядок выполнения работы
- •Контрольные вопросы
- •Лабораторная работа 6 Графические средства "guru"
- •Краткие теоретические сведения
- •Управление графами с помощью утилитных переменных и
- •Команда plot bar
- •Команда plot pie
- •Команда plot line
- •Команда plot function
- •Команда range
- •Команда pattern
- •Команда plot to
- •Команда plot from
- •2. Пример программы, выводящей данные из эв
- •Подготовка к лабораторной работе
- •Порядок выполнения работы
- •Контрольные вопросы
- •Система guru Общие характеристики системы
- •Функциональные возможности
- •Построение экспертной системы
- •Р ис. 3.1. Дерево целей
- •Тестирование экспертной системы
- •Запуск системы и работа в режиме меню Запуск системы
- •Некоторые сведения о работе в режиме меню
- •Использование режима меню
- •Описание команд меню Expert Systems
- •Режим редактирования набора правил (guru Rule Set Manager)
- •Режим редактирования правил
- •Часть if – посылка правила. Может быть любым выражением.
- •Режим редактирования переменных
- •Описание команд меню Information Manager
- •Примеры использования системы
- •Приложение 1 Листинг 1. Эс для оценки надежности поставщика (в среде guru)
- •Листинг 2. Пример работы эс для оценки надежности поставщика
- •Пример объяснений
- •Листинг 3. Подсистема прогнозирования цен Текст программы
- •Пример консультации
Контрольные вопросы
1. Что такое прямой и обратный вывод? Назовите основные различия между ними?
2. Из каких частей состоит правило?
3. Типы переменных и их особенности.
4. Сколько интерфейсов имеет "GURU"?
5. Что делают команды IKPUT и OUTPUT? Их особенности.
Подготовка к работе
1. Ознакомьтесь с материалом лекций и настоящими методическими указаниями.
2. Ответьте на контрольные вопросы.
3. Ознакомьтесь с заданным готовым вариантом ЭС (приложение 4 к лабораторной работе 1).
4. Подготовьте исправления в заданном варианте ЭС для внесения изменений в ходе выполнения лабораторной работы.
Лабораторная работа 2 Создание пробной экспертной системы.
Цель – самостоятельное программирование в полном объеме простейшей экспертной системы.
Реализация названной цели лабораторной работы предполагает основательную проработку приведенного в приложении I настоящей лабораторной работы примера реализация экспертной системы. Для облегчения такой проработки это приложение снабжено подробным комментарием.
Подготовка и работе
1. Ознакомьтесь с материалом лекций и настоящими методическими указаниями.
2. Ответьте на контрольные вопросы.
3. Ознакомьтесь с готовым вариантом ЗС (приложение 1 к настоящей лабораторной работе).
4. В соответствии с заданным вариантом (приложение 2 к настоящей лабораторной работе) напишите программу, реализующую небольшую экспертную систему. Практически любой из заданный варианта может быть реализован небольшим набором правил.
Порядок выполнения работы
1. Предъявите преподавателю текст программной реализации заданного варианта ЭС, написанный в ходе домашней подготовки.
2. Отладьте ЭС.
3. С помощью HOW и WHY проверьте правильность работы системы.
4. Покажите результаты работы ЗС преподавателю.
Отчет о работе должен содержать
1) вариант ЭС на естественном" языке и языке "Guru";
2) ответы на контрольные вопросы;
3} объяснения, почему в написанной вами ЭС выбраны те или
иные переменные
Приложение 1.
Пример экспертной системы, иллюстрирующий возможности “GURU”
/* INVESTORS.RSS */
/* */
GOAL: advice
INITIAL:
e.tryp = “e”
e.lstr = 80 /* Максимальная длина строки 80 */
e.deci = 0 /* Нет цифр после десятичной запятой */
e.lnum = 8 /* Длина числа */
savperdep = 5000 /* Допустимый минимум сбережений */
/* в расчете на одного иждивенца, при котором общие сбе- */
/* жения семьи можно назвать ‘хорошими’ (true) */
incperdep = 4000 /* Минимально допустимый доход на */
/* одного иждивенца */
basincome = 15000 /* Минимально допустимый доход */
/* главы семьи */
/* Общий хороший доход семьи определяется объединением */
/* incperdep и basincome */
advice = unknown
goodsave = unknown
goodincome = unknown
income = unknown
savings = unknown
steady = unknown
needincome = unknown
dependents = unknown
newcash = unknown
clear
output “ КАПИТАЛОВЛОЖЕНИЯ”
input newcash num
DO: /* Этот раздел выполняется после того, */
/* как обработаны правила */
output “НА ОСНОВЕ ДАННОЙ ИНФОРМАЦИИ:”
test advice
case “АКЦИИ”:
output “ ВАМ СЛЕДУЕТ ВЛОЖИТЬ ВСЮ СУММУ В АКЦИИ.”
break
case “СБЕРЕЖЕНИЯ”:
output “ ВАМ СЛЕДУЕТ ПОМЕСТИТЬ ВСЮ СУММУ В СБЕРЕЖЕНИЯ.”
break
case “КОМПРОМИСС”:
tosave = min (newcash, (savperdep * dependents) – savings)
tostock = max(0, newcash – tosave)
output “ ВАМ СЛЕДУЕТ ПОМЕСТИТЬ В СБЕРЕЖЕНИЯ”
tosave using “$ff,fff,fff”
if tostock > 0 then
output “ И ВЛОЖИТЬ ”, tostock using “$ff,fff,fff”, “ В АКЦИИ.”
endif
break
endtest
e.deci = w
e.lnum = 14
RULE: R1
IF: goodincome and goodsave
THEN: advice = “АКЦИИ”
NEEDS: goodincome goodsave
REASON: ВКЛАДЫВАТЬ В АКЦИИ, ЕСЛИ КЛИЕНТ
НАДЕЖНЫЙ В ФИНАНСОВОМ ОТНОШЕНИИ
RULE: R2
IF: not goodincome
THEN: advice = “СБЕРЕЖЕНИЯ”
NEEDS: goodincome
REASON: НЕ ВКЛАДЫВАЙТЕ В АКЦИИ, ЕСЛИ ВАШ ДОХОД
В НАСТОЯЩЕЕ ВРЕМЯ НЕУСТОЙЧИВ
RULE: R3
IF: not goodsave and goodincome
THEN: advice = “КОМПРОМИСС”
REASON: ЕСЛИ СБЕРЕЖЕНИЯ НЕБОЛЬШИЕ, ТОГДА ОНИ ДОЛЖНЫ
БЫТЬ УВЕЛИЧЕНЫ ДО ТОГО, КАК ИХ ВКЛАДЫВАТЬ
RULE: R4
IF: not steady
THEN: goodincome = false
REASON: ДЛЯ ХОРОШЕГО ДОХОДА НЕОБХОДИМА ПОСТОЯННАЯ РАБОТА
RULE: R5
IF: not (income > needincome)
THEN: goodincome = false
REASON: ДОХОД НЕ ЗАВИСИТ ОТ ВАС И ОТ ИЖДИВЕНЦЕВ
RULE: R6
IF: not (income > needincome)
THEN: goodincome = true
REASON: ЧТОБЫ ДОХОД БЫЛ ХОРОШИЙ, КЛИЕНТ ДОЛЖЕН ИМЕТЬ
ПОСТОЯННУЮ РАБОТУ
RULE: R7
IF: known(“income”) and known(“dependents”)
THEN: needincome = baseincome + (dependents * incperdep)
REASON: НЕОБХОДИМЫЙ ДОХОД – ЭТО ДОХОД, КОТОРЫЙ ВАМ
НЕОБХОДИМ ПЛЮС ОБЩИЙ ДОХОД ВСЕХ ВАШИХ ИЖДИВЕНЦЕВ
RULE: R8
IF: savings > (saveperdep * dependents)
THEN: goodsave = true
REASON: СБЕРЕЖЕНИЯ КЛИЕНТОВ ДОЛЖНЫ ЗАВИСЕТЬ ОТ НИХ
САМИХ И ОТ ИЖДИВЕНЦЕВ
RULE: R9
IF: savings <= (saveperdep * dependents)
THEN: goodsave = false
REASON: СБЕРЕЖЕНИЯ КЛИЕНТОВ ДОЛЖНЫ ЗАВИСЕТЬ ОТ НИХ
САМИХ И ОТ ИЖДИВЕНЦЕВ
NEEDS: savings dependents
REASON: СБЕРЕЖЕНИЯ КЛИЕНТОВ НЕ ЗАВИСЯТ ОТ НИХ САМИХ И
ОТ ИЖДИВЕНЦЕВ.
/* ОПРЕДЕЛЕНИЕ ПЕРЕМЕННЫХ */
VAR: NEWCASH
LABEL: СУММА НАЛИЧНЫХ ДЕНЕГ ДЛЯ ВКЛАДА
VAR: ADVICE
LABEL: ДАННЫЙ СОВЕТ
VAR: GOODINCOME
LABEL: ТЕКУЩИЙ ДОХОД – ХОРОШИЙ
VАR: GOODSAVE
LABEL: ТЕКУЩИЕ СБЕРЕЖЕНИЯ – ХОРОШИЕ
VAR: NEEDINCOME
LABEL: НЕОБХОДИМАЯ СУММА ДОХОДА
VAR: INCOME
FIND: input income num with "КАКОЙ ВАШ ГОДОВОЙ ДОХОД СЕМЬИ?"
LABEL: ТЕКУЩИЙ ДОХОД
VAR: SAVINGS
FIND: input savings num with "СКОЛЬКО У ВAC СБЕРЕЖЕНИЙ?"
LABEL: ТЕКУЩИЕ СБЕРЕЖЕНИЯ
VAR: STEADY
FIND:
output "МОЖЕТЕ ЛИ ВЫ ОЖИДАТЬ СТАБИЛЬНЫЙ ДОХОД НА ”
output "СЛЕД. ГОД ? (y/n) "
input steady str using "u"
steady = (steady = "Y")
LABEL: НАДЕЖНЫЙ ДОХОД
VAR: DEPENDENTS
FIND:
output ” СКОЛЬКО У ВАС ИЖДИВЕНЦЕВ ? "
input dependents num using "dd"
LABEL: ЧИСЛО ИЖДИВЕНЦЕВ
END:
Опишем подробно работу набора правил . Он предназначен для иллюстрация обратной аргументации.
В INITIAL идет инициализация переменных. Рассмотрим ее отдельные строки.
e.tryp = 'e' - задает стратегию оценки посылки (части “if” правила), содержащего неизвестные переменные. Истинность посылки оценивается сразу же после того, как очередная неизвестная переменная становится известной. Тестирование посылки прекращается (несмотря на то, что все переменные в ней еще не определены), если только удается определенно установить ее истинность или ложность.
e.lstr = 80 - максимальная длина символьной строки, которая может выводиться на экран.
е.lnum = максимальная длина числа.
В VAR описываются пользовательские переменные (см. списание лабораторной работы 1).
Часть DO - окончание работы экспертной системы. Конструкция test ... case ... endtest проверяет переменную advice и в зависимости от ее значения выполняет те или иные действия.
Рассмотрим, как может работать эта система. После запуска происходит инициализация переменных. Консультация с ЭС идет методом обратной аргументации. Система "GURU" в этом случае начинает е конца. Определяется цель ADVICE. Т.к. она неизвестна, то просматриваются те правила, которые определяют ADVICE. В нашем случае первым правилом, где определяется ADVICE будет R1. Здесь неизвестны GQODINCOME и GOODSAVE.
GQODINCOME сначала определяется в R4. GOODSAVE - в R8. В R4 проверяется переменная STEADY. Ее значение запрашивается с помощью оператора FIND в описании переменной. Если R4 не может быть выполнено (посылка ложна), то тестируется R5, если R4 истинно (посылка верна), переменной GOODINCOME присваивается значение "false", "GURU" определяет, что посылка правила R1 неверна и переходит к оценке посылки правила R2. В R2 посылка верна, поэтому из этого правила определяется advice - цель системы. На этой вывод завершается. При тестировании R5 нам придется определить значение переменных INCOME и NEEDINCOME и т.д.
Аналогично находится переменная GOODSAVE ( правила R8 и R9 ).
На рис.1 показана часть дерева решений.
В скобках на рис.1 показаны правила, где определяется данная переменная или FIND , если она вводится с клавиатуры .
Первый вопрос , который задаст ЭС : "Какую сумму наличных денег Вы хотели бы вложить ?"
Введите : 12000 <Enter>
Следующий вопрос : "Можете ли Вы ожидать стабильный доход на следующий год ?"
Введите : “Y”
"Какой Ваш годовой доход семьи ?”
Введите : 35000 <Enter>
"Сколько у Вас иждивенцев ?"
Введите : 4
"Сколько у Вас сбережений ?”
Введите : 10000 <Enter>
Экспертная система выводят сумму, которую следует отложить в сбережения и сумму, которую необходимо вложить в акция.
Разберите подробно работу этой ЭС для того, чтобы создать свою.
Приложение 2
Варианты заданий к лабораторной работе 2
Вариант 1
Разработайте ЭС, которая повторяет ход ваших мыслей при переходе через дорогу. Сначала вы определяете, какой цвет на светофоре. Если красный - ждете, если зеленый - смотрите, нет ли какого-нибудь "сумасшедшего" водителя, которой мог бы ехать на красный цвет. Если есть, то ждите, пока он проедет. Если нет, то переходите через дорогу.
Вариант 2
Coздайте ЭС, определяющую неисправность магнитофона. Вы выключаете магнитофон, и он работает, но звучание плохое. Вы проверяете, загрязнена ли головка. Если да, то необходимо протереть головку. Если нет, то проверяйте, правильно ли установлена кассета. Если нет, то поправляете, а если правильно, то говорите, что необходимо вызвать мастера.
Вариант 3
Создайте ЭС, определяющую принимать или нет человека на работу. Если человек не имеет высшего образования, то отказать. Если имеет, то сколько лет проработал претендент по специальности. Если меньше года, то отказать, если больше - то принять. Если претендент имеет ученое звание, то предложить должность научного сотрудника, если нет, то должность инженера-конструктора.
Вариант 4
Разработайте ЭС. которая дает советы при создании и отладке программы.. Если вы написали программу на ЯВУ и при компиляции обнаружили синтаксические ошибки, то необходимо исправить программу. Если ошибок нет., то необходимо запустить редактор связей. Если редактор связей выдает ошибки, то необходимо проверить наличие всex исходных модулей. Если ошибок при линковании нет, то программа готова к работе.
Вариант 5
Разработайте ЭС, которая определяет, будет ли сегодня дождь. Сначала вы определяeте, ясное ли небо. Если небо ясное, то дождя не будет. Если небо пасмурное, то вы смотрите. есть ли на небе черные грозовые тучи. Если нет, то дождя не будет. Если есть, то смотрите, в какую сторону они движутся. Если в вашу сторону, то дождь будет. Если же нет, то не будет.
Вариант 6
Разработайте ЭС, определяющую есть ли у ребенка трудность при изучении арифметики. Если у ребенка проблемы при изучении сложения, то он испытывает трудности при изучении арифметики. Если ребенок имеет проблемы при изучении умножения, то он испытывает трудности при изучении арифметики. Аналогично с вычитанием и делением.
Вариант 7
Вы хотите прогнозировать на бирже уровень цен. Если валютный курс доллара падает, то процентные ставки растут. Если валютный курс доллара растет, то процентные ставки падают. Если процентные ставки растут, то уровень цен на бирже падает. Если процентные ставки падают, то уровень цен на бирже растет.
Вариант 8
Мы хотим определить, будет ли в результате весеннего паводка наводнение или нет. Если уровень воды в реке в черте города высок и идут сильные дожди, теплая погода и много снега в горах, то ожидается наводнение. Если же хотя бы один из этих факторов не выполняется, то наводнения не будет.
Вариант 9
Необходимо определить, данный объект является танком или автомобилем. У танка есть пушка и люк. У автомобиля есть дверца и колеса. У танка и автомобиля есть кузов. Уточняя все эти характеристики, мы должны определить объект.
Вариант 10
Вы включаете телевизор, а он не работает. Вы хотите определить, почему это случилось. Если предохранитель сгорел, то его необходимо заменить. Если предохранитель целый, то проверяете кабель литания. Если он разорван а каком-нибудь месте, то необходимо его исправить. Если кабель питания целый, и вы сами разбираетесь в радиоэлектронике, то чините телевизор. Если не разбираетесь, то вызываете мастера.
