天天看点

【网络仿真】ns3-ai 安装 & 介绍1 Introduction2 installation3 Examples

1 Introduction

Yin, H., Liu, P., Liu, K., Cao, L., Zhang, L., Gao, Y., & Hei, X. (2020). ns3-ai : Fostering Artificial Intelligence Algorithms for Networking Research. Workshop on Ns-3 – WNS3 2020, 57–64. 知乎解读

ns3-ai是对ns3-gym的改进,实现了内存共享,进程间通信(IPC)速度比ns3-gym快100倍。

NS3-AI App Store

2 installation

  1. 确保ns3版本为3.30
  2. 下载NS3 App Store(download按钮)或github上的压缩包,解压后再添加到ns-3.30中的src目录下,并重新命名为ns3-ai.
# 重命名的方法,例如
mv /home/jnbai/桌面/tarballs/ns-allinone-3.30/ns-3.30/contrib/ns3-ai-1.0.0 /home/jnbai/桌面/tarballs/ns-allinone-3.30/ns-3.30/contrib/ns3-ai
           
  1. 重新编译ns-3.30
# 在ns-3.30目录下执行
./waf configure
./waf
           
  1. 添加python interface
# 在ns-3.30目录下执行
cd contrib/ns3-ai/py_interface
# python setup.py install --user
# pip3 install . --user
python3 setup.py install --user

           
  1. 测试安装是否成功
  • tips1: 以运行RL-TCP为例,这个项目要在两个终端窗口上同时运行
  • tips2: 以下代码是默认root用户执行
#  terminal 1:运行ns-3 (c++ code)
cp -r contrib/ns3-ai/example/rl-tcp scratch/
./waf --run "rl-tcp"

# terminal 2:运行ai (python code)
cd contrib/ns3-ai/example/rl-tcp/
python3 testtcp.py
           

两个terminal运行如下图,说明安装成功!

【网络仿真】ns3-ai 安装 & 介绍1 Introduction2 installation3 Examples

3 Examples

安装好后,通过简单的例子(所有例子在这里)学习一下如何使用ns3-gym。

3.1 基本接口 Basic Interface

  1. python脚本例子。其中,

    gym.make('ns3-v0')

    用来在当前工作目录中启动ns-3模拟脚本。
import gym
import ns3gym
import MyAgent

env = gym.make('ns3-v0')
obs = env.reset()
agent = MyAgent.Agent()

while True:
	action = agent.get_action(obs)
	obs, reward, done, info, = env.step(action)

	if done:
		break
env.close()
           
  1. 所有的ns-3模拟脚本都可以作为Gym的环境。只需要实例化OpenGymInterface和运行ns3-gym C++接口(ns3-gym C++接口由以下函数组成:)
Ptr<OpenGymSpace> GetObservationSpace();
Ptr<OpenGymSpace> GetActionSpace();
Ptr<OpenGymDataContainer> GetObservation();
float GetReward();
bool GetGameOver();
std::string GetExtraInfo();
bool ExecuteActions(Ptr<OpenGymDataContainer> action);
           

其中,ns3-gym的通用接口可以在ns3仿真环境中获得变量和参数。详见paper

3.2 Cognitive Radio

认知无线电:通过感知环境空间,识别并利用该空间可用的频谱,从而限制和减低冲突的发生。

无线电:可以在空间中(包括空气和真空)传播的电磁波,有一定的频带(e.g. 3KHz~3THz)。

本例中,考虑在无线多信道环境中,无线电的信道选择问题,例如有外部接口的802.11网络。

agent的action:选择无干扰的信道。本例的设定为,外部干扰遵循周期模式,即t=1时,干扰信道channel=1…如下图,黑色表示对信道的外部干扰。

【网络仿真】ns3-ai 安装 &amp; 介绍1 Introduction2 installation3 Examples

3.3 RL-TCP

此例中,通过观测TCP实例的参数,实现控制TCP的

congestion window (cwdn)

slow start threshold

。实现了两个版本,time and event-based,都是继承于

TcpCongestionOps

,因此可以用作

ns3::TcpL4Protocol::SocketType

,code : tcp_base.py。

并且,关于使用event-based的界面,我们有一个例子:运行TCP NewReno并且使用ns3gym仿真的Python Gym agent,code : tcp_newreno.py。这个例子可以用作学习实现基于RL的TCP拥塞控制的起点。

运行这个例子,执行:

cd ./scratch/rl-tcp
./test_tcp.py 
           

或者,在两个终端里:

# Terminal 1:
./waf --run "rl-tcp --transport_prot=TcpRl"

# Terminal 2:
cd ./scratch/rl-tcp/
./test_tcp.py --start=0
           

Tips:在这个例子的运行中,i.e. Python TCP NewReno,与在ns3中运行时,数据包的传输数量是相同的(请参见ns-3仿真的输出,即两种情况下的RxPkts:5367)。可以执行以下命令进行交叉检查: