T=input(2:N-1)' Edasi loome närvivõrgu kolme sisendiga (vahemikus 0..1), ühe peidetud kihiga ja 5 neuroniga peidetud kihis. Aktiveerimisfunktsiooniks peidetud kihis tansig. global net_c net_c=newff([0 1; 0 1; 0 1],[5 1],{'tansig','purelin'}) net_c.trainParam.show=1; net_c.trainFcn='traingd'; % kuna süsteem peab olema adaptiivne (hiljem), siis reaalajas toimiva närvivõrgu puhul sobib hästi. Närvivõrgu treenimine: net_c.trainParam.epochs=5000; net_c=train(net_c,P,T) % P - etalonsisend, T - etalonväljund save temp_net.mat net_c % kui süsteem muutub mittestabiilseks (Liiga suure häiringu tõttu näiteks) siis % load temp_net.mat net_c Praktikum koosnes kahes osast. Esimeses osas tavaline mittelineaarne süsteem. Regulaator: function control=controller(u) global net_c control=sim(net_c,u); %simuleerib närvivõrgu antud sisendiga Teises osas adaptiivne mittelineaarne süsteem. Regulaator: function control=controller(u) global net_c inp=u(1:3); error=u(4); time=u(5);
3 Närvivõrgu treenimine td=1 N=size(output,1) P=[output(3:N)';output(2:N-1)';output(1:N-2)'] T=input(2:N-1)' global net_c net_c=newff([-1 1; -1 1; -1 1],[15 1],{'tansig','tansig'}) net_c.trainParam.show=1; net_c.trainFcn='traingd'; % kuna süsteem peab olema adaptiivne, siis reaalajas toimiva närvivõrgu puhul sobib hästi. net_c.trainParam.epochs=5000; net_c=train(net_c,P,T) % P - etalonsisend, T - etalonväljund save temp_net.mat net_c % kui süsteem muutub mittestabiilseks (Liiga suure häiringu tõttu näiteks) siis % load temp_net.mat net_c Regulaator function control=kontroller(u) global net_c inp=u(1:3); error=u(4); time=u(5); control=sim(net_c,inp); if time>10 net_c=adapt(net_c,inp,control+error); end 4 Pilt 2. Adaptiivse kontrolleriga juhtimissüsteem.