3004


Laboratorium Modelowania i Symulacji

Ćwiczenie 5

Modelowanie nieliniowego systemu dynamicznego za pomocą sztucznej sieci neuronowej

Program ćwiczenia

Przed wykonaniem kolejnych punktów programu ćwiczenia należy zapoznać się z załączonymi programami w języku Matlaba,

Dla wybranych parametrów nieliniowego systemu dynamicznego (dyskretny liniowy podsystem dynamiczny II-ego rzędu):

sprawdzić zachowanie dyskretnego liniowego podsystemu dynamicznego II-ego rzędu generując odpowiedź skokową lub impulsową (funkcje dstep lub dimpulse),

za pomocą programu ham wygenerować ciąg 1000 wzorców odpowiedzi nieliniowego systemu dynamicznego na wymuszenie w postaci ciągu pseudolosowego o rozkładzie równomiernym,

Uruchomić program narx2 identyfikacji modelu neuronowego systemu metodą wstecznej propagaccji błędów:

    1. Uwaga: przed uruchomieniem programu należy podać początkową wartość współczynnika uczenia i parametru sterującego inicjalizacją wag wypisując polecenia

    2. i = 1; lr = 0.01;

zbadać wpływ początkowej wartości współczynnika uczenia na przebieg identyfikacji,

zbadać wpływ zmian struktury modelu neuronowego na przebieg identyfikacji,

Wykonać testowanie modelu neuronowego za pomocą programu narx2t.

Uruchomić program idnarx identyfikacji modelu neuronowego metodą Marquardta.

Wykonać dodatkowe symulacje według zaproponowanego prze grupę indywidualnego planu.

Sprawozdanie

    1. Sprawozdanie powinno zawierać raport z przebiegu ćwiczenia z wykresami otrzymanych przebiegów sygnałów i parametrów oraz uwagami i wnioskami.

    2. Programy wykorzystywane w ćwiczeniu

3.1 HAM.M - modelowanie systemu Hammersteina

% ch-ka statyczna v=sign(u)

% sygnał wejściowy u-szum o r.r (-0.5,0.5)

% x znormalizowany do przedziału (-2,2)

% N - liczba pomiarów

function[y,u,u1,u2,ymax]=ham(NN);

n=[0 0.21 -0.01]; d=[1 -0.3 -0.6];

t=[0:NN-1]; s=size(t);

% generowanie sygnału wejściowego

u=rand(s)-0.5*ones(s);

u=4*u; u=u';

% obliczenie sygnału wyjściowego podsystemu nieliniowego

for i=1:NN,

if abs(u(i))>=1, v(i)=sign(u(i)); else v(i)=u(i); end;

end;

% obliczenie sygnału wyjściowego podsystemu liniowego

y=dlsim(n,d,v);

u1(1)=0; u1(2:NN)=u(1:NN-1); u1=u1';

u2(1)=0; u2(2:NN)=u1(1:NN-1); u2=u2';

y1(1)=0; y1(2:NN)=y(1:NN-1); y1=y1';

y2(1)=0; y2(2:NN)=y1(1:NN-1); y2=y2';

ymax=max(abs(y));

v1(1)=0; v1(2:NN)=v(1:NN-1); v1=v1';

v2(1)=0; v2(2:NN)=v1(1:NN-1); v2=v2';

end;

y=[y1 y2 y];

3.2. narx2.m - identyfikacja nieliniowego systemu dynamicznego II-ego rzędu

% metoda wsadowa wstecznej propagacji błędów (batch)

% z adaptacją współczynnika uczenia

n4=4; % liczba wejść

S4=n4; % liczba neuronów w warstwie 1

S34=12; % liczba neuronów w warstwie 2

S3=1; % liczba neuronów w warstwie 3

Q=500; % liczba wzorców

%i=1;

if i==1, % sprawdzenie warunku inicjalizacji wsp. wagowych

Er=0; e=1;

clear Lr; clear Wr1; clear Wr2; clear Wr3; clear Wr4;

