Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Еремеев А.П., Чибизова Н.В. Методическое пособие по курсу «Экспертные системы».doc
Скачиваний:
117
Добавлен:
02.05.2014
Размер:
1.32 Mб
Скачать

Листинг 2. Пример работы эс для оценки надежности поставщика

********************************

* Экспертная система *

* Оценка надежности поставщика *

******* press any key ********

Введите рентабельность (1 – есть, 2 – нет): 1

Введите задолженность (1 – есть, 2 – нет): 2

Введите рекламации (1 – есть, 2 – нет): 1 с уверенностью 30

Статус предприятия:

1 – государственное,

2 – акционерное,

3 – совместное,

4 – малое,

5 – кооперативное,

6 – индивидуальное

Укажите статус предприятия: 2

Введите удаленность поставщика км: 500

*** Ввод значений завершен ***

*** press any key ***

********************************

* Экспертная система *

* Оценка надежности поставщика *

* Вывод результатов *

******* press any key ********

Надежность поставщика – True

Фактор уверенности = 81

Пример объяснений

Rule R1 (fired)

Если рентабельность высокая и нет задолженности, то финансовое состояние достаточно высокое

(2) Рентабельность true cf 100

(3) Задолженность false cf 100

(4) Финансовое состояние true cf 100

Rule R4 (fired)

Если финансовое состояние хорошее, то надежность поставщика высокая

(4) Финансовое состояние true cf 100

(1) Надежность поставщика true cf 90

Rule R6 (fired)

Если рекламации есть, то надежность поставщика низкая

(5) Рекламации 1 cf 30

(1) Надежность поставщика true cf -18

Rule R9 (fired)

Если предприятие акционерное, то надежность высокая

(6) Статус предприятия akc cf 100

(1) Надежность поставщика true cf 70

Rule R14 (fired)

Если удаленность поставщика небольшая, то надежность высокая

(7) Удаленность поставщика 500 cf 100

(1) Надежность поставщика true cf 70

Листинг 3. Подсистема прогнозирования цен Текст программы

GOAL: PRICES

INITIAL:

e.cfjo = «M» /* факторы уверенности левой и правой частей правил объединяются по формуле Min(a, b) */

e.cfco = «P» /* факторы уверенности результатов для одной переменной объединяются по формуле a + b - (a * b) / 100 */

e.trac = «n» /* отмена трассировки; v – включить */

e.lstr = 75 /* максимальная длина строки */

? «Для начала консультации нажмите любую клавишу»

wait;

/* Исходные данные */

prodvol = {200 cf 90, 100 cf 30};

demvol = {150 cf 80, 50 cf 20};

PRICES = unknown;

DO:

? «Конец консультации»;

RULE: R1

IF: prodvol > demvol

THEN: PRICES = «падают»; cfv(PRICES, prodvol > demvol);

? «с КУ = », hicf(PRICES) , «% можно сказать, что цены»;

? «в будущем году упадут»;

wait;

RULE: R2

IF: prodvol < demvol

THEN: PRICES = «растут»; cfv(PRICES, prodvol < demvol);

? «с КУ = », hicf(PRICES) , «% можно сказать, что цены»;

? «в будущем году поднимутся»;

wait;

RULE: R3

IF: prodvol = demvol

THEN: PRICES = «6eз изменений»; cfv(PRICES, prodvol equal demvol);

? «с КУ = », hicf(PRICES) , «% можно сказать, что в будущем»

? «году цены не изменятся»;

wait;

VAR: PRODVOL

LABEL: Объем производства

VAR: DEMVOL

LABEL: Объем спроса

VAR: PRICES

END:

Пример консультации

Для начала консультации нажмите любую клавишу

с КУ = 87.00% можно сказать, что цены в будущем году упадут

Приложение 2 Команды clips

Предикатные функции

(and <expression>+)

TRUE, если каждый из аргументов равен TRUE, иначе FALSE

(eq <expression> <expression>+)

