强化学习,深度强化学习 拥塞控制ns3-gym 入门 初学 以examples中的rl-tcp为例。

  1. 安装教程
    本人在安装过程中主要参考了以下几篇博客:
    傻瓜式安装:https://www.minaduki.cn/2023/04/23/focal-ns3-gym/
    细心讲解:https://blog.csdn.net/weixin_37793731/article/details/108484365
    对他们表示由衷的感谢!

  2. 缘由
    因为需要使用强化学习进行网络拥塞控制协议的研究,偶然的原因从电子科技大学2023年的一篇博士学位论文中知晓了作者使用的研究工具,即NS3-gym。故在学习了强化学习基础课程之后便尝试在网络环境中进行强化学习算法的使用,本人不才,用时很久才感觉有点稍稍入门,自己的学习心得想要分享给大家,以免走很多的弯路。

  3. 类间关系梳理
    rl-tcp目录结构如下:
    |–sim.cc
    |–tcp-rl-env.cc
    |–tcp-rl-env.h
    |–tcp-rl.cc
    |–tcp-rl.h
    |–tcp_base.py
    |–test_tcp.py
    首先整理分析C++部分的类间调用关系,如下图所示:

    tcp-rl-env在这里搭建了强化学习需要的相关环境,具体的模拟的拓扑结果仍然是在sim.cc中搭建在这里插入图片描述NS3-gym的文档可得建立一个Gym环境需要实例化 OpenGymInterface 并实现由以下函数组成的ns3-gym C++接口,即

Ptr<OpenGymSpace> GetObservationSpace();
Ptr<OpenGymSpace> GetActionSpace();
Ptr<OpenGymDataContainer> GetObservation();
float GetReward();
bool GetGameOver();
std::string GetExtraInfo();
bool ExecuteActions(Ptr<OpenGymDataContainer> action);

在这里插入图片描述
在tcp-rl中主要生命了TCP的各种变体,如TCPRL,TCPTimeBased等。这些类主要是为了在模拟时指定不同变体的TCP的相关操作。
4. 仿真
在这里插入图片描述
以上是sim.cc中的执行逻辑,其实就是NS3的常规仿真步骤,首先就是要建立仿真的拓扑结构,这里建立的是哑铃状的拓扑结构,及只存在一个瓶颈链路,并为这个拓扑结构设置一定的参数,包括像带宽,时延等。然后为整个拓扑安装协议栈,设置根队列等,再启动仿真。
需要注意的是NS-3中,仿真的配置和运行通常是声明式的,不用编写控制仿真流程的命令式代码。但是依然要在开始就建立拓扑结构,否则会报错。
5. 强化学习
在test_tcp.py中进行了强化学习的训练,使用了最简单的执行,查看奖励的操作,但是其奖惩机制并不完善。我在实践的过程中没有得到一个很好的reward,在参考了他人的代码后,对自己的进行了一些修改,包括像在sim中设置Reward的值和Penalty的值,并在强化学习的gym环境里添加奖惩的参数从而有了自己的简单奖惩机制。具体的实现如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

作为一个刚刚学习的小白,有哪里不对的还请大家不吝赐教,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值