欢迎来到本博客❤️❤️❤️
目录
0 知识回顾
1 ACO-BP算法
2 ACO-BP算法基本思路
3 具体步骤
4 Matlab代码实现
5 运行结果
6 参考文献
7 写在最后
智能优化算法—蚁群算法(Python实现) |
基于改进的蚂蚁群算法求解最短路径问题、二次分配问题、背包问题【Matlab&Python代码实现】 |
Matlab|基于BP神经网络进行电力系统短期负荷预测 |
传统的BP神经网络训练采用的是误差反向传播学习算法,它的优化目标函数相对复杂,较容易出现陷人局部最优、收敛速度慢等问题[6]。由于BP神经网络的训练算法实质上是对其网络权值和阈值进行迭代调整,因此用蚁群优化算法替代BP算法完成对神经网络权阈值的迭代调整,并最终完成神经网络的训练。
蚁群算法解决优化问题的基本思路为:用蚂蚁的行走路径表示待优化问题的可行解,整个蚂蚁群体的所有路径构成待优化问题的解空间。路径较短的蚂蚁释放较多的信息素。经过一定时间,信息素浓度在较短的路径上累计较高,所有选择此路径的蚂蚁也逐渐增多,最终,整个蚁群会在正反馈的作用下集中在最佳路径上,此时对应的便是待优化问题的最优解。
首先根据权值和阈值的取值池间,将的E义以刘你以S个等长区间,即每个区间的长度被作s等分,将区间的临界值或选择区间中的随机值作为候选值。确定参数个数n,包括网络中所有的权阈值。每个参数Pi(i=1,2,…,n)对应个有S个元素的集合l, ,这些元素为Pi的可能取值。
1)参数初始化:将所有权值和阈值进行S等分,所有区间初始信息素О,信息素残留系教入,1后尽系代i,前区间信息表为Tabu,最大迭代次数C,网络全局误差E,最大学习次数N;
2)权值和阈值选择:蚁群m只蚂蚁,对于蚂蚁k依据概率公式(2)的寻路规则进行选择节点所在区间,蚁群迭代一次则完成一次解的构造:
式中为集合中第j个元素的信息素值;
3)蚁群寻优判断:蚁群迭代一次得到的构造解,则是当前迭代后得到误差最小的一组解,计算误差Ec ,判断是否达到蚁群要求,若是则转到4),否则转到5);
4)网络训练:将蚁群迭代得到的最优构造解,作为初始权值和阈值,选取数据集对网络进行训练,直到满足结束条件即最大学习次数,完成学习。否则,继续学习;
5)更新信息素:根据式(3)、式( 4)、式(5)对所有区间信息素全局更新,并重置信息表:
图1 ACO-BP算法流程图
本文仅展现部分代码,全部代码见:
基于蚂蚁优化算法的BP神经网络在负荷预测中的应用研究(Matlab完整代码实现)
function [y,trace]=antforelm(inputnum,hiddennum,outputnum,net,inputn_train,label_train);%蚁群算法%%%%%%%%%%%%%%%%%%%%蚁群算法求函数极值%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%初始化%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
m=5; %蚂蚁个数
G_max=100; %最大迭代次数
Rho=0.5; %信息素蒸发系数
P0=0.5; %转移概率常数
XMAX= 1; %搜索变量x最大值
XMIN=-1; %搜索变量x最小值
d=inputnum*hiddennum+hiddennum+hiddennum*outputnum+outputnum;
%%%%%%%%%%%%%%%%%随机设置蚂蚁初始位置%%%%%%%%%%%%%%%%%%%%%%
for i=1:m
X(i,:)=(XMIN+(XMAX-XMIN).*rand(1,d));
Tau(i)=fun(X(i,:),inputnum,hiddennum,outputnum,net,inputn_train,label_train);
end
bestfitness=inf;
bestfitness_position=inf*ones(1,d);
step=0.1; %局部搜索步长
for NC=1:G_max
NC
lamda=1/NC;
[Tau_best,BestIndex]=min(Tau);
%%%%%%%%%%%%%%%%%%计算状态转移概率%%%%%%%%%%%%%%%%%%%%
for i=1:m
P(NC,i)=(Tau(BestIndex)-Tau(i))/Tau(BestIndex);
end
%%%%%%%%%%%%%%%%%%%%%%位置更新%%%%%%%%%%%%%%%%%%%%%%%%
for i=1:m
fun_i=fun(X(i,:),inputnum,hiddennum,outputnum,net,inputn_train,label_train);
%%%%%%%%%%%%%%%%%局部搜索%%%%%%%%%%%%%%%%%%%%%%
if P(NC,i)XMAX
temp1(j)=rand;
end
end
fun_temp=fun(temp1,inputnum,hiddennum,outputnum,net,inputn_train,label_train);
%%%%%%%%%%%%%%%%%%蚂蚁判断是否移动%%%%%%%%%%%%%%%%%%
if fun_temp
[1]陈智雨,陆金桂.基于ACO-BP神经网络的光伏系统发电功率预测[J].机械制造与自动化,2020,49(01):173-175+187.DOI:10.19344/j.cnki.issn1671-5276.2020.01.047.
部分理论引用网络文献,如有侵权请联系删除。