Использование нечеткой искусственной нейронной сети TSK (Takagi, Sugeno, Kang’a) в задаче прогнозирования валютных курсов

//--------------------------------------------------------------

//--------------------------------------------------------------

while(not(adjust))and(nIt<maxNit)do

begin

gama:=gama*0.9;

nIt:=nIt+1;

nnit:=i;

for num:=nac to nst-nac do //цикл по обучающей выборке

begin

// Первый слой

// прогноз на 1 шаг

for i:=1 to nac do //цикл по входным переменн

ым

for j:=1 to m do //цикл по правилам

myu[i,j]:=1/( 1+exp(Ln(abs((a[i+num]-cen[j,i])/sigma[j,i]))*2*b[j,i]) );

// Второй слой

// прогноз на 1 шаг

for j:=1 to m do

begin

myu0[j]:=1;

for i:=1 to nac do

myu0[j]:=myu0[j]*myu[j,i]; //Пересечение правил

end;

// Третий слой

// прогноз на 1 шаг

for j:=1 to m do

begin

tsk[j]:=p[j,0];

tsk3[j]:=p3[j,0]; // для прогноза на 3 шага

end;

for j:=1 to m do

for i:=1 to nac do

tsk[j]:=tsk[j]+p[j,i]*a[num+i-1];

for j:=1 to m do

tsk_w[j]:=tsk[j]*myu0[j];// y[k](x)*w[k]

// прогноз на 3 шагa

//tsk3:=p3[0];

//пятый слой

f1:=0;

for j:=1 to m do

f1:=f1+tsk_w[j];

f2:=0;

for j:=1 to m do

f2:=f2+myu0[j];

gc:=gc*u;

gs:=gs*u;

gb:=gb*u;

fprov:=f1;

if f2>0 then fprov:=f1/f2;

adjust_csb(num,fprov); // Настройка нелинейных параметров

if f2>0 then

ap[num+1]:=f1/f2 else

ap[num+1]:=ap[num];

str(ap[num+1]:8:4,s);

stringGrid1.Cells[1,num+1]:=s;

str(a[num+1]-ap[num+1]:8:4,s);

stringGrid1.Cells[2,num+1]:=s;

end;//цикл по обучающей выборке

for num:=nac+3 to nst-nac-3 do //цикл по обучающей выборке (НА 3 ШАГА ВПЕРЕД)

begin

// Первый слой

for i:=1 to nac do //цикл по входным переменным

for j:=1 to m do //цикл по правилам

myu3[i,j]:=1/( 1+exp(Ln(abs((a[i+num+3]-cen3[j,i])/sigma3[j,i]))*2*b3[j,i]) );

// Второй слой

for j:=1 to m do

begin

myu03[j]:=1;

for i:=1 to nac do

myu03[j]:=myu03[j]*myu3[j,i]; //Пересечение правил

end;

// Третий слой

for j:=1 to m do

tsk3[j]:=p3[j,0]; // для прогноза на 3 шага

for j:=1 to m do

for i:=1 to nac do

tsk3[j]:=tsk3[j]+p3[j,i]*a[num+i-1+3];

for j:=1 to m do

tsk_w3[j]:=tsk3[j]*myu03[j];// y[k](x)*w[k]

//пятый слой

f1:=0;

for j:=1 to m do

f1:=f1+tsk_w3[j];

f2:=0;

for j:=1 to m do

f2:=f2+myu03[j];

gc:=gc*u;

gs:=gs*u;

gb:=gb*u;

if f2>0 then

begin

adjust_csb3(num,f1/f2); // Настройка нелинейных параметров

ap3[num+4]:=f1/f2;

end

else

ap3[num+4]:=ap3[num+3];

str(ap3[num+4]:8:4,s);

stringGrid1.Cells[3,num+1]:=s;

str(a[num+4]-ap3[num+4]:8:4,s);

stringGrid1.Cells[4,num+1]:=s;

end;//цикл по обучающей выборке (НА 3 ШАГА ВПЕРЕД)

adjust_p();// Настройка линейных параметров

adjust_p3();

end; // while not adjust

// ДЕЛАЕМ ПРОГНОЗ

//делаем прогноз на 1 шаг

for num:=nac+2 to n do

begin

// Первый слой

// прогноз на 1 шаг

for i:=1 to nac do //цикл по входным переменным

for j:=1 to m do //цикл по правилам

myu[i,j]:=1/( 1+exp(Ln(abs((a[num-i]-cen[j,i])/sigma[j,i]))*2*b[j,i]) );

// Второй слой

// прогноз на 1 шаг

for j:=1 to m do

begin

myu0[j]:=1;

for i:=1 to nac do

myu0[j]:=myu0[j]*myu[j,i]; //Пересечение правил

end;

// Третий слой

// прогноз на 1 шаг

for j:=1 to m do

tsk[j]:=p[j,0];

for j:=1 to m do

for i:=1 to nac do

tsk[j]:=tsk[j]+p[j,i]*a[num-i];

for j:=1 to m do

tsk_w[j]:=tsk[j]*myu0[j];// y[k](x)*w[k]

//пятый слой

f1:=0;

for j:=1 to m do

f1:=f1+tsk_w[j];

f2:=0;

for j:=1 to m do

f2:=f2+myu0[j];

if f2>0 then

ap[num+1]:=f1/f2

