无人机辅助移动边缘计算的计算卸载优化:一种深度确定性策略梯度方法(4)——DDPG-based算法
参考文献:
[1] Wang Y , Fang W , Ding Y , et al. Computation offloading optimization for UAV-assisted mobile edge computing: a deep deterministic policy gradient approach[J]. Wireless Networks, 2021:1-16.doi:https://doi.org/10.1007/s11276-021-02632-z
4 DDPG-based算法
4.1 状态空间
在无人机辅助的MEC系统中,状态空间由 k 个用户、一个无人机及其环境共同确定。时间槽 i 处的系统状态可定义为:
si=(Ebattery (i),q(i),p1(i),…,pK(i),Dremain (i),D1(i),…,DK(i),f1(i),…,fK(i)),
式中, Ebattery (i) 为 i 时刻无人机电池剩余能量, q(i) 为无人机位置信息, pK(i) 为无人机服务的UE k的位置信息, Dremain(i) 为整个时间段系统需要完成的剩余任务大小, DK(i) 为UE k在 i 时刻随机生成的任务大小, fK(i) 表示UE k的信号是否被障碍物阻挡。特别是当 i=1 , Ebattery (i)=Eb 和 Dremain(i)=D 。
4.2 行动空间
agent根据系统当前状态和所观察的环境,选择待服务的动作包括 i 时刻被服务的UE k′ 、无人机飞行角度、无人机飞行速度、任务卸载比等,动作 ai 表示为:
ai=(k(i),β(i),v(i),Rk(i))
值得注意的是,DDPG 中的演员网络输出连续的动作。被 agent 选择的动作变量 UE k(i)∈[0,K] 需要进行离散化,即如果 k(i)=0 ,则 k′=1 ;如果 k(i)=0 ,则 k′=⌈k(i)⌉, 其中 ⌈⋅⌉ 为向上取整操作。在一个连续动作空间内,可以精确优化无人机的飞行角度、飞行速度和任务卸载比,即 β(i)∈[0,2π], v(i)∈[0,vmax] ,以及 Rk(i)∈[0,1] 。对以上四个变量进行联合优化,使系统成本最小。
4.3 奖励函数
agent 的行为是基于奖励的,选择合适的奖励函数对 DDPG 框架的性能起着至关重要的作用。我们的目标是通过最小化问题 (9) 中定义的处理延迟来实现回报最大化,如下所示:
ri=r(si,ai)=−τdelay (i)
其中,时间槽 i 的处理延迟为
τdelay (i)=k=1∑Kαk(i)max{tlocal ,k(i),tUAV,k(i)+ttr,k(i)}
,并且如果 k=k′ ,则 αk(i)=1 ;否则 αk(i)=0 。通过DDPG算法,可以找到使Q值最大化的动作。系统的长期平均报酬可以用 Bellman 方程表示为:
Qμ(si,ai)=Eμ[r(si,ai)+γQμ(si+1,μ(si+1))]
4.4 状态标准化
在 DNN 的训练过程中,输入在每一层的分布会随着前一层参数的变化而变化,这需要较低的学习速率和细致的参数初始化,从而减慢了训练的速度。Ioffe 和 Szegedy 提出了一种批处理归一化机制,该机制允许训练使用更高的学习率,并且对初始化不那么小心。我们提出了一种状态归一化算法对观测状态进行预处理,从而更有效地训练 DNN 。值得注意的是,与Qiu的状态归一化算法不同,本文算法将每个变量的最大值与最小值之差作为尺度因子。所提出的状态归一化算法可以很好地解决输入变量的大小差异问题。
在我们的工作中,变量 Ebattery (i),q(i),p1(i),…,pK(i),Dremain (i),D1(i),…,DK−1(i) 和 DK−1(i) 在状态集中处于不同的序列,这可能导致在训练中出现问题。如算法 1 所示,通过状态归一化对这些变量进行归一化,以防止出现这种问题。在状态归一化算法中,我们使用了五个尺度因子。每个因素可以解释如下。利用缩放因子 γb 来缩小无人机电池容量。由于 UAV 和 UE 具有相同的 x 和 y 坐标范围,我们使用 γx 和 γy 分别缩小UAV和UE的x和y坐标。我们使用 γDrm 来缩小整个时间段内剩余的任务,使用 γDUE 来缩小时间段 i 内每个终端的任务大小。
4.5 训练与测试
对基于 DDPG 的计算卸载算法的学习和评估分为训练和测试两个阶段。基于DDPG的计算卸载训练算法如算法 2 所示。在训练过程中,对训练行为策略的批评家网络参数和演员网络参数进行迭代更新。算法 3 描述了计算卸载测试过程,采用了算法 2 中训练好的演员网络 θμ 。需要注意的是,由于演员网络是用归一化状态进行训练的,所以在测试过程中,我们还需要对输入状态进行预处理。