- •Инструментальные средства конструирования экспертных систем
- •Введение
- •Система 1stClass
- •Общие характеристики системы 1stClass
- •Режим приобретения знаний
- •Режим консультации
- •Пример использования системы
- •Разработка эс
- •«Каталог» на основе 1stClass
- •Примеры консультаций
- •Системаexsys
- •Общие характеристики системы
- •Режим конструирования прикладной экспертной системы
- •Начальные установки
- •Ввод правил
- •Ввод формул
- •Изменение ранее выбранных установок
- •Работа с внешними программами
- •Примеры работы
- •Постановка прикладной задачи
- •Использование математических выражений
- •Редактирование правил
- •Использование внешних программ
- •Пример использования системы
- •Система guru
- •Общие характеристики системы
- •Функциональные возможности
- •Построение экспертной системы
- •Тестирование экспертной системы
- •Запуск системы и работа в режиме меню
- •Запуск системы
- •Некоторые сведения о работе в режиме меню
- •Использование режима меню
- •Описание команд меню Expert Systems
- •Режим редактирования набора правил (guru Rule Set Manager)
- •Режим редактирования правил
- •Часть if – посылка правила. Может быть любым выражением.
- •Режим редактирования переменных
- •Описание команд меню Information Manager
- •Примеры использования системы
- •Язык искусственного интеллекта clips
- •Краткая история clips
- •Факты, правила и функции clips
- •Правила и функции
- •Работа в среде clips под Windows
- •Instance Window
- •Постановка задачи
- •Листинг программы
- •Контрольные вопросы
- •Библиографический список
- •Приложение 1 Листинг 1. Эс для оценки надежности поставщика (в среде guru)
- •Листинг 2. Пример работы эс для оценки надежности поставщика
- •Пример объяснений
- •Листинг 3. Подсистема прогнозирования цен Текст программы
- •Пример консультации
- •Приложение 2 Команды clips
- •Описание clips в бнф
- •Оглавление
Контрольные вопросы
Какая модель представления знаний эксперта используется в оболочке 1stCLASS?
Каково назначение экранов в оболочке 1stCLASS?
Какие методы построения дерева решений существуют в оболочке 1stCLASS?
Какие методы обработки коэффициентов правдоподобия результата используются в оболочке 1stCLASS?
Каково представление знаний эксперта в системе EXSYS?
В какиех режимах может функционировать система EXSYS?
Какие шкалы оценивания коэффициентов уверенности используются в системе EXSYS?
Как используются математические выражения в системе EXSYS?
Как используются внешние программы в системе EXSYS?
Каково представление знаний эксперта в системе GURU?
В какиех режимах может функционировать система GURU?
Какова специфика работы в режиме меню?
Как определяется режим проверки конфликтующих правил и очередность проверки правил в системе GURU?
По каким правилам объединяются факторы уверенности в системе GURU?
Как используются нечеткие переменные в системе GURU?
Какие методы объяснения результатов используются в системе GURU?
Каковы основные компоненты языка CLIPS?
Как осуществляется работа с фактами в языке CLIPS?
Какие правила существуют в языке CLIPS?
Какие функции существуют языка CLIPS?
Библиографический список
Искусственныйинтеллект: Справочник. В 3-х кн. – М.: Радио и связь, 1990. – 464 с.
Статическиеи динамические экспертные системы: Учебное пособие / Э.В. Попов, И.Б. Фоминых, Е.Б. Кисель, М.Д. Шапот. – М.: Финансы и статистика, 1996. – 320 с.
Джексон П.Введение в экспертные системы: Учебное пособие. Пер. с англ. – М.: «Вильямс», 2001. – 624 с.
Т.А. Гаврилова, В.Ф. Хорошевский.Базы знаний интеллектуальных систем – СПб.: Питер, 2000. – 384 с.
Еремеев А.П. Разработка экспертных систем на персональных ЭВМ на базе оболочек М.1 и 1stCLASS. – М.: Издательство МЭИ, 1993. – 39 с.
Рокотян И.С., Хачатурова Е.А. Разработка баз знаний на основе экспертной системы EXSYS. – М.: Издательство МЭИ, 1998. – 28 с.
Еремеев А.П. Проектирование экспертных систем средствами инструментальной системы GURU. – М.: Издательство МЭИ, 1996. – 52 с.
Joseph Giarrantano, Gary Riley.Expert Systems: principles and programming – 3rded. 1998. – 597 p.
Приложение 1 Листинг 1. Эс для оценки надежности поставщика (в среде guru)
/* Программа выбора поставщика */
clear /* очистка экрана */
e.stat = false /* блокировка вывода трассировки на экран */
e.supd = true /* блокировка вывода сообщений на экран при вводе из файла */
finish all /* закрытие всех активных баз данных */
/* Следующие базы данных делаются активными */
use progr
use proizv
use postav
use specif
at 5,5 ? «****** ЭКСПЕРТНАЯ СИСТЕМА ******»
at 6,5 ? «*** ПРОГРАММА ВЫБОРА ПОСТАВЩИКА ***»
at 7,5 ? «********* press any key ***********»
wait;
obtain first from progr; /* получение первой записи из БД progr */
while not (eot (progr)) do /* eot() – функция, опред. конец файла */
clear;
? « *** Код иэделия: », progr.kodizd;
? « *** Изделие: », progr.izdel;
flag2 = 0;
/* получение из файла базы данных 'specif' первой записи, для которой запись в поле 'kodizd' совпадает с текущей записью в поле 'kodizd' базы данных 'progr' */
obtain first from specif for progr.kodizd = specif.kodizd;
while (not (eot (specif)) and flag2 = 0) do
potrebn = progr.odiem * specif.spec;
output « **** Код продукта: », specif.kodprod;
? « **** потребность: », potrebn;
/* получение из файла базы данных 'proizv' первой записи, для которой запись в поле 'kodprod' совпадает с текущей записью в поле 'kodprod' базы данных 'specif' */
obtain first from proizv for specif.kodprod = proizv.kodprod;
if #found = false then /* если запись не найдена, то поставщика нет */
at 8,2 output « <><> Поставщик не найден <><> »;
wait;
flag2 = 1;
endif;
flag1 = 0;
while (not (eot (proizv)) and flag1 = 0 and flag2 = 0) do
at 8,2 output « **** Код поставщика: », proizv.kodpred;
? «**** цена продукта: », proizv.cena, « ру6лей за 1 шт.»;
/* из файла базы данных 'postav' выбирается поставщик, который может предложить товар по цене, не превышающей имеющиеся фонды */
obtain from postav for postav.kodpred = proizv.kodpred and
progr.fond > potrebn * proizv.cena;
? «*** Поставщик: », postav.name;
if #found = false then
? «**** Фонды меньше чем цена * потребность»;
? «**** Поставщик исключается из рассмотрения»;
flag1 = 0; flag2 = 0;
break;
endif;
/* если цена, предлагаемая поставщиком, не превышает имеющиеся фонды, то поставщика необходимо проверить на надежность */
consult n to test nad; /* Определение надежности поставщика с помощью ЭС*/
if nad = true then
at 14,2 output « **** Поставщик », postav.kodpred, « надежный»;
else
at 14,2 output « **** Поставщик », postav.kodpred, « НЕнадежный»
endif;
wait;
/* получение следующей записи из базы данных 'proizv' */
obtain next from proizv for specif.kodprod = proizv.kodprod;
if #found = false then flag1 = 1; endif;
endwhile;
/* получение следующей записи из базы данных 'specif' */
obtain next from specif for progr.kodizd = specif.kodizd;
if #found = false then break; endif;
endwhile;
/* получение следующей записи из базы данных 'progr' */
obtain next from progr;
enbdwile;
wait;
clear;
at 19, 10 ? « **** Конец консультации **** »;
at 20, 10 ? « ********* bye, bye **********»;
wait;
clear;
finish all;
/* Набор правил – Определение надежности поставщика */
GOAL: NAD /* НАДЕЖНОСТЬ */
INITIAL:
form main /* описание главной формы */
at 10, 25 put «********************************»;
at 11, 25 put «* Экспертная Система *»;
at 12, 25 put «* Оценка надежности поставщика *»;
at 13, 25 put «******** press any key *********»;
endform /* окончание описания формы main */
form vivod /* описание формы для вывода результатов */
at 3, 25 put «********************************»;
at 4, 25 put «* Экспертная Система *»;
at 5, 25 put «* Оценка надежности поставщика *»;
at 6, 25 put «* Вывод результатов *»;
at 7, 25 put «********************************»;
endform /*окончание описания формы vivod */
e.trac = «n» /* отмена трассировки. v – включить трассировку */
e.sord = «ph» /* критерии, по которым устанавливается очередность проверки правил; ph – по приоритету + по наибольшей достоверности результата */
e.rigr = «a» /* режим проверки конфликтующих правил для достижения результата с заданной степенью точности; а – все правила, дающие минимально допустимый фактор уверенности + правила, увеличивающие достоверность результата */
e.tryp = «s» /* режимы оценки; s – проверка неизвестных переменных, пока значение какой-либо из них не будет получено */
e.cfva = «pp» /* задание вероятностной логики */
e.lnum = 5 /* длина числового значения для округления */
e.deci = 0 /* число значащих цифр после запятой */
e.lstr = 75 /* максимальная длина строки */
/******* Следующие переменные имеют тип UNKNOWN *******/
ZAD = UNKNOWN /* Задолженность поставщика. Boolean */
REN = UNKNOWN /* Рентабельность. Boolean */
REC = UNKNOWN /* Наличие рекламаций. Boolean */
UD = UNKNOWN /* Удаленность поставщика. Integer */
ST = UNKNOWN /* Статус поставщика. String */
NAD = UNKNOWN /* Надёжность поставщика */
FIN = UNKNOWN /* Финансовое состояние */
WORK = UNKNOWN /* Рабочая переменная */
DO:
putform vivod;
if 50 < hicf(nad) then
at 12,27 output «Надежность поставщика – TRUE», hival(nad);
at 13,27 output «Фактор уверенности = », hicf(nad);
else
at 12,27 output «Надежность поставщика – FALSE»;
at 13,27 output «Фактор уверенности = », 100 - hicf(nad);
endif;
RULE: R1
PRIORITY: 100
COST: 100
IF: ren = true and zad = false
THEN: fin = true
REASON: Если рентабельность высокая и нет задолженности, то финансовое состояние достаточно высокое.
RULE: R2
PRIORITY: 100
COST: 100
IF: ren = false and zad = true
THEN: fin = false
REASON: Если рентабельность низкая, то финансовое состояние плохое
RULE: R3
PRIORITY: 100
COST: 90
IF: ren = true and zad = true
THEN: work = false
REASON: Если есть задолженность, то финансовое состояние достаточно плохое
RULE: R33
PRIORITY: 100
COST: 90
IF: ren = false and zad = false
THEN: work = true
REASON: Если нет рентабельности, но и нет задолженности, то финансовое состояние можно считать удовлетворительным
RULE: R4
PRIORITY: 100
IF: fin = true
THEN: nad += true cf 90
REASON: Если финансовое состояние хорошее, то надежность поставщика высокая
RULE: R44
PRIORITY: 100
IF: work = true
THEN: nad += true cf 54
REASON: Если финансовое состояние удовлетворительное, то надёжность поставщика повышается
RULE: R5
PRIORITY: 100
IF: fin = false
THEN: nad = true cf 90
REASON: Если финансовое состояние плохое, то надежность поставщика низкая
RULE: R55
PRIORITY: 100
IF: work = false
THEN: nad = true cf 63
REASON: Если есть задолженность, то надёжность поставщика снижается
RULE: R6
PRIORITY: 90
IF: rec = 1
THEN: nad = true cf 60
REASON: Если есть рекламации, то надежность поставщика низкая
RULE: R7
PRIORITY: 90
IF: rec = 2
THEN: nad += true cf 80
REASON: Если рекламаций нет, то надежность поставщика высокая
RULE: R8
PRIORITY: 80
IF: st = «gosud»
THEN: nad += true cf 70
REASON: Если предприятие государственное, то надежность высокая
RULE: R9
PRIORITY: 80
IF: st = «akc»
THEN: nad += true cf 70
REASON: Если предприятие акционерное, то надежность высокая
RULE: R10
PRIORITY: 80
IF: st = «sovmest»
THEN: nad += true cf 70
REASON: Если предприятие совместное, то надежность высокая
RULE: R11
PRIORITY: 80
IF: st = «maloe»
THEN: nad += true cf 50
REASON: Если предприятие малое, то надежность средняя
RULE: R12
PRIORITY: 80
IF: st = «kooper»
THEN: nad += true cf 50
REASON: Если предприятие кооперативное, то надежность средняя
RULE: R13
PRIORITY: 80
IF: st = «individ»
THEN: nad += true cf 20
REASON: Если предприятие индивидуальное, то надежность низкая
RULE: R14
PRIORITY: 70
IF: ud <= 1000
THEN: nad += true cf 70
REASON: Если удаленность поставщика небольшая, то надежность высокая
RULE: R15
PRIORITY: 70
IF: ud > 1000
THEN: nad = true cf 30
REASON: Если удаленность поставщика большая, то надежность низкая
VAR: NAD
TYPE: pp
LABEL: Надежность поставщика
VAR: REN
FIND:
clear;
let deci = e.deci;
let lnum = e.lnum;
let e.deci = 0;
let e.lnum = 1;
putform main;
wait;
clear;
at 5,10 input tmpv num with «Введите рентабельность: (1–Есть, 2–Нет)»
if tmpv = 1 then
let ren = true;
else
let ren = false;
endif;
LABEL: Рентабельность
VAR: ZAD
FIND:
at 7,10 input tmpv num with «Введите задолженность: (1–Есть, 2–Нет)»
if tmpv = 1 then
let zad = true;
else
let zad = false;
endif;
LABEL: Задолженность
VAR: FIN
LABEL: Финансовое состояние
VAR: REC
FIND:
let e.icf = true;
at 9,10 input rec int with «Введите рекламации (1 – Есть, 2 – Нет): »
let e.icf = false;
LABEL: Рекламации
VAR: ST
FIND:
at 11,11 ? «Статус предприятия:»
at 12,10 ? « 1 – государственное,»;
at 13,10 ? « 2 – акционерное,»;
at 14,10 ? « 3 – совместное,»;
at 15,10 ? « 4 – малое,»;
at 16,10 ? « 5 – кооперативное,»;
at 17,10 ? « 6 – индивидуальное»;
at 18,10 input tmp num with «Укажите статус предприятия: »
if tmp = 1 then let st = «gosud»;
else if tmp = 2 then let st = «akc»;
else if tmp = 3 then let st = «sovmest»;
else if tmp = 4 then let st = «maloe»;
else if tmp = 5 then let st = «kooper»;
else let st = «individ»;
endif; endif; endif; endif; endif;
e.deci = deci;
e.lnum = lnum;
LABEL: Статус предприятия
VAR: UD
FIND:
at 20,10 input ud num with «Введите удаленность поставщика в км: »
at 23,21 ? «*** Ввод значений завершен. ***»;
at 24,21 ? «*** press any key ***»;
wait;
clear;
LABEL: Удаленность поставщика
VAR: WORK
LABEL: Финансовое состояние
END: