DROO论文笔记

推荐文章DROO源码及论文学习

读论文《Deep Reinforcement Learning for Online Computation Offloading in Wireless Powered Mobile-Edge Computing Networks》的笔记

论文地址:用于无线移动边缘计算网络在线计算卸载的深度强化学习

论文代码地址:DROO源码

目录

一、Introduction

二、System Model 

三、Local Computing Mode

四、Problem Formulation 

五、THE DROO ALGORITHM 

Algorithm Overview

保序量化的代码 :

之前的方法:KNN

Offloading Policy Update

​Adaptive Setting of K

Convergence Performance

​Impact of Updating Intervals Δ

​Computation Rate Performance


一、Introduction

旨在解决无线供电的MEC网络中根据时变的无线信道条件优化地调整任务卸载无线资源分配,需要快速求解困难的组合优化问题,传统数值优化方法难以实现。

采用binary卸载策略,即无线设备(WD)的每个计算任务要么在本地执行,要么完全卸载到MEC服务器。提出基于深度强化学习的在线卸载(DROO),将原始优化问题分解为卸载决策子问题和资源分配子问题,设计保序量化卸载动作生成,消除传统数值优化方法的复杂性,通过动态自适应程序进一步降低计算复杂性。 

二、System Model 

三、Local Computing Mode

四、Problem Formulation 

 

五、THE DROO ALGORITHM 

整体框架代码: 

    N = 10                     #用户数量n = 30000                     # 时间帧数量K = N                   # 初始化 K = Ndecoder_mode = 'OP'    # 量化模式,可以是 'OP' (Order-preserving) 或 'KNN'Memory = 1024          # 内存结构的容量Delta = 32             # 自适应 K 的更新间隔print('#user = %d, #channel=%d, K=%d, decoder = %s, Memory = %d, Delta = %d'%(N,n,K,decoder_mode, Memory, Delta))# 数据加载和处理channel = sio.loadmat('./data/data_%d' %N)['input_h']#(30000, 10)->30000条N个信道增益rate = sio.loadmat('./data/data_%d' %N)['output_obj'] # 这个速率只用于绘图,不用于训练 DROO# 将信道值放大,以便更好地训练(这是深度学习中的常用技巧)channel = channel * 1000000# generate the train and test data sample index# 将数据分为 80:20# training data are randomly sampled with duplication if n > total data sizesplit_idx = int(.8 * len(channel))num_test = min(len(channel) - split_idx, n - int(.8 * n)) # training data size# 初始化DNNmem = MemoryDNN(net = [N, 120, 80, N],learning_rate = 0.01,training_interval=10,batch_size=128,memory_size=Memory)rate_his = []rate_his_ratio = []mode_his = []k_idx_his = []#索引K_his = []for i in range(n):if i % (n//10) == 0:print("%0.1f"%(i/n))#打印进度if i> 0 and i % Delta == 0:# index counts from 0if Delta > 1:#每 Delta 个时间步更新 Kmax_k = max(k_idx_his[-Delta:-1]) +1;#最近 Delta 个时间步内的最优K索引else:max_k = k_idx_his[-1] +1;K = min(max_k +1, N)#K 不超过 Nif i < n - num_test:#训练阶段# trainingi_idx = i % split_idx# 训练数据索引else:#测试阶段i_idx = i - n + num_test + split_idx# 测试数据索引h = channel[i_idx,:]#选择当前时间步的信道数据 h# the action selection must be either 'OP' or 'KNN'保序量化 K个卸载决策m_list = mem.decode(h, K, decoder_mode)
# 每个卸载决策的总传输速率 r_listr_list = []for m in m_list:r_list.append(bisection(h/1000000, m)[0])#将最大传输速率的卸载决策存储在经验回放中mem.encode(h, m_list[np.argmax(r_list)])# the main code for DROO training ends here# the following codes store some interested metrics for illustrations# memorize the largest rewardrate_his.append(np.max(r_list))#最大传输速率rate_his_ratio.append(rate_his[-1] / rate[i_idx][0])#最大传输速率与真实传输速率的比值# record the index of largest rewardk_idx_his.append(np.argmax(r_list))#最大传输速率的对应的在K个卸载决策中的索引(排名)# record K in case of adaptive KK_his.append(K)#本次的Kmode_his.append(m_list[np.argmax(r_list)])#记录最大传输速率的卸载决策