else ap[num+1]:=ap[num];

ap[num+1]:=ap[num+1]+0.0001*(7-m);

str(ap[num+1]:8:4,s);

stringGrid1.Cells[1,num+1]:=s;

str(a[num+1]-ap[num+1]:8:4,s);

stringGrid1.Cells[2,num+1]:=s;

end;

stringGrid1.Cells[2,n+1]:='';

//Сделали прогноз на 1 шаг

//-------------------------------------------

//Делаем прогноз на 3 шага

for num:=nac+3 to n do //цикл по обучающей выборке (НА 3 ШАГА ВПЕРЕД)

begin

// Первый слой

for i:=1 to nac do //цикл по входным переменным

for j:=1 to m do //цикл по правилам

myu3[i,j]:=1/( 1+exp(Ln(abs((a[num-nac+i]-cen3[j,i])/sigma3[j,i]))*2*b3[j,i]) );

// Второй слой

for j:=1 to m do

begin

myu03[j]:=1;

for i:=1 to nac do

myu03[j]:=myu03[j]*myu3[j,i]; //Пересечение правил

end;

// Третий слой

for j:=1 to m do

tsk3[j]:=p3[j,0]; // для прогноза на 3 шага

for j:=1 to m do

for i:=1 to nac do

tsk3[j]:=tsk3[j]+p3[j,i]*a[num+i-nac];

for j:=1 to m do

tsk_w3[j]:=tsk3[j]*myu03[j];// y[k](x)*w[k]

//пятый слой

f1:=0;

for j:=1 to m do

f1:=f1+tsk_w3[j];

f2:=0;

for j:=1 to m do

f2:=f2+myu03[j];

if f2>0 then

ap3[num+3]:=f1/f2

else ap3[num+3]:=ap3[num+2] ; ap3[num+1]:=ap3[num+1]+0.0001*(7-m);

str(ap3[num+3]:8:4,s);

stringGrid1.Cells[3,num+3]:=s;

str(a[num+3]-ap3[num+3]:8:4,s);

stringGrid1.Cells[4,num+3]:=s;

end;

stringGrid1.Cells[4,num+1]:='';

stringGrid1.Cells[4,num+2]:='';

stringGrid1.Cells[4,num]:='';sm:=9.5;

// Сделали прогноз на 3 шага

// вычисляем критерий СКО и САПП для прогноза на 1 и 3 шага

skoS:=0; skoP:=0;

skoP:=0; sko3P:=0;

ms:=0; mp:=0;

ms3:=0; mp3:=0;

sappS:=0;sappP:=0;sapp3s:=0;sapp3p:=0;

for i:=nac+3 to nst do

skoS:=skoS+sqr(a[i]-ap[i]);

skoS:=(skoS/(nst-nac-3));

Str(skoS:8:7,s);

edit3.Text:=s;

sappS:=0;

for i:=nac+1 to nst do

sappS:=sappS+abs(a[i]-ap[i])/a[i];

sappS:=sappS/(nst-nac-1);

str(sappS:8:7,s);

edit7.Text:=s;

for i:=nst to n do

skoP:=skoP+sqr(a[i]-ap[i]);

skoP:=skoP/(n-nst);

Str(skoP:8:7,s);

edit4.Text:=s;

for i:=nst to n do

sappP:=sappP+abs(a[i]-ap[i])/a[i];

sappP:=sappP/(n-nst);

Str(sappP:8:7,s);

edit8.Text:=s;

sko3S:=0;

for i:=nac+6 to nst do

sko3S:=sko3S+sqr(a[i]-ap3[i]);

sko3S:=sko3S/(nst-nac-6);

Str(sko3S:8:7,s);

edit1.Text:=s;

for i:=nac+6 to nst do

sapp3S:=sapp3S+abs(a[i]-ap3[i])/a[i];

sapp3S:=sapp3S/(nst-nac-6);

Str(sapp3S:8:7,s);

edit5.Text:=s;

for i:=nst to n do

sko3P:=sko3P+sqr(a[i]-ap3[i]);

sko3P:=sko3P/(n-nst);

Str(sko3P:8:7,s);

edit2.Text:=s;

for i:=nst to n do

sapp3P:=sapp3P+abs(a[i]-ap3[i])/a[i];

sapp3P:=sapp3P/(n-nst);

Str(sapp3P:8:7,s);

edit6.Text:=s;

end;//if sg1[0,1]<>''

end; // обучить нейросеть (конец)

procedure TForm1.Button8Click(Sender: TObject);//Сохранить нейросеть

begin

SaveNNS.InitialDir:='D:\CW';

SaveNNS.DefaultExt:='txt';

if SaveNNS.Execute then

begin

AssignFile(f4,SaveNNS.FileName);

Rewrite(f4);

writeln(f4,nns);

writeln(f4,nac);

writeln(f4,m);

for i:=1 to m do

for j:=1 to nac do

writeln(f4,cen[i,j]:12:10);

for i:=1 to m do

Страница:  1  2  3  4  5  6  7  8  9  10  11  12  13  14  15 
 16  17  18  19  20  21  22  23  24  25  26  27 


Другие рефераты на тему «Программирование, компьютеры и кибернетика»:

Поиск рефератов

Последние рефераты раздела

Copyright © 2010-2024 - www.refsru.com - рефераты, курсовые и дипломные работы