⑴ 基於BP神經網路的PID,輸入參數的歸一化,問題求助
利用BP神經網路來整定PID,也許能實現。但是書本上的這個BP-PID理論書本是錯誤的。你仔細看看,它的輸出激活函數的值域是【0,1】,PID的參數不可能是只在這個范圍啊!可以說輸出沒有反歸一化(值域擴展)。至於輸入歸一化,可用不做,但是輸出在0和1之間,就是鬧笑話了
⑵ s函數-神經網路PID
我畢設是這個研究好幾天了
終於有點頭緒.雖然你是3年前發的我忍不住跟你分享一下.
估計還會有人需要。我找了整整幾天在網上找不到任何有用的資料
等過幾天答辯完了有新的理解會回來補充,就當造福後人了。
switch flag,
case 0
[sys,x0,str,ts]=mdlInitializeSizes(nh);
case 3
sys=mdlOutputs(t,x,u,nh,xite,alfa,KF1,KF2,wi,wo);
case { 1,2, 4, 9 }
sys=[];
otherwise
error(['Unhandled flag = ',num2str(flag)]);
end
flag是標志位.不同的flag取值代表函數進行不同的運算,這里flag=0進行初始化運算,=3進行sys輸出運算,其他的不運算。
function [sys,x0,str,ts] = mdlInitializeSizes(nh)
sizes = simsizes;
sizes.NumContStates = 0;
sizes.NumDiscStates = 0;
sizes.NumOutputs = 4+7*nh; % dynamically sized?
sizes.NumInputs = 14*nh+7; % dynamically sized?
sizes.DirFeedthrough = 1; % has direct feedthrough
sizes.NumSampleTimes = 1;
sys = simsizes(sizes);
str = [];
x0 = [];
ts = [-1 0];
這些是必要的參數設置,分別是連續參數為0,離散參數為0,輸出個數4+7*nh,輸入個數14*nh+7(不知道4和7是哪來的?分別是輸入參數和返回參數的數量),直接饋入(我也不知道是什麼)為1,取樣次數為1.設置完賦給sys輸出。
str是沒用的東西,x0是初始狀態為空矩陣,這里你打錯字了是ts=[T0],ts是一個1X2的向量,ts(1)是采樣周期,ts(2)是偏移量。
wi_2=wi+reshape(u(8:7+4*nh),nh,4);
wo_2=wo+reshape(u(8+4*nh:7+7*nh),3,nh);
wi_1=wi+reshape(u(8+7*nh:7+11*nh),nh,4);
wo_1=wo+reshape(u(8+11*nh:7+14*nh),3,nh);
這個是學習網路的建立過程,具體我也不懂。
xx=[u(1)-u(2);u(1);u(1)+u(3)-2*u(2)];
這句是增量式PID控制演算法,應該是你說的PID部分,我也不太懂。
程序部分我就知道這些。
還有我好久才查到的,nh代表神經元個數,xite是學習速率,alfa慣性系數。
希望對再來看的人有幫助。