Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторные работы / Лабораторная работа 2.docx
Скачиваний:
21
Добавлен:
28.06.2014
Размер:
100.03 Кб
Скачать

Национальный исследовательский институт

Московский Энергетический Институт (Технический Университет)

Институт автоматики и вычислительной техники

Кафедра Прикладной математики

Лабораторная работа №2

по дисциплине «Экспертные системы»

тема: «Разработка экспертной системы с использованием программы GURU»

Выполнил:

Машеров Д.Е.

.

Москва

2012 г.

Постановка задачи

Разработать экспертную систему с использованием программы GURU.

Описание предметной области

Разрабатывается ЭС «Категоризация бриллиантов», которая позволяет выполнить категоризацию бриллиантов. Предметная обасть формализуется с помощью дерева целей, изображенном на Рис.1, дужкой помечена вершина «И», а отсутвием дужки – вершина «ИЛИ».

Описание работы эс

По дереву целей описаны переменные и правила, представленные в листинге.

Системная переменная E.CFVA, определяющяя формулу объединения факторов уверенности левой и правой частей правила имеет значение «pp»,то есть имеет вид:

CFJO = для AND

Объединение факторов уверенности для левой и правой частей правила

CFJO = для OR

Объединение факторов уверенности, полученных по нескольким правилам для одной переменной

P: (a * b) / 100

P: a + b – (a * b) / 100

Переменная e.sord,определяющяя очередность проверки имеет значение «ph», то есть проверка осуществляется по приоритету и по наибольшей достоверности результата.

Рис.1. Дерево целей

Листинг

Переменные:

VAR: CATEG

TYPE: pp

LABEL: CATEGORY

VAR: COLLECT

LABEL: COLLECTIONAL

VAR: PURITY

LABEL: PURITY

VAR: CUTQUAL

LABEL: CUT QUALITY

VAR: PLAY

LABEL: PLAY

VAR: FAMOUS

FIND:

let e.lnum= 1;

at 1,10 input tmpv num with "Byl li u kamnja izvestnyj vladelec?(1 - da, 2 - net)"

if tmpv = 1 then

let FAMOUS = true;

else

let FAMOUS = false;

endif;

LABEL: FAMOUS

VAR: UNUSUAL

FIND: at 2,10 input tmpv num with "Est' li neobychnaja istorija u kamnja?(1 - da, 2 - net)"

if tmpv = 1 then

let UNUSUAL = true;

else

let UNUSUAL = false;

endif;

LABEL: UNUSUAL

VAR: WEIGHT

FIND:

let e.lnum= 3;

at 3,10 input tmpv num with "Vvedite ves v karatah";

LABEL: WEIGHT

VAR: SYMMETRY

FIND:

let e.lnum= 1;

at 4,10 input tmpv num with "Brilliant simmetrichen?(1 - da, 2 - net)"

if tmpv = 1 then

let SYMMETRY = true;

else

let SYMMETRY = false;

endif;

LABEL: SYMMETRY

VAR: POLISH

FIND: at 5,10 input tmpv num with "Est' li brillianta negladkie storony?(1 - da, 2 - net)"

if tmpv = 1 then

let POLISH = false;

else

let POLISH = true;

endif;

LABEL: POLISHING

VAR: PROPORT

FIND:

let e.lnum= 2;

at 6,10 input tmpv num with "Vvedite otnoshenie rundisty(pojasa) k vysote kamnja v procentah"

LABEL: PROPORTIONS

VAR: CRACKS

FIND: at 7,10 input tmpv num with "Imejutsja li treshhiny? (1 - da, 2 - net)"

if tmpv = 1 then

let CRACKS = true;

else

let CRACKS = false;

endif;

LABEL: CRACKS

VAR: DOTS

FIND: at 8,10 input tmpv num with "Imejutsja li temnye tochki na poverhnosti? (1 - da, 2 - net)"

if tmpv = 1 then

let DOTS = true;

else

let DOTS = false;

endif;

LABEL: DOTS

VAR: COLOUR

