Построение экспертных систем в среде ИНТЕР-ЭКСПЕРТ
Лабораторная работа №2 Создание продукционной модели экспертной системы в интегрированной среде ИНТЕР-ЭКСПЕРТ
Цель работы – создание экспертных систем в среде ИНТЕР-ЭКСПЕРТ.
Краткое теоретическое введение Построение экспертных систем в среде ИНТЕР-ЭКСПЕРТ Структура набора правил Набор правил может иметь пять разделов (максимальное количество семь), которые появляются в любом порядке в пределах файла. Окончание набора обозначается END: label. За каждым именем раздела и каждым именем предложения следует двоеточие: GOAL: раздел цели INITIAL: раздел инициализации RULE: раздел правила VARIABLE: раздел переменной COMPLETION: раздел завершения Раздел цели Раздел цели начинается со слова GOAL GOAL: gvar Переменная gvar – безусловная цель набора правил. Если при запросе консультации (CONSULT TO SEEK) переменная цели не специфицируется, то цель консультации gvar. Если же при таком запросе целевая переменная обозначена, то безусловная цель gvar игнорируется. Например: GOAL: x GOAL: AB52
Инициализация Последовательность инициализации представляет собой серию из одной и более команд, которые ИНТЕР-ЭКСПЕРТ выполняет при консультации с набором правил. Чтобы пробные консультации можно было повторить в ходе отладки, необходимо присвоить значения UNKNOWN изменившимся переменным в последовательности инициализации. Раздел инициализации начинается словом INITIAL и состоит из серии, включающей в себя один и более операторов ИНТЕР-ЭКСПЕРТ:
INITIAL: statement
Каждый оператор (statement) – действительная команда ИНТЕР-ЭКСПЕРТ. Если командный оператор не умещается на одной строке, закончите эту строку обратной косой чертой и продолжите команду на следующей строке.
INITAL: INPUT REG WITH "Введите имя района:" TEST REG CASE "Восток": FACTOR = 1.073: BREAK; CASE "Запад": FACTOR = 1.06: BREAK; CASE "Юг": FACTOR = 1.113: BREAK; OTHERWISE: FACTOR = 1.05; ENDTEST SELECT * FROM SALESTAB WHERE REG IN ["Восток", \ "Запад", "Юг"] ORDER BY DESCENDING SALES FACTOR = FACTOR * #AVER (3) E.RIGR = "A" Прeдлoжения завершения Последовательность завершения – серия, состоящая из одной или более команд ИНТЕР-ЭКСПЕРТ, которые система ИНТЕР-ЭКСПЕРТ выполнит, как только будет завершена вся аргументация набора правил.
DO: statement Statement
Разделы правил Набор правил – группа из одного или нескольких последовательных разделов правил. В каждом разделе определяется одно правило. Раздел правила начинается со слова RULE и имеет несколько предложений, которые появляются в любом порядке в рамках раздела правила: RULE: rname COMMENT: ctext IF: premise TNEN: tstatement REASON: rtext Метка RULE содержит имя правила, длина которого не должна превышать восемь символов, первый – буквенный. Запрещается использовать ключевое слово ИНТЕР-ЭКСПЕРТа в качестве имени правила. Посылка предложения IF представляет собой любое действительное логическое выражение. В ходе консультации ИНТЕР-ЭКСПЕРТ выполняет действия, содержащиеся в заключении правила, в том случае, если посылка окажется TRUE (а не FALSE или UNKNOWN). Предложение THEN специфицирует действия, которые предпринимаются, если посылка правила – TRUE. Каждый оператор в последовательности действий – любая действительная команда ИНТЕР-ЭКСПЕРТ. Предложение REASON содержит текст пояснений, отображающийся в ходе или после консультации. Например: RULE: HISALES IF: SALES> QUOTA*1.2 THEN: PFACTOR = SALES/QUOTA – 2 REASON: Когда объем продаж более чем на двадцать процентов превосходит квoту (план), избыточный процент следует учитывать как коэффициент при определении новой квоты. Описание переменных Раздел переменной может иметь до семи произвольных предложений, например:
VARIABLE: wvar LABEL: ltext FIND: statement,
где wvar – имя переменной, ltext – метка, содержащая до 48 символов текста, который ИНТЕР-ЭКСПЕРТ отобразит, ссылаясь к переменной при объяснении своей аргументации. Если метки вообще не существует, то используется имя переменной. FIND – последовательность нахождения представляет собой серию из одной или более команд, которые выполняет ИНТЕР-ЭКСПЕРТ, чтобы найти значение переменной, если она типа UNKNOWN. Например, это может быть команда INPUT, подсказывающая ввести значение переменной, или она может быть расширенным процедурным файлом, определяющим это значение.
Koмпиляция набора правил Компиляция набора правил осуществляется с помощью пункта меню «Компиляция» либо в командном режиме (Изменение среды>Командный режим) посредством команды COMPILE ruleset, где ruleset – имя набора правил, находящегося в файле ruleset.RSS. ИНТЕР-ЭКСПЕРТ компилирует указанный набор правил и сохраняет результат в файле ruleset.RSC. Выход из командного режима осуществляется командой BYE.
Пример программы /* INVESTOR.RSS */ GOAL: advice INITIAL: macro skip output "" /* Определение макрокоманды SKIP*/ e.tryp = "e" e.rigr = "m" e.lstr = 80 /* Maксимальная длина строки 80 */ e.deci = 0 /* Нет цифр после десятичной запятой*/ e.lnum = 8 /* Длина числа */ savperdep = 5000 incperdep = 4000 basincome = 15000 advice = unknown goodsave = unknown goodincome = unknown income = unknown savings = unknown steady = unknown needincome = unknown dependents = unknown newcash = unknown clear at 2,27 output "КАПИТАЛОВЛОЖЕНИЯ" skip skip input newcash num with "Какую сумму наличных денег Вы хотели бы вложить?" DO: /* Этот раздел выполняется после обработки правил*/ skip skip output "На основе данной информации:" skip 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 = 2 e.lnum = 14 skip skip 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: steady and (income > needincome) THEN: goodincome = true REASON: Чтобы доход был хорошим, клиент должен иметь постоянную работу. RULE: R7 IF: known("income") and known("dependents") THEN: needincome = basincome + (dependents * incperdep) REASON: Необходимый доход - это основной доход, который Вам необходим, плюс общий доход Ваших иждивенцев. RULE: R8 IF: savings > (savperdep * dependents) THEN: goodsave = true NEEDS: savings dependents REASON: Сбережения клиентов должны зависеть от них самих и иждивенцев. RULE: R9 IF: savings <= (savperdep * dependents) THEN: goodsave = false NEEDS: savings dependents REASON: Сбережения клиентов не зависят от них самих и иждивенцев. /* Определение переменных */ VAR: NEWCASH LABEL: Сумма наличных денег для вклада VAR: ADVICE LABEL: Данный совет VAR: GOODINCOME LABEL: Текущий доход - хороший VAR: GOODSAVE LABEL: Текущие сбережения - хорошие VAR: NEEDINCOME LABEL: Необходимая сумма дохода VAR: INCOME FIND: skip input income num with \ " Какой Ваш годовой доход семьи? " LABEL: Текущий доход VAR: SAVINGS FIND: skip input savings num with \ " Сколько у Вас сбережений? " LABEL: Текущие сбережения VAR: STEADY FIND: skip input steady str using "u" with \ "Можете ли Вы ожидать стабильный доход на следующий год? (y/n) " steady = (steady = "Y") LABEL: Надежный доход VAR: DEPENDENTS LABEL: Число иждивенцев FIND: skip input dependents num using "dd" with \ " Сколько у Вас иждивенцев? " END:
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|