Інтелектуальна система діагностики онкопатологій

Комп’ютеризовані діагностичні системи в медицині. Аналітичний огляд методів розпізнавання зображень. Інформаційне та програмне забезпечення інтелектуальної комп’ютеризованої системи діагностування онкопатологій, оцінка її функціональної ефективності.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык украинский
Дата добавления 05.10.2013
Размер файла 2,3 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Моделювання ієрархічного алгоритму екзамену підтвердило правильність та коректність функціонування інтелектуальної КСД онкопатологій.

ВИСНОВКИ

1. В роботі створено математичну модель та алгоритм навчання інтелектуальної КСД онкопатологій за інформаційно-екстремальною інтелектуальною технологією. В процесі проектування використано парадигму ООП, що дозволяє гнучко модифікувати програмний код при зміні алгоритму навчання.

2. Введення в контур навчання СППР алгоритму паралельно-послідовної оптимізації дозволило підвищити значення узагальненого критерію функціональної ефективності і для лінійного, і для ієрархічного вирішального правила, що є оцінкою достовірності правильного функціонування системи на етапі екзамену. Використання ієрархічного вирішального правила дозволило уникнути проблеми багато вимірності шляхом навчання узагальнення групи класів.

3. Отримане значення усередненого критерію функціональної ефективності не досягає безпомилкового, проте для бінарного ієрархічного вирішального правила в 4 рази вища за КФЕ лінійного вирішального правила . Використання ієрархічного вирішального правила зменшує перетин областей локалізації ознак, асоційованих з класами розпізнавання. Для підвищення достовірності функціонування СППР введено також додаткові контури оптимізації параметрів функціонування, такі як вибір базового класу на кожному рівні ієрархії, необхідного для розрахунку СКД на ОР Введення контуру оптимізації словника ознак повинно зменшити кількість неінформативних ознак та збільшити різноманітність між реалізаціями класів розпізнавання, що дозволить підвищити достовірність функціонування СППР.

СПИСОК ВИКОРИСТАНОЇ ЛІТЕРАТУРИ

1. Краснопоясовський А.С. Інформаційний синтез інтелектуальних систем керування: підхід, що грунтується на методі функціонально-статистичних випробувань.- Суми: Видавництво СумДУ, 2004.- 261 с.

2. Васильев В. И. Распознающие системы. Справочник. 2-е изд., перераб. и доп.Киев: Наукова думка, 1983. 422 с.

3. Анисимов Б. В., Курганов В. Д., Злобин В. К. Распознавание и цифровая обработка изображений.М.: Высшая школа, 1983.-256 с.

4. Прикладная статистика: Классификация и снижение размерности. Справ. изд./ С.А. Айвазян, В.М. Бухштабер, И.С. Енюков, Л.Д. Мешалкин / Под ред. С.А. Айвазяна. М.: Финансы и статистика, 1989 607 с.

5. Власов В.В. Введение в доказательную медицину. - М.: Медиа Сфера, 2001. - 392 с.

6. Флетчер Р., Флетчер С., Вагнер Э. Клиническая эпидемиология. Основы доказательной медицины / Пер. с англ. - М.: Изд-во Медиа Сфера, 1998. - 352 с.

7. Эшби У.Р. Конструкция мозга. Происхождение адаптивного поведения: Пер. с англ./ Под ред. П.К.Анохина и В.А.Шидловского. - М.:ИИЛ, 1965. -480 с.

8. Довбиш А.С. Основи проектування інтелектуальних систем: Навчальний посібник.- Суми: Видавництво Сум ДУ, 2009.- 171 с.

9. Краснопоясовський А. С. Оптимізація контейнерів класів розпізнаванняза методом функціонально-статистичних випробувань//Автоматизированные системы управления и приборы автоматики, 2002. Вып. 119. С. 6976.

10. Анохин П.К. Биология и нейрофизиология условного рефлекса. -М.: Медицина, 1968. - 547 с.

11. Путятин Е.П., Аверин С.И. Обработка изображений в робототехнике. - М.:Машиностроение, 1990. - 320 с.

12. Brazzi L., Bertolini G., Minelli C. Meta-analysis versus randomised controlled trials in intensive care medicine // Intens. Care Med. - 2000. - Vol. 26. - P. 239-241.

13. Cook D.J., Mulrow C.D. Haynes R.B. Systematic reviews: Synthesis of best evidence for clinical decisions. Ann Intern Med 1997; 126:376 - 380.

14. Isaacs D., Fitzgerald D. Seven alternatives to evidence based medicine: a questionnaire survey // BMJ. - 1998. - Vol. 316. - P. 361 - 365.

15. Краснопоясовський А. С., Черниш А.В., Сластушевський О.Ю. Про вибір критерію функціональної ефективності системи розпізнавання, що навчається // Радиоэлектроника и информатика, 2001. №4.

16. Кульбак С. Теория информации и статистика: Пер. с англ.М.: Наука, 1967.

ДОДАТОК

комп'ютерний діагностика онкопатологія

ТЕКСТ ПРОГРАМИ

Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ExtCtrls, StdCtrls, Buttons, ExtDlgs, ComCtrls,math, Grids,

TeEngine, Series, TeeProcs, Chart, jpeg;

type

TForm1 = class(TForm)

PageControl1: TPageControl;

TabSheet1: TTabSheet;

TabSheet2: TTabSheet;

TabSheet3: TTabSheet;

TabSheet4: TTabSheet;

Panel2: TPanel;

Button2: TButton;

Button3: TButton;

OpenPictureDialog1: TOpenPictureDialog;

Label4: TLabel;

Bevel5: TBevel;

Edit2: TEdit;

