天天看點

【網絡仿真】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)。可以執行以下指令進行交叉檢查: