✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。
🍎个人主页:Matlab科研工作室
🍊个人信条:格物致知。
更多Matlab仿真内容点击👇
⛄ 内容介绍
算法基本思想描述如下:在群体中,每个萤火虫个体被随机分布在目标函数定义的空间中,初始阶段,所有的萤火虫都具有相同的荧光素值和动态决策半径。其中,每个萤火虫个体根据来自动态决策半径内所有邻居萤火虫信号的强弱来决定其移动的方向。萤火虫的动态决策半径会随着在它范围内萤火虫个体的数目而变化,每个萤火虫的荧光素也会随着决策半径内萤火虫个体的数目而改变。萤火虫群优化算法是无记忆的,无需目标函数的全局信息和梯度信息,具有计算速度快,调节参数少,易于实现等特点。萤火虫进化过程中,每次迭代都由萤火虫的部署(初始化)、荧光素更新阶段、移动概率计算阶段、位置更新阶段、邻域范围更新阶段五个部分组成,现分别介绍如下:
1、萤火虫的部署(初始化)
2、荧光素更新阶段
3、移动概率计算阶段
4、位置更新阶段
5、邻域范围更新阶段
⛄ 部分代码
function error = fun(x,inputnum,hiddennum,outputnum,net,inputn,outputn)
%该函数用来计算适应度值
%x input 个体
%inputnum input 输入层节点数
%outputnum input 隐含层节点数
%net input 网络
%inputn input 训练输入数据
%outputn input 训练输出数据
%error output 个体适应度值
%提取
w1=x(1:inputnum*hiddennum);%十个权值
B1=x(inputnum*hiddennum+1:inputnum*hiddennum+hiddennum);%五个阈值
w2=x(inputnum*hiddennum+hiddennum+1:inputnum*hiddennum+hiddennum+hiddennum*outputnum);%五个权值
B2=x(inputnum*hiddennum+hiddennum+hiddennum*outputnum+1:inputnum*hiddennum+hiddennum+hiddennum*outputnum+outputnum);%一个阈值
%网络进化参数
net.trainParam.epochs=20;
net.trainParam.lr=0.1;
net.trainParam.goal=0.00001;
net.trainParam.show=100;
net.trainParam.showWindow=false;
%网络权值赋值
net.iw{1,1}=reshape(w1,hiddennum,inputnum);
net.lw{2,1}=reshape(w2,outputnum,hiddennum);
net.b{1}=reshape(B1,hiddennum,1);
net.b{2}=B2;
%应该是net是个结构体,然后第一个net.IW{1,1}是指第一层输入到隐藏层的权重,
%这里面第一个1代表隐藏层与此形成鲜明对比的就是第二行的代码:net.IW{2,1}则是说第一个隐藏层的输入矢量到输出层的权重,
%这里面的2代表输出层。理清这些,然后我们来看就很明显了:第一的赋值右边是将第一个w1矩阵变形为隐藏层个数*输入层个数。
%第二个则是从隐藏层到输出层,其中W1,W2都是权重矩阵。最后一行是对第一层(1表示出来了)的阈值赋值。
%网络训练
net=train(net,inputn,outputn);
an=sim(net,inputn);
error=sum(abs(an-outputn));
⛄ 运行结果
⛄ 参考文献
[1]郭晨霞,刘佑祺,杨瑞峰.基于萤火虫算法优化BP神经网络的光强度补偿方法[J].电子测量技术,2021,44(13):6-10.