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发展以及原始实验复现相关推荐

  1. 论文Anonymous Zether实验复现(持续更)

    附上论文地址:https://github.com/ConsenSys/anonymous-zether/blob/master/docs/AnonZether.pdf 以太坊隐私智能合约层Zethe ...

  2. 【Pytorch】AWSnet论文解读与实验复现

    论文算法概括 文献题目:<AWSnet: An auto-weighted supervision attention network for myocardial scar and edema ...

  3. Cisco IOS上Segment Routing TE的简单实验

    最近看了些Segment Routing的一些资料,官网找到的实验都是基于IOS-XR系统的,于是自己查看配置手册试着做了个简单实验测试下效果. 拓扑如下: R1.R2.R3.R5.R6.R7之间运行 ...

  4. 实验:复现PHP一句话木马的利用

    实验:复现PHP一句话木马的利用 文章目录 实验:复现PHP一句话木马的利用 实验目标 详细步骤 1.创建php文件 遇到的问题: 解决方案: 2.下载.初始化蚁剑 遇到的问题: 解决方案: 3.用蚁 ...

  5. C#PC与三菱Q系列PLC通信小实验中遇到的问题

    1.在线程中处理控件时报错. 在线程中想要对TextBox写入时,报错. 解决: this.Invoke(new MethodInvoker(delegate()                    ...

  6. “刘知远实验室”的关系抽取实验复现

    最近在做文本的关系抽取,看了一篇论文(NRE论文总结:Attention-Based Bidirectional Long Short-Term Memory Networks for Relatio ...

  7. A Discriminative Feature Learning Approach for Deep Face Recognition 原理及在caffe实验复现

    本文主要讲centerloss 的原理,及其创新点.然后用caffe 跑自己的数据(CASIA-WebFace | MsCelebV1-Faces-Aligned) Reference paper:A ...

  8. 第一章 基础知识---1.4Crack小实验--复现

    0x01 程序及其编译环境 程序如下,功能:我们必须输入正确的密码1234567才能得到密码验证的确认,跳出循环.否则程序提示密码错误再次输入. #include <stdio.h>#de ...

  9. 2021年中国实验分析仪器产业链及市场发展现状分析,政策扶持,加大力度解决“卡脖子”现状「图」

    一.实验分析仪器综述 实验分析仪器的官方分类:根据<国民经济行业分类>(GB/T4754-2017),大类是仪器仪表制造,中类是通用仪器仪表制造,实验分析仪器是通用仪器仪表下的小类. 仪器 ...

最新文章

  1. “含光”剑出,谁与争锋?阿里重磅发布首颗AI芯片含光800
  2. DP_字串匹配(HDU_1501)
  3. 【机器学习算法专题(蓄力计划)】十八、机器学习中SVM算法中的硬间隔和软间隔
  4. day13-(事务mvc反射补充)
  5. 字符串反转python_Python实现字符串反转的几种方法
  6. C#中的异步编程--探索await与async关键字的奥妙之处,原来理解和使用异步编程可以这么简单
  7. DataGrid 导出 EXCEL(简单,实用)
  8. .git文件夹_如何使用git把本地代码上传(更新)到github上
  9. 2003下的共享问题
  10. android布局性能,Android开发——布局性能优化的一些技巧(一)
  11. indesign怎么拼图_用R来拼图和排版,告别AI和PS(二):调节宽度和高度
  12. 电脑只能上QQ不能开网页
  13. 记住键盘快捷键大全 提高电脑操作速度
  14. chrome 有哪些有用的插件
  15. 海明码,码距,海明校验码
  16. 简易记账开发笔记之Fragment(后续)
  17. 使用MPC设计控制器
  18. 野火 RT1052 移植网卡功能(LAN8720A)
  19. C Primer Plus (第6版) 读书笔记_Chapter 2
  20. 如何在UltraEdit中正确使用正则表达式

热门文章

  1. JavaFX开发教程——快速入门FX
  2. 线性回归中常见的一些统计学术语(RSE RSS TSS ESS MSE RMSE R2 Pearson's r)
  3. 【架构师考试】架构师考试内容与历年真题
  4. python爬取app中的音频_Python爬取喜马拉雅音频数据详解
  5. C++中string类下的begin,end,rbegin,rend的用法
  6. Win10系统截图新工具的快捷键
  7. Visio绘制网络模型
  8. 张学友 - 蓝雨(粤)
  9. 富士服务器A系列说明书,富士伺服驱动器FALDIC-用户手册.pdf
  10. 乐鑫esp8266学习rtos3.0笔记第11篇:详细分析Esp8266上电信息打印的数据,如何做到串口通讯上电不乱码打印。