边缘计算环境中基于启发式算法的深度神经网络卸载策略(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

💥1 概述

近年来,深度神经网络在计算机领域应用越来越广泛,然而由于各类深度学习应用对计算能力具有较高的需求,无法运行在计算能力有限的终端设备运行中。若利用云端设备和边缘设备对不同任务进行分工协作,在提高应用响应延迟的同时可以降低终端设备的能量消耗。云端设备具有高计算能力,但数据在传输过程中往往具有较高的时延;边缘计算通过边缘服务器将各类资源下沉至更靠近终端设备侧,为终端设备提供了一定的计算资源的同时,减少网络数据流量压力。本文综合考虑基于DNNs的应用响应时间、计算能耗和租用服务器的价格,使用启发式算法设计四种不同的任务卸载策略即基于终端设备的不卸载策略、基于云服务器的完全卸载策略、基于端云的部分卸载策略和基于端—边—云的多重资源卸载策略,同时综合粒子群算法和模拟退火算法提高算法的计算效率和计算结果的精准度。通过基于模拟退火的粒子群算法使用仿真模拟实验找到在四种不同策略下的最优卸载方案,比较这几种不同卸载策略在处理不同的深度神经网络时的综合适应度值,验证了基于端—边—云的多重卸载策略在处理深度神经网络卸载问题时所具备的优越性。

在边缘计算环境中,深度神经网络(DNN)的卸载策略是一个重要的研究领域。由于DNN模型通常具有较高的计算复杂性和资源消耗,直接在边缘设备上运行可能并不现实。因此,研究人员提出了多种基于启发式算法的DNN卸载策略,其中粒子群算法(PSO)及其改进版本是重要的一种。

基于启发式算法的DNN卸载策略概述

启发式算法是一类用于寻找问题近似最优解的算法,它们通过模拟自然界或其他启发式过程来寻找解决方案。在边缘计算场景中,启发式算法可以用来指导DNN模型在何种条件下、在哪个边缘节点上进行卸载,从而平衡计算资源的分配,减少能耗,并确保服务质量。

系统模型中使用到的 DNNs 结构数字化模型和负载计算模型作为辅助模型建立仿真卸 载平台,将不同的深度神经网络的结构转换为具体的拓扑矩阵,通过负载计算模型确定每层 的浮点数计算量,从而可以真实地模拟出具体的卸载场景,辅助计算出具体的卸载方案。整体的系统流程图如图 1 所示。

深度神经网络任务的产生地总是终端机,输入数据总是直接存在于终端设备中。当终端 设备需要向边缘服务器或是云端服务器发出计算请求时,需要通过 WAN 或是 LAN 网络将数据 传输给对应的设备,边缘服务器或云端服务器接收到数据后进行计算,待计算完成后将计算 结果发送给下一个设备,通过几轮计算后,最终计算结果需要传输回终端设备。终端设备与 边缘服务器之间的距离较近,其两两之间通过 LAN 传输数据,而云端服务器与终端设备和边 缘服务器距离较远,其两两之间是同 WAN 传输数据,数据传输情况如图 2 所示。

粒子群算法(PSO)及其改进

粒子群优化算法是一种群智优化算法,灵感来源于鸟群觅食或鱼群游动的集体行为。算法中的每个粒子代表一个潜在的解决方案,粒子在解空间中飞行,受到惯性因子、个体最优因子和群体最优因子的影响。通过不断更新每个粒子的位置和速度,最终收敛到全局最优解。

数学模型:

全部数学模型见第4部分。 

基于改进PSO算法的DNN卸载策略

在基于改进PSO算法的DNN卸载策略中,每个粒子代表一个潜在的卸载方案,即DNN任务在云端和边缘节点间的分配方式。通过不断更新粒子的位置和速度,算法最终收敛到一个最优的卸载方案,该方案能够最小化系统总延迟和能耗。

流程图

仿真实验与结果分析

服务器订购成本、深度神经网络完成时间和能耗以 0.5、0.3 和 0.2 的重要性占比计算 适应度值。设计基于终端设备不卸载策略(LOPSO)、基于云端服务器的完全卸载策略(FOCPSO)、

基于端云的部分卸载策略(POPSO)和基于端—边—云的多重资源卸载策略(MRPSO)四种不

同的卸载策略。 

总结

使用启发式融合算法,让粒子群算法与模拟退火算法互补,使得算法计算出的结果更快

更精准。自行改善的融合算法,除粒子群算法和模拟退火算法外,融合算法中加入了历史最

优的概念,从一定概率上可以检测出算法是否陷入局部最优解,一旦检测出陷入局部最优解,

便延长迭代次数,同时降低降温系数,使得温度降得更快,增加当前温度值,使得模拟退火

搜索范围更广

对长时间陷入局部最优且一直未跳出局部最优的算法,在融合算法中加入了重新随机初

始化粒子群的想法,使得一旦检测出局部最优,将一步步加大搜索宽度,使得算法跳出局部

最优的可能性加大,直到跳出局部最优为止。

📚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 参考文献

部分理论来源于网络,如有侵权请联系删除。

🌈4 Matlab代码、数据文档讲解下载

 资料获取,更多粉丝福利,MATLAB|Simulink|Python资源获取

                                                           在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值