TRUE, если первый аргумент равен по типу и по значению всем остальным аргументам, иначе FALSE

(evenp <expression>)

TRUE, если <expression> четное целое, иначе FALSE

(floatp <expression>)

TRUE, если <expression> типа float, иначе FALSE

(integerp <expression>)

TRUE, если <expression> типа integer, иначе FALSE

(lexemep <expression>)

TRUE, если <expression> типа string или symbol, иначе FALSE

(multifieldp <expression>)

TRUE, если <expression> – multifield, иначе FALSE

(neq <expression> <expression>+)

TRUE, если его первый аргумент не равен по типу или по значению всем остальным, иначе FALSE

(not <expression>)

TRUE, если значение аргумента FALSE, иначе TRUE.

(numberp <expression>)

TRUE, если <expression> типа float или integer, иначе FALSE

(oddp <expression>)

TRUE, если <expression> нечетное целое, иначе FALSE

(or <expression>+)

TRUE, если хотя бы один из аргументов равен TRUE, иначе FALSE

(stringp <expression>)

TRUE, если <expression> является строкой, иначе FALSE

(symbolp <expression>)

TRUE, если <expression> – идентификатор, иначе FALSE

(= <numeric-expression> <numeric-expression>+)

TRUE, если его первый аргумент равен по числовому значению всем остальным аргументам, иначе FALSE

(<> <numeric-expression> <numeric-expressions)

TRUE, если его первый аргумент не равен по числовому значению всем остальным аргументам, иначе FALSE

(> <numeric-expression> <numeric-expressions>)

TRUE, если для всех аргументов, аргумент n – 1 больше, чем аргумент n, иначе FALSE

(>= <numeric-expression> <numeric-expression>+)

TRUE, если для всех аргументов, аргумент n – 1 больше или равен аргументу n, иначе FALSE

(< <numeric-expression> <numeric-expression>+)

TRUE, если для всех аргументов, аргумент n – 1 меньше, чем аргумент n, иначе FALSE

(<= <numeric-expression> <numeric-expression>+)

TRUE, если для всех аргументов, аргумент n – 1 меньше или равен аргументу n, иначе FALSE

Строковые функции

(lowcase <string-or-syrobol-expression>)

Возвращает аргумент, приведенный к нижнему регистру

(str-cat <expression>*)

Возвращает все аргументы, объединенные в строку

(str-compare <string-or-symbol-expression> <string-or-symbol-expression>)

Возвращает ноль, если оба аргумента равны, иначе отличное от нуля значение

(str-index <lexeme-expression> <lexeme-expression>)

Возвращает позицию первого аргумента во втором аргумен­те, если первый аргумент подстрока второго, иначе FALSE

(str-length <string-or-symbol-expression>)

Возвращает длину строки

(sub-string <begin-integer-expression> <end-integer-expression> <string-expression>)

Возвращает подстроку из <string-expression>, начинающуюся в позиции <begin-integer-expression> и заканчивающуюся в позиции <end-integer-expression>

(sym-cat <expression>*)

Возвращает все аргументы, соединенные в идентификатор

(upcase <string-or-symbol-expression>)

Возвращает аргумент, приведенный к верхнему регистру

Функции ввода/вывода

(close [<logical-name>])

Закрывает файл, ассоциированный с логическим именем <logical-name> (или все файлы, если аргумент опущен). Возвращает TRUE, если файл был успешно закрыт, иначе FALSE

(format <logical-name> <string-expression> <expression>*)

Вычисляет и печатает в <logical-name> ноль или более выражений, отформатированных согласно <string-expression>

(open <file-name> <logical-name> [<mode>])

Открывает файл <file-name> в указанном режиме («r», «w», «r+» или «a») и ассоциирует с ним логическое имя <logical-name>. Возвращает TRUE, если файл успешно открыт, иначе FALSE.

(printout <logical-name> <expression>*)

Вычисляет и печатает в <logical-name> ноль или более выражений.

(read [<logical-name>] )

