截止到目前为止,RLTCP仅仅发布了两个版本,后续还会进行更新。源代码地址为ns3gym

目录结构

RLTCP位于目录ns3-gym/scratch下,共有8个源代码文件,除此之外,其还依赖于事先实现好的环境文件Ns3Env,用来和NS3脚本进行交互。

这8个文件如下:

  • test_tcp.py: 其中定义了Agent与环境定义的流程。
    • tcp_newreno.py: 定义了newreno版的Agent类,在该类中提供了get_antion函数,用来决定如何通过状态回报来选择Action
  • tcp_base.py: 定义了两种Agent, 一种是基于时间的,一种是基于事件的。
  • tcp_rl.h:在命名空间ns3中声明了七个类,分别是:
    • TcpSocketBase
    • Time
    • TcpGymEnv
    • TcpSocketDerived
    • TcpRlBase
    • TcpRl
    • TcpRlTimeBased
  • tcp_rl.cc:定义了命名空间ns3中的四个类,这四个类声明于同样名称的头文件中,分别是:
    • TcpSocketDerived
    • TcpRlBase
    • TcpRl
    • TcpRlTimeBased
  • tcp_rl_env.h:在命名空间ns3中声明了七个类,分别是:
    • Packet
    • TcpHeader
    • TcpSocketBase
    • Time
    • TcpGymEnv
    • TcpEventGymEnv
    • TcpTimeStepGymEnv
  • tcp_rl_env.cc:定义了命名空间ns3中的三个类,这三个类声明于同样名称的头文件中,分别是:
    • TcpGymEnv
    • TcpEventGymEnv
    • TcpTimeStepGymEnv
  • sim.cc:模拟的脚本,定义了网络的参数与结构,以及对脚本的执行。

综上,在RLTCP相关的代码中,我们共声明并定义了11个类,这些类各有各的作用。其中,在源文件中实现了TcpSocketDerived, TcpRlBase, TcpRl, TcpRlTimeBased, TcpGymEnv, TcpEventGymEnv, TcpTimeStepGymEnv 7个类。

类继承关系

  • TcpSocketBase
    • TcpSocketDerived
  • OpenGymEnv
    • TcpGymEnv
      • TcpEventGymEnv
      • TcpTimeStepGymEnv
  • TcpCongestionOps
    • TcpRlBase
      • TcpRl
      • TcpRlTimeBased