萤火虫算法matlab实现,萤火虫算法,matlab代码.doc

萤火虫算法,matlab代码.doc

%% 算法说明:荧火虫算法

clc; %清屏

clear all; %清除变量

format long; %确定精度

%% 各参数初始化开始

domx=[-5.12,5.12;-5.12,5.12];

% domx=[-2.048,2.048;-2.048,2.048]; %解空间

rho=0.4; %荧光素挥发因子

gamma=0.6; %适应度提取比例

beta=0.08; %邻域变化率

nt=5; %邻域阀值(邻域荧火虫数)

s=0.03; %步长

lo=5; %荧光素浓度

rs=5.12; %感知半径

r0=5.12;

% rs=2.048; %感知半径

% r0=2.048; %决策半径

%各参数初始化结束

iter_max=200; %最大迭代次数

%% 分配空间开始

m=size(domx,1); %函数空间维数

global n;

n=50; %种群规模

address=zeros(n,m); %分配荧火虫地址空间

value=zeros(n,1); %分配适应度存放空间

li=zeros(n,1); %分配荧光素存放空间

rdi=zeros(n,1); %分配荧火虫决策半径存放空间

uu=zeros(1,iter_max);

%% 荧火虫常量初始化开始

for i=1:m

address(:,i)=(domx(i,1)+(domx(i,2)-domx(i,1))*rand(n,1)); %初始化地址

% address(i,:)=5*rands(n,1); %随机产生初萤火虫所在位置

end

f=fun(address);

x=-5.12:.1:5.12;

% x=-2.048:.05:2.048;

[x,y] = meshgrid(x);

figure(1);

plot3(address(:,1),address(:,2),f,'k*')

hold on;

grid on;

z=-(x.^2-10*cos(2*pi.*x)+10+y.^2-10*cos(2*pi.*y)+10); %Rastrigin'函数

% z=-(x.^2+y.^2); %目标函数 J2

% z=-(20+x.^2-10*cos(2*pi.*x)+y.^2-10*cos(2*pi.*y)); %目标函数 J1

% z=-(-20*exp(-0.2*sqrt((x.^2+y.^2)/2))-exp((cos(2*pi*x)+cos(2*pi*y))/2)+20+exp(1)); %%目标函数

% z=-(0.5+sin(sqrt(x.^2 + y.^2).^2-0.5)./(1+0.001*(x.^2 + y.^2)).^2);%目标函数 J3

mesh(x,y,z)

xlabel('x轴');

ylabel('y轴');

zlabel('z轴');

title('萤火虫初始分布图');

li(:,1)=lo; %荧光素初始值

rdi(:,1)=r0; %决策半径初始值

t=1; %迭代累计量

%荧火虫常量初始化结束

%% 迭代开始

while(t<=iter_max)

li=(1-rho)*li+ gamma * fun(address); %.更新荧光素值li

%各荧火虫移动过程开始

for i=1:n

Ord_number=[]; %存放荧火虫序号

for j=1:n

if (norm(address(j,:)-address(i,:))

Ord_number(numel(Ord_number)+1)=j;

end

end

%计算Ord_number各元素被选择概率,确定j位置

if ~isempty(Ord_number) %先判断Ord_number个数

你可能感兴趣的:(萤火虫算法matlab实现)