Label5: TLabel;

Label6: TLabel;

Edit3: TEdit;

Edit4: TEdit;

Image2: TImage;

Button1: TButton;

UpDown1: TUpDown;

Edit5: TEdit;

Image3: TImage;

Label7: TLabel;

Button4: TButton;

Panel5: TPanel;

Label10: TLabel;

ProgressBar2: TProgressBar;

ProgressBar4: TProgressBar;

ProgressBar5: TProgressBar;

Label12: TLabel;

Label14: TLabel;

TabSheet5: TTabSheet;

SpeedButton4: TSpeedButton;

SpeedButton5: TSpeedButton;

SpeedButton6: TSpeedButton;

Edit6: TEdit;

Image4: TImage;

Label17: TLabel;

Image5: TImage;

Label18: TLabel;

Edit7: TEdit;

UpDown2: TUpDown;

Button6: TButton;

StringGrid1: TStringGrid;

Label19: TLabel;

PageControl2: TPageControl;

TabSheet6: TTabSheet;

TabSheet7: TTabSheet;

TabSheet8: TTabSheet;

TabSheet9: TTabSheet;

StringGrid2: TStringGrid;

Label20: TLabel;

Edit8: TEdit;

Label21: TLabel;

Label22: TLabel;

Label23: TLabel;

StringGrid3: TStringGrid;

StringGrid4: TStringGrid;

StringGrid5: TStringGrid;

Chart3: TChart;

Series3: TLineSeries;

Series4: TLineSeries;

Series5: TLineSeries;

Label24: TLabel;

StringGrid6: TStringGrid;

Panel6: TPanel;

Label25: TLabel;

Edit9: TEdit;

UpDown3: TUpDown;

Image6: TImage;

Image7: TImage;

Label26: TLabel;

Label27: TLabel;

Label28: TLabel;

Edit10: TEdit;

GroupBox5: TGroupBox;

Chart4: TChart;

BarSeries2: TBarSeries;

Label29: TLabel;

Edit11: TEdit;

UpDown4: TUpDown;

StringGrid7: TStringGrid;

Label30: TLabel;

Series6: TBarSeries;

Label1: TLabel;

Edit1: TEdit;

Image1: TImage;

SpeedButton3: TSpeedButton;

SpeedButton2: TSpeedButton;

SpeedButton1: TSpeedButton;

GroupBox2: TGroupBox;

RadioButton3: TRadioButton;

RadioButton4: TRadioButton;

GroupBox1: TGroupBox;

RadioButton1: TRadioButton;

RadioButton2: TRadioButton;

Image8: TImage;

Label2: TLabel;

Chart1: TChart;

Series1: TBarSeries;

Chart2: TChart;

BarSeries1: TBarSeries;

Series2: TBarSeries;

TabSheet10: TTabSheet;

Bevel1: TBevel;

Button5: TButton;

Edit13: TEdit;

UpDown6: TUpDown;

Button7: TButton;

Label3: TLabel;

Label8: TLabel;

ProgressBar1: TProgressBar;

Button8: TButton;

Bevel2: TBevel;

Label9: TLabel;

Edit12: TEdit;

Label11: TLabel;

Label13: TLabel;

Label15: TLabel;

Edit14: TEdit;

Edit15: TEdit;

Label16: TLabel;

procedure SpeedButton3Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure SpeedButton2Click(Sender: TObject);

procedure SpeedButton1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure Edit5Change(Sender: TObject);

procedure Button4Click(Sender: TObject);

procedure SpeedButton4Click(Sender: TObject);

procedure SpeedButton5Click(Sender: TObject);

procedure SpeedButton6Click(Sender: TObject);

procedure Button6Click(Sender: TObject);

procedure Edit9Change(Sender: TObject);

procedure Button5Click(Sender: TObject);

procedure Edit11Change(Sender: TObject);

procedure Edit12Change(Sender: TObject);

procedure Button7Click(Sender: TObject);

procedure Button8Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

type ai=object

private

n_str:word;//кол-во реализаций

n_stolb:word;//кол-во признаков

m:byte;//кол-во классов распознавания

Y:array of array of array of byte;

BM:array of array of array of byte;

EV:array of array of byte;

name:array of string;

vdk,ndk,mid:array of byte;

EM:array of real;

EM_opt:array of real;

SK:array of array of array of word;

PARA:array of word;

delta:byte;

base:byte;

base_opt:byte;

delta_opt:byte;

delta_opt_mas:array of byte;

delta_opt_m2:array of byte;

E_opt:real;

D_opt:array of word;

d_:array of word;

public

procedure create(var a:ai);

procedure add(path:string);

procedure clean;

procedure make_Y;

procedure show(number:byte; var image:timage);

//procedure make_ev;

//procedure show(param:byte);

//procedure exp;

procedure make_SKD(var a:ai);

procedure make_SKD2(var a:ai);

procedure make_SK(var a:ai);

procedure TEACH(var zt:ai);

procedure TEACH2(var a:ai);

procedure make_EV(var a:ai);

procedure make_X(var a:ai);

procedure make_PARA(var a:ai);

procedure make_D(var a:ai);

procedure make_D2(var a:ai;num:byte);

procedure reliz(var a:ai);

//procedure binary;

//procedure opt;

end;

type ier=object

count:byte;

strata:array of ai;

descr:array of array of array of byte;//str_count,clust_count,class_count

procedure make_strata(var a:ier);

procedure make_Y(var a:ier);

end;

var

Form1: TForm1;

data,ex:ai;tree:ier;

b_x:array of array of tbitmap;

i_count:integer;

ie:boolean;

implementation

{$R *.dfm}