Читает указанное поле из указного <logical-name> (stdin, если ничего не указано). Возвращает поле в случае успеха или EOF, если нет никаких входных значений.

(readline [<logical-name>] )

Читает строку из указного <logical-name> (stdin, если ничего не указано). Возвращает строку в случае успеха или EOF, если нет никаких входных значений.

(remove <file-name>)

Удаляет файл <file-name>.

(rename <old-file-name> <new-file-name>)

Переименовывает файл <old-file-name> в <new-file-name>

Основные математические функции

(abs <numeric-expression>)

Возвращает модуль указанного значения

(div <numeric-expression> <numeric-expression>+)

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

(float <numeric-expression>)

Возвращает аргумент, приведенный к типу float.

(integer <numeric-expression>)

Возвращает аргумент, приведенный к типу integer.

(max <numeric-expression> <numeric-expression>+)

Возвращает значение самого большого аргумента.

(min <numeric-expression> <numeric-expression>+)

Возвращает значение самого маленького аргумента.

(+ <numeric-expression> <numeric-expression>+)

Возвращает сумму аргументов

(- <numeric-expression> <numeric-expression>+)

Возвращает разницу между первым аргументом и всеми остальными.

(* <numeric-expression> <numeric-expressions)

Возвращает произведение аргументов

(/ <numeric-expression> <numeric-expression>+)

Возвращает значение первого аргумента, разделен­ного на все остальные.

Тригонометрические функции (аргументы должны быть представлены в радианах)

(acos <numeric-expression>)

Возвращает арккосинус аргумента

(acosh <numeric-expression>)

Возвращает гиперболический арккосинус аргумента

(acot <numeric-expression>)

Возвращает арккотангенс аргумента

(acoth <numeric-expression>)

Возвращает гиперболический арккотангенс аргумента

(acsc <numeric-expression>)

Возвращает арккосеканс аргумента

(acsch <numeric-expression>)

Возвращает гиперболический арккосеканс аргумента

(asec <numeric-expression>)

Возвращает арксеканс аргумента

(asech <numeric-expression>)

Возвращает гиперболический арксеканс аргумента

(asin <numeric-expression>)

Возвращает арксинус аргумента

(asinh <numeric-expression>)

Возвращает гиперболический арксинус аргумента

(atan <numeric-expression>)

Возвращает арктангенс аргумента

(atanh <numeric-expression>)

Возвращает гиперболический арктангенс аргумента

(cos <numeric-expression>)

Возвращает косинус аргумента

(cosh <numeric-expression>)

Возвращает гиперболический косинус аргумента

(cot <numeric-expression>)

Возвращает котангенс аргумента (в радианах)

(coth <numeric-expression>)

Возвращает гиперболический котангенс аргумента

(сsc <numeric-expression>)

Возвращает косеканс

(csch <numeric-expression>)

Возвращает гиперболический косеканс аргумента

(sec <numeric-expression>)

Возвращает секанс аргумента

(sech <numeric-expression>)

Возвращает гиперболический косеканс аргумента

(sin <numeric-expression>)

Возвращает синус аргумента

(sinh <numeric-expression>)

Возвращает гиперболический синус аргумента

(tan <numeric-expression>)

Возвращает тангенс аргумента

(tanh <numeric-expression>)

Возвращает гиперболический тангенс аргумента

Функции конвертации

(deg-grad <numeric-expression>)

Возвращает значение аргумента, переведенного из градусов в градиенты.

(deg-rad <numeric-expression>)

Возвращает значение аргумента, переведенного из градусов в радианы.

(exp <numeric-expression>)

Возвращает экспоненту аргумента.

(grad-deg <numeric-expression>)

Возвращает значение аргумента, переведенного из градиентов в градусы.

(log <numeric-expression>)

Возвращает логарифм по основанию e аргумента.

(loglO <numeric-expression>)

Возвращает логарифм по основанию 10 аргумента.

(mod <numeric-expression> <numeric-expression>)

Возвращает остаток от деления первого аргумента на второй.

(pi)