FIND: at 9,10 input tmpv num with "Ukazhite cvet (1 - bescvetnyj, 2 - zheltyj, 3 - cvetnoj)"

LABEL: COLOUR

VAR: SCIN

FIND: at 10,10 input tmpv num with "Imeejutsja li vspyshki sveta pri vrashhenii kamnja?(1 - da, 2 - net)"

if tmpv = 1 then

let SCIN = true;

else

let SCIN = false;

endif;

LABEL: SCIINTILLATION

VAR: DISP

FIND: at 11,10 input tmpv num with "Imeejutsja li cvetovye bliki?(1 - da, 2 - net)"

if tmpv = 1 then

let DISP = true;

else

let DISP = false;

endif;

LABEL: DISPERSION

Правила:

RULE: R1

PRIORITY: 80

IF: SYMMETRY = true and POLISH = true and PROPORT < 50

THEN: CUTQUAL = true

REASON: Esli brilliant simmetrichen, imeet gladkie storony i pravil'nye proporcii rundisty, to kachestvo ogranki horoshee

RULE: R2

PRIORITY: 100

IF: SYMMETRY = false

THEN: CUTQUAL = false

REASON: Esli brilliant nesimmetrichen, to kachestvo ogranki neudovletvoritel'noe

RULE: R3

PRIORITY: 100

IF: POLISH = false

THEN: CUTQUAL = false

REASON: Esli brilliant imeet sherohovatosti, to kachestvo ogranki neudovletvoritel'noe

RULE: R4

PRIORITY: 100

IF: PROPORT > 50

THEN: CUTQUAL = false

REASON: Esli u brillianta nepravil'nye proporcii rundisty, to kachestvo ogranki neudovletvoritel'noe

RULE: R5

PRIORITY: 100

IF: SCIN = false and DISP = false

THEN: PLAY = false

REASON: Esli scinciljacija i dispersija ne projavljajutsja, to igra brillianta neudovletvoritel'na

RULE: R6

PRIORITY: 100

IF: SCIN = true

THEN: PLAY = true

REASON: Esli projavljaetsja scinciljacija, to igra brillianta schitaetsja horoshej

RULE: R7

PRIORITY: 100

IF: DISP = true

THEN: PLAY = true

REASON: Esli projavljaetsja dispersija, to igra brillianta

schitaetsja horoshej

RULE: R8

PRIORITY: 100

IF: FAMOUS = true

THEN: COLLECT = true

REASON: Esli u brillianta imetsja neobychnaja istorija, to brilliant imeet kollekcionnuju cennost'

RULE: R9

PRIORITY: 100

IF: UNUSUAL = true

THEN: COLLECT = true

REASON: Esli u brillianta byl izvestnyj vladelec, to brilliant imeet kollekcionnuju cennost'

RULE: R10

PRIORITY: 100

IF: FAMOUS = false and UNUSUAL = false

THEN: COLLECT = false

REASON: Esli u brillianta ne bylo ni izvestnogo vladelec, ni neobychnoj istorii, to u brilliant net kollekcionnoj cennosti

RULE: R11

PRIORITY: 80

IF: CUTQUAL = true

THEN: CATEG += true cf 70

REASON: Esli kachestvo ogranki horoshee, to brilliant otnositsja k vysokoj kategorii

RULE: R12

PRIORITY: 80

IF: CUTQUAL = false

THEN: CATEG -= true cf 70

REASON: Esli kachestvo ogranki plohoe, to brilliant otnositsja k nizkoj kategorii

RULE: R13

PRIORITY: 60

IF: COLOUR = 1

THEN: CATEG += true cf 40

REASON: Esli brilliant bescvetnyj, to brilliant otnositsja k vysokoj kategorii

RULE: R14

PRIORITY: 60

IF: COLOUR = 2

THEN: CATEG -= true cf 40

REASON: Esli brilliant imeet zheltovatyj cvet, to brilliant otnositsja k nizkoj kategorii

RULE: R15

PRIORITY: 60

