一、遺傳算法簡介
1 引言
2 遺傳算法理論
2.1 遺傳算法的生物學基礎
2.2 遺傳算法的理論基礎
2.3 遺傳算法的基本概念
2.4 标準的遺傳算法
2.5 遺傳算法的特點
2.6 遺傳算法的改進方向
3 遺傳算法流程
4 關鍵參數說明
二、部分源代碼
%Single Link Inverted Pendulum Control
clear all;
close all;
global A B C D
%Single Link Inverted Pendulum Parameters
g=9.8;
M=1.0;
m=0.1;
L=0.5;
Fc=0.0005;
Fp=0.000002;
I=1/12*m*L^2;
l=1/2*L;
t1=m*(M+m)*g*l/[(M+m)*I+M*m*l^2];
t2=-m^2*g*l^2/[(m+M)*I+M*m*l^2];
t3=-m*l/[(M+m)*I+M*m*l^2];
t4=(I+m*l^2)/[(m+M)*I+M*m*l^2];
A=[0,1,0,0;
t1,0,0,0;
0,0,0,1;
t2,0,0,0];
B=[0;t3;0;t4];
C=[1,0,0,0;
0,0,1,0];
D=[0;0];
e1_1=0;e2_1=0;e3_1=0;e4_1=0;
u_1=0;
xk=[-10/57.3,0,0.20,0]; %Initial state
ts=0.02;
for k=1:1:1000
time(k)=k*ts;
Tspan=[0 ts];
para=u_1;
[t,x]=ode45('chap7_12f',Tspan,xk,[],para);
z=length(x);
xk=x(length(x),:);
r1(k)=0.0; %Pendulum Angle
r2(k)=0.0; %Pendulum Angle Rate
r3(k)=0.0; %Car Position
r4(k)=0.0; %Car Position Rate
x1(k)=xk(1);
x2(k)=xk(2);
x3(k)=xk(3);
x4(k)=xk(4);
e1(k)=r1(k)-x1(k);
e2(k)=r2(k)-x2(k);
e3(k)=r3(k)-x3(k);
e4(k)=r4(k)-x4(k);
de1(k)=e1(k)-e1_1;
u1(k)=-43.304*e1(k)-6.2366*de1(k);
de2(k)=e2(k)-e2_1;
u2(k)=-6.2366*e2(k)-6.2366*de2(k);
de3(k)=e3(k)-e3_1;
u3(k)=-6.2366*e3(k)-6.2366*de3(k);
de4(k)=e4(k)-e4_1;
u4(k)=-6.2366*e4(k)-6.2366*de4(k);
u(k)=u1(k)+u2(k)+u3(k)+u4(k);
if u(k)>=10
u(k)=10;
elseif u(k)<=-10
u(k)=-10;
end
e1_1=e1(k);
e2_1=e2(k);
e3_1=e3(k);
e4_1=e4(k);
u_1=u(k);
end
ee1_1=0;ee2_1=0;ee3_1=0;ee4_1=0;uu_1=0;
xxk=[-10/57.3,0,0.20,0]; %Initial state
for i=1:1:1000
time1(i)=i*ts;
Tspan=[0 ts];
para1=uu_1;
[tt,xx]=ode45('chap7_12f',Tspan,xxk,[],para1);
zz=length(xx);
xxk=xx(length(xx),:);
rr1(i)=0.0; %Pendulum Angle
rr2(i)=0.0; %Pendulum Angle Rate
rr3(i)=0.0; %Car Position
rr4(i)=0.0; %Car Position Rate
xx1(i)=xxk(1);
xx2(i)=xxk(2);
xx3(i)=xxk(3);
xx4(i)=xxk(4);
ee1(i)=rr1(i)-xx1(i);
ee2(i)=rr2(i)-xx2(i);
ee3(i)=rr3(i)-xx3(i);
ee4(i)=rr4(i)-xx4(i);
dee1(i)=ee1(i)-ee1_1;
uu1(i)=-50*ee1(i)-10*dee1(i);
dee2(i)=ee2(i)-ee2_1;
uu2(i)=-10*ee2(i)-10*dee2(i);
dee3(i)=ee3(i)-ee3_1;
uu3(i)=-10*ee3(i)-10*dee3(i);
dee4(i)=ee4(i)-ee4_1;
uu4(i)=-10*ee4(i)-10*dee4(i);
uu(i)=uu1(i)+uu2(i)+uu3(i)+uu4(i);
if u(i)>=10
u(i)=10;
elseif u(i)<=-10
u(i)=-10;
end
ee4_1=ee4(i);
uu_1=uu(i);
end
figure(1);
plot(time,r1,'r',time,x1,'b'); %Pendulum Angle
xlabel('time(s)');ylabel('Angle');
hold on
plot(time1,xx1,'--'); %Pendulum Angle
figure(2);
plot(time,r2,'r',time,x2,'b'); %Pendulum Angle Rate
xlabel('time(s)');ylabel('Angle rate');
hold on
plot(time1,xx2,'--');
figure(3);
plot(time,r3,'k',time,x3,'b'); %Car Position
xlabel('time(s)');ylabel('Cart position');
hold on
plot(time1,xx3,'--');
figure(4);
plot(time,r4,'r',time,x4,'b'); %Car Position Rate
xlabel('time(s)');ylabel('Cart rate');
hold on
plot(time1,xx4,'--');
figure(5);
plot(time,u,'b'); %Force F change
xlabel('time(s)');ylabel('Force');
hold on
plot(time1,uu,'--');
三、運作結果
四、matlab版本及參考文獻
1 matlab版本
2014a
2 參考文獻
[1] 包子陽,餘繼周,楊杉.智能優化算法及其MATLAB執行個體(第2版)[M].電子工業出版社,2016.
[2]張岩,吳水根.MATLAB優化算法源代碼[M].清華大學出版社,2017.
[3]周品.MATLAB 神經網絡設計與應用[M].清華大學出版社,2013.
[4]陳明.MATLAB神經網絡原理與執行個體精解[M].清華大學出版社,2013.
[5]方清城.MATLAB R2016a神經網絡設計與應用28個案例分析[M].清華大學出版社,2018.