教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 高中教育 >

萤火虫GSO算法matlab代码

来源:网络收集 时间:2026-01-29
导读: 不知道好不好用~反正萤火虫就那样子,谁用谁知道~ %% 算法说明:荧火虫算法(GSO:Glowworm swarm optimisation:a new method for optimising mutlti-modal functions) %% 算法特征:只适用于求极大值(极小值可转化为求极大值) %% =============================

不知道好不好用~反正萤火虫就那样子,谁用谁知道~

%% 算法说明:荧火虫算法(GSO:Glowworm swarm optimisation:a new method for optimising mutlti-modal functions)

%% 算法特征:只适用于求极大值(极小值可转化为求极大值)

%% =============================================================== clc;%清屏

clear all;%清除变量

format long;%确定精度

% ================================初始化

================================

%domx=[-3,3;-3,3];%定义域

domx=[-2.048,2.048;-2.048,2.048];

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

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

beta=0.08;%邻域变化率

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

s=0.03;%步长

iot0=5;%荧光素浓度

rs=2.048;%3;%感知半径

r0=2.048;%3;%决策半径

% ================================初始化

================================

% ===============================分配空间

===============================

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

n=50;%群规模

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

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

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

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

% ===============================分配空间

===============================

% ===========================荧火虫常量初始

============================

%1.初始化地址

for i=1:m

gaddress(:,i)=domx(i,1)+(domx(i,2)-domx(i,1))*rand(n,1);

end

%2.初始化荧光素

ioti(:,1)=iot0;

%3.初始化决策半径

rdi(:,1)=r0;

iter_max=500;%最大迭代次数 开始结束开始结束化开始

不知道好不好用~反正萤火虫就那样子,谁用谁知道~

t=1;%迭代累计

% ===========================荧火虫常量初始化结============================

% =============================iter_max迭代开=============================

while(t<=iter_max)

%1.更新荧光素

ioti=(1-rho)*ioti+gamma*maxfun(gaddress);

%2.各荧火虫移动过程开始

for i=1:n

%2.1 决策半径内找更优点

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

for j=1:n

if (norm(gaddress(j,:)-gaddress(i,:))<rdi(i))&&(ioti(i,1)<ioti(j,1))

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

end

end

%2.2 找下一步移动的点开始

if length(Nit)>0 %先判断Nit个数不为0

Nitioti=ioti(Nit,1);%选出Nit荧光素

SumNitioti=sum(Nitioti);%Nit荧光素和

Molecular=Nitioti-ioti(i,1);%分子

Denominator=SumNitioti-ioti(i,1);%分母

Pij=Molecular./Denominator;%计算Nit各元素被选择概率

Pij=cumsum(Pij);%累计

Pij=Pij./Pij(end);%归一化

Pos=find(rand<Pij);%确定位置

j=Nit(Pos(1));%确定j的位置

%荧火虫i向j移动一小步

gaddress(i,:)=gaddress(i,:)+s*(gaddress(j,:)-gaddress(i,:))/norm(gaddress(j,:)-gaddress(i,:)); gaddress(i,:)=range(gaddress(i,:),domx);%限制范围

%更新决策半径

rdi(i)=rdi(i)+beta*(nt-length(Nit));

if rdi(i,1)<0

rdi(i,1)=0;

end

if rdi(i,1)>rs

rdi(i,1)=rs;

end

end

%2.2 找下一步移动的点结束

end 束始

不知道好不好用~反正萤火虫就那样子,谁用谁知道~

%2.各荧火虫移动过程结束

t=t+1;

end

% =============================iter_max迭代结束=============================

% =============================输出最

=============================

gvalue=maxfun(gaddress);%求各个荧火虫的值

disp('最大值为:')

num=find(gvalue==max(gvalue));%最大值序号

MaxValue=-max(gvalue)

disp('最优解为:')

BestAddress=gaddress(num,:)

% =============================输出最

=============================

function y=maxfun(x) %P104 函数J1

% j1=3*(1-x(:,1)).^2.*exp(-(x(:,1).^2+(x(:,2)+1).^2));

% j2=10*(x(:,1)./5-x(:,1).^3-x(:,2).^5).*exp(-(x(:,1).^2+x(:,2).^2));

% j3=(1/3)*exp(-((x(:,1)+1).^2+x(:,2)));

% y=j1-j2-j3;

%=================

dom=[-2.048,2.048;-2.048,2.048];%定义域范围

z=100.*(x(:,1).^2-x(:,2)).^2+(1-x(:,1)).^2;%目标函数

y=-z;

function X=range(X,dom)%输入向量X,定义域dom

n=size(X,2);%求列数即dom的行数n=size(dom,1)

for i=1:n

t=X(:,i);

t(t<dom(i,1))=dom(i,1);%限定左边范围

t(t>dom(i,2))=dom(i,2);%限定右边范围

X(:,i)=t;

end 优结优结果开果结始束

…… 此处隐藏:1118字,全部文档内容请下载后查看。喜欢就下载吧 ……
萤火虫GSO算法matlab代码.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/129489.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)