IF: COLOUR = 3

THEN: CATEG += true cf 40

REASON: Esli brilliant imeet otlichnyj ot zheltogo cvet, to brilliant otnositsja k vysokoj kategorii

RULE: R16

PRIORITY: 60

IF: CRACKS = false and DOTS = false

THEN: PURITY = true

REASON: Esli otsutstvujut treshhiny i temnye tochki, to chistota brillanta horoshaja

RULE: R17

PRIORITY: 60

IF: CRACKS = true

THEN: PURITY = false

REASON: Esli imeejutsja treshhiny, to chistota brillanta neudovletvoritel'naja

RULE: R18

PRIORITY: 60

IF: DOTS = true

THEN: PURITY = false

REASON: Esli imeejutsja temnye tochki, to chistota brillanta neudovletvoritel'naja

RULE: R19

PRIORITY: 70

IF: PURITY = true

THEN: CATEG += true cf 50

REASON: Esli chistota brillanta horoshaja, to brilliant otnositsja k vysokoj kategorii

RULE: R20

PRIORITY: 70

IF: PURITY = false

THEN: CATEG -= true cf 50

REASON: Esli chistota brillanta neudovletvoritel'naja, to brilliant otnositsja k nizkoj kategorii

RULE: R21

PRIORITY: 60

IF: PLAY = true

THEN: CATEG += true cf 30

REASON: Esli igra brillianta horoshaja, to brilliant otnositsja k vysokoj kategorii

RULE: R22

PRIORITY: 60

IF: PLAY = false

THEN: CATEG -= true cf 30

REASON: Esli igra brillianta horoshaja, to brilliant otnositsja k nizkoj kategorii

RULE: R23

PRIORITY: 100

IF: COLLECT = true

THEN: CATEG += true cf 100

REASON: Esli brilliant imeet kollekcionnuju cennost', to brilliant otnositsja k vysokoj kategorii

RULE: R24

PRIORITY: 90

IF: WEIGHT <= 1

THEN: CATEG -= true cf 70

REASON: Esli brilliant imeet nebol'shoj ves, to brilliant otnositsja k nizkoj kategorii

RULE: R25

PRIORITY: 90

IF: WEIGHT > 1 and WEIGHT <=3

THEN: CATEG += true cf 70

REASON: Esli brilliant imeet srednij ves, to brilliant otnositsja k vysokoj kategorii

RULE: R26

PRIORITY: 90

IF: WEIGHT > 3

THEN: CATEG += true cf 75

REASON: Esli brilliant imeet bol'shoj ves, to brilliant otnositsja k vysokoj kategorii

Действия в начале работы:

INITIAL:

form main

at 10,25 put "***************************"

at 11,25 put "Expert system"

at 12,25 put "Brilliant CATEG"

at 13,25 put "press anykey"

at 14,25 put "***************************"

endform

clear;

e.trac ="n"

e.sord = "ph"

e.rigr = "a"

e.tryp ="s"

e.cfva = "pp"

e.lnum = 5

e.deci = 0

e.lstr = 75

CATEG = UNKNOWN

PURITY = UNKNOWN

COLLECT = UNKNOWN

CUTQUAL = UNKNOWN

PLAY = UNKNOWN

FLUOR = UNKNOWN

CRACKS = UNKNOWN

DOTS = UNKNOWN

COLOR = UNKNOWN

SCIN = UNKNOWN

DISP = UNKNOWN

FAMOUS = UNKNOWN

UNUSUAL = UNKNOWN

SYMMETRY = UNKNOWN

POLISH = UNKNOWN

PROPORT = UNKNOWN

WEIGHT = UNKNOWN

putform main;

wait;

clear;

Действия по завершению работы:

let e.lnum= 3;

clear;

if hicf(CATEG) > 50

at 12,10 output "Kategoriya brillianta vysokoya. Factor uverennosti ", hicf(CATEG);

else

at 12,10 output "Kategoriya brillianta nizkaya. Factor uverennosti ", 100 - hicf(CATEG);

endif;