%% 算法说明:荧火虫算法(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=10; %群规模
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,:)
%========================输出最优结果结束=============================
没有合适的资源?快使用搜索试试~ 我知道了~
萤火虫FA源代码
共4个文件
m:4个
3星 · 超过75%的资源 需积分: 49 39 下载量 171 浏览量
2017-02-16
14:36:36
上传
评论 3
收藏 2KB RAR 举报
温馨提示
matlab萤火虫FA 源代码,特别有用
资源推荐
资源详情
资源评论
收起资源包目录
FA源代码.rar (4个子文件)
GSO
GSO.m 3KB
range.m 218B
range - 副本.m 218B
maxfun.m 343B
共 4 条
- 1
资源评论
- 神奇的自动化2017-02-27不错,学习中。
- weixin_420723312020-04-10这是GSO,不要误导人
qq_36985493
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功