EDA365电子论坛网
标题:
神经网络PID输出的PID参数为何被局限在0-1之间?
[打印本页]
作者:
小小鲁班
时间:
2021-3-16 13:59
标题:
神经网络PID输出的PID参数为何被局限在0-1之间?
%基于 BP 神经网络的 PID 控制
3 o/ r% n9 w" A! d
clear all;
7 K$ `. }% Q$ c- R: T( b! i
x1=0.3;a1=0.07;
( t) n/ K; E, L
S=1; %信号类型
3 H$ N1 h8 H8 p9 i3 w, A
In=4;h=5;Out=3; %神经网络结构
& \5 F% o) s- G
if S==1, %阶跃信号
% S" c6 p* t0 t7 D2 O: s; l3 a
wi=[-0.6394 -0.2696 -0.3756 -0.7023;
$ n2 @7 m* u [
-0.8603 -0.2013 -0.05024 -0.2596;
" T1 {. A/ c7 p' I1 o
-1.0749 0.5543 -1.6820 -0.5437;
7 p% P; @! R: z# u
-0.3625 -0.0724 -0.6463 -0.2859;
' [/ U) C/ d, c# [& ^, F. @
0.1425 0.0279 -0.5406 -0.7660];
( a6 z. K; }) D/ i6 E* K
%wi=0.50*rands(h,In);
* m7 A) c9 \8 s1 G
wi1=wi;wi2=wi;wi3=wi;
/ ]8 Z9 L& D9 T3 d! I! V
wo=[0.7576 0.2616 0.5820 -0.1416 -0.1325;
. ]+ o4 m U. u, \' K1 H
-0.1146 0.2949 0.8352 0.2205 0.4508;
0 n6 w6 X$ E: y* F, x/ V+ |
0.7201 0.4566 0.7672 0.4962 0.3632];
9 z/ y- [/ @! h9 ]7 L2 P |
%wo=0.50*rands(Out,h);
6 G0 J' ?# U7 [6 ~- e
wo1=wo;wo2=wo;wo3=wo;
+ |+ `% d; r' ?7 A: n8 a
end
' @& s% t9 J2 C' ?
if S==2 %正弦信号
* L& B+ e8 y* c6 D) x1 {
wi=[-0.2846 0.2193 -0.5097 -1.0668;
0 u, _, P- m" V" ]. N
-0.7484 -0.1210 -0.4708 0.0988;
3 ~$ Y; }; B) K
-0.7176 0.8297 -1.6000 0.2049;
- [+ B, V; ]' c* C! u- }8 O
-0.0858 0.1925 -0.6346 0.0347;
N9 K9 v: I/ U# o [
0.4358 0.2369 -0.4564 -0.1324];
& ~1 Y% k3 C: A" j' b3 x3 z
%wi=0.50*rands(h,In);
' y8 H3 S" Z' {2 D* b
wi1=wi;wi2=wi;wi3=wi;
( p8 V" v# X2 i0 d$ D' p1 l1 F! e
wo=[1.0438 0.5478 0.8682 0.1446 0.1537;
$ u% w' b0 Z3 _6 W3 A7 w1 l7 f1 Q# ?) s
0.1716 0.5811 1.1214 0.5067 0.7370;
1 g8 @3 Q* Y0 {6 `% J
1.0063 0.7428 1.0534 0.7824 0.6494];
/ t% r C: d- E1 T' [3 H2 K% u1 {
%wo=0.50*rands(Out,h);
* W: P0 U. U0 E4 k( _
wo1=wo;wo2=wo;wo3=wo;
1 G$ B# i' Z8 B
end
# N, B6 |. t8 y
x=[0,0,0];
9 g4 `5 W/ s9 r* H& H* x6 x
u1=0;u2=0;u3=0;u4=0;u5=0;
5 a2 p# T! s% F- J5 o
y1=0;y2=0;y3=0;
/ I1 `. t+ O1 v
oh=zeros(h,1); %神经网络中间层输出
/ e- d/ \% G1 g$ Q+ Y
I=oh;%神经网络中间层输入
/ |- Q& L N3 g$ w7 y3 c7 x
error1=0;
3 U" S1 l1 `& N M7 h$ }
error2=0;
% H$ N- ?% }' o/ N( p3 T
ts=0.003;
, |5 Q n9 w! n2 `9 \
for k=1:1:1000,
& D+ Y# N5 l0 h- V% U* s) P
time(k)=k*ts;
3 V% i/ a- k- H2 a/ X
if S==1,
. ?; k6 z7 Y" Z0 ^# m* i
rin(k)=1.0;
) q. u2 u Y/ v
elseif S==2,
/ t% f( U1 y. e; t$ N! D
rin(k)=sin(1*2*pi*k*ts);
7 f7 X& v* k! U. z
end
; Q8 [; A4 x9 J0 J4 l
%非线性模型
& T: B1 T- Z5 O+ E2 I! D! r! j
a(k)=1+0.15*sin(k*pi*ts/25);
- v8 Z& [5 [' d# |
y(k)=(a(k)*y1+u1)/(1+y1^2)+u1;
5 o4 d3 x G9 Y* W! n, g# \
error(k)=rin(k)-y(k);
2 ]# a8 b8 m# a3 |
xi=[rin(k),y(k),error(k),1];
4 r' A, r- S! Z/ Z, _ x; M0 p% i+ [
x(1)=error(k)-error1;
0 i' V5 B' d* a: r
x(2)=error(k);
5 J4 e6 P: Y# H0 ^. Y/ p, X
x(3)=error(k)-2*error1+error2;
# B' D) [7 _$ a+ @5 w
ed=[x(1);x(2);x(3)];
2 _2 ?( p, Z% D y( u6 ^! h# P
I=xi*wi';
7 O1 W2 W# K0 a0 }
for j=1:1:h
+ d4 V t% h* v4 g' ~$ K3 t
oh(j)=(exp(I(j))-exp(-I(j)))/(exp(I(j))+exp(-I(j)));
" j# g1 B8 H) `- J8 t, R
end
4 U# k+ m& J6 P! V3 I
K=wo*oh; %输出层
6 O% n. j* c$ u1 M
for j=1:1:Out
. Z, I3 p* w2 r
K(j)=exp(K(j))/(exp(K(j))+exp(-K(j))); %求 kp,ti,td
( H; f$ @, {$ b; h
end
w( e9 C8 J) G" s
kp(k)=K(1);ti(k)=K(2);td(k)=K(3);
9 }4 E+ M5 h1 Q/ e
Kd=[kp(k),ti(k),td(k)];
/ f( u. ]& @1 B5 ?$ _9 Z
du(k)=Kd*ed;
% E$ A4 u& J8 U% r
u(k)=u1+du(k);
& P: p) `. W4 b0 D4 x6 o' d% _ g, e
if u(k)>=10, %限制控制器输出
- B$ A3 w: e D; r+ s
u(k)=10;
% u1 h2 S: W* V5 j, q( w- O2 o
end
- m6 G. o2 [$ D+ \* F) M, N
if u(k)<=-10,
( i6 t. i- I2 ?% P
u(k)=-10;
% F; N% D5 m% O, `' x6 m4 U
end
3 ^) S& I% F; l; k8 l7 y" f# v
dyu(k)=sign((y(k)-y1)/(u(k)-u1+0.0000001));
$ {: H/ b( C3 A8 \7 V
for j=1:1:Out,
6 G1 X/ m* v8 t& P
dK(j)=2/(exp(K(j))+exp(-K(j)))^2;
! I! [# O+ C( w b6 a X; N
end
$ g! D' B P9 l" w; m' o
for i=1:1:Out,
+ u( [; N/ l0 B0 F
de3(i)=error(k)*dyu(k)*ed(i)*dK(i);
; u8 @0 X7 B8 [& V9 S+ Q
end
8 P/ M4 \+ p3 l! M3 [; Y
for j=1:1:Out,
! p6 i+ b) Y$ U* x! _/ T
for i=1:1:h,
" N/ r/ f" j2 W: i0 o: l1 N
dwo=x1*de3(j)*oh(i)+a1*(wo1-wo2);
" f# x/ F! G7 N" ?' P; }, E$ O% ~+ n
end
: ~: e: {* G; A& c
end
% [% s0 R5 V( F) m5 }
wo=wo1+dwo+a1*(wo1-wo2);
. c2 E: t) @5 q# X# [
%隐含层
0 V$ l/ }* ~& K: a! d6 T- m
for i=1:1:h,
' K, c5 u/ K* n* I' i2 r. a, `/ Z/ e2 V
dO(i)=4/(exp(I(i))+exp(-I(i)))^2;
: P7 D; f+ d- W t( b
end
/ E T! f4 j% ?- @/ b: V2 N7 \
seg=de3*wo;
/ D, h5 L: y+ U5 V
for i=1:1:h
, W5 }0 p0 d3 k, M9 s8 d
de2(i)=dO(i)*seg(i);
# H4 l) y5 n8 E, o0 G# \) W
end
" Y) [: K8 |, @+ l i; u
dwi=x1*de2'*xi;
! V0 F P: z/ Y1 m4 p9 Q
wi=wi1+dwi+a1*(wi1-wi2);
# y/ \* a) B$ G4 P" D1 u
%参数更新
- N9 ^* x: M6 E( q
u5=u4;u4=u3;u3=u2;u2=u1;u1=u(k);
+ N8 G0 K5 {/ K
y2=y1;y1=y(k);
" i. b+ V; f9 u4 v. E
wo3=wo2;wo2=wo1;wo1=wo;
# N# g4 j$ r, u% z
wi3=wi2;wi2=wi1;wi1=wi;
4 X `1 q" G/ K0 c7 }2 b6 }
error2=error1;
" B* V9 Z: v' Q/ V1 S
error1=error(k);
4 W, }" q" s S
end
" o+ @$ u. s# o! w+ H1 v& ^( G/ Q9 Z
figure(1);
% T- K* E1 I( f2 d# c- @% x1 R
plot(time,rin,'r',time,y,'c');
& N5 q; j3 W4 g8 H$ s4 q
xlabel('时间(秒)');ylabel('输出跟踪输入的响应曲线');
0 p/ s6 A7 E. j7 B- h
figure(2);
3 j" J/ Z i* _/ S1 U
plot(time,u,'r');
w( y% A# {" Z; @+ w
xlabel('时间(秒)');ylabel('控制信号 u(k)的变化曲线');
. l; F( B3 L# f/ O$ ?
figure(3);
) p' I" l e g. j- U
subplot(311);
3 C6 H ]# O5 f |
plot(time,kp,'r');
9 E$ I9 W L! Z+ \5 F, o7 C
xlabel('时间(秒)');ylabel('参数 kp');
0 K2 H' \" k8 ?' E
subplot(312);
0 d g8 C7 e+ I3 E/ ~2 Y
plot(time,ti,'r');
+ \) S: h1 G) q
xlabel('时间(秒)');ylabel('参数 ki');
: }) E1 W( ^ y7 ]
subplot(313);
; ^( h7 ]. v0 Y: |, m
plot(time,td,'r');
) p1 K2 i3 b! X ^6 E; D
xlabel('时间(秒)');ylabel('参数 kd');
! s( A7 M) W* o( X
5 F) U+ x; M2 _ |0 ^
7 }$ m- r$ P' w4 X
目标值不能过大怎么解决
( F3 l4 J0 O. o
作者:
nkkopd
时间:
2021-3-16 14:19
帮你顶一下
作者:
kekek
时间:
2021-3-16 15:46
这个可能跟输入样本关系较大
作者:
pTDbn25
时间:
2021-3-16 16:00
欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/)
Powered by Discuz! X3.2