function y = fun(x)
y=-20*exp(-0.2*sqrt((x(1)^2+x(2)^2)/2))-exp((cos(2*pi*x(1))+cos(2*pi*x(2)))/2)+20+2.71289
%下面是主程序
%% 清空环境
clc
clear
%% 参数初始化
%粒子群算法中的两个参数
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)=fun(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)%ceil朝正无穷大方向取整
pop(j,k)=rand
end
%适应度值
fitness(j)=fun(pop(j,:))
%个体最优更新
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
%% 结果分析
plot(yy)
title(['适应度曲线 ' '终止代数毁模并=' num2str(maxgen)])
xlabel('进化代数')ylabel('适应度')
以上回答你满意么?
%% 清空环境clear
clc
tic
%% 参数初始化
% 粒子群算法中的两个参数
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) = fun(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) = fun(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
yy(i) = fitnesszbest
end
toc
%% 结果分析
plot(yy)
title(['适应度曲线' '终止代数=' num2str(maxgen)])
xlabel('进化代数')
ylabel('适应梁裂念度')
fun函数如下
function y = fun(x)
y = -20*exp(-0.2*sqrt((x(1)^2+x(2)^2)/2)) - exp((cos(2*pi*x(1))+ cos(2*pi*x(2)))/2) + 20 + 2.71289
绘制粒子群算法中适应度值与迭代次数曲线图的步骤如下:1、在matlab中编写粒子群算法的代码,包括初始化种群、计算适应度值、更新粒子位置和速度等步骤。在每次迭代中,记录下当前最优适应度值。
2、对于每次迭代,拦销手将当前最优适应度值记录到简嫌一个数组中。例如:best_fitness(iteration)=gbest_fitness。斗弯
3、在粒子群算法的代码中添加绘图函数,绘制出适应度值与迭代次数的曲线图。例如:plot(best_fitness)。
4、运行程序,即可在matlab中显示出适应度值与迭代次数的曲线图。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)