Возвращает число pi.

(rad-deg <numeric-expression>)

Возвращает значение аргумента, переведенного из радианов в градусы

(round <numeric-expression>)

Возвращает значение аргумента округленного до ближайшего целого.

(sqrt <numeric-expression>)

Возвращает корень квадратный аргумента

(** <numeric-expression> <numeric-expression>)

Возвращает первый аргумент, возведенный в степень второго аргумента.

Процедурные функции

(bind <variable> <value>)

Связывает переменную с указанным значением.

(if <predicate-expression> then <expression>+ [else <expression>+])

Вычисляет выражение, указанное в then, если <predicate-expression> TRUE, иначе вычисляет выражение, указанное в else

(while <predicate-expression> [do] <expression>*)

Вычисляет <expression>* до тех пор, пока <predicate-expression> не примет значение FALSE.

Разные функции

(gensym)

Возвращает идентификатор в виде genX, где X – целое.

(gensym*)

Возвращает идентификатор в виде genX, где X – целое. В отличие от gensym, gensym* возвращает уникальный идентификатор, которого еще нет в среде CLIPS.

(random)

Возвращает случайное целое число.

(seed <integer-expression>)

Устанавливает затравку, используемую генератором случайных чисел.

(setgen <integer-expression>)

Устанавливает индекс, используемый gensym и gensym*.

(time)

Возвращает число секунд, прошедшее от начала старта системы.

Команды среды

(apropos <lexeme>)

Выводит все идентификаторы, определенные в среде CLIPS, которые содержат указанную подстроку <lexeme>

(clear)

Удаляет все конструкции, определенные в среде CLIPS.

(exit)

Выход из среды CLIPS.

(get-dynamic-constraint-checking)

Возвращает значение флага dynamic-constraint-checking.

(get-static-constraint-checking)

Возвращает значение флага static-constraint-checking.

(load <file-name>)

Загружает конструкции из указанного файла <file-name> в среду CLIPS. Возвращает TRUE, если файл успешно загружен, иначе FALSE.

(reset)

Переконфигурирует среду CLIPS.

(save <file-name>)

Сохраняет все конструкции среды CLIPS в указанный файл <file-name>.

(set-dynamic-constraint-checking <boolean-expression>)

Отключает динамическую проверку ограничений, если <boolean-expression> – FALSE, иначе включает. Возвращается старое значение флага.

(set-static-constraint-checking <boolean-expression>)

Отключает статическую проверку ограничений, если <boolean-expression> – FALSE, иначе включает. Возвращается старое значение флага.

(system <lexeme-expression>*)

Объединяет аргументы в строку и передает ее на выполнение операционной системе.

Команды отладчика

(dribble-off)

Прекращает вывод трассы в файл, открытый с помощью функции dribble-on. Возвращает TRUE, если файл успешно закрыт, иначе FALSE.

(dribble-on <file-name>)

Записывает все выходные данный, которые в обычном ре­жи­ме выводятся на экран в файл трассы <file-name>. Воз­вра­ща­ет TRUE, если файл успешно открыт, иначе FALSE.

(unwatch <watch-item>)

Запрещает отображение информационных сообщений, которые возникают в операциях CLIPS.

(watch <watch-item>) <watch-item> ::= activations | all |compilations | facts | focus | rules | statistics

Разрешает отображение информационных сообщений, которые возникают в операциях CLIPS.

Команды Deftemplate

(list-deftemplates [<module-name>])

Перечисляет все deftemplates в указанном модуле (или в текущем модуле, если <module-name> не указан).

(ppdeftemplate <deftemplate-name>)

Отображает текст указанного deftemplate.

(undeftemplate <deftemplate-name>)

Удаляет указанный deftemplate.

Функции и команды работы с фактами

(assert <RHS-pattern>)

Добавляет один или более фактов в базу фактов. Возвращает адрес последнего добавленного факта.

(assert-string <string-expression>)

Конвертирует строку в факт и добавляет его. Возвращает адрес нового добавленного факта.

