【智能控制实验】基于MATLAB的BP神经网络PID控制器设计
生活随笔
收集整理的這篇文章主要介紹了
【智能控制实验】基于MATLAB的BP神经网络PID控制器设计
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
基于MATLAB的BP神經網絡PID控制器設計
一、BP神經網絡PID控制算法步驟:
(1)確定BP神經網絡結構,即確定輸入層和隱含層的節點個數,選取各層加權系數的初值wij(0)、wli(0),選定學習速率和慣性系數,此時k=1(2)采樣給定和反饋信號,即r(k)和y(k),計算誤差e(k)=r(k)-y(k)(3)確定輸入量(4)根據上述公式,計算各層神經元的輸入、輸出,神經網絡輸出層即為PID控制器的三個可調參數Kp、Ki和Kd(5)由增量式PID控制公式,計算PID控制器的控制輸出u(k)(6)進行神經網絡學習,實時自動調整輸出層和隱含層的加權系數wli(k)和wij(k),實現PID控制參數的自適應調整(7)置k=k+1,返回步驟(2)二、建立模型
2.1 BP_PID
2.2 Subsystem
2.3 S_Function
function [sys,x0,str,ts,simStateCompliance] = nnbp(t,x,u,flag,T,nh,xite,alfa) switch flag,case 0,[sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes(T,nh); %初始化函數case 3,sys=mdlOutputs(t,x,u,nh,xite,alfa); %輸出函數case {1,2,4,9},sys=[];otherwiseDAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag)); end function [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes(T,nh) %調用初始畫函數,兩個外部輸入參數 參數T確定采樣時間,參數nh確定隱含層層數 sizes = simsizes; sizes.NumContStates = 0; sizes.NumDiscStates = 0; sizes.NumOutputs = 4+6*nh; %定義輸出變量,包括控制變量u,三個PID參數:Kp,Ki,Kd,隱含層+輸出層所有加權系數 sizes.NumInputs = 7+12*nh; %定義輸入變量,包括前7個參數[e(k);e(k-1);e(k-2);y(k);y(k-1);r(k);u(k-1)] %隱含層+輸出層權值系數(k-2),隱含層+輸出層權值系數(k-1) sizes.DirFeedthrough = 1; sizes.NumSampleTimes = 1; sys = simsizes(sizes); x0 = []; str = []; ts = [T 0]; simStateCompliance = 'UnknownSimState'; function sys=mdlOutputs(t,x,u,nh,xite,alfa) %調用輸出函數 wi_2 = reshape(u(8:7+3*nh),nh,3); %隱含層(k-2)權值系數矩陣,維數nh*3 wo_2 = reshape(u(8+3*nh:7+6*nh),3,nh); %輸出層(k-2)權值系數矩陣,維數3*nh wi_1 = reshape(u(8+6*nh:7+9*nh),nh,3); %隱含層(k-1)權值系數矩陣,維數nh*3 wo_1 = reshape(u(8+9*nh:7+12*nh),3,nh); %輸出層(k-1)權值系數矩陣,維數3*nh xi = [u(6),u(4),u(1)]; %神經網絡的輸入xi=[u(6),u(4),u(1)]=[r(k),y(k),e(k)] xx = [u(1)-u(2);u(1);u(1)+u(3)-2*u(2)]; %xx=[u(1)-u(2);u(1);u(1)+u(3)-2*u(2)]=[e(k)-e(k-1);e(k);e(k)+e(k-2)-2*e(k-1)] I = xi*wi_1'; %計算隱含層的輸入,I=神經網絡的輸入*隱含層權值系數矩陣的轉置wi_1',結果為: %I=[net0(k),net1(k)...netnh(k)]為1*nh矩陣 Oh = exp(I)./(exp(I)+exp(-I)); %激活函數,可更改 %計算隱含層的輸出,(exp(I)-exp(-I))./(exp(I)+exp(-I))為隱含層的激活函數Sigmoid %Oh=[o0(k),o1(k)...onh(k)],為1*nh的矩陣 O = wo_1*Oh'; %計算輸出層的輸入,維數3*1 K = 2./(exp(O)+exp(-O)).^2; %激活函數,可更改 %計算輸出層的輸出K=[Kp,Ki,Kd],維數為1*3 %exp(Oh)./(exp(Oh)+exp(-Oh))為輸出層的激活函數Sigmoid uu = u(7)+K'*xx; %根據增量式PID控制算法計算控制變量u(k) dyu = sign((u(4)-u(5))/(uu-u(7)+0.0000001)); %計算輸出層加權系數修正公式的sgn %sign((y(k)-y(k-1))/(u(k)-u(k-1)+0.0000001)近似代表偏導 dK = 2./(exp(K)+exp(-K)).^2; %激活函數,可更改 delta3 = u(1)*dyu*xx.*dK; wo = wo_1+xite*delta3*Oh+alfa*(wo_1-wo_2); %輸出層加權系數矩陣的修正 dOh = 2./(exp(Oh)+exp(-Oh)).^2; %激活函數,可更改 wi = wi_1+xite*(dOh.*(delta3'*wo))'*xi+alfa*(wi_1-wi_2); %隱含層加權系數修正 sys = [uu;K(:);wi(:);wo(:)]; %輸出層輸出sys=[uu;K(:);wi(:);wo(:)]= %[uu;Kp;Ki;Kd;隱含層+輸出層所有權值系數] %K(:),wi(:),wo(:),把這三個矩陣按順序排為列向量三、實驗結果及分析
3.1 output
3.2 kp
3.3 ki
3.4 kd
參考文章
基于BP神經網絡PID控制+Simulink仿真
總結
以上是生活随笔為你收集整理的【智能控制实验】基于MATLAB的BP神经网络PID控制器设计的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言经典程序技能高考,计算机类技能高考
- 下一篇: python依赖包冲突