Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методуказания к лабораторным ИИС.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
792.58 Кб
Скачать

Контрольные вопросы

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

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