% ustawienie początkowe wsp. wagowych

[W3,B3]=rands(S3,S34); W3=0.125*W3; B3=0.*B3;

[W34,B34]=rands(S34,S4); W34=0.5*W34; B34=0.*B34;

[W4,B4]=nwtan(S4,S4); W4=1*W4; B4=0*B4;

dW3=0*W3; dB3=0*B3; dW34=0*W34; dB34=0*B34; dW4=0*W4; dB4=0*B4;

% rozmieszczenie okien graficznych

figure(1); clf;

set(figure(1),'Position',[5,350,375,270]);

figure(2); clf;

set(figure(2),'Position',[420,350,375,270]);

figure(3); clf;

set(figure(3),'Position',[420,0,375,270]);

end;

for p=1:4, % liczba pętli

for K=1:1, % numer wsadu

O=(K-1)*Q; s=0; N=0;

for k=1:500, % liczba ieracji

T=y(O+1:O+Q,3)'; % y(i)- sygał wyjściowy systemu

% P4 - macierz wejść

P4=[u1(O+1:O+Q,1) u2(O+1:O+Q,1) -y(O+1:O+Q,1) -y(O+1:O+Q,2)]';

% obliczenie wyjścia sieci

[X4]=tansig(W4*P4,B4);

P34=X4;

[X34]=tansig(W34*P34,B34);

P3=X34;

[X3]=purelin(W3*P3,B3);

mc=0.95; % mc - stała momentum

E=-X3+T; % E - wektor błędów

e1=e;

e=sumsqr(E); Ys=sumsqr(T); ey=e/Ys;

% adaptacja współczynnika uczenia lr

if e/e1>1, lr=0.98*lr; end;

if e/e1<0.9999999, lr=1.005*lr; end;

if lr<0.000001, lr=0.000001; end;

Er(i)=e;

Lr(i)=lr;

s=s+1;

if s==50, s=0; [i K sqrt(sumsqr(E)/sumsqr(T))*100],

M=[ k e e/e1 lr], end;

% wsteczna propagacja błędów

D3=1*deltalin(X3,E);

D34=1*deltatan(X34,D3,W3);

D4=1*deltatan(X4,D34,W34);

D2=1*deltatan(P4,D4,W4);

% obliczenie skorygowanych wsp. wagowych

[dW4,dB4]=learnbpm(P4,D4,lr,mc,dW4,dB4);

W4=W4+dW4; B4=B4+dB4;

[dW34,dB34]=learnbpm(P34,D34,lr,mc,dW34,dB34);

W34=W34+dW34; B34=B34+dB34;

[dW3,dB3]=learnbpm(P3,D3,lr,mc,dW3,dB3);

W3=W3+dW3; B3=B3+dB3;

% rysowanie wykresów

if i<=5000,

Wr1(i)=W3(1); Wr2(i)=W3(2); Wr3(i)=W3(3); Wr4(i)=W3(4); end;

i=i+1;

N=N+1;

if N==100, N=0; [p,k,K],

figure(1);

subplot(2,1,1);

semilogy(Lr); title('Współczynnik uczenia');

subplot(2,1,2);

semilogy(Er); title('Suma kwadratów błędów');

figure(2);

clf; hold on; plot(T,'b'); plot(E,'r');

title('Sygnał wyjściowy systemu i błąd identyfikacji'); hold off;

figure(3);

plot(Wr2); grid; hold on; plot(Wr3,'r'); plot(Wr4,'b'); plot(Wr1,'g');

title('Współczynniki W3(1) - W3(4)'); hold off;

end;

end;

end;

end;

3.3. narx2t.m - testowanie modelu neuronowego nieliniowego systemu dynamicznego II-ego rzędu

% syganł wejściowy - szum pseudolosowy o rozkładzie równomiernym

n4=4; % liczba wejść

S4=n4; % liczba neuronów w warstwie 1

S34=12; % liczba neuronów w warstwie 2

