uses crt;
const
maxepoch=3000;
juminput=4;
var
v,dv:array[0..2,1..4] of real;
w,dw:array[0..4,1..1] of real;
x:array[1..2] of real;
tx:array[1..2,0..3] of real;
z_in,z,dz_in,dz:array[1..4] of real;
t:array[0..3] of real;
y_in,y,dy:array[1..1] of real;
alfa,tse,err:real;
i,j,k,m,n,p,repx,epoch:integer;
begin
clrscr;
v[0,1]:=-0.3378; v[1,1]:=0.1970; v[2,1]:=0.3099;
v[0,2]:=0.2771; v[1,2]:=0.3191; v[2,2]:=0.1904;
v[0,3]:=0.2859; v[1,3]:=-0.1448; v[2,3]:=-0.0347;
v[0,4]:=-0.3329; v[1,4]:=0.3594; v[2,4]:=-0.4861;
w[0,1]:=-0.1401;
w[1,1]:=0.4919;
w[2,1]:=-0.2913;
w[3,1]:=-0.3979;
w[4,1]:=0.3581;
alfa:=0.2;
tx[1,0]:=1; tx[2,0]:=1; t[0]:=0;
tx[1,1]:=1; tx[2,1]:=0; t[1]:=1;
tx[1,2]:=0; tx[2,2]:=1; t[2]:=1;
tx[1,3]:=0; tx[2,3]:=0; t[3]:=0;
n:=2;
p:=4;
m:=1;
epoch:=0;
tse:=1;
while (epoch<maxepoch) and (tse>0.05) do
begin
err:=0;
for repx:=0 to juminput-1 do
begin
{ Feed Forward }
for i:=1 to n do
x[i]:=tx[i,repx];
for j:=1 to p do
begin
z_in[j]:=v[0,j];
for i:=1 to n do
z_in[j]:=z_in[j]+x[i] * v[i,j];
z[j]:=1/(1+exp(-z_in[j]));
end;
for k:=1 to m do
begin
y_in[k]:=w[0,k];
for j:=1 to p do
y_in[k]:=y_in[k]+z[j] * w[j,k];
y[k]:=1/(1+exp(-y_in[k]));
end;
{ Backpropagation of error }
for k:=1 to m do
begin
dy[k]:=(t[repx]-y[k]) * (y[k] * (1-(y[k])));
for j:=1 to p do
dw[j,k]:=alfa * dy[k] * z[j];
dw[0,k]:=alfa * dy[k];
end;
for j:=1 to p do
begin
for k:=1 to m do
dz_in[j]:=dy[k] * w[j,k];
dz[j]:=dz_in[j] * (z[j] * (1-z[j]));
for i:=1 to n do
dv[i,j]:=alfa * dz[j] * x[i];
dv[0,j]:=alfa * dz[j];
end;
{ Update nilai weight dan bias }
for k:=1 to m do
for j:=0 to p do
w[j,k]:=w[j,k]+dw[j,k];
for j:=1 to p do
for i:=0 to n do
v[i,j]:=v[i,j]+dv[i,j];
err:=err+sqr(t[repx]-y[1]);
end;
tse:=err;
inc(epoch);
end;
writeln('Nilai TSE : ',tse);
writeln('Jumlah Epoch : ',epoch);
readkey;
end.
uses crt;
const
maxepoch=3000;
juminput=4;
var
v,dv:array[0..2,1..4] of real;
w,dw:array[0..4,1..1] of real;
x:array[1..2] of real;
tx:array[1..2,0..3] of real;
z_in,z,dz_in,dz:array[1..4] of real;
t:array[0..3] of real;
y_in,y,dy:array[1..1] of real;
alfa,tse,err:real;
i,j,k,m,n,p,repx,epoch:integer;
begin
clrscr;
v[0,1]:=-0.3378; v[1,1]:=0.1970; v[2,1]:=0.3099;
v[0,2]:=0.2771; v[1,2]:=0.3191; v[2,2]:=0.1904;
v[0,3]:=0.2859; v[1,3]:=-0.1448; v[2,3]:=-0.0347;
v[0,4]:=-0.3329; v[1,4]:=0.3594; v[2,4]:=-0.4861;
w[0,1]:=-0.1401;
w[1,1]:=0.4919;
w[2,1]:=-0.2913;
w[3,1]:=-0.3979;
w[4,1]:=0.3581;
alfa:=0.2;
tx[1,0]:=1; tx[2,0]:=1; t[0]:=-1;
tx[1,1]:=1; tx[2,1]:=-1; t[1]:=1;
tx[1,2]:=-1; tx[2,2]:=1; t[2]:=1;
tx[1,3]:=-1; tx[2,3]:=-1; t[3]:=-1;
n:=2;
p:=4;
m:=1;
epoch:=0;
tse:=1;
while (epoch<maxepoch) and (tse>0.05) do
begin
err:=0;
for repx:=0 to juminput-1 do
begin
{ Feed Forward }
for i:=1 to n do
x[i]:=tx[i,repx];
for j:=1 to p do
begin
z_in[j]:=v[0,j];
for i:=1 to n do
z_in[j]:=z_in[j]+x[i] * v[i,j];
z[j]:=(2/(1+exp(-z_in[j])))-1;
end;
for k:=1 to m do
begin
y_in[k]:=w[0,k];
for j:=1 to p do
y_in[k]:=y_in[k]+z[j] * w[j,k];
y[k]:=(2/(1+exp(-y_in[k])))-1;
end;
{ Backpropagation of error }
for k:=1 to m do
begin
dy[k]:=(t[repx]-y[k]) * (0.5 * (1+y[k]) * (1-y[k]));
for j:=1 to p do
dw[j,k]:=alfa * dy[k] * z[j];
dw[0,k]:=alfa * dy[k];
end;
for j:=1 to p do
begin
for k:=1 to m do
dz_in[j]:=dy[k] * w[j,k];
dz[j]:=dz_in[j] * (0.5 * (1+z[j]) * (1-z[j]));
for i:=1 to n do
dv[i,j]:=alfa * dz[j] * x[i];
dv[0,j]:=alfa * dz[j];
end;
{ Update nilai weight dan bias }
for k:=1 to m do
for j:=0 to p do
w[j,k]:=w[j,k]+dw[j,k];
for j:=1 to p do
for i:=0 to n do
v[i,j]:=v[i,j]+dv[i,j];
err:=err+sqr(t[repx]-y[1]);
end;
tse:=err;
inc(epoch);
end;
writeln('Nilai TSE : ',tse);
writeln('Jumlah Epoch : ',epoch);
readkey;
end.