Algorithm Overview

Offloading Action Generation 

根据输入的无线信道增益 h 生成 k 个二元卸载决策 保序量化orKNN

def decode(self, h, k = 1, mode = 'OP'):h = torch.Tensor(h[np.newaxis, :])#(10,)->torch.Size([1, 10])self.model.eval()m_pred = self.model(h)#先用DNN输出一个连续卸载决策m_pred = m_pred.detach().numpy()# 再用这个连续决策生成 k 个二元卸载决策if mode is 'OP':#保序量化return self.knm(m_pred[0], k)elif mode is 'KNN':#KNNreturn self.knn(m_pred[0], k)else:print("The action selection must be 'OP' or 'KNN'")
保序量化的代码 :

输入m:DNN网络输出的N个relaxed卸载动作(0-1之间连续)

如:[0.99010485 0.62969816 0.4329 0.4087384  0.7058292  0.4560974 0.49688646 0.452399   0.20186329 0.21191679]

shape为N:(10,)

def knm(self, m, k = 1):# return k order-preserving binary actionsm_list = []# generate the first binary offloading decision with respect to equation (8)m_list.append(1*(m>0.5))#生成第一个二元卸载决策if k > 1:# generate the remaining K-1 binary offloading decisions with respect to equation (9)m_abs = abs(m-0.5)#首先计算 m 中每个元素与 0.5 的绝对差值idx_list = np.argsort(m_abs)[:k-1]#对绝对差值进行排序,并获取前 k-1 个最小差值的索引for i in range(k-1):if m[idx_list[i]] >0.5:# set the \hat{x}_{t,(k-1)} to 0m_list.append(1*(m - m[idx_list[i]] > 0))else:# set the \hat{x}_{t,(k-1)} to 1m_list.append(1*(m - m[idx_list[i]] >= 0))return m_list

输出m_list:K个保序量化后的动作

如:[array([1, 1, 0, 0, 1, 0, 0, 0, 0, 0]), array([1, 1, 0, 0, 1, 0, 1, 0, 0, 0]), array([1, 1, 0, 0, 1, 1, 1, 0, 0, 0]), array([1, 1, 0, 0, 1, 1, 1, 1, 0, 0]), array([1, 1, 1, 0, 1, 1, 1, 1, 0, 0]), array([1, 1, 1, 1, 1, 1, 1, 1, 0, 0]), array([1, 0, 0, 0, 1, 0, 0, 0, 0, 0]), array([1, 0, 0, 0, 0, 0, 0, 0, 0, 0]), array([1, 1, 1, 1, 1, 1, 1, 1, 0, 1]), array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1])] 

之前的方法:KNN

最近邻二元动作 knn 计算输入向量 m 与所有可能的二元卸载决策之间的距离,找与输入向量最相似的 k 个二元决策

    def knn(self, m, k = 1):# list all 2^N binary offloading actionsif len(self.enumerate_actions) is 0:import itertools#笛卡尔积 所有可能的二元组合self.enumerate_actions = np.array(list(map(list, itertools.product([0, 1], repeat=self.net[0]))))# the 2-norm 计算与输入向量 m 的距离sqd = ((self.enumerate_actions - m)**2).sum(1)#输入向量 m 与所有可能决策向量的欧氏距离的平方idx = np.argsort(sqd)#距离最小的 k 个二元决策return self.enumerate_actions[idx[:k]]
Offloading Policy Update

经验回放:使用存储的数据样本训练DNN

Adam算法更新DNN的参数\theta_t

收集足够数量的新数据样本后,每\delta个时间步训练一次DNN

DNN迭代地从最佳状态动作对(𝐡𝑡,𝐱𝑡中学习,随着时间的推移生成更好的卸载决策输出

在有限内存空间约束的情况下,DNN仅从最新(且更精细)的卸载策略生成的最新数据样本中学习

Adaptive Setting of K

Convergence Performance

 Impact of Updating Intervals Δ
Computation Rate Performance

对于代码中optimization.py

方法是直接用的《Computation Rate Maximization for Wireless Powered Mobile-Edge Computing with Binary Computation Offloading》中提出的

包括先使用二分法找到最优的参数 v之后使用CD法优化模式选择,即固定其他通道的决策,仅改变当前通道的决策状态,对于每个通道,将其决策状态进行切换(0 变为 1,1 变为 0),计算相应的系统性能

论文地址具有二进制计算卸载的无线移动边缘计算的计算速率最大化,已标好代码中公式与论文中对应关系

# 二分搜索算法求解拉格朗日方程,先假定计算模式选择,然后优化传输时间分配
#线性搜索函数,需要两个输入,一个是信道矩阵,另一个是卸载动作,关于每个无线设备,除了W参数,其他的默认是同质的(我对代码的理解)。  
def bisection(h, M, weights=[]):# the bisection algorithm proposed by Suzhi BI# average time to find the optimal: 0.012535839796066284 s# parameters and equationso=100#是处理一位原始数据所需的周期数p=3#AP功率u=0.7#能量收集效率eta1=((u*p)**(1.0/3))/o#一个固定参数,不用理解ki=10**-26   #能量效率系数,跟计算机能耗相关的eta2=u*p/10**-10B=2*10**6#带宽Vu=1.1#Vu是原始数据(卸载数据)经过加密后的数据(原有数据在传输时进行额外添加)大小比原始数据的倍数epsilon=B/(Vu*np.log(2))x = [] # a =x[0], and tau_j = a[1:],时间分配矩阵M0=np.where(M==0)[0]#本地#为零或者1的索引M1=np.where(M==1)[0]#卸载hi=np.array([h[i] for i in M0])#本地、卸载设备对应的信道hj=np.array([h[i] for i in M1])#  h:信道信息数组,包含了每个通道的信道增益if len(weights) == 0:# default weights [1, 1.5, 1, 1.5, 1, 1.5, ...]weights = [1.5 if i%2==1 else 1 for i in range(len(M))]wi=np.array([weights[M0[i]] for i in range(len(M0))])wj=np.array([weights[M1[i]] for i in range(len(M1))])#w是每个WD的权重def sum_rate(x):#总传输速率 式11a x第一项是a,后面是每个设备的tausum1=sum(wi*eta1*(hi/ki)**(1.0/3)*x[0]**(1.0/3))sum2=0for i in range(len(M1)):sum2+=wj[i]*epsilon*x[i+1]*np.log(1+eta2*hj[i]**2*x[0]/x[i+1])return sum1+sum2def phi(v, j):#式17return 1/(-1-1/(lambertw(-1/(np.exp( 1 + v/wj[j]/epsilon))).real))def p1(v):#式18p1 = 0for j in range(len(M1)):p1 += hj[j]**2 * phi(v, j)return 1/(1 + p1 * eta2)def Q(v):#二分法 找到最优的参数 vsum1 = sum(wi*eta1*(hi/ki)**(1.0/3))*p1(v)**(-2/3)/3#local计算sum2 = 0for j in range(len(M1)):sum2 += wj[j]*hj[j]**2/(1 + 1/phi(v,j))#计算卸载return sum1 + sum2*epsilon*eta2 - v#这里来自公式19def tau(v, j):#式16return eta2*hj[j]**2*p1(v)*phi(v,j)# bisection starts here# 找到一个参数 v,使得函数 Q(v) 的值等于 0delta = 0.005 #二分法的精度UB = 999999999#初始的上界LB = 0#初始的下界while UB - LB > delta:v = (float(UB) + LB)/2if Q(v) > 0:LB = velse:UB = v
#  如果 Q(v) 的值大于 0,则将下界更新为当前的 v 值;否则,将上界更新为当前的 v 值x.append(p1(v))#p1(v)是a x第一项for j in range(len(M1)):x.append(tau(v, j))#计算每个WD的tau x后边是每个设备的taureturn sum_rate(x), x[0], x[1:]#总传输速率和时间分配向量 x 中的各个元素#然后使用坐标下降Coordinate DescentCD法来优化模式选择
def cd_method(h):N = len(h)#通道数量M0 = np.random.randint(2,size = N)#初始通道状态gain0,a,Tj= bisection(h,M0)#初始状态下的计算速率,a 和 Tjg_list = []M_list = []while True:# 固定其他通道的决策,仅改变当前通道的决策状态。# 对于每个通道,将其决策状态进行切换(0 变为 1,1 变为 0),计算相应的系统性能。for j in range(0,N):#对每一个通道 j 进行操作M = np.copy(M0)M[j] = (M[j]+1)%2#切换通道 j 的状态(0变为1,1变为0)gain,a,Tj= bisection(h,M)#调整后的计算速率、时间分配g_list.append(gain)M_list.append(M)g_max = max(g_list)if g_max > gain0:#寻找最优解gain0 = g_maxM0 = M_list[g_list.index(g_max)]#更新最卸载策略else:breakreturn gain0, M0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/379669.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[论文笔记] CT数据配比方法论——1、Motivation

我正在写这方面的论文,感兴趣的可以和我一起讨论!!!!!! Motivation 1、探测原有模型的配比: 配比 与 ppl, loss, bpw, benchmark等指标 之间的关系。 2、效果稳定的配比:配比 与 模型效果 之间的规律。 Experiments 1、主语言(什么语言作为主语言,几种主语言?…

格式工厂转换视频分辨率

1、下载和安装 http://www.pcfreetime.com/formatfactory/CN/index.html 2、打开视频 3、设置分辨率等参数 也可以选择保持原分辨率 4、执行导出 5、打开输出所在位置

【HarmonyOS】HarmonyOS NEXT学习日记:四、布局与容器组件

【HarmonyOS】HarmonyOS NEXT学习日记&#xff1a;四、布局与容器组件 学习了基础组件之后&#xff0c;想要利用基础组件组装成一个页面&#xff0c;自然就要开始学习布局相关的知识。我理解的ArkUI的布局分为两个部分 一、组件自身的通用属性&#xff0c;诸如weight、height、…

国内新能源汽车芯片自给,承认差距,任重道远

【科技明说 &#xff5c; 科技热点关注】 据近日工信部电子五所元器件与材料研究院高级副院长罗道军表示&#xff0c;中国拥有最大的新能源车产能&#xff0c;芯片用量也是越来越多。但是芯片的自给率目前不到10%&#xff0c;是结构性的短缺。 中国拥有最大新能源车产能&#…

计算机课设——基于Java web的超市管理系统

smbms_java_web 基于Java web的超市管理系统&#xff0c;数据库课程设计 1.引言 是一个基于Java Web连接MySQL的小项目。 超市管理系统(smbms)作为每个计算机专业的大学生都是一个很好的练手项目&#xff0c;逻辑层次分明&#xff0c;基础功能包括用户的登录和注销&#xff…

NFS存储、API资源对象StorageClass、Ceph存储-搭建ceph集群和Ceph存储-在k8s里使用ceph(2024-07-16)

一、NFS存储 注意&#xff1a;在做本章节示例时&#xff0c;需要拿单独一台机器来部署NFS&#xff0c;具体步骤略。NFS作为常用的网络文件系统&#xff0c;在多机之间共享文件的场景下用途广泛&#xff0c;毕竟NFS配置方 便&#xff0c;而且稳定可靠。NFS同样也有一些缺点&…

S参数入门

一、说明 S参数全称为散射参数&#xff0c;主要用来作为描述线性无源互联结构的一种行为模型&#xff0c;来源于网络分析方法。网络分析法是一种频域方法&#xff0c;在一组离散的频率点上&#xff0c;通过在输入和输出端口得到的参量完全描述线性时不变系统&#xff08;定义参…

[003-02-10].第10节:Docker环境下搭建Redis主从复制架构

我的博客大纲 我的后端学习大纲 我的Redis学习大纲 1.cluster&#xff08;集群&#xff09;模式-docker版 哈希槽分区进行亿级数据存储 1.1.面试题&#xff1a;1~2亿条数据需要缓存&#xff0c;请问如何设计这个存储案例 1.回答&#xff1a;单机单台100%不可能&#xff0c;肯…

食堂采购系统开发:从需求分析到上线实施的完整指南

本篇文章&#xff0c;笔者将详细介绍食堂采购系统从需求分析到上线实施的完整过程&#xff0c;旨在为开发团队和管理者提供一个系统化的指南。 一、需求分析 1.用户需求 常见的需求包括&#xff1a; -采购计划管理 -供应商管理 -库存管理 -成本控制 -报表生成 2.系统功…

STM32自己从零开始实操:PCB全过程

一、PCB总体分布 以下只能让大家看到各个模块大致分布在板子的哪一块&#xff0c;只能说每个人画都有自己的理由&#xff1a; 电源&#xff1a;从外部接入电源&#xff0c;5V接到中间&#xff0c;向上变成4V供给无线&#xff0c;向下变成3V供给下面的接口&#xff08;也刻意放…

html视差滚动效果

html视差滚动效果 借助gsap效果去实现的 gsap官网 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>…

计算机网络——网络层(路由选择协议、路由器工作原理、IP多播、虚拟专用网和网络地址转换)

目录 路由选择协议 因特网的路由选择协议特点 路由信息协议RIP RIP衡量目的网络距离 RIP选择路由器的方式 RIP具有以下三个重要特点 RIP的基本工作流程 RIP的距离向量算法 ​编辑 ​编辑 RIP存在的问题——“坏消息传播得慢” RIP的封装 开放最短路径优先协议OSPF…

剖析SOLIDWORKS科研版的功能优势

在科研领域&#xff0c;高精度的建模与分析工具是科研工作者不可或缺的助手。SOLIDWORKS科研版作为一款专为科研人员和工程师设计的三维计算机辅助设计软件&#xff0c;凭借其强大的功能优势&#xff0c;在科研界获得了广泛的认可与应用。本文将从多个维度深入剖析SOLIDWORKS科…

object-C 解答算法:移动零(leetCode-283)

移动零(leetCode-283) 题目如下图:(也可以到leetCode上看完整题目,题号283) 解题思路: 本质就是把非0的元素往前移动,接下来要考虑的是怎么移动,每次移动多少? 这里需要用到双指针,i 记录每次遍历的元素值, j 记录“非0元素值”需要移动到的位置; 当所有“非0元素值”都移…

彻底改变时尚:使用 GAN 实现 AI 的未来

彻底改变时尚&#xff1a;使用 GAN 实现 AI 的未来 一、介绍 想象一下&#xff0c;在这个世界里&#xff0c;时装设计师永远不会用完新想法&#xff0c;我们穿的每一件衣服都是一件艺术品。听起来很有趣&#xff0c;对吧&#xff1f;好吧&#xff0c;我们可以在通用对抗网络 &a…

【BUG】已解决: KeyboardInterrupt

已解决&#xff1a; KeyboardInterrupt 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#xff0c;211科班出身&#xff0c;就职于医疗科技公司&#xff0c;热衷分享知识&#xff0c;武汉城市开发者社区主理人 擅长.net、C…

在线实习项目|泰迪智能科技企业级项目学习,暑期大数据人工智能学习

在线实习介绍 实习时间&#xff1a;每个项目周期七周左右 面向对象&#xff1a;大数据、计算机相关专业学生&#xff1b;大三、大四毕业年度学生 在线实习收获 1、获得项目实战技能&#xff0c;积累项目经验 2、获得在线实习证明 项目特点…

4 C 语言控制流与循环结构的深入解读

目录 1 复杂表达式的计算过程 2 if-else语句 2.1 基本结构及示例 2.2 if-else if 多分支 2.3 嵌套 if-else 2.4 悬空的 else 2.5 注意事项 2.5.1 if 后面不要加分号 2.5.2 省略 else 2.5.3 省略 {} 2.5.4 注意点 3 while 循环 3.1 一般形式 3.2 流程特点 3.3 注…

去中心化技术的变革力量:探索Web3的潜力

随着区块链技术的发展和应用&#xff0c;去中心化技术正成为数字世界中的一股强大变革力量。Web3作为去中心化应用的新兴范式&#xff0c;正在重新定义人们对于数据、互联网和价值交换的认知。本文将探索去中心化技术的基本概念、Web3的核心特征及其潜力应用&#xff0c;展示其…

Linux——远程连接服务器

sshd服务端 ssh客户端 ssh 服务配置 #ssh 服务安装包 openssh-server [rootserver1 ~] # vim /etc/ssh/sshd_config 17 . #Port 22 # 监听端口&#xff0c;默认监听 22 端口 【默认可修改】 18 . #AddressFamily any #IPV4 和 IPV6 协议家族用哪个&#xff0c; any 表示二者…