Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Построение экспертных систем в среде ИНТЕР-ЭКСПЕРТ

Лабораторная работа №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 Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...