梯度下降卸载算法
背景:我实现该算法是在边缘计算单个工作流任务环境中,下面可以看到此背景下的java代码实现。
此处假设我们的工作流任务中只有3个任务节点(构成一个有向无环图),下面基于此假设分析算法。
1. 算法伪代码
2.输入
假设初始化卸载策略{1,0,0} // 0:不卸载 1:卸载
3.输出
假设局部最优卸载策略{0,0,0}
4.算法中参数说明
5.例子
说明:
① 工作流任务数假设为3个。
② 一个卸载策略表示为0、1组成的长度为3的数组,比如{1,1,0}表示第一、二个任务卸载、第三个任务不卸载。
核心思想
:
- 初始化一个卸载策略:{1,1,1}。
- 第一轮循环时:
① 保持第一个任务卸载策略不变{1,1,1},其他依次变化{1,0,1}、{1,1,0};
② 计算卸载策略的优化目标值依次为a1、a2、a3;
③ 比较 a1 a2 a3, 如果a2的优化目标值最小,小于初始化目标值也为默认当前最优目标值 a1(优化目标值越小越好),则更新卸载策略数组为{1,0,1},此时的优化目标值a2为目前的最优优化目标值。 - 继续进行循环,和②一样,保持第二个任务不变,{1,0,1},{0,0,1},{1,0,0},计算它们的目标值再进行比较,如果有更小的目标值,则继续下一轮的循环。
- 如果a1的优化目标值最小(也就是本次循环优化目标值并没有减小),那么当前最小优化目标值对应的卸载策略为局部最优卸载策略结束算法。
6.我的java代码实现
① 初始化
/**
* 初始化梯度下降任务卸载与否的数组
* @param taskNum 任务总数
*/
public void coordinateDescentInit(int taskNum){
// 卸载策略初始化
oldStrategy = new ArrayList<>();
int count = 0;
for (int i = 0; i < taskNum; i++) {
int[] offloadStra = new int[taskNum