diff --git a/docs/source/examples.rst b/docs/source/examples.rst
index df48bb5..91463cc 100644
--- a/docs/source/examples.rst
+++ b/docs/source/examples.rst
@@ -160,15 +160,48 @@ We provide a few more examples of Reinforced-lib and Gymnasium integration in th
Connection with ns-3
********************
-We will demonstrate the cooperation of Reinforced-lib with an external WiFi simulation software based on an example of
-an ML-controlled rate adaptation (RA) manager. To simulate the WiFi environment, we will use the popular, research oriented
-network simulator -- ns-3. To learn more about the simulator, we encourage to visit the
+We will demonstrate the cooperation of Reinforced-lib with an external Wi-Fi simulation software based on an example of
+an ML-controlled rate adaptation (RA) manager. To simulate the Wi-Fi environment, we will use the popular, research
+oriented network simulator -- ns-3. To learn more about the simulator, we encourage to visit the
`official website `_ or read the
`ns-3 tutorial `_.
-Environment setup
-=================
+Docker container setup
+======================
+
+To facilitate the setup of the Reinforced-lib and ns-3 connection, we provide a Dockerfile that contains all the necessary
+dependencies and configurations. You need to have Docker installed on your machine, which you can download from the
+`official website `_.
+
+To build the Docker image, use the Dockerfile `provided in the repository `_.
+Navigate to the directory where the Dockerfile is located and run the following command ("rlib-ns3" is the name of the image):
+
+.. code-block:: bash
+
+ docker build -t "rlib-ns3" .
+
+Once the image is built, you can run the interactive session with the following command:
+
+.. code-block:: bash
+
+ docker run -it "rlib-ns3" bash
+
+To persist the changes made in the container, you can create a volume and mount it to the container by adding the ``-v``
+flag to the ``docker run`` command:
+
+.. code-block:: bash
+
+ docker volume create "rlib-ns3-data"
+ docker run -it -v "rlib-ns3-data:/home" "rlib-ns3" bash
+
+Reinforced-lib and ns-3 are already installed in the container, so you can proceed with the experiments described in the
+:ref:`simulation scenario section `. The library is located in the ``/home/reinforced-lib`` directory and the
+ns-3 in the ``/home/ns-3-dev`` directory.
+
+
+Manual setup
+============
To perform experiments with Python-based Reinforced-lib and C++-based ns-3, you need to setup an environment which
consists of the following:
@@ -207,14 +240,16 @@ The ns3-ai module interconnects ns-3 and Reinforced-lib (or any other python-wri
the shared memory pool. The memory is accessed by both sides thus making the connection. You can read more about the ns3-ai on the
`ns3-ai official repository `_.
-.. warning::
+.. note::
- Unfortunately, ns3-ai (as of 18.07.2023) is not compatible with the ns-3.36 or later. We have forked and modified the official ns3-ai repository to make it compatible with the 3.37 version. To install the compatible, forked version run the following commands
+ ns3-ai (as of 10.08.2024) is aligned with the latest versions of ns-3. We recommend resetting the repository to a specific version to make it compatible with version 3.37.
.. code-block:: bash
cd $YOUR_NS3_PATH/contrib/
- git clone --single-branch --branch ml4wifi https://github.com/m-wojnar/ns3-ai.git
+ git clone https://github.com/hust-diangroup/ns3-ai.git
+ cd ns3-ai
+ git reset --hard 86453e840c6e5df849d8c4e9c7f88eade637798c
pip install "$YOUR_NS3_PATH/contrib/ns3-ai/py_interface"
@@ -241,12 +276,12 @@ following commands:
Compiling ns3
-------------
-To have the simulator working and fully integrated with the Reinforced-lib, we need to compile it. We do this from the ``YOUR_NS3_PATH`` in two steps, by first configuring the compilation and than by building ns-3:
+To have the simulator working and fully integrated with the Reinforced-lib, we need to compile it. We do this from the ``YOUR_NS3_PATH`` in two steps, by first configuring the compilation and then by building ns-3:
.. code-block:: bash
cd $YOUR_NS3_PATH
- ./ns3 configure --build-profile=optimized --enable-examples --enable-tests
+ ./ns3 configure --build-profile=optimized --disable-examples --disable-tests
./ns3 build
Once you have built ns-3, you can test the ns-3 and Reinforced-lib integration by executing the script that runs an example
@@ -261,10 +296,10 @@ On success, in your home directory, there should be a ``rlib-ns3-integration-tes
.. _rlib-sim:
+
Simulation scenario
===================
-
ns-3 (C++) part
---------------
@@ -381,7 +416,7 @@ python and C++. You can learn more about the data exchange model
ext_type=IEEE_802_11_ax_RA
)
- exp = Experiment(mempool_key, memory_size, 'ra-sim', ns3_path)
+ exp = Experiment(mempool_key, memory_size, 'ra-sim', ns3_path, using_waf=False)
var = Ns3AIRL(memblock_key, Env, Act)
In line 73, we create an instance of RLib by supplying the appropriate, parametrized agent and the 802.11ax environment extension.
diff --git a/examples/ns-3-ra/Dockerfile b/examples/ns-3-ra/Dockerfile
new file mode 100644
index 0000000..2b2d6c1
--- /dev/null
+++ b/examples/ns-3-ra/Dockerfile
@@ -0,0 +1,31 @@
+FROM ubuntu:22.04
+
+WORKDIR /home
+RUN apt update
+RUN apt install -y python3.10 python3-pip g++-11 cmake git vim
+RUN git clone https://github.com/m-wojnar/reinforced-lib.git \
+ && cd reinforced-lib \
+ && pip install -U pip wheel setuptools \
+ && pip install -e .
+
+WORKDIR /home
+RUN git clone https://gitlab.com/nsnam/ns-3-dev.git \
+ && cd ns-3-dev \
+ && git reset --hard 4407a9528eac81476546a50597cc6e016a428f43
+
+WORKDIR /home/ns-3-dev/contrib
+RUN git clone https://github.com/hust-diangroup/ns3-ai.git \
+ && cd ns3-ai \
+ && git reset --hard 86453e840c6e5df849d8c4e9c7f88eade637798c \
+ && cd .. \
+ && pip install "ns3-ai/py_interface"
+
+WORKDIR /home/reinforced-lib/examples/ns-3-ra
+RUN cp scratch/* /home/ns-3-dev/scratch \
+ && cp -r contrib/rlib-wifi-manager /home/ns-3-dev/contrib
+
+WORKDIR /home/ns-3-dev
+RUN ./ns3 configure --build-profile=optimized --disable-examples --disable-tests \
+ && ./ns3 build
+
+WORKDIR /home
diff --git a/examples/ns-3-ra/scratch/ra-sim.cc b/examples/ns-3-ra/scratch/ra-sim.cc
index ec7bda7..fad6922 100644
--- a/examples/ns-3-ra/scratch/ra-sim.cc
+++ b/examples/ns-3-ra/scratch/ra-sim.cc
@@ -47,6 +47,8 @@ FlowState flowState;
std::ostringstream csvOutput;
std::string csvPrefix;
+RLibWifiManager rlib;
+
/***** Main with scenario definition *****/
int