核心提示:MATLAB代做|FPGA代做-自适应粒子群算法matlab代码...
%% 清空环境
clc
clear all
%% 参数初始化
%粒子群算法中的两个参数
c1 = 2;
c2 = 2;
w=0.9;
maxgen=500; % 进化次数
sizepop=30; %种群规模
n=30;
Vmax=4;
Vmin=-4;
sigmax=1;
sigmin=0.1;
sig=1;
popmax=10;
popmin=-10;
range=20;
init=-10;
factor=0;
ind=0;
%% 产生初始粒子和速度
for i=1:sizepop
%随机产生一个种群
pop(i,:)=init+range*rand(1,n); %初始种群
V(i,:)=rand(1,n); %初始化速度
%计算适应度
fitness(i)=Rastrigrin(pop(i,:)); %染色体的适应度
end
%% 个体极值和群体极值
[bestfitness bestindex]=min(fitness);
zbest=pop(bestindex,:); %全局最佳
gbest=pop; %个体最佳
fitnessgbest=fitness; %个体最佳适应度值
fitnesszbest=bestfitness; %全局最佳适应度值
%% 迭代寻优
for i=1:maxgen
ind_1=ind;
factor=calfactor(pop,sizepop,zbest);
if i==1
ind_1=1;
end
ind=fuzzyclassification(factor,ind_1);
if ind==1
c1=c1+unifrnd(0.05,0.1);
c2=c2-unifrnd(0.05,0.1);
elseif ind==2
c1=c1+0.5*unifrnd(0.05,0.1);
c2=c2-0.5*unifrnd(0.05,0.1);
elseif ind==3
c1=c1+0.5*unifrnd(0.05,0.1);
c2=c2+0.5*unifrnd(0.05,0.1);
p=zbest;
d=unidrnd(n);
p(d)=p(d)+(popmax-popmin)*normrnd(0,sig^2);
p(find(p(:)>popmax))=popmax;
p(find(p(:)<popmin))=popmin;
cv=Rastrigrin(p);
if cv<fitnesszbest
zbest=p;
else
[aa,bb]=max(fitness);
pop(bb,:)=p;
end
else
c1=c1-unifrnd(0.05,0.1);
c2=c2+unifrnd(0.05,0.1);
end
w=1/(1+1.5*exp(-2.6*factor));
if c1<1.5
c1=1.5;
elseif c1>2.5
c1=2.5;
end
if c2<1.5
c2=1.5;
elseif c2>2.5
c2=2.5;
end
crange=c1+c2;
c1=(c1/crange)*4;
c2=(c2/crange)*4;
sig=sigmax-(sigmax-sigmin)*(i/maxgen);
for j=1:sizepop
%速度更新
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,:)+V(j,:);
pop(j,find(pop(j,:)>popmax))=popmax;
pop(j,find(pop(j,:)<popmin))=popmin;
%适应度值
fitness(j)=Rastrigrin(pop(j,:));
end
for j=1:sizepop
%个体最优更新
if fitness(j) < fitnessgbest(j)
gbest(j,:) = pop(j,:);
fitnessgbest(j) = fitness(j);
end
%群体最优更新
if fitness(j) < fitnesszbest
zbest = pop(j,:);
fitnesszbest = fitness(j);
end
end
yy(i)=fitnesszbest;
end
%% 结果分析
figure(1);
plot(yy,'r');
title('最优个体适应度','fontsize',12);
xlabel('进化代数','fontsize',12);ylabel('适应度','fontsize',12);
联系:highspeedlogic
QQ :1224848052
微信:HuangL1121
邮箱:1224848052@qq.com
微信扫一扫: