Q-routing发展以及原始实验复现
Q-routing在网络情况变化(网络负载变化,拓扑变化)情况下的 表现很好。其基于一个类似于Q-learning的更新公式:
后续研究人员对Q-routing进行了各种改进
1、提出了Full Echo Q-routing。节点进行路由决策前增加了轮询操作,加快了节点与节点间的信息交换,从而降低了初始化阶段峰值延迟,加速了算法的收敛. 但频繁的轮询操作也引发了高负载状态下延迟抖动的问题。由于持续的轮询操作,算法收敛后仍保持频繁的信息交换,一旦拓扑中存在多条瓶颈链路,算法就会在几条瓶颈链路的决策中不断振荡,极大的增加了算法的不稳定性。
2、提出了Dual RL-based Q-routing。双向更新Q-value,已经被证明可以最小化端到端的延迟。提高网络性能和算法收敛速度。
3、Q-routing with dynamic discount factor:动态折扣由三个因素决定,连接稳定性,带宽效率和节点剩余能量。奖励函数为0或1,表示i节点通过j节点转发能否顺利到达目标节点。γi,j=ω MFj.BFj.PFj。使得Q-value预测更加精确,并更倾向代表将包成功送到目标节点的可能性。减少因为连接中断而导致的路由搜索。
4、动态调整学习率。可以消除延迟抖动,但是算法收敛速度下降和初始化阶段延迟峰值上升。
5、针对负载降低时算法不能学习到新的最优策略问题设计了一 种具有记忆和恢复机制的 Q-routing 算法,它记录学习过程中的最佳经验(下一跳选择),并间歇性预测流量趋势以选择恢复最佳经验。
new routing challengings:探索-利用困境;获得更高的收敛速度;初始化峰值;高负载下的延迟都懂;及时监测到Q-value收敛;更高效的存储Q-value;规则的应用;Q-value初始化为近似值而不是随机数。
复现实验代码:
import numpy as np
from queue import Queue
import random
import matplotlib.pyplot as pltnetwork_topology = [[1,6],[0,2,7],[1,8],[4,9],[3,5,10],[4,11],[0,7,12],[1,6,8,13],[2,7,14],[3,10,15],[4,9,11,16],[5,10,17],[6,13,18],[7,12,14,19],[8,13,20],[9,16,21],[10,15,17,22],[11,16,23],[12,19,24],[13,18,20,25],[14,19,21,26],[15,20,22,27],[16,21,23,28],[17,22,29],[18,30],[19,26],[20,25],[21,28],[22,27],[23,35],[24,31],[30,32],[31,33],[32,34],[33,35],[29,34]]
packet_list = [] #存储所有的数据包信息
node_list = [] #存储每个节点的数据包,用队列
Q_table = []
liveNodeList = [] #还没有到大目的地数据包的index
avgNodes = 0 #用于计算平均时延
avgTimes = 0 #用于计算平均时延
avgList = [] #用于存储平均时延
avgCount = 0
time_count = 0
greed_rate = 1
learn_rate = 0.6
lamda = 1
max_time = 16000
poisson_list = np.random.poisson(lam=lamda,size=max_time)for i in range(36):Q_table.append(np.ones((36,36)))for i in range(36):node_list.append(Queue(maxsize=0))def getNewPackets(currenttime): #每个模拟时间中产生对应的数据包packets_list = []packets_count = poisson_list[currenttime]for x in range(packets_count):nodes = random.sample(range(0,36),2)new_node = [nodes[0],nodes[1],nodes[0],0,0,0]packets_list.append(new_node)return packets_listdef getQueueTime(): #获得本次排队时间return 0while(time_count < max_time):packets = getNewPackets(time_count) #生成数据包if len(packets) > 0: for packet in packets:liveNodeList.append(len(packet_list))node_list[packet[0]].put(len(packet_list))packet_list.append(packet)for node_index in range(len(node_list)): #数据包传输,更新Q表if not node_list[node_index].empty():packet_index = node_list[node_index].get()if not node_list[node_index].empty():for livenode in liveNodeList:if livenode != packet_index and packet_list[livenode][2] == node_index:packet_list[livenode][3] += 1packet_list[livenode][4] += 1packet = packet_list[packet_index]pnode = packet[2]ptime = packet[3]dst = packet[1]ptable = Q_table[pnode]if random.random() > greed_rate : #随机选择一个动作random_index = np.random.randint(0,len(network_topology[pnode]))next_node = network_topology[pnode][random_index]else: #选取奖赏值最大的动作minq = 99999for i in network_topology[pnode]:if ptable[dst,i] <= minq:minq = ptable[dst,i]next_node = iif next_node == dst: #选择下一个节点到目的节点最小的最小延迟next_ninq = 0else:next_table = Q_table[next_node]next_ninq = 99999for i in network_topology[next_node]:if next_table[dst,i] <= next_ninq:next_ninq = next_table[dst,i]newQ = (1-learn_rate)*ptable[dst,next_node]+learn_rate*(packet[3]+1+next_ninq)Q_table[pnode][dst,next_node] = newQif next_node == dst: #修改相关包的信息,将数据包入队列packet_list[packet_index][2] = dstpacket_list[packet_index][3] = 0packet_list[packet_index][4] += 1packet_list[packet_index][5] = 1avgNodes += 1avgTimes += packet_list[packet_index][4]liveNodeList.remove(packet_index)else:packet_list[packet_index][2] = next_nodepacket_list[packet_index][3] = 0packet_list[packet_index][4] += 1node_list[next_node].put(packet_index)time_count += 1avgCount += 1if avgCount == 200:avgCount = 0avgList.append(avgTimes/avgNodes)print(Q_table)
plt.plot(range(len(avgList)),avgList)
plt.show()
实验结果:
Q-routing发展以及原始实验复现相关推荐
- 论文Anonymous Zether实验复现(持续更)
附上论文地址:https://github.com/ConsenSys/anonymous-zether/blob/master/docs/AnonZether.pdf 以太坊隐私智能合约层Zethe ...
- 【Pytorch】AWSnet论文解读与实验复现
论文算法概括 文献题目:<AWSnet: An auto-weighted supervision attention network for myocardial scar and edema ...
- Cisco IOS上Segment Routing TE的简单实验
最近看了些Segment Routing的一些资料,官网找到的实验都是基于IOS-XR系统的,于是自己查看配置手册试着做了个简单实验测试下效果. 拓扑如下: R1.R2.R3.R5.R6.R7之间运行 ...
- 实验:复现PHP一句话木马的利用
实验:复现PHP一句话木马的利用 文章目录 实验:复现PHP一句话木马的利用 实验目标 详细步骤 1.创建php文件 遇到的问题: 解决方案: 2.下载.初始化蚁剑 遇到的问题: 解决方案: 3.用蚁 ...
- C#PC与三菱Q系列PLC通信小实验中遇到的问题
1.在线程中处理控件时报错. 在线程中想要对TextBox写入时,报错. 解决: this.Invoke(new MethodInvoker(delegate() ...
- “刘知远实验室”的关系抽取实验复现
最近在做文本的关系抽取,看了一篇论文(NRE论文总结:Attention-Based Bidirectional Long Short-Term Memory Networks for Relatio ...
- A Discriminative Feature Learning Approach for Deep Face Recognition 原理及在caffe实验复现
本文主要讲centerloss 的原理,及其创新点.然后用caffe 跑自己的数据(CASIA-WebFace | MsCelebV1-Faces-Aligned) Reference paper:A ...
- 第一章 基础知识---1.4Crack小实验--复现
0x01 程序及其编译环境 程序如下,功能:我们必须输入正确的密码1234567才能得到密码验证的确认,跳出循环.否则程序提示密码错误再次输入. #include <stdio.h>#de ...
- 2021年中国实验分析仪器产业链及市场发展现状分析,政策扶持,加大力度解决“卡脖子”现状「图」
一.实验分析仪器综述 实验分析仪器的官方分类:根据<国民经济行业分类>(GB/T4754-2017),大类是仪器仪表制造,中类是通用仪器仪表制造,实验分析仪器是通用仪器仪表下的小类. 仪器 ...
最新文章
- “含光”剑出,谁与争锋?阿里重磅发布首颗AI芯片含光800
- DP_字串匹配(HDU_1501)
- 【机器学习算法专题(蓄力计划)】十八、机器学习中SVM算法中的硬间隔和软间隔
- day13-(事务mvc反射补充)
- 字符串反转python_Python实现字符串反转的几种方法
- C#中的异步编程--探索await与async关键字的奥妙之处,原来理解和使用异步编程可以这么简单
- DataGrid 导出 EXCEL(简单,实用)
- .git文件夹_如何使用git把本地代码上传(更新)到github上
- 2003下的共享问题
- android布局性能,Android开发——布局性能优化的一些技巧(一)
- indesign怎么拼图_用R来拼图和排版,告别AI和PS(二):调节宽度和高度
- 电脑只能上QQ不能开网页
- 记住键盘快捷键大全 提高电脑操作速度
- chrome 有哪些有用的插件
- 海明码,码距,海明校验码
- 简易记账开发笔记之Fragment(后续)
- 使用MPC设计控制器
- 野火 RT1052 移植网卡功能(LAN8720A)
- C Primer Plus (第6版) 读书笔记_Chapter 2
- 如何在UltraEdit中正确使用正则表达式
热门文章
- JavaFX开发教程——快速入门FX
- 线性回归中常见的一些统计学术语(RSE RSS TSS ESS MSE RMSE R2 Pearson's r)
- 【架构师考试】架构师考试内容与历年真题
- python爬取app中的音频_Python爬取喜马拉雅音频数据详解
- C++中string类下的begin,end,rbegin,rend的用法
- Win10系统截图新工具的快捷键
- Visio绘制网络模型
- 张学友 - 蓝雨(粤)
- 富士服务器A系列说明书,富士伺服驱动器FALDIC-用户手册.pdf
- 乐鑫esp8266学习rtos3.0笔记第11篇:详细分析Esp8266上电信息打印的数据,如何做到串口通讯上电不乱码打印。