【多种改进粒子群算法进行比较】基于启发式算法的深度神经网络卸载策略研究【边缘计算】(Matlab代码实现)
本文综合考虑基于DNNs的应用响应时间、计算能耗和租用服务器的价格,使用启发式算法设计四种不同的任务卸载策略即基于终端设备的不卸载策略、基于云服务器的完全卸载策略、基于端云的部分卸载策略和基于端—边—云的多重资源卸载策略,同时综合粒子群算法和模拟退火算法提高算法的计算效率和计算结果的精准度。
💥💥💞💞欢迎来到本博客❤️❤️💥💥
🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
📋📋📋本文目录如下:🎁🎁🎁
目录
💥1 概述
摘要:近年来,深度神经网络在计算机领域应用越来越广泛,然而由于各类深度学习应用对计算能力具有较高的需求,无法运行在计算能力有限的终端设备运行中。若利用云端设备和边缘设备对不同任务进行分工协作,在提高应用响应延迟的同时可以降低终端设备的能量消耗。云端设备具有高计算能力,但数据在传输过程中往往具有较高的时延;边缘计算通过边缘服务器将各类资源下沉至更靠近终端设备侧,为终端设备提供了一定的计算资源的同时,减少网络数据流量压力。本文综合考虑基于DNNs的应用响应时间、计算能耗和租用服务器的价格,使用启发式算法设计四种不同的任务卸载策略即基于终端设备的不卸载策略、基于云服务器的完全卸载策略、基于端云的部分卸载策略和基于端—边—云的多重资源卸载策略,同时综合粒子群算法和模拟退火算法提高算法的计算效率和计算结果的精准度。通过基于模拟退火的粒子群算法使用仿真模拟实验找到在四种不同策略下的最优卸载方案,比较这几种不同卸载策略在处理不同的深度神经网络时的综合适应度值,验证了基于端—边—云的多重卸载策略在处理深度神经网络卸载问题时所具备的优越性。
关键词:深度神经网络;启发式算法;任务卸载策略;能耗、速度和成本综合优化
详细文章见第4部分。
📚2 运行结果
运行时间较长需要耐心等待哦!
部分代码:
%% 清空环境
clc
clear
close all
for num=1:20 %进行20次实验测试
runspped=1715265866.21;
lab=["vgg11","vgg13","vgg16","vgg19","googlenet","darknet53","fuse"];
file_name="测试结果"+string(num);
mkdir(file_name)
for i=1:6
X=xlsread("./params.xlsx",i); %读取的数据(输入修改)
task_num=size(X(:,9),1);
execution_time(1:task_num,1)=(X(:,9)/sum(X(:,9)))*1; %云服务器1执行时间
execution_time(1:task_num,2)=(X(:,9)/sum(X(:,9)))*1.3; %边缘服务器2执行时间
execution_time(1:task_num,3)=(X(:,9)/sum(X(:,9)))*1.4; %边缘服务器3执行时间
execution_time(1:task_num,4)=(X(:,9)/sum(X(:,9)))*2; %本地终端执行时间
%execution_time(:,:)=execution_time(:,:).*X(1,10);
execution_time(:,:)=execution_time(:,:).*sum(X(:,9))./(4*runspped*0.001);
narvs = size(X(:,9),1)+7; %目标函数的自变量个数
task_out=X(:,8);
task_in=X(1,4);
task=xlsread("./task.xlsx",i);
floot_num(i)=sum(X(:,9));
%% 初始化设置
if narvs<30
MaxNum = 300; % 粒子最大迭代次数
else
MaxNum=narvs*10;
end
%% 不卸载LOPSO
narvs=task_num+7;
x=zeros(1, narvs); % 粒子所在的位置
LO=object_value(x,task,execution_time,task_num,task_out,task_in);
disp("不卸载策略结果:");LO
LO_result_data=object_result_data(x,task,execution_time,task_num,task_out,task_in);
%% 基于云服务器的完全卸载(FOCPSO)
[FOC,FOC_strategy]=FOCPSO(task,execution_time,task_num,task_out,task_in);
disp("基于云服务器的完全卸载:");FOC
FOC_result_data=object_result_data(FOC_strategy,task,execution_time,task_num,task_out,task_in);
%% 基于端云的部分卸载(POPSO)
[PO,PO_strategy]=POPSO(task,execution_time,task_num,task_out,task_in,LO,MaxNum);
disp("基于端云的部分卸载:");PO
PO_result_data=object_result_data(PO_strategy,task,execution_time,task_num,task_out,task_in);
%% 端-云-边多重资源卸载策略(MRPSO)
[MR,MR_strategy] = MRPSO(task,execution_time,task_num,task_out,task_in,LO,MaxNum);
disp("端-云-边卸载策略:");MR
MR_result_data=object_result_data(MR_strategy,task,execution_time,task_num,task_out,task_in);
%% 结果存储
result(i,:)=[LO FOC PO MR];
purchase_cost(i,:)=[LO_result_data(1) FOC_result_data(1) PO_result_data(1) MR_result_data(1)];
completion_time(i,:)=[LO_result_data(2) FOC_result_data(2) PO_result_data(2) MR_result_data(2)];
Power_Cost(i,:)=[LO_result_data(3) FOC_result_data(3) PO_result_data(3) MR_result_data(3)];
%% 卸载方案存储
lables=["LOPSO";"FOCPSO";"POPSO";"MRPSO"];
strategy(1:4,:)=[zeros(1, narvs);FOC_strategy;PO_strategy;MR_strategy];
strategy=[lables,strategy];
strategy_name=lab(i);
xlswrite('./'+file_name+'/'+strategy_name+'.xls',strategy);
clear strategy;
end
%% 适应度值对比图
figure();
b=bar(result);
grid on;
xlabel('DNNs')
legend('LOPSO','FOCPSO','POPSO','MRPSO')
set(gca,'XTickLabel',{'vgg11','vgg13','vgg16','vgg19','googlenet','darknet53','fuse'})
title("适应度值对比图");
%% 云配置价格、执行时间、能耗对比图
figure();
b=bar(purchase_cost);
grid on;
xlabel('DNNs')
legend('LOPSO','FOCPSO','POPSO','MRPSO')
set(gca,'XTickLabel',{'vgg11','vgg13','vgg16','vgg19','googlenet','darknet53','fuse'})
title("云配置价格对比图");
figure();
b=bar(completion_time);
grid on;
xlabel('DNNs')
legend('LOPSO','FOCPSO','POPSO','MRPSO')
set(gca,'XTickLabel',{'vgg11','vgg13','vgg16','vgg19','googlenet','darknet53','fuse'})
title("执行时间对比图");
figure();
b=bar(Power_Cost);
grid on;
xlabel('DNNs')
legend('LOPSO','FOCPSO','POPSO','MRPSO')
set(gca,'XTickLabel',{'vgg11','vgg13','vgg16','vgg19','googlenet','darknet53','fuse'})
title("能耗对比图");
figure();
b=bar(floot_num);
grid on;
xlabel('DNNs')
set(gca,'XTickLabel',{'vgg11','vgg13','vgg16','vgg19','googlenet','darknet53','fuse'})
title("浮点运算次数");
%% 数据存储
lables1=[" ";"vgg11";"vgg13";"vgg16";"vgg19";"googlenet";"darknet53"];
lables2=["LOPSO","FOCPSO","POPSO","MRPSO"];
completion_time=[lables2;completion_time];
completion_time=[lables1,completion_time];
xlswrite('./'+file_name+'/completion_time.xls',completion_time);
purchase_cost=[lables2;purchase_cost];
purchase_cost=[lables1,purchase_cost];
xlswrite('./'+file_name+'/purchase_cost.xls',purchase_cost);
Power_Cost=[lables2;Power_Cost];
Power_Cost=[lables1,Power_Cost];
xlswrite('./'+file_name+'/Power_Cost.xls',Power_Cost);
result=[lables2;result];
result=[lables1,result];
xlswrite('./'+file_name+'/result.xls',result);
%% 清空环境
clc
clear
close all
end
🎉3 参考文献
部分理论来源于网络,如有侵权请联系删除。
[1]燕文浩,琚川徽,边缘计算环境中基于启发式算法的深度神经网络卸载策略
🌈4 Matlab代码、数据、文章
更多推荐
所有评论(0)