procedure ier.make_Y(var a:ier);

var i,j,k,c,c1,c2,c3:integer;

begin

setlength(a.strata,count);//кол-во классификаторов

for i:=0 to count -1 do begin

a.strata[i].m:=length(a.descr[i]);

setlength(a.strata[i].Y,a.strata[i].m);

setlength(a.strata[i].BM,a.strata[i].m);

setlength(a.strata[i].EV,a.strata[i].m);

setlength(a.strata[i].name,a.strata[i].m);

setlength(a.strata[i].EM,a.strata[i].m);

setlength(a.strata[i].EM_opt,a.strata[i].m);

setlength(a.strata[i].SK,a.strata[i].m);

setlength(a.strata[i].PARA,a.strata[i].m);

setlength(a.strata[i].D_opt,a.strata[i].m);

setlength(a.strata[i].d_,a.strata[i].m);

for j:=0 to a.strata[i].m-1 do begin

k:=length(a.descr[i,j])*data.n_str;

setlength(a.strata[i].Y[j],k,data.n_stolb);

setlength(a.strata[i].BM[j],k,data.n_stolb);

c:=0;

for k:=0 to length (a.descr[i,j])-1 do

for c1:=0 to data.n_str-1 do begin

a.strata[i].Y[j,c]:=data.Y[(a.descr[i,j,k]),c1];

inc(c);

end;

end;

end;

//showmessage('ok!');

end;

procedure ier.make_strata(var a:ier);

begin

count:=5;

form1.UpDown6.Min:=0;

form1.UpDown6.Max:=count-1;

setlength(a.descr,count);

setlength(a.strata,count);

setlength(a.descr[0],3);

setlength(a.descr[1],2);

setlength(a.descr[2],2);

setlength(a.descr[3],2);

setlength(a.descr[4],2);

{}

setlength(a.descr[0,0],3);

setlength(a.descr[0,1],1);

setlength(a.descr[0,2],3);

a.descr[0,0,0]:=0;

a.descr[0,0,1]:=1;

a.descr[0,0,2]:=2;

a.descr[0,1,0]:=3;

a.descr[0,2,0]:=4;

a.descr[0,2,1]:=5;

a.descr[0,2,2]:=6;

{}

setlength(a.descr[1,0],2);

setlength(a.descr[1,1],1);

a.descr[1,0,0]:=0;

a.descr[1,0,1]:=1;

a.descr[1,1,0]:=2;

{}

setlength(a.descr[2,0],1);

setlength(a.descr[2,1],1);

a.descr[2,0,0]:=0;

a.descr[2,1,0]:=1;

{}

setlength(a.descr[3,0],2);

setlength(a.descr[3,1],1);

a.descr[3,0,0]:=5;

a.descr[3,0,1]:=6;

a.descr[3,1,0]:=4;

{}

setlength(a.descr[4,0],1);

setlength(a.descr[4,1],1);

a.descr[4,0,0]:=5;

a.descr[4,1,0]:=6;

{}

end;

procedure ai.make_D2(var a:ai;num:byte);

var d,i,j,k:integer;

G:array of integer;

E,D1,D2,alpha,beta:real;

function Shennon(k1,k2,k3,k4:integer):real;

var sl1,sl2,sl3,sl4:real;

begin

if (k1=0)then sl1:=0 else sl1:=k1/(k1+k3)*Log2(k1/(k1+k3));

if (k2=0)then sl2:=0 else sl2:=k2/(k2+k4)*Log2(k2/(k2+k4));

if (k3=0)then sl3:=0 else sl3:=k3/(k1+k3)*Log2(k3/(k1+k3));

if (k4=0)then sl4:=0 else sl4:=k4/(k2+k4)*Log2(k4/(k2+k4));

result:=1+(1/2)*(sl1+sl2+sl3+sl4);

end;

function Kulbak(k2,k3,n:integer):real;

var sl1,sl2,sl3,sl4:real;

begin

try

sl1:=2*n+0.0000000000001-(k2+k3);

sl2:=k2+k3+0.0000000000001;

sl3:=(1/n)*Log2(sl1/sl2);

sl4:=sl3*(n-(k2+k3));

result:=sl4;

except

result:=0;

end;

end;

procedure K1(n,d:integer;var a1,a2,a3,a4:integer);// кол-во своих реализаций в n_str классе

var i,j:integer;

s:byte;

begin

a1:=0;

a2:=0;

a3:=0;

a4:=0;

for i:=0 to length(a.SK[n,0])-1 do begin

if a.SK[n,0,i]<=d then inc(a1)else inc(a2);

if a.SK[n,1,i]<=d then inc(a3)else inc(a4);

end;

end;

begin

form1.StringGrid7.Cells[0,0]:='радіус';

form1.StringGrid7.Cells[1,0]:='D1';

form1.StringGrid7.Cells[2,0]:='alpha';

form1.StringGrid7.Cells[3,0]:='D2';

form1.StringGrid7.Cells[4,0]:='beta';

form1.StringGrid7.Cells[5,0]:='KFE';

form1.StringGrid7.RowCount:=data.n_stolb;

form1.Series6.Clear;

setlength(a.EM,a.m);

// setlength(data.D_opt,data.m);

setlength(G,4);

k:=num;

for d:=1 to a.n_stolb do begin // обходим все радиусы

K1(k,d,G[0],G[1],G[2],G[3]);

// K1(k,d,obj.para[k],G[3],G[4]);

alpha:=G[1]/length(a.SK[k,0]);

D1:=G[0]/length(a.SK[k,0]);

beta:=G[2]/length(a.SK[k,0]);

D2:=G[3]/length(a.SK[k,0]);

