代码"/>
MATLAB代码
%以下代码可直接移入MATLAB编辑窗口运行
clc;
clear all;
c1 = 1.49445;
c2 = 1.49445;%速度学习因子
max_genxin = 100;%最大迭代次数
size_zhongqun = 20;%种群规模
max_geti = 5;%个体(自变量取值)最大值(位置)
min_geti = -5;
v_max = 1;%速度最大值
v_min = -1;%速度最小值
%%种群初始化
var_num = 2;%适应度函数自变量个数
zhongqun = 5*rand(size_zhongqun,var_num);%初始化粒子
v_zhongqun = rand(size_zhongqun,var_num);%初始化粒子速度
for i = 1:size_zhongqun
fitness(i) = fun_shiyingdu(zhongqun(i,:)); %计算适应度值
end
%%寻找初始极值
[bestfitness_value, bestfitness_weizhi] =min(fitness);
jizhi_zhongqun =zhongqun(bestfitness_weizhi,:);%群体极值位置
jizhi_geti = zhongqun;%个体极值位置
fitnessbest_geti = fitness;%个体极值适应度值
fitnessbest_group = bestfitness_value;%群体极值适应度值
%%迭代寻优
for i = 1:max_genxin
for j = 1:size_zhongqun
%速度更新
v_zhongqun(j,:) = v_zhongqun(j,:)+c1*rand*(jizhi_geti(j,:)-zhongqun(j,:))+c2*rand*(jizhi_zhongqun-zhongqun(j,:));
v_zhongqun(j,v_zhongqun(j,:)>v_max) = v_max;
v_zhongqun(j,v_zhongqun(j,:)<v_min) = v_min;
%粒子更新
zhongqun(j,:) =zhongqun(j,:)+0.5*v_zhongqun(j,:);
zhongqun(j,zhongqun(j,:) >max_geti) = max_geti;
zhongqun(j,zhongqun(j,:)< min_geti) = min_geti;
%粒子适应度值
fitness(j) = fun_shiyingdu(zhongqun(j,:));
end
%个体极值和群体极值更新
for j = 1:size_zhongqun
%个体极值更新
if fitness(j) < fitnessbest_geti(j)
jizhi_geti(j,:) = zhongqun(j,:);
fitnessbest_geti(j) = fitness(j);
end
%群体极值更新
if fitness(j) < fitnessbest_group
jizhi_zhongqun = zhongqun(j,:);
fitnessbest_group = fitness(j);
end
end
%没代最优值记录到yy数组
yy(i) = fitnessbest_group;
end
%%画出每代最优个体适应度值
plot(yy);
title('最优个体适应度值','fontsize',12);
xlabel('进化次数');
ylabel('适应度值');
%需要在同一个工作区存以下函数文件: fun_shiyingdu.m
function y = fun_shiyingdu(x) %计算适应度值的函数
% x input 粒子的初始位置
% y output
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+exp(1);
更多推荐
MATLAB代码
发布评论