%% 该代码为基于pso算法优化的PID神经网络的系统控制算法
%
%% 清空环境变量
clc
clear
%% 粒子初始化
%粒子群算法中的两个参数
c1=1.49445;
c2=1.49445;
%最大最小权值
wmax=0.9;
wmin=0.1;
%最大最小速度
Vmax=0.03;
Vmin=-0.03;
%最大最小个体
popmax=0.3;
popmin=-0.3;
maxgen=50; % 进化次数
sizepop=20; %种群规模
%随机产生一个种群
for i=1:sizepop
pop(i,:)=0.03*rand(1,45); %个体编码
fitness(i)=fun(pop(i,:)); %染色体的适应度
V(i,:)=0.003*rands(1,45); %初始化速度
end
%% 初始种群极值
%找最好的染色体
[bestfitness bestindex]=min(fitness);
zbest=pop(bestindex,:); %全局最佳
gbest=pop; %个体最佳
fitnessgbest=fitness; %个体最佳适应度值
fitnesszbest=bestfitness; %全局最佳适应度值
%% 迭代寻优
for i=1:maxgen
i;
for j=1:sizepop
w=(wmax-wmin)*(i-1)/(maxgen)+wmin; %权值线性变化
V(j,:)=w*V(j,:) + c1*rand*(gbest(j,:) - pop(j,:)) + c2*rand*(zbest - pop(j,:)); %速度更新
V(j,find(V(j,:)>Vmax))=Vmax; %小于最大速度
V(j,find(V(j,:)<Vmin))=Vmin; %大于最小速度
%种群更新
pop(j,:)=pop(j,:)+0.5*V(j,:);
for k=1:45
if rand>0.95
pop(j,k)=0.3*rand; %自适应变异
end
end
pop(j,find(pop(j,:)>popmax))=popmax; %小于个体最大值
pop(j,find(pop(j,:)<popmin))=popmin; %大于个体最小值
%适应度值
fitness(j)=fun(pop(j,:));
end
for j=1:sizepop
%个体极值更新
if fitness(j)<fitnessgbest(j)
gbest(j,:) = pop(j,:);
fitnessgbest(j) = fitness(j);
end
【神经网络学习笔记】PID神经元网络解耦控制算法
最新推荐文章于 2024-05-13 09:16:24 发布