GT-GAOA卸载算法
背景:我实现该算法是在边缘计算单个工作流环境中,下面可以看到此背景下的java代码实现。
1.算法伪代码
下面是procedure1与procedure2:
2.参数说明
M是任意移动设备 i 计算任务的类型数,C是迭代次数,N是移动设备数。
3.结果
一个最优的计算卸载决策S,整体最小计算费用…
4.分析
(1)Algorithm2:
- 初始化:初始化每个终端设备MD上的一个工作流的所有任务(假设任务数为taskNum个)设置为不卸载{0,0,…,0}。
- 对于每一个MD i 上的一个工作流:按照Procedure1计算MD i 的局部最优卸载决策(这个卸载决策具有最小的优化目标值),如果新计算出来的MD i 的优化目标值小于之前的优化目标值,则将该MD i 添加到博弈更新圈。
- 只要博弈更新圈不为空:从博弈更新圈中随机挑选一个MD i ,赋予 i 更新卸载决策的机会,i 进行更新,并广播给其他MD(因为该更新的MD会占用公共资源),保存 i 更新后的卸载策略。博弈圈中的其他MD暂不更新。
- 基于计算卸载决策 S 计算整体最小的优化目标值(eg:Time、Energy)。
- 返回 S 与最小优化目标值。
(2)Procedure1~2:
- 对于工作流中的每一个job(卸载任务):
- 分别计算job在本地、边缘服务器、云服务器上的优化目标值 a,b,c。
- 先找出不卸载的job:如果当前 job 在本地执行优化目标值最小,则设置它的卸载策略为0(不卸载),卸载的 job 放在一个集合M中。
- 再遍历M集合,分别计算该任务 job 卸载到云服务器、边缘服务器的优化目标值 c,d。
- 若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(