我是靠谱客的博主 秀丽茉莉,最近开发中收集的这篇文章主要介绍边缘计算卸载算法--GT-GAOA,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

GT-GAOA卸载算法

背景:我实现该算法是在边缘计算单个工作流环境中,下面可以看到此背景下的java代码实现。

1.算法伪代码

在这里插入图片描述
下面是procedure1与procedure2:
在这里插入图片描述

2.参数说明

M是任意移动设备 i 计算任务的类型数,C是迭代次数,N是移动设备数。

3.结果

一个最优的计算卸载决策S,整体最小计算费用…

4.分析

(1)Algorithm2:

  1. 初始化:初始化每个终端设备MD上的一个工作流的所有任务(假设任务数为taskNum个)设置为不卸载{0,0,…,0}。
  2. 对于每一个MD i 上的一个工作流:按照Procedure1计算MD i 的局部最优卸载决策(这个卸载决策具有最小的优化目标值),如果新计算出来的MD i 的优化目标值小于之前的优化目标值,则将该MD i 添加到博弈更新圈。
  3. 只要博弈更新圈不为空:从博弈更新圈中随机挑选一个MD i ,赋予 i 更新卸载决策的机会,i 进行更新,并广播给其他MD(因为该更新的MD会占用公共资源),保存 i 更新后的卸载策略。博弈圈中的其他MD暂不更新。
  4. 基于计算卸载决策 S 计算整体最小的优化目标值(eg:Time、Energy)。
  5. 返回 S 与最小优化目标值。

(2)Procedure1~2:

  1. 对于工作流中的每一个job(卸载任务):
  2. 分别计算job在本地、边缘服务器、云服务器上的优化目标值 a,b,c。
  3. 先找出不卸载的job:如果当前 job 在本地执行优化目标值最小,则设置它的卸载策略为0(不卸载),卸载的 job 放在一个集合M中。
  4. 再遍历M集合,分别计算该任务 job 卸载到云服务器、边缘服务器的优化目标值 c,d。
  5. 若c < d 卸载到云服务器,反之,卸载到边缘服务器。
5.我的java代码实现
/**
* 卸载策略初始化
*/
void GT_GAOAInit(){
offloadStra = new int[taskNum];
offloadJobIndex = new ArrayList<>();
for (int i = 0; i < taskNum; i++) {
offloadStra[i] = 0;
}
}
/**
* 根据贪心近似最优卸载策略对每个job选取最优卸载位置
*/
void GreedyApproximationOffloading(){
// 依次是卸载到云层、雾层、本地
double time1 = 0, time2 = 0, time3 = 0;
double energy1 = 0, energy2 = 0, energy3 = 0;
powerModel = (FogLinearPowerModel) getmobile().getHost().getPowerModel();
// 获取云、雾、终端层的平均Mips
double cAvgMips = getcloud().getAverageMips();
double fAvgMips = getFogNode().getAverageMips();
double mAvgMips = getmobile().getAverageMips();
// 先计算不需要卸载的任务集合
for (int i = 0; i < taskNum; i++) {
Job job = joblist.get(i);
time1 = job.getCloudletLength() / cAvgMips
+ getJobFileSize(job) / parameter / WAN_Bandwidth;
//卸载所需能耗 = 空闲功率 * 云执行时间 + 传输功率 * (发送数据大小 + 接收数据大小 ) / WAN带宽
energy1 = powerModel.getStaticPower() * job.getCloudletLength() / cAvgMips
+ powerModel.getSendPower() * getJobFileSize(job) / parameter / WAN_Bandwidth;
time2 = job.getCloudletLength() / fAvgMips
+ getJobFileSize(job) / parameter / LAN_Bandwidth;
energy2 = powerModel.getStaticPower() * job.getCloudletLength() / fAvgMips
+ powerModel.getSendPower() * getJobFileSize(job) / parameter / LAN_Bandwidth;
time3 = job.getCloudletLength() / mAvgMips;
energy3 = powerModel.getMaxPower() * job.getCloudletLength() / mAvgMips;
switch (optimize_objective){
case "Time":
if(Math.min(time1,time2) < time3) {// 该job需要卸载
offloadJobIndex.add(i);
}
break;
case "Energy":
if(Math.min(energy1,energy2) < energy3) {// 该job需要卸载
offloadJobIndex.add(i);
}
break;
default:
break;
}
}
// 再计算其余任务是卸载到雾还是云
for (int i = 0; i < offloadJobIndex.size(); i++) {
int t = offloadJobIndex.get(i);
Job job = joblist.get(t);
time1 = job.getCloudletLength() / cAvgMips
+ getJobFileSize(job) / parameter / WAN_Bandwidth;
//卸载所需能耗 = 空闲功率 * 云执行时间 + 传输功率 * (发送数据大小 + 接收数据大小 ) / WAN带宽
energy1 = powerModel.getStaticPower() * job.getCloudletLength() / cAvgMips
+ powerModel.getSendPower() * getJobFileSize(job) / parameter / WAN_Bandwidth;
time2 = job.getCloudletLength() / fAvgMips
+ getJobFileSize(job) / parameter / LAN_Bandwidth;
energy2 = powerModel.getStaticPower() * job.getCloudletLength() / fAvgMips
+ powerModel.getSendPower() * getJobFileSize(job) / parameter / LAN_Bandwidth;
switch (optimize_objective){
case "Time":
if(time1 < time2){// 卸载到云上
offloadStra[t] = 2;
}else{// 卸载到雾上
offloadStra[t] = 1;
}
break;
case "Energy":
if(energy1 < energy2){// 卸载到云上
offloadStra[t] = 2;
}else{// 卸载到雾上
offloadStra[t] = 1;
}
break;
default:
break;
}
}
}
@Override
public void BeforeOffloading(double deadline) {
this.deadline = deadline;
GT_GAOAInit();
joblist = getjobList();
for (int i = 0; i < workflowNum; i++) {
GreedyApproximationOffloading();
}
}

最后

以上就是秀丽茉莉为你收集整理的边缘计算卸载算法--GT-GAOA的全部内容,希望文章能够帮你解决边缘计算卸载算法--GT-GAOA所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(66)

评论列表共有 0 条评论

立即
投稿
返回
顶部