(dependencies <fact-index-or-fact-address>)

Перечисляет все частичные условия, которые подтверждают данный факт.

(dependents <fact-index-or-fact-address>)

Перечисляет все факты, которые подтверждаются указанным фактом.

(duplicate <fact-index-or-fact-address> <RHS-slot>*)

Добавляет копию факта, определенного с помощью deftemplate c одним или более измененным значением слота.

(facts [<module-name> [<start-integer-expression> [<end-integer-expression> [<max-integer-expression>]]])

Выводит факты из базы фактов. Если <module-name> указан, только факты этого модуля выводятся, иначе выводятся факты текущего модуля. Факты с индексом меньше <start-integer-expression> или больше <end-integer-expression> не выводятся. Если <max-integer-expression> указано, выводится то количество фактов, которое не превышает указанного.

(fact-index <fact-address-expression>)

Возвращает индекс факта соответствующий адресу факта.

(get-fact-duplication)

Возвращает текущее значение флажка fact duplication. См. также set-fact-duplication .

(load-facts <file-name>)

Загружает факты из файла <file-name> в текущий модуль. Возвращает TRUE в случае успеха, иначе FALSE.

(modify <fact-index-or-fact-address> <RHS-slot>*)

Изменяет одно или более значений слотов факта определенного с помощью <fact-index-or-fact-address>.

(retract <fact-index-or-fact-address>+)

Удаляет один или более фактов из списка

(save-facts <file-name> [visible | local <deftemplate-names>*])

Сохраняет указанные факты в фай <file-name>. Возвращает TRUE, если в случае успеха, иначе FALSE.

(set-fact-duplication <boolean-expression>)

Позволяет указывать идентичные факты, если <boolean-expression> FALSE, иначе предотвращает добавление дублирующихся фактов в базу фактов. Возвращает старое значение дубликата.

Команды Deffacts

(list-deffacts [<module-name>])

Перечисляет все deffacts в указанном модуле (или в текущем модуле, если <module-name> не указано).

(ppdeffacts <deffacts-name>)

Отображает текст указанных deffacts.

(undeffacts <deffacts-name>)

Удаляет указанные deffacts.

Команды Defrule

(list-defrules [<module-name>])

Перечисляет все defrules в указанном модуле (или в текущем модуле, если <module-name> не указан).

(matches <defrule-name>)

Выводит список всех фактов и частичных совпадении, которые удовлетворяют шаблону указанного правила.

(ppdefrule <defrule-name>)

Выводит текст указанного defrule.

(refresh <defrule-name>)

Обновляет указанный defrule. Активизирует те правила, которые уже сработали, но все еще правильны.

(remove-break [<defrule-name>])

Удаляет точку останова (breakpoint) из указанного правила. Если правило не указано все точки останова удаляются.

(set-break <defrule-name>)

Устанавливает точку останова (breakpoint) для указанного модуля. Это приведет к тому, что выполнение будет прервано перед тем, как выполниться правило.

(show-breaks [<module-name>])

Перечисляет все правила указанного модуля, в которых есть точки останова (breakpoints) (или текущего модуля, если <module-name> не указан).

(undefrule <defrule-name>)

Удаляет указанный defrule.

Команды Defmodule

(get-current-module)

Возвращает текущий модуль

(list-defmodules)

Перечисляет все defmodules в среде CLIPS.

(ppdefmodule <defmodule-name>)

Отображает текст указанного deftnodule.

(set-current-module <defmodule-name>)

Устанавливает указанный модуль в текущий и возвращает предыдущий текущий модуль.

Выполнение программы

(run [<integer-expression>])

Начинает выполнение правил. Если <integer-expression> определено, то только указанное число правил выполнится, иначе выполнение прервется, только по исчерпанию базы правил.

(halt)

Останавливает выполнение правил.

Просмотр базы правил

(agenda [<module-name>])

Выводит список всех правил из базы правил указанного модуля (если модуль не указан, то текущего модуля)