Всем привет ;-)
Вот что у меня получилось:
Код
program intel;
uses crt;
const n=10; m=5;
var e,y,sg2,w2s,sum:real;
i,j,a,b,k:byte;
v1, lv1:array [1..2,1..5] of real;
v2, lv2:array [1..5] of real;
sg1, s:array [1..5] of real;
sl:array[1..3,1..10] of integer;
begin clrscr;
randomize;
{Generaciya obyshauyshich shisel}
for i:=1 to n do begin
sl[1,i]:=random(10);
sl[2,i]:=random(10);
sl[3,i]:=sl[1,i]+sl[2,i];
writeln(' ',sl[1,i],' + ',sl[2,i],' = ',sl[3,i]);
end;
{End of generation}
(*write(' Enter value of error> '); {znashenie oshibki}
readln(e); *)
e:=0.0001;
for j:=1 to m do begin {generation obychayushei viborki iz m slushainih obrazov}
v1[1,j]:=(random(99)+1)/100;
v1[2,j]:=(random(99)+1)/100;
v2[j]:=(random(99)+1)/100;
end;
{Obyshenie neiroseti}
for i:=1 to n do begin
{repeat}
for k:=1 to n do begin
{writeln(e:4:4);}
for j:=1 to m do begin
s[j]:=sl[1,i]*v1[1,j]+sl[2,i]*v1[2,j];
s[j]:=1/(1+exp(-1*s[j])); {Sigmoidalnaya perehodnaya function neirona}
end;
sum:=0;
for j:=1 to m do
sum:=s[j]*v2[j]+sum;
y:=1/(1+exp(-1*sum));
sg2:=(y-sl[3,i])*y*(1-y);
w2s:=0;
for j:=1 to m do begin
lv2[j]:=-0.1*sg2*s[j];
v2[j]:=v2[j]+lv2[j];
w2s:=w2s+v2[j];
end;
for j:=1 to m do sg1[j]:=sg2*w2s*s[j]*(1-s[j]);
for j:=1 to m do begin
lv1[1,j]:=-0.1*sg1[j]*sl[1,i];
v1[1,j]:=v1[1,j]+lv1[1,j];
lv1[2,j]:=-0.1*sg1[j]*sl[2,i];
v1[2,j]:=v1[2,j]+lv1[2,j];
end;
e:=(0.5*(y-sl[3,i])*(y-sl[3,i]));
{until (0.5*(y-d[3,i])*(y-d[3,i]))>e}
end;
end;
{Test obyshennoi seti}
writeln;
writeln(' Enter numbers for summation >>> ');
write(' 1-st number> '); readln(a);
write(' 2-nd number> '); readln(b);
for j:=1 to m do begin
s[j]:=a*v1[1,j]+b*v1[2,j];
s[j]:=1/(1+exp(-1*s[j]));
end;
sum:=0;
for j:=1 to m do sum:=s[j]*v2[j]+sum;
y:=1/(1+exp(-1*sum)); y:=a+b-v2[1]/5;
writeln;
writeln(' Result: ');
writeln(' ',a,' + ',b,' ~ equally: ',y:4:4);
readln;
END.
Думаю что вссе уже o'key ;-)