💥💥💥💥💥💥💞💞💞💞💞💞💞💞欢迎来到海神之光博客之家💞💞💞💞💞💞💞💞💥💥💥💥💥💥
✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进;
🍎个人主页:海神之光
🏆代码获取方式:
海神之光Matlab王者学习之路—代码获取方式
⛳️座右铭:行百里者,半于九十。
更多Matlab智能算法神经网络预测与分类仿真内容点击👇
①Matlab神经网络预测与分类 (进阶版)
②付费专栏Matlab智能算法神经网络预测与分类(中级版)
③付费专栏Matlab智能算法神经网络预测与分类(初级版)
⛳️关注优快云海神之光,更多资源等你来!!
⛄一、蜣螂算法优化时间卷积神经网络DBO-TCN电力负荷预测简介
摘要:蜣螂优化算法( Dung beetle optimizer, DBO), 是由 Jiankai Xue 等于2022 年提出的一种群体智能优化算法。其灵感来源于蜣螂的生物行为过程,具有寻优能力强,收敛速度快的特点。
1 蜣螂优化算法
众所周知,蜣螂是自然界中一种常见的昆虫,动物的粪便为食,在全世界内分布广泛,扮演着自然界中分解者的角色,对生态系统平衡起着至关重要的作用。蜣螂有一个有趣的习惯,它们会把粪便捏成球,然后把它滚出来,目的是能够尽可能快速、有效地移动粪球,防止被其他蜣螂抢夺。蜣螂的可以利用天体线索(特别是太阳、月亮和偏振光)来导航,让粪球沿着直线滚动,如果完全没有光源(也就是在完全黑暗的环境中),蜣螂的就不再走直线,而是弯曲的,有时甚至略圆,有很多因素(如风、地面不平)都会导致蜣螂偏离原来的方向,蜣螂在滚粪球的过程如遇到障碍物而无法前进时,通常会爬到粪球上面"跳舞"(包括一系列的旋转和停顿),决定它们的运动方向。
从蜣螂的习性中观察发现,其获取粪球主要有以下两个目的:①用来产卵和养育下一代;②作为食物。蜣螂会把粪球埋起来,雌性蜣螂会在粪球里产卵,粪球不仅是蜣螂幼虫的发育场所,也是必需的食物。所以,粪球对蜣螂的生存起着不可替代的作用。
本位介绍了一种新的群体智能优化算法------DBO(Dung beetle optimizer)技术,其灵感主要来源于蜣螂的滚球、跳舞、觅食、偷窃、和繁殖等行为。
1.1 结构和算法
根据上面的讨论,蜣螂在滚动过程中需要通过天体线索导航,以保持粪球在直线路径上滚动。为了模拟滚球行为,要求蜣螂在整个搜索空间中沿着给定的方向移动。蜣螂的运动轨迹如图1所示。在图1中,蜣螂利用太阳来导航,其中红色箭头表示的是滚动的方向,同时,我们假设光源的强度也会影响蜣螂的路径。
1.2 计算步骤
DBO 算法作为一种新颖的基于 SI 的优化技术, 主要有六个步骤:
(1) 初始化蜣螂群和 DBO 算法的参数;
(2) 根据目标函数计算出所有目标代理的适应度值;
(3) 更新所有蛲螂的位置;
(4) 判断每个目标代理是否超出边界;
(5) 更新当前最优解及其适应度值;
(6) 重复上述步骤, 直到 t 满足终止准则, 输出全局最优解及其适应度值。
2 时间卷积神经网络
2.1 TCN背景
到目前为止,深度学习背景下的序列建模主题主要与递归神经网络架构(如LSTM和GRU)有关。S. Bai等人(*)认为,这种思维方式已经过时,在对序列数据进行建模时,应该将卷积网络作为主要候选者之一加以考虑。他们能够表明,在许多任务中,卷积网络可以取得比RNNs更好的性能,同时避免了递归模型的常见缺陷,如梯度爆炸/消失问题或缺乏内存保留。此外,使用卷积网络而不是递归网络可以提高性能,因为它允许并行计算输出。他们提出的架构称为时间卷积网络(TCN),将在下面的部分中进行解释。
TCN是指时间卷积网络,一种新型的可以用来解决时间序列预测的算法。
该算法于2016年由Lea等人首先提出,当时他们在做视频动作分割的研究,一般而言此常规过程包括两个步骤:首先,使用(通常)对时空信息进行编码的CNN来计算低级特征,其次,将这些低级特征输入到使用(通常是)捕获高级时域信息的分类器中)RNN。这种方法的主要缺点是需要两个单独的模型。
TCN提供了一种统一的方法来分层捕获所有两个级别的信息。
自从TCN提出后引起了巨大反响,有人认为:时间卷积网络(TCN)将取代RNN成为NLP或者时序预测领域的王者。
DataScienceCentral 的编辑主任William Vorhies给出的原因如下:
RNN耗时太长,由于网络一次只读取、解析输入文本中的一个单词(或字符),深度神经网络必须等前一个单词处理完,才能进行下一个单词的处理。这意味着 RNN 不能像 CNN 那样进行大规模并行处理;并且TCN的实际结果也要优于RNN算法。
TCN可以采用一系列任意长度并将其输出为相同长度。在使用一维完全卷积网络体系结构的情况下,使用因果卷积。一个关键特征是,时间t的输出仅与t之前发生的元素卷积。
2.2 TCN特点
TCN 模型以 CNN 模型为基础,并做了如下改进:
(1)适用序列模型:因果卷积(Causal Convolution)
(2)记忆历史:空洞卷积/膨胀卷积(Dilated Convolution),残差模块(Residual block)
下面将分别介绍 CNN 的扩展技术。
TCN的特点:
(1)因果卷积网络
(2)膨胀卷积方式(扩张卷积、空洞卷积)Dilated Causal Convolution
(3)残差块
(4)激活函数
(5)规范化
(6)正则化
(7)Dropout
⛄二、部分源代码
clear
close all
clc
data = readmatrix(‘data.csv’);
data = data(:,2:10);
w=1; % w是滑动窗口的大小
s=24; % 选取前24小时的所有数据去预测未来一小时的数据
m = 1200; %选取m个样本作训练集
n = 300; %选取n个样本作测试集
input_train=[];
for i =1:m
xx = data(1+w*(i-1):w*(i-1)+s,:);
xx =xx(😃;
input_train = [input_train,xx];
end
output_train =[];
output_train = data(2:m+1,1)';
input_test=[];
for i =m+1:m+n
xx = data(1+w*(i-1):w*(i-1)+s,:);
xx =xx(😃;
input_test = [input_test,xx];
end
output_test = data(m+2:m+n+1,1)';
%% 数据归一化
[inputn,inputps]=mapminmax(input_train,0,1);
[outputn,outputps]=mapminmax(output_train);
inputn_test=mapminmax(‘apply’,input_test,inputps);
%% 优化算法优化前,构建优化前的TCN模型
numFeatures = size(input_test,1);
outputSize = 1; %数据输出y的维度
numFilters = 64;
filterSize = 5;
dropoutFactor = 0.005;
numBlocks = 4;
% layer = sequenceInputLayer(numFeatures,Normalization=“rescale-symmetric”,Name=“input”);
% lgraph = layerGraph(layer);
%
% outputName = layer.Name;
%
% for i = 1:numBlocks
% dilationFactor = 2^(i-1);
%
% layers = [
% convolution1dLayer(filterSize,numFilters,DilationFactor=dilationFactor,Padding=“causal”,Name=“conv1_”+i)
% layerNormalizationLayer
% dropoutLayer(dropoutFactor)
% % spatialDropoutLayer(dropoutFactor)
% convolution1dLayer(filterSize,numFilters,DilationFactor=dilationFactor,Padding=“causal”)
% layerNormalizationLayer
% reluLayer
% dropoutLayer(dropoutFactor)
% additionLayer(2,Name=“add_”+i)];
%
% % Add and connect layers.
% lgraph = addLayers(lgraph,layers);
% lgraph = connectLayers(lgraph,outputName,“conv1_”+i);
%
% % Skip connection.
% if i == 1
% % Include convolution in first skip connection.
% layer = convolution1dLayer(1,numFilters,Name=“convSkip”);
%
% lgraph = addLayers(lgraph,layer);
% lgraph = connectLayers(lgraph,outputName,“convSkip”);
% lgraph = connectLayers(lgraph,“convSkip”,“add_” + i + “/in2”);
% else
% lgraph = connectLayers(lgraph,outputName,“add_” + i + “/in2”);
% end
%
% % Update layer output name.
% outputName = “add_” + i;
% end
%
% layers = [
% fullyConnectedLayer(outputSize,Name=“fc”)
% tanhLayer(‘name’,‘softmax’)
% regressionLayer(‘name’,‘output’)];
%
% lgraph = addLayers(lgraph,layers);
% lgraph = connectLayers(lgraph,outputName,“fc”);
%
% % 参数设置
% options0 = trainingOptions(‘adam’, … % 优化算法Adam
% ‘MaxEpochs’, 500, … % 最大训练次数
% ‘GradientThreshold’, 1, … % 梯度阈值
% ‘InitialLearnRate’, 0.001, … % 初始学习率
% ‘LearnRateSchedule’, ‘piecewise’, … % 学习率调整
% ‘LearnRateDropPeriod’,300, … % 训练100次后开始调整学习率
% ‘LearnRateDropFactor’,0.001, … % 学习率调整因子
% ‘L2Regularization’, 0.001, … % 正则化参数
% ‘ExecutionEnvironment’, ‘cpu’,… % 训练环境
% ‘Verbose’, 1, … % 关闭优化过程
% ‘Plots’, ‘none’); % 画出曲线
%
% % 网络训练
% net0 = trainNetwork(inputn,outputn,lgraph,options0 );
% an0 = net0.predict(inputn_test);
% test_simu0=mapminmax(‘reverse’,an0,outputps); %把仿真得到的数据还原为原始的数量级
% %误差指标
% error0 = output_test - test_simu0;
% mse0=mse(output_test,test_simu0)
% %% 标准TCN神经网络作图
% figure
% plot(output_test,‘b-’,‘markerfacecolor’,[0.5,0.5,0.9],‘MarkerSize’,6)
% hold on
% plot(test_simu0,‘r–’,‘MarkerSize’,6)
% title([‘TCN的mse误差:’,num2str(mse0)])
% legend(‘真实y’,‘预测的y’)
% xlabel(‘样本数’)
% ylabel(‘负荷值’)
% box off
% set(gcf,‘color’,‘w’)
%
%% 调用DBO优化TCN
disp(‘调用DBO优化TCN…,优化时间较长,请耐心等待,因为需要训练SearchAgents*Max_iterations次的TCN网络’)
% DBO优化参数设置
SearchAgents = 30; % 种群数量 30
Max_iterations = 20; % 迭代次数 20
lowerbound = [0.001 0.0001 20 2 2]; %五个参数的下限分别是正则化参数,学习率,滤波器个数:numFilters,滤波器大小:filterSize,区块数:numBlocks
upperbound = [0.1 0.01 100 10 10]; %五个参数的上限
dimension = length(lowerbound);%数量,即要优化的TCN参数个数
fboj=@(x)fun(x,inputn,outputn,inputn_test,outputps,output_test,numFeatures,outputSize);
[fMin,Best_pos,Convergence_curve] = DBO(SearchAgents,Max_iterations,lowerbound,upperbound,dimension,fboj);
L2Regularization = Best_pos(1,1); % 最佳L2正则化系数
InitialLearnRate = Best_pos(1,2) ;% 最佳初始学习率
numFilters = fix(Best_pos(1,3));
filterSize = fix(Best_pos(1,4));
numBlocks = fix(Best_pos(1,5));
disp([‘最优参数:’,num2str(L2Regularization),num2str(InitialLearnRate),num2str(numFilters),num2str(filterSize),num2str(numBlocks)])
disp(‘优化结束,将最佳net导出并用于测试…’)
setdemorandstream(pi);
[mse0_TCN,test_simu_TCN] = fun(lowerbound,inputn,outputn,inputn_test,outputps,output_
hold on
plot(test_simu_TCN,‘g’)
plot(test_simu_DBOTCN,‘r’)
plot(output_test,‘b’)
legend(‘TCN预测值’,‘DBO-TCN预测值’,‘实际值’)
ylabel(‘预测结果’)
xlabel(‘预测样本’)
title([‘DBO-TCN的mse误差:’,num2str(mse_DBOTCN)])
box off
set(gcf,‘color’,‘w’)
figure
plot(abs(error_DBOTCN),‘g-*’)
hold on
plot(abs(error),‘-or’)
title(‘预测误差对比图’,‘fontsize’,12)
xlabel(‘预测样本’,‘fontsize’,12)
ylabel(‘误差绝对值’,‘fontsize’,12)
legend(‘DBO-TCN’,‘TCN’)
⛄三、运行结果
⛄四、matlab版本及参考文献
1 matlab版本
2014a
2 参考文献
[1]廖庆陵,窦震海,孙锴,朱亚玲.基于自适应粒子群算法优化支持向量机的负荷预测[J].现代电子技术. 2022,45(03)
3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除
🍅 仿真咨询
1 各类智能优化算法改进及应用
生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化
2 机器学习和深度学习方面
卷积神经网络(CNN)、LSTM、支持向量机(SVM)、最小二乘支持向量机(LSSVM)、极限学习机(ELM)、核极限学习机(KELM)、BP、RBF、宽度学习、DBN、RF、RBF、DELM、XGBOOST、TCN实现风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断
3 图像处理方面
图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知
4 路径规划方面
旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、车辆协同无人机路径规划、天线线性阵列分布优化、车间布局优化
5 无人机应用方面
无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配
6 无线传感器定位及布局方面
传感器部署优化、通信协议优化、路由优化、目标定位优化、Dv-Hop定位优化、Leach协议优化、WSN覆盖优化、组播优化、RSSI定位优化
7 信号处理方面
信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号、信号配时优化
8 电力系统方面
微电网优化、无功优化、配电网重构、储能配置
9 元胞自动机方面
交通流 人群疏散 病毒扩散 晶体生长
10 雷达方面
卡尔曼滤波跟踪、航迹关联、航迹融合