萤火虫GSO算法matlab代码
不知道好不好用~反正萤火虫就那样子,谁用谁知道~
%% 算法说明:荧火虫算法(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字,全部文档内容请下载后查看。喜欢就下载吧 ……相关推荐:
- [高中教育]电子线路高频非线性部分2.1
- [高中教育]中班美术活动——我的小手
- [高中教育]常用三极管参数大全
- [高中教育]计算机常见故障及解决办法
- [高中教育]风机基础环水平度控制方法探讨
- [高中教育]机械安全工程(专升本)阶段性作业3
- [高中教育]2009年安徽省高考语文考试说明刍议
- [高中教育]unit5 let's eat公开课教案设
- [高中教育]计算机网络原理课后习题答案
- [高中教育]2016-2022年中国新能源市场研究与投资
- [高中教育]2015-2020年中国会议行业市场评估及投
- [高中教育]经销商大会峰会主持人串词开场白
- [高中教育]2014新版北师大数学三年级上册小熊购物
- [高中教育]七年级第一学期体育与健康全套教案
- [高中教育]第三章:国际金融市场
- [高中教育]六年级下册数学单元测试-2.比例 北师大
- [高中教育]2016年上海海事大学法学院624刑法之《
- [高中教育]中国碳化钙产业竞争现状及未来五年投资
- [高中教育]网络时代,我们怎么玩
- [高中教育]圆锥曲线——高中数学基础知识与典型例
- 高集医院世界艾滋病宣传日活动方案
- 苏教版六年级英语上册期末试卷含答案
- 全民枪战生化英雄模式幽灵怎么玩 生化
- 灿烂的宋元文化一导学案
- 第2章货币资金与应收款项
- 北师大版八年级下册数学第三章《分式》
- 浅析高分子材料成型加工技术
- 华南理工大学2013年度共青团先进集体及
- 教师资格科目二小学教案模板(共合集)
- 工程扩建可研报告
- 中华人民共和国海事局2014年度招录公务
- 提高农村小学生作文能力的教学尝试
- 徒手心肺复苏术操作步骤
- 毛概试题库7-15章
- 2014-2015学年度(上)初中班主任工作计
- 企业驾驶员安全生产责任书
- 第07章 不等式测试题-2016年高考文科数
- 医疗器械经营企业工作程序
- 考研英语必背36篇_彩版_精华
- 初中9月13-15假期作业 (1)