S3=1; % liczba neuronów w warstwie 3

Q=500; % liczba wzorców

lr=0; mc=0; % parametry uczenia

% rozmieszczenie okien graficznych

figure(1); clf;

set(figure(1),'Position',[5,350,375,270]);

figure(2); clf;

set(figure(2),'Position',[420,350,375,270]);

figure(3); clf;

set(figure(3),'Position',[420,0,375,270]);

end;

for p=1:1, % liczba pętli

for K=2:2, % numer wsadu

O=(K-1)*Q; s=0; N=0;

for k=1:500, % liczba ieracji

T=y(O+1:O+Q,3)'; % y(i)- sygał wyjściowy systemu

% P4 - macierz wejść

P4=[u1(O+1:O+Q,1) u2(O+1:O+Q,1) -y(O+1:O+Q,1) -y(O+1:O+Q,2)]';

% obliczenie wyjścia sieci

[X4]=tansig(W4*P4,B4);

P34=X4;

[X34]=tansig(W34*P34,B34);

P3=X34;

[X3]=purelin(W3*P3,B3);

E=-X3+T; % E - wektor błędów

e1=e;

e=sumsqr(E); Ys=sumsqr(T); ey=e/Ys;

Er(i)=e

Lr(i)=lr;

s=s+1;

if s==50, s=0; [i K sqrt(sumsqr(E)/sumsqr(T))*100], M=[ k e e/e1 lr], end;

% rysowanie wykresów

if i<=5000,

Wr1(i)=W3(1); Wr2(i)=W3(2); Wr3(i)=W3(3); Wr4(i)=W3(4); end;

i=i+1;

N=N+1;

if N==100, N=0; [p,k,K],

figure(1);

subplot(2,1,1);

semilogy(Lr); title('Współczynnik uczenia');

subplot(2,1,2);

semilogy(Er); title('Suma kwadratów błędów');

figure(2);

clf; hold on; plot(T,'b'); plot(E,'r');

title('Sygnał wyjściowy systemu i błąd identyfikacji'); hold off;

figure(3);

plot(Wr2); grid; hold on; plot(Wr3,'r'); plot(Wr4,'b'); plot(Wr1,'g');

title('Współczynniki W3(1) - W3(4)'); hold off;

end;

end;

end;

end;

3.4. idnarx - identyfikacja systemu nieliniowego metodą wsadową Marquardta

% pliki używane: corr, corry, ham, lipsc, nnarx

N=1000; % liczba wzorców

% generowanie danych z systemu nieliniowego

[y,u,u1,u2,ymax]=ham(N);

m=[1:5];

n=m;

% testowanie rzędu systemu

%[OrderIndexMat]=lipsc(u(1:500),y(1:500,3)),m,n);

% deklaracja struktury sieci

NetDef=['HHHHHHHHHHHH';'L-----------'];

% parametry uczenia

I=200; % liczba iteracji

trparms=[20 0 1 0];

%deklaracja rzędu modelu

NN=[2 2 1];

y=y';

u=u';

% uczenie sieci metodą Marquardta

[W1,W2,e,iter,lambd]=nnarx(NetDef,NN,[],[],trparms,y(3,1:500),u(1:500));

figure(1)

semilogy(e);

%testowanie modelu

[Yhat,NSSE] = nnval('nnarx',NetDef,NN,W1,W2,y(3,501:1000),u(501:1000));

Literatura

Hertz J., Krogh A., Palmer R. G.: Wstęp do teorii obliczeń neuronowych. WNT. Warszawa. 1993, 1995.

Korbicz J., Obuchowicz A., Uciński D.: Sztuczne sieci neuronowe. Podstawy i zastosowania. Akad. Ofic. Wyd. Warszawa. 1994.

Żurada J., Barski M., Jędruch W.: Sztuczne sieci neuronowe. PWN. Warszawa. 1996.



Wyszukiwarka

Podobne podstrony:
3004
3004
3004
3004
3004
3004

więcej podobnych podstron