if form1.RadioButton1.Checked=true then E:=Shennon(G[0],G[1],G[2],G[3])

else if form1.RadioButton2.Checked=true then E:=Kulbak(G[1],G[2],length(a.SK[k,0]));

{ if E>obj.EM[k]then begin}

if ((D1>0.5)and(D2>0.5))then

form1.Series6.AddXY(d,E,'',clblack) else form1.Series6.AddXY(d,E,'',clwhite);

form1.StringGrid7.Cells[0,d]:=inttostr(d);

form1.StringGrid7.Cells[1,d]:=floattostr(d1);

form1.StringGrid7.Cells[2,d]:=floattostr(alpha);

form1.StringGrid7.Cells[3,d]:=floattostr(d2);

form1.StringGrid7.Cells[4,d]:=floattostr(beta);

form1.StringGrid7.Cells[5,d]:=floattostr(E);

end;

end;

procedure ai.reliz(var a:ai);

var

bin:array of byte;

i,j,k,sum:integer;

i1,j1,k1,l1:integer;

begin

form1.Edit10.Text:=floattostr(a.E_opt);

setlength(b_x,a.m,2);

form1.Series3.Clear;

form1.Series4.Clear;

form1.Series5.Clear;

form1.Edit8.Text:=inttostr(a.base_opt);

setlength(a.delta_opt_m2,a.n_stolb);

setlength(bin,a.n_stolb);

form1.StringGrid2.RowCount:=a.m+1;

form1.StringGrid3.ColCount:=a.n_stolb;

form1.StringGrid4.ColCount:=a.n_stolb;

form1.StringGrid5.ColCount:=a.n_stolb;

form1.StringGrid2.Cells[0,0]:='№ Класу';

form1.StringGrid2.Cells[1,0]:='КФЕ';

form1.StringGrid2.Cells[2,0]:='Оптим. рад.';

for i:=1 to a.m do begin

form1.StringGrid2.Cells[0,i]:=inttostr(i);

form1.StringGrid2.Cells[1,i]:=floattostr(a.em_opt[i-1]);

form1.StringGrid2.Cells[2,i]:=inttostr(a.d_opt[i-1]);

end;

for i:=0 to data.n_stolb-1 do

form1.StringGrid3.Cells[i,0]:=inttostr(a.delta_opt_mas[i]);

a.base:=a.base_opt;

for i:=0 to a.n_stolb-1 do

a.delta_opt_m2[i]:=a.delta_opt_mas[i];

a.make_SKD2(a); //!!!

for i:=0 to a.n_stolb-1 do begin

form1.StringGrid4.Cells[i,0]:=inttostr(a.ndk[i]);

form1.StringGrid5.Cells[i,0]:=inttostr(a.vdk[i]);

form1.Series3.AddXY(i+1,a.mid[i]);

form1.Series4.AddXY(i+1,a.ndk[i]);

form1.Series5.AddXY(i+1,a.vdk[i]);

end;

a.make_X(a);

a.make_EV(a);

{}

for i:=0 to a.m-1 do begin

b_x[i,0]:=tbitmap.Create;

b_x[i,0].Width:=a.n_stolb;

b_x[i,0].Height:=Length(a.Y);

for j:=0 to Length(a.Y)-1 do

for k:=0 to a.n_stolb-1 do

if a.BM[i,j,k]=1 then

b_x[i,0].Canvas.Pixels[k,j]:=clblack else b_x[i,0].Canvas.Pixels[k,j]:=clwhite;

//Image6.Picture.Bitmap.Assign(b);

b_x[i,1]:=tbitmap.Create;

b_x[i,1].Width:=a.n_stolb;

b_x[i,1].Height:=20;

for j:=0 to 20-1 do

for k:=0 to a.n_stolb-1 do

if a.EV[i,k]=1 then

b_x[i,1].Canvas.Pixels[k,j]:=clblack else b_x[i,1].Canvas.Pixels[k,j]:=clwhite;

//Image7.Picture.Bitmap.Assign(b);

end;

{}

a.make_SK(a);

form1.UpDown3.Max:=a.m-1;

form1.UpDown4.Max:=a.m-1;

a.make_PARA(a);

form1.StringGrid6.Cells[0,1]:='Клас-сусід';

form1.StringGrid6.Cells[1,0]:='№ Класу';

for i:=0 to a.m-1 do begin

form1.StringGrid6.Cells[i+1,0]:=inttostr(i+1);

form1.StringGrid6.Cells[i+1,1]:=inttostr(a.para[i]+1);

end;

{}

{}

end;

procedure ai.make_D(var a:ai);

var d,i,j,k:integer;

G:array of integer;

E,D1,D2,alpha,beta:real;

function Shennon(k1,k2,k3,k4:integer):real;

var sl1,sl2,sl3,sl4:real;

begin

if (k1=0)then sl1:=0 else sl1:=k1/(k1+k3)*Log2(k1/(k1+k3));

if (k2=0)then sl2:=0 else sl2:=k2/(k2+k4)*Log2(k2/(k2+k4));

if (k3=0)then sl3:=0 else sl3:=k3/(k1+k3)*Log2(k3/(k1+k3));

if (k4=0)then sl4:=0 else sl4:=k4/(k2+k4)*Log2(k4/(k2+k4));

result:=1+(1/2)*(sl1+sl2+sl3+sl4);

end;

function Kulbak(k2,k3,n:integer):real;

var sl1,sl2,sl3,sl4:real;

begin

try

sl1:=2*n+0.0000000000001-(k2+k3);

sl2:=k2+k3+0.0000000000001;

sl3:=(1/n)*Log2(sl1/sl2);

