![]() Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
![]() Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
![]() |
Приложение 1. Пример экспертной системы, иллюстрирующий возможности “GURU”
Пример экспертной системы, иллюстрирующий возможности “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> Экспертная система выводят сумму, которую следует отложить в сбережения и сумму, которую необходимо вложить в акция. Разберите подробно работу этой ЭС для того, чтобы создать свою.
Date: 2015-12-12; view: 745; Нарушение авторских прав |