МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
іНСТИТУТ КОМП’ютерних НАУК
та ІНФОРМАЦІЙНИХ ТЕХНОЛОГІЙ
Кафедра “Системи автоматизованого проектування”
ЗВІТ
до лабораторної роботи №3
на тему
«Алгоритм k-внутрішніх групових середніх»
з курсу
«Системи штучного інтелекту»
Виконав: ст. гр. КН.-3
Львів-2008
Текст програми:
Program K_VNUTR;
Uses CRT;
const q = 12 ; kl = 3;
type
dis = record
v:array [1..q] of real;
t:array [1..q] of integer;
end;
var
x : array [1..q] of integer;
y : array [1..q] of integer;
j,i,k:integer;
d: array [1..kl] of dis;
serx,sery:real;
centre: array [1..kl] of integer;
centrex: array [1..kl] of real;
centrey: array [1..kl] of real;
cx: array [1..kl] of real;
cy: array [1..kl] of real;
min:real;
ok:boolean;
Label next,quit;
BEGIN
clrscr;writeln;
x[1]:= 0 ; y[1]:=4;x[2]:= 1 ; y[2]:=2;
x[3]:= 2 ; y[3]:=3;x[4]:= 2 ; y[4]:=4;
x[5]:= 5 ; y[5]:=0;x[6]:= 6 ; y[6]:=0;
x[7]:= 7 ; y[7]:=0;x[8]:= 8 ; y[8]:=4;
x[9]:= 8 ; y[9]:=5;x[10]:=9 ; y[10]:=4;
x[11]:=9 ; y[11]:=5;x[12]:=11; y[12]:=11;
writeln;
textcolor(15);
{ For i:=1 to kl do
begin
centre[i]:=i; }
centrex[1]:=x[1];
centrey[1]:=y[1];
centrex[2]:=x[6];
centrey[2]:=y[6];
centrex[3]:=x[12];
centrey[3]:=y[12];
For i:=1 to kl do
writeln('Z',i,'(',centrex[i]:1:1,';',centrey[i]:1:1,');');
{end; }
readln;
NEXT:;
clrscr;
writeln;
readln;
textcolor(14);
write(' Z1(',centrex[1]:1:1,';',centrey[1]:1:1,') ');
For i:=2 to kl do
if i=kl then writeln('Z',i,'(',centrex[i]:1:1,';',centrey[i]:1:1,')')
else
write('Z',i,'(',centrex[i]:1:1,';',centrey[i]:1:1,')',' ');
textcolor(15);
writeln;
For i:=1 to kl do
For j:=1 to q do
d[i].v[j]:=sqrt(sqr((centrex[i]-x[j]))+sqr((centrey[i]-y[j])));
For i:=1 to q do
begin
if i<10 then write(' X',i,' (',x[i],';',y[i],')',' ')
else
if i>=13 then write(' X',i,'(',x[i],';',y[i],')',' ')
else
write(' X',i,'(',x[i],';',y[i],')',' ');
For j:=1 to kl do
begin
textcolor(j*2);
if j=kl then writeln(d[j].v[i]:2:1)
else
write(d[j].v[i]:2:1,' ');
textcolor(15);
end;
end;
writeln;
For i:=1 to kl do
For j:=1 to q do
d[i].t[j]:=0;
For i:=1 to q do
begin
min:=d[1].v[i]; k:=1;
For j:=1 to kl do
begin
if min>d[j].v[i] then begin
min:=d[j].v[i];
k:=j;
end;
end;
d[k].t[i]:=1;
end;
For i:=1 to kl do
begin
serx:=0;
sery:=0;
k:=0;
For j:=1 to q do
if d[i].t[j]=1 then
begin
serx:=serx+x[j];
sery:=sery+y[j];
k:=k+1;
end;
if k<>0 then
begin
cx[i]:=serx/k;
cy[i]:=sery/k;
end;
end;
textcolor(3);
For i:=1 to kl do
writeln('Z(',i,') (x=',cx[i]:3:2,' y=',cy[i]:3:2,')'); textcolor(15);
ok:=true;
For i:=1 to kl do
if (cx[i]<>centrex[i])and(cy[i]<>centrey[i]) then ok:=false;
textcolor(4);
if ok=false then
begin
writeln('***Potribno vykonaty shche odnu iteraciju***');
readln;
end
else writeln('***Obrahunok zaversheno***');
textcolor(15);
if ok=false then
begin
For i:=1 to kl do
begin
centrex[i]:=cx[i];
centrey[i]:=cy[i];
end;
goto next;
end;
quit:;
readln;
END.
Результат виконання програми
Z1(0.0;4.0);
Z2(6.0;0.0);
Z3(11.0;11.0);
Z1(0.0;4.0) Z2(6.0;0.0) Z3(11.0;11.0)
X1 (0;4) 0.0 7.2 13.0
X2 (1;2) 2.2 5.4 13.5
X3 (2;3) 2.2 5.0 12.0
X4 (2;4) 2.0 5.7 11.4
X5 (5;0) 6.4 1.0 12.5
X6 (6;0) 7.2 0.0 12.1
X7 (7;0) 8.1 1.0 11.7
X8 (8;4) 8.0 4.5 7.6
X9 (8;5) 8.1 5.4 6.7
X10(9;4) 9.0 5.0 7.3
X11(9;5) 9.1 5.8 6.3
X12(11;11) 13.0 12.1 0.0
Z(1) (x=1.25 y=3.25)
Z(2) (x=7.43 y=2.57)
Z(3) (x=11.00 y=11.00)
***Potribno vykonaty shche odnu iteraciju***
Z1(1.3;3.3) Z2(7.4;2.6) Z3(11.0;11.0)
X1 (0;4) 1.5 7.6 13.0
X2 (1;2) 1.3 6.5 13.5
X3 (2;3) 0.8 5.4 12.0
X4 (2;4) 1.1 5.6 11.4
X5 (5;0) 5.0 3.5 12.5
X6 (6;0) 5.8 2.9 12.1
X7 (7;0) 6.6 2.6 11.7
X8 (8;4) 6.8 1.5 7.6
X9 (8;5) 7.0 2.5 6.7
X10(9;4) 7.8 2.1 7.3
X11(9;5) 7.9 2.9 6.3
X12(11;11) 12.5 9.2 0.0
Z(1) (x=1.25 y=3.25)
Z(2) (x=7.43 y=2.57)
Z(3) (x=11.00 y=11.00)
***Obrahunok zaversheno***
Висновок
На цій лабораторній роботі я вивчив принципи роботи алгоритму k-внутрішніх групових середніх розпізнавання образів.
Написав програму реалізації алгоритму.