sl4:=sl3*(n-(k2+k3));

result:=sl4;

except

result:=0;

end;

end;

procedure K1(n,d:integer;var a1,a2,a3,a4:integer);// кол-во своих реализаций в n_str классе

var i,j:integer;

s:byte;

begin

a1:=0;

a2:=0;

a3:=0;

a4:=0;

for i:=0 to length(a.SK[n,0])-1 do begin

if a.SK[n,0,i]<=d then inc(a1)else inc(a2);

if a.SK[n,1,i]<=d then inc(a3)else inc(a4);

end;

end;

begin

setlength(a.EM,a.m);

// setlength(data.D_opt,data.m);

setlength(G,4);

form1.ProgressBar4.Min:=0;

form1.ProgressBar4.Max:=25*data.m;

form1.ProgressBar4.Position:=0;

for k:=0 to a.m-1 do begin// оптимизация для к-того класса

E:=0;

form1.ProgressBar4.Position:=(k+1)*25;

a.EM[k]:=0;

a.d_[k]:=0;

for d:=1 to data.n_stolb do begin // обходим все радиусы

K1(k,d,G[0],G[1],G[2],G[3]);

// K1(k,d,obj.para[k],G[3],G[4]);

alpha:=G[1]/length(a.SK[k,0]);

D1:=G[0]/length(a.SK[k,0]);

beta:=G[2]/length(a.SK[k,0]);

D2:=G[3]/length(a.SK[k,0]);

if form1.RadioButton1.Checked=true then E:=Shennon(G[0],G[1],G[2],G[3])

else if form1.RadioButton2.Checked=true then E:=Kulbak(G[1],G[2],length(a.SK[k,0]));

{ if E>obj.EM[k]then begin}

if ((D1>0.5)and(D2>0.5))then begin

if E>a.EM[k]then begin

a.D_[k]:=d;

a.EM[k]:=E;

{obj.A[k]:=alpha;

obj.B[k]:=beta;

obj.D1[k]:=D1;

obj.D2[k]:=D2;}

end;

end;

{begin}

{ obj.D[k]:=-1;

end;}

{obj.EM[k]:=E;

obj.A[k]:=alpha;

obj.B[k]:=beta;

obj.D1[k]:=D1;

obj.D2[k]:=D2;}

// if k=1 then chart3.Series[0].AddXY(d,obj.em[k],'',kolor);

{end;}

end;

end;

end;

procedure ai.make_SK(var a:ai);

var i,j,k,sum1,sum2:integer;gamma:integer;

c1,c2,c3,temp:integer;

begin

setlength(a.SK,a.m,2);

//setlength(data.SK,data.m,2,data.n_str);

for k:=0 to a.m-1 do begin//массив SK для к-того класса

setlength(a.SK[k,0],length(a.Y[k]));

setlength(a.SK[k,1],length(a.Y[a.para[k]]));

for i:=0 to length(a.Y[k])-1 do begin

sum1:=0;

for j:=0 to a.n_stolb-1 do

if a.EV[k,j]<>a.BM[k,i,j] then inc(sum1);

a.SK[k,0,i]:=sum1;

end;

for i:=0 to length(a.Y[a.PARA[k]])-1 do begin

sum2:=0;

for j:=0 to a.n_stolb-1 do

if a.EV[k,j]<>a.BM[a.PARA[k],i,j] then inc(sum2);

a.SK[k,1,i]:=sum2;

end;

gamma:=min(length(a.Y[k]),length(a.Y[a.para[k]]));

// сортировка по возрастанию.

for c1 :=1 to length(a.SK[k,1])-1 do begin

c2:=a.sk[k,1,c1];

c3:=c1-1;

while((c3>=0)and(a.sk[k,1,c3]>c2)) do begin

a.sk[k,1,c3+1]:=a.sk[k,1,c3];

dec(c3);//dec(i);

a.sk[k,1,c3+1]:=c2;

end;

end;

//

setlength(a.sk[k,1],gamma);

// сортировка по возрастанию.

for c1 :=1 to length(a.SK[k,0])-1 do begin

c2:=a.sk[k,0,c1];

c3:=c1-1;

while((c3>=0)and(a.sk[k,0,c3]>c2)) do begin

a.sk[k,0,c3+1]:=a.sk[k,0,c3];

dec(c3);//dec(i);

a.sk[k,0,c3+1]:=c2;

end;

end;

//

if length(a.SK[k,0])>gamma then begin

for c1:=0 to gamma-1 do

a.SK[k,0,c1]:=a.SK[k,0,length(a.SK[k,0])-1-c1];

setlength(a.sk[k,0],gamma);

end;

end;

end;

procedure ai.make_PARA(var a:ai);

var i,j,k,d,d1:integer;

begin

setlength(a.PARA,a.m);

d1:=maxint;

for k:=0 to a.m-1 do begin //анализ для к-того класса

d:=0;

d1:=maxint;

for i:=0 to a.m-1 do begin //выбор класса для анализа расстояния

if i<>k then begin // не считать расстояние до самого себя

d:=0;

for j:=0 to a.n_stolb-1 do

if a.EV[k,j]<>a.EV[i,j]then inc(d);

if d<d1 then begin

d1:=d;

a.PARA[k]:=i;// номера классов нумер с нуля (по м-1)

end;

end;

end;

end;

end;

procedure ai.make_EV(var a:ai);

var i,j,k:integer;

sum:integer;

begin

setlength(a.EV,a.m,a.n_stolb);

for k:=0 to a.m-1 do

for i:=0 to a.n_stolb-1 do begin

a.EV[k,i]:=0;

sum:=0;

for j:=0 to length(a.Y[k])-1 do

