Лабораторная работа 2 (Лабораторная работа 2)

Посмотреть архив целиком

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

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

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

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









Лабораторная работа №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;


Примеры работы

  1. Хороший случай

Результат:

Использованные правила:

Расчет коэффицентов:

cftrue = (70*100) / 100 + (70*100) / 100 – (70*70)/100 +

50 – (91 * 50) /100 +

40 - (95.5 * 40) +

30 – (97.3*30) /100 = 98.11 ≈98

  1. Плохой случай

Результат:

Использованные правила:

Расчет коэффицентов:

cftrue (-)= (70*100) / 100 + (50*100) / 100 – (70*50)/100 +

40 – (85 * 40)/100 +

30 – (30 * 91)/100 = 93.7


cftrue (+)= (70*100/100)


cftrue = cftrue (+) * (1 - cftrue (-)) / 100 =70 * 6.3 /100 = 4.41

1 – cftrue ≈ 95


  1. Средний случай

Результат:

Использованные правила:

Расчет коэффицентов:

cftrue (-)= (70*100) / 100 + (30*100) / 100 – (70*50)/100 = 65


cftrue (+)= (70*100)/100 + (50*100)/100 – (70*50)/100 +

40 – (85*40)/100 = 91


cftrue = cftrue (+) * (1 - cftrue (-)) / 100 =85* 35 /100 = 29.75

1 – cftrue ≈81



  1. Исходные данные с коэффицентами уверенности

Пусть переменные CUTQUAL, PURITY, PLAY задаются с коэффицентом уверенности:

CUTQUAL = true cf 50

PURITY = false cf 50

PLAY = false cf 25

Переменные WEIGHT и COLOUR имеют следующие значения:

WEIGHT = 3

COLOUR = 1



Использованные правила:

cftrue (-)= (25*100) / 100 + (8*100) / 100 – (25*8)/100 = 31


cftrue (+)= (70*100)/100 + (35*100)/100 – (70*35)/100 +

40 – (80.5*40)/100 = 88.3


cftrue = cftrue (+) * (1 - cftrue (-)) / 100 =88.3* 69 /100 = 60.927≈ 61


Случайные файлы

Файл
70978-1.rtf
97300.rtf
96540.rtf
138411.rtf
141616.rtf




Чтобы не видеть здесь видео-рекламу достаточно стать зарегистрированным пользователем.
Чтобы не видеть никакую рекламу на сайте, нужно стать VIP-пользователем.
Это можно сделать совершенно бесплатно. Читайте подробности тут.