Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Примеры использования системы⇐ ПредыдущаяСтр 20 из 20 В приложении 1 приводятся примеры программ и результаты работы несложных ЭС (учебных прототипов), созданных в среде GURU для оценки надежности поставщика (листинги 1, 2) и прогнозирования цен (листинг 3).
ПРИЛОЖЕНИЕ 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:
|