sum:=sum+a.BM[k,j,i];

if sum/(length(a.Y[k]))<=0.5 then a.EV[k,i]:=0

else a.EV[k,i]:=1;

end;

end;

procedure ai.make_X(var a:ai);

var i,j,k:integer;

begin

for k:=0 to a.m-1 do

for i:=0 to length(a.Y[k])-1 do

for j:=0 to data.n_stolb-1 do

if ((a.Y[k,i,j]>=a.ndk[j])and(a.Y[k,i,j]<=a.vdk[j]))then

a.BM[k,i,j]:=1 else a.BM[k,i,j]:=0;

end;

procedure ai.make_SKD(var a:ai);

var i,j:integer;sum:longint;

s:string;

begin

setlength(a.mid,a.n_stolb);

setlength(a.ndk,a.n_stolb);

setlength(a.vdk,a.n_stolb);

for i:=0 to a.n_stolb-1 do begin

sum:=0;

for j:=0 to length(a.Y[a.base])-1 do

sum:=sum+Y[a.base,j,i];

a.mid[i]:=round(sum/length(a.Y[a.base]));

if (a.mid[i]+delta>255) then a.vdk[i]:=255 else

a.vdk[i]:=a.mid[i]+delta;

if (a.mid[i]-delta<0) then a.ndk[i]:=0 else

a.ndk[i]:=a.mid[i]-delta;

end;

end;

procedure ai.make_SKD2(var a:ai);

var i,j:integer;sum:integer;

s:string;

begin

setlength(a.mid,a.n_stolb);

setlength(a.ndk,a.n_stolb);

setlength(a.vdk,a.n_stolb);

for i:=0 to a.n_stolb-1 do begin

sum:=0;

for j:=0 to length(a.Y[a.base])-1 do

sum:=sum+a.Y[a.base,j,i];

a.mid[i]:=round(sum/length(a.Y[a.base]));

if (a.mid[i]+a.delta_opt_m2[i]>255) then a.vdk[i]:=255 else

a.vdk[i]:=a.mid[i]+a.delta_opt_m2[i];

if (a.mid[i]-a.delta_opt_m2[i]<0) then a.ndk[i]:=0 else

a.ndk[i]:=a.mid[i]-a.delta_opt_m2[i];

end;

end;

function distantion(m1,m2:array of byte;num:integer):word;//results: 1-continue;o-stop;

var i,j:word;

begin

j:=0;

for i:=0 to num-1 do

if (m1[i]<>m2[i]) then j:=1;

result:=j;

end;

{}{}{}{}{}{}{}{}{}

procedure ai.TEACH2(var a:ai);

var i,j,k:integer;

E:array of real;

bs,dl:integer;

E1:real;

mas1,mas2:array of byte;

s:word;

temp:byte;

E_bs:real;

rr:byte;

sst:integer;

begin

setlength(a.EM_opt,data.m);

setlength(mas1,a.n_stolb);

setlength(a.delta_opt_m2,a.n_stolb);

form1.Series2.Clear;

//data.E_opt:=0;

E1:=0;

E_bs:=0;

form1.ProgressBar2.Min:=0;

form1.ProgressBar2.Max:=25*150;

form1.ProgressBar2.Position:=0;

{}

for i:=0 to a.n_stolb-1 do begin

mas1[i]:=1;

//mas2[i]:=1;

a.delta_opt_m2[i]:=a.delta_opt_mas[i];

end;

{}

a.base:=a.base_opt;

sst:=strtoint(form1.Edit15.text)+1;

while (sst>0) do begin

dec(sst);

// while (distantion(mas1,a.delta_opt_m2,a.n_stolb)=1)do begin

for i:=0 to a.n_stolb-1 do

mas1[i]:=a.delta_opt_m2[i];

for s:=0 to a.n_stolb-1 do begin

temp:=a.delta_opt_m2[s];

for dl:=0 to 150 do begin

form1.ProgressBar2.Position:=(dl+1)*25;

a.delta_opt_m2[s]:=dl;

// for i:=0 to data.n_stolb-1 do

// data.delta_opt_m2[i]:=mas1[i];

a.make_SKD2(a); //!!!!!!make_skd2!!!!!

a.make_X(a);

a.make_EV(a);

a.make_PARA(a);

a.make_SK(a);

a.make_D(a);

E1:=0;

rr:=1;

for i:=0 to a.m-1 do begin

E1:=E1+a.EM[i];

if a.EM[i]=0 then rr:=0;

end;

E1:=E1/a.m;

if ((E1>a.E_opt)and(rr=1)) then begin

form1.Series2.AddY(E1,'',clgreen);

for i:=0 to a.m-1 do

a.EM_opt[i]:=a.em[i];

for i:=0 to a.m-1 do

a.D_opt[i]:=a.D_[i];

a.E_opt:=E1;

temp:=dl;

a.delta_opt_mas[s]:=dl;

// mas1[s]:=dl;

//data.delta_opt:=data.delta;

end else a.delta_opt_m2[s]:=temp;

end;

end;

for i:=0 to a.n_stolb-1 do

a.delta_opt_m2[i]:=a.delta_opt_mas[i];

end;

//showmessage('E_maks= '+floattostr(data.E_opt));

end;

{}{}{}{}{}{}{}{}{}

procedure ai.TEACH(var zt:ai);

var i,j,k:integer;

E:array of real;

bs,dl:integer;

E1:real;

rr:byte;

begin

zt.n_stolb:=data.n_stolb;

setlength(zt.EM_opt,zt.m);

setlength(zt.d_,zt.m);

setlength(zt.D_opt,zt.m);

setlength(zt.delta_opt_mas,zt.n_stolb);

