clc
clear
N=20;
visual=1;
step=0.01;
maxnum=200;
for i=1:N
x(i,:)=4*rand(1,2)-2*ones(1,2);
fitness(i)=f(x(i,:));
[fmin,index]=min(f(x(i,:)));
xmin=x(index);
end
for k=1:maxnum
for i=1:N
nf=1;
xc=[0,0];
for j=1:N
if abs(x(i,:)-x(j,:))>0&((x(i,1)-x(j,1))^2+(x(i,2)-x(j,2))^2)^1/2<visual
xc=xc+x(j,:);
nf=nf+1;
end
end
xc=xc/nf;
if f(xc)<f(x(i,:))
xsnext(i,:)=x(i,:)+step.*(xc-x(i,:))./((xc(1)-x(i,1))^2+(xc(2)-x(i,2))^2)^1/2;
else
xsnext(i,:)=prey2(x(i,:));
end
xmin=x(i,:);
fmin=f(x(i,:));
for j=1:N
if abs(x(i,:)-x(j,:))>0&((x(i,1)-x(j,1))^2+(x(i,2)-x(j,2))^2)^1/2<visual&f(x(j,:))<fmin
xmin=x(j,:);
fmin=f(x(j,:));
end
end
if xmin~=x(i,:)
xfnext(i,:)=x(i,:)+step.*(xmin-x(i,:))./((xmin(1)-x(i,1))^2+(xmin(2)-x(i,2))^2)^1/2;
xfnext(i,find(xfnext(i,:)>2))=2;
xfnext(i,find(xfnext(i,:)<-2))=-2;
else
xfnext(i,:)=prey2(x(i,:));
end
xnext=zeros(1,2);
if f(xsnext(i,:))<f(xfnext(i,:))
xnext(i,:)=xsnext(i,:);
else
xnext(i,:)=xfnext(i,:);
end
x(i,:)=xnext(i,:);
if f(xnext(i,:))<fmin
fmin=f(xnext(i,:));
xmin=xnext(i,:);
end
end
yy(k)=fmin ;
end
plot(yy,'r--')
grid on
title(['适应度曲线 ''终止代数=' num2str(maxnum)]);
xlabel('进化代数');
ylabel('适应度');
xmin
fmin
%% 参数初始化
%粒子群算法中的两个参数
c1 = 1.49445;
c2 = 1.49445;
maxgen=200; % 进化次数
sizepop=20; %种群规模
Vmax=1;
Vmin=-1;
popmax=5;
popmin=-5;
%% 产生初始粒子和速度
for i=1:sizepop
%随机产生一个种群
pop(i,:)=5*rands(1,2); %初始种群
V(i,:)=rands(1,2); %初始化速度
%计算适应度
fitness(i)=f(pop(i,:)); %染色体的适应度
end
%找最好的染色体
[bestfitness bestindex]=min(fitness);
zbest=pop(bestindex,:); %全局最佳
gbest=pop; %个体最佳
fitnessgbest=fitness; %个体最佳适应度值
fitnesszbest=bestfitness; %全局最佳适应度值
%% 迭代寻优
for i=1:maxgen
for j=1:sizepop
%速度更新
V(j,:) = 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,:);
pop(j,find(pop(j,:)>popmax))=popmax;
pop(j,find(pop(j,:)<popmin))=popmin;
%自适应变异
if rand>0.8
k=ceil(2*rand);
pop(j,k)=rand;
end
%适应度值
fitness(j)=f(pop(j,:));
end
%个体最优更新
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
yyy(i)=fitnesszbest;
end
hold on
%% 结果分析
plot(yyy,'b')
legend('AFSA','PSO')
title(['适应度曲线 ' '终止代数=' num2str(maxgen)]);
xlabel('进化代数');ylabel('适应度');
hold off
zbest
fitnesszbest
IT狂飙
- 粉丝: 4826
- 资源: 2653
最新资源
- 小波多尺度同步压缩变换一维数据转换二维图像的方法(Matlab代码和数据)
- 小波二阶同步压缩变换一维数据转换二维图像的方法(Matlab代码和数据)
- 小波同步提取变换一维数据转换二维图像的方法(Matlab代码和数据)
- cailiaocailiaocailiaocailiao.7z.txt
- fxtrace2024111023332001.log
- C# Winform 自定义控件 TextBox
- HengCe-18900-2024-2030全球与中国IO-Link技术市场现状及未来发展趋势-样本.docx
- java课程设计-拼图游戏.zip学习资源
- qt+udp+timer
- Java课程设计你画我猜小游戏之你猜我猜不猜.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