Листинг 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>) Возвращает аргумент, приведенный к верхнему регистру

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


Дата добавления: 2018-05-12; просмотров: 232; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!