form1.Series1.Clear;

zt.E_opt:=0;

E1:=0;

{}

form1.ProgressBar2.Min:=0;

form1.ProgressBar2.Max:=25*150;

form1.ProgressBar2.Position:=0;

{}

for bs:=0 to zt.m-1 do begin

zt.base:=bs;

for dl:=0 to 150 do begin

zt.delta:=dl;

zt.make_SKD(zt);

zt.make_X(zt);

zt.make_EV(zt);

zt.make_PARA(zt);

zt.make_SK(zt);

zt.make_D(zt);

E1:=0;

rr:=1;

for i:=0 to zt.m-1 do begin

E1:=E1+zt.EM[i];

if zt.EM[i]=0 then rr:=0;

end;

E1:=E1/zt.m;

form1.Series1.AddXY(dl,E1);

if ((E1>zt.E_opt)and(rr=1)) then begin

zt.E_opt:=E1;

zt.delta_opt:=zt.delta;

zt.base_opt:=zt.base;

for i:=0 to zt.m-1 do

zt.EM_opt[i]:=zt.em[i];

for i:=0 to zt.m-1 do

zt.D_opt[i]:=zt.d_[i];

end;

end;

for i:=0 to zt.n_stolb-1 do

zt.delta_opt_mas[i]:=zt.delta_opt;

end;

//showmessage('E_maks= '+floattostr(data.E_opt));

end;

procedure ai.show(number:byte; var image:timage);

var i,j,k:integer;b:tbitmap;

begin

i:=number;

b:=tbitmap.Create;

b.Width:=n_stolb;

b.Height:=n_str;

for j:=0 to n_str-1 do

for k:=0 to n_stolb-1 do

b.Canvas.Pixels[k,j]:=rgb(Y[i-1,j,k],Y[i-1,j,k],Y[i-1,j,k]);

Image.Picture.Bitmap.Assign(b);

b.Destroy;

end;

procedure ai.make_Y;

var b:tbitmap;i,j,k:integer;

begin

//data.n_stolb:=3;

//data.n_str:=3;

form1.Button2.Enabled:=false;

setlength(Y,m,n_str,n_stolb);

setlength(BM,m,n_str,n_stolb);

b:=tbitmap.Create;

for i:=0 to m-1 do begin

b.LoadFromFile(name[i]);

for j:=0 to n_str-1 do

for k:=0 to n_stolb-1 do

Y[i,j,k]:=getrvalue(b.Canvas.Pixels[k,j]);

end;

b.Destroy;

end;

procedure ai.clean;

begin

m:=0;

n_str:=0;

n_stolb:=0;

setlength(name,0);

form1.Edit2.Text:='0';

form1.Edit3.Text:='0';

form1.Edit4.Text:='0';

form1.SpeedButton2.Click;

end;

procedure ai.create(var a:ai);

begin

a.m:=0;

end;

procedure ai.add(path:string);

begin

if length(path)=0 then exit;

if((n_str=0)or(n_stolb=0))then begin

n_str:=form1.Image1.Picture.Bitmap.Height;

n_stolb:=form1.Image1.Picture.Bitmap.width;

end;

inc(m);

setlength(name,m);

name[m-1]:=path;

form1.Edit2.Text:=inttostr(m);

form1.Edit3.Text:=inttostr(n_str);

form1.Edit4.Text:=inttostr(n_stolb);

end;

procedure TForm1.SpeedButton3Click(Sender: TObject);

var s:string;

begin

if form1.OpenPictureDialog1.Execute then s:=form1.OpenPictureDialog1.FileName;

if length(s)=0 then exit else begin

form1.Edit1.Text:=s;

form1.Image1.Picture.LoadFromFile(s);

end;

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

form1.Image1.Picture.Bitmap.Assign(form1.Image2.Picture.Bitmap);

form1.Image3.Picture.Bitmap.Assign(form1.Image2.Picture.Bitmap);

form1.Image4.Picture.Bitmap.Assign(form1.Image2.Picture.Bitmap);

form1.Image5.Picture.Bitmap.Assign(form1.Image2.Picture.Bitmap);

data.create(data);

data.create(ex);

form1.Edit2.Text:='0';

form1.Edit3.Text:='0';

form1.Edit4.Text:='0';

end;

procedure TForm1.SpeedButton2Click(Sender: TObject);

begin

form1.Image1.Picture.Bitmap.Assign(form1.Image2.Picture.Bitmap);

form1.Edit1.Text:='';

end;

procedure TForm1.SpeedButton1Click(Sender: TObject);

begin

data.add(form1.Edit1.Text);

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

data.clean;

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

form1.Image3.Picture.Bitmap.Assign(form1.Image2.Picture.Bitmap);

form1.Button2.Enabled:=true;

form1.UpDown1.Min:=2;

form1.UpDown1.Max:=2;

end;

procedure TForm1.Button3Click(Sender: TObject);

begin

if (data.m<2) then begin

showmessage('Вхідний мат. опис СППР повинен містити щонайменше два класи');

exit;

end;

data.make_Y;

form1.UpDown1.Min:=1;

form1.UpDown1.Max:=data.m;

end;

procedure TForm1.Edit5Change(Sender: TObject);

begin

data.show(strtoint(form1.Edit5.text),form1.image3);

end;

procedure TForm1.Button4Click(Sender: TObject);

begin

ie:=false;

form1.Label2.Caption:='';

if form1.RadioButton3.Checked=true then begin

data.TEACH(data);

form1.Label2.Caption:='НАВЧАННЯ ЗАВЕРШЕНО';

end

else begin

data.TEACH(data);

data.TEACH2(data);

