【网络仿真】ns3-ai 安装 & 介绍

本文介绍了ns3-ai,它是ns3-gym的增强版,通过内存共享和高效进程间通信提升了性能。文章详细阐述了安装步骤,包括下载、编译和配置,并提供了测试安装成功的方法。此外,还展示了几个使用示例,如基本接口、认知无线电和RL-TCP,用于演示如何在ns3环境中应用人工智能算法。RL-TCP示例展示了如何控制TCP的拥塞窗口,实现了一个基于事件的TCP拥塞控制策略。
摘要由CSDN通过智能技术生成

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运行如下图,说明安装成功!
在这里插入图片描述

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…如下图,黑色表示对信道的外部干扰。

在这里插入图片描述

3.3 RL-TCP

此例中,通过观测TCP实例的参数,实现控制TCP的congestion window (cwdn)slow start threshold。实现了两个版本,time and event-based,都是继承于TcpCongestionOps,因此可以用作ns3::TcpL4Protocol::SocketTypecode : 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=TcpRlTimeBased"

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

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

./waf --run "rl-tcp --transport_prot=TcpNewReno"
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值