end;

data.reliz(data);

form1.Label2.Caption:='НАВЧАННЯ ЗАВЕРШЕНО';

form1.Edit12.Text:=floattostr(data.E_opt);

end;

procedure TForm1.SpeedButton4Click(Sender: TObject);

var s:string;

begin

if form1.OpenPictureDialog1.Execute then s:=form1.OpenPictureDialog1.FileName;

if length(s)=0 then exit else begin

form1.Edit6.Text:=s;

form1.Image4.Picture.LoadFromFile(s);

end;

end;

procedure TForm1.SpeedButton5Click(Sender: TObject);

begin

form1.Image4.Picture.Bitmap.Assign(form1.Image2.Picture.Bitmap);

form1.Edit6.Text:='';

end;

procedure TForm1.SpeedButton6Click(Sender: TObject);

begin

if length(form1.Edit6.Text)=0 then exit;

if((ex.n_str=0)or(ex.n_stolb=0))then begin

ex.n_str:=form1.Image4.Picture.Bitmap.Height;

ex.n_stolb:=form1.Image4.Picture.Bitmap.width;

end;

ex.m:=1;

setlength(ex.name,ex.m);

ex.name[ex.m-1]:=form1.Edit6.Text;

ex.make_Y;

form1.UpDown2.Min:=1;

form1.UpDown2.Max:=ex.n_str;

ex.show(1,form1.image5);

end;

procedure TForm1.Button6Click(Sender: TObject);

var

numb:integer;

bin:array of byte;

i,j,k,sum:integer;

fp:array of real;

begin

setlength(fp,data.m);

setlength(data.delta_opt_m2,data.n_stolb);

setlength(bin,data.n_stolb);

numb:=strtoint(form1.Edit7.Text)-1;

form1.StringGrid1.Cells[0,0]:='№ Класу';

form1.StringGrid1.Cells[1,0]:='Ф-ція належності';

for i:=1 to data.m do

form1.StringGrid1.Cells[0,i]:=inttostr(i);

{make mid}

data.base:=data.base_opt;

for i:=0 to data.n_stolb-1 do

data.delta_opt_m2[i]:=data.delta_opt_mas[i];

data.make_SKD2(data);

data.make_X(data);

data.make_EV(data);

for i:=0 to data.n_stolb-1 do

if ((ex.Y[0,numb,i]>=data.ndk[i])and(ex.Y[0,numb,i]<=data.vdk[i]))

then bin[i]:=1 else bin[i]:=0;

for i:=0 to data.m-1 do begin

sum:=0;

for j:=0 to data.n_stolb-1 do

if bin[j]<>data.EV[i,j]then inc(sum);

fp[i]:=1-(sum/data.d_opt[i]);

form1.StringGrid1.Cells[1,i+1]:=floattostr(fp[i]);

end;

end;

procedure TForm1.Edit9Change(Sender: TObject);

var i,j,k:integer;b:tbitmap;numb:word;

begin

numb:=strtoint(form1.Edit9.text);

try

Image6.Picture.Bitmap.Assign(b_x[numb,0]);

Image7.Picture.Bitmap.Assign(b_x[numb,1]);

except

end;

end;

procedure TForm1.Button5Click(Sender: TObject);

begin

ie:=true;

tree.make_strata(tree);

tree.make_Y(tree);

tree.strata[0].TEACH(tree.strata[0]);

showmessage('jk!!!!!!!!!!!!!!');

tree.strata[0].reliz(tree.strata[0]);

end;

procedure TForm1.Edit11Change(Sender: TObject);

var num:byte;

begin

num:=strtoint(form1.Edit11.text);

if ie=false then

data.make_d2(data,num)

else tree.strata[i_count].make_D2(tree.strata[i_count],num);

end;

procedure TForm1.Edit12Change(Sender: TObject);

var num:integer;

begin

num:=strtoint(form1.Edit11.text);

data.make_d2(data,num);

end;

procedure TForm1.Button7Click(Sender: TObject);

begin

i_count:=strtoint(form1.Edit13.text);

form1.UpDown4.min:=0;

form1.UpDown4.max:=tree.strata[i_count].m;

tree.strata[i_count].reliz(tree.strata[i_count]);

end;

procedure TForm1.Button8Click(Sender: TObject);

var i:integer;

opt:real;

begin

ie:=true;

tree.make_strata(tree);

tree.make_Y(tree);

form1.ProgressBar1.Min:=0;

form1.ProgressBar1.Max:=25*tree.count;

form1.ProgressBar1.Position:=0;

opt:=0;

//tree.strata[0].TEACH(tree.strata[0]);

//showmessage('jk!!!!!!!!!!!!!!');

//tree.strata[0].reliz(tree.strata[0]);

form1.Label2.Caption:='';

if form1.RadioButton3.Checked=true then begin

for i:=0 to tree.count-1 do begin

form1.ProgressBar1.Position:=(i+1)*25;

tree.strata[i].TEACH(tree.strata[i]);

opt:=opt+tree.strata[i].E_opt;

end;

form1.Label2.Caption:='НАВЧАННЯ ЗАВЕРШЕНО';

end

else begin

for i:=0 to tree.count-1 do begin

form1.ProgressBar1.Position:=(i+1)*25;

tree.strata[i].TEACH(tree.strata[i]);

tree.strata[i].TEACH2(tree.strata[i]);

opt:=opt+tree.strata[i].E_opt;

end;

end;

opt:=opt/tree.count;

form1.Edit14.Text:=floattostr(opt);

form1.Label2.Caption:='НАВЧАННЯ ЗАВЕРШЕНО';

end;

end.

Размещено на Allbest.ru


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.