Вы находитесь на странице: 1из 20

1 Instalación

Previo a la instalación es importante mencionar que la versión que utilizaremos


para ejecutar el simulador de la red Manet (Mobile Adhoc Network) es la 3.29
debido a que esta es la versión recomendada para trabajar con la librerı́a de
inteligencia artificial y aprendizaje de maquina OpenGym

1.1 Instalación de ns3


Para el proceso de instalación siga los pasos a continuación:

• Asegúrese de contar con el sistema operativo Ubuntu


• Descargue la carpeta que contiene los archivos de la simulación más los
archivos necesarios para el correcto funcionamiento de ns3
• Descomprima esta carpeta donde prefiera. No olvide la ubicación de dicha
carpeta ya que luego necesitara dirigirse a esta desde la consola de coman-
dos de Ubuntu
• Instale los paquetes y librerı́as necesarios para el funcionamiento de ns3,
escriba el siguiente comando en la consola de Ubuntu

sudo apt-get install gcc g++ python python-dev mercurial


bzr gdb valgrind gsl-bin libgsl0-dev flex bison tcpdump
sqlite sqlite3 libsqlite3-dev libxml2 libxml2-dev libgtk2.0-
0 libgtk2.0-dev uncrustify doxygen graphviz imagemagick
texlive texlive-latex-extra texlive-generic-extra texlive-
generic-recommended texinfo dia texlive texlive-latex-
extra texlive-extra-utils texlive-generic-recommended texi2html
python-pygraphviz python-kiwi python-pygccxml
• Luego instale los paquetes necesarios para Python headings con el sigu-
iente comando:

sudo apt-get install cmake libc6-dev libc6-dev-i386 libclang-


6.0-dev llvm-6.0-dev automake pip python3 -m pip install
--user cxxfilt
• Dentro de la consola dirı́jase a la carpeta que contiene los archivos de la
simulación, allı́ ejecute el siguiente comando:

./build.py --enable-examples

Este proceso puede tardar un poco ya que se están configurando todas


las herramientas utilizadas por ns3. Si todo sale bien debe aparecer el
mensaje “Build finished succesfully”

1
• Finalmente dirı́jase a la carpeta ns-3.30.1 y ejecute el comando

./waf configure

El cual muestra una lista de todos los módulos construidos y configurados


por ns3

1.2 Instalacion de OpenAI gym


Para el proceso de instalación siga los pasos a continuación:

• Debido a que los archivos necesarios para el funcionamiento de la her-


ramienta OpenGym ya vienen incluidos en la carpeta del proyecto no es
necesario descargarlos ni incluirlos dentro del directorio del proyecto

• Inicialmente instale ZMQ y los buffers de los protocolos con los siguientes
. Para hacer esto entre a la consola de Ubuntu y ejecute los siguientes
comandos (en orden):

sudo add-apt-repository ppa:maarten-fonville/protobuf


sudo apt-get update
apt-get install libzmq5 libzmq5-dev
apt-get install libprotobuf-dev
apt-get install protobuf-compile

• Posteriormente configure el entorno de ns3 para que se añada la libreria de


OpenAI gym. Dirijase a la carpeta de la simulación y utilice los siguientes
comandos:

./waf configure --enable-examples


./waf build

• Asegúrese de tener instalado el instalador de paquetes de Python (pip).


En caso de que no lo tenga escriba el siguiente comando en la consola de
Ubuntu:

sudo apt install python3-pip

• Finalmente instale el módulo de Python ns3gym, utilice los siguientes co-


mandos:

cd ns-3.29/contrib/opengym/
protoc -I=./model/ --python out=./model/ns3gym/ns3gym
./model/messages.proto

2
pip install ./ns-3.29/contrib/opengym/model/ns3gym

2 Ejecución del simulador


Para la ejecución del simulador siga los pasos a continuación:

• Una vez se hayan instalado y configurado las librerı́as necesarias abra la


carpeta del proyecto y en esta, con click derecho, seleccione la opción de
“abrir terminal”
• Desde la consola dirı́jase a la carpeta ns-3.29 con el comando

cd ns-3.29

• El simulador consta de dos partes, la primera (“ManetSimulation”) corre-


sponde a la simulación de la red Manet incluyendo la configuración nece-
saria para el agente de gym y la segunda (“GymAgent”) que corresponde
al agente de aprendizaje de gym. Para ejecutar la simulación completa
ejecute primero la simulación de la red manet (“ManetSimulation”) y de-
spués el agente de gym (“GymAgent”).
• Para ejecutar la primera parte del simulador (red Manet) utilice el sigu-
iente comando:

./waf --run scratch/ManetSimulation

• Para ejecutar la segunda parte del simulador (agente de gym) utilice el


siguiente comando:

python ./scratch/GymAgent.py --start=0

Nota: el orden en el que se ejecutan las partes del simulador no es impor-


tante, lo único de lo que debe cerciorarse es de que ambas partes se estén
ejecutando al mismo tiempo ya que el agente de gym depende completa-
mente de lo que ocurre en la simulación de la red Manet y viceversa
• Finalmente, si desea obtener información extra de los parámetros de sim-
ulación de la red Manet que se pueden modificar ejecute el siguiente co-
mando:

Primera versión:
./waf --run "scratch/ManetSimulation --help"

3
3 Librerı́as utilizadas
3.1 ns3
Es un simulador de redes basado en eventos discretos usado principalmente en
ambientes educativos y de investigación. Permite simular tanto protocolos uni-
cast como multicast y se utiliza intensamente en la investigación de redes móviles
ad-hoc. Implementa una amplia gama de protocolos tanto de redes cableadas
como de redes inalámbricas.

En nuestro caso nos permite crear la red manet (mobile ad-hoc network)
y simularla bajo unos parámetros de simulación determinados como tiempo,
numero de nodos en la red, velocidad de trasmisión de paquetes, entre otros.

3.2 OpenAI gym


Es una libreria que proporciona un punto de referencia de inteligencia general,
fácil de instalar con una amplia variedad de entornos diferentes y que espera
estandarizar la forma en que se definen los entornos en las publicaciones de in-
vestigación de IA, de modo que la investigación publicada se vuelva más fácil
de reproducir.

En nuestro caso utilizamos esta herramienta para monitorear diferentes as-


pectos dentro de la red con el objetivo de evaluar su desempeño y encontrar
posibles mejoras de la misma.

4 Descripción del código


La simulación descrita en este documento consta de una red Manet (Mobile
Adhoc Network) construida utilizando la herramienta ns3, esta red se compone
de 25 nodos conectados entre sı́ mediante una red wifi tipo Adhoc y los cuales
se mueven dentro de un espacio de 300m x 1500m de forma aleatoria siguiendo
una distribución normal. Dentro de esta red se define un nodo sumidero (sink)
el cual recibe los paquetes enviados desde otros nodos en la red. El envió de
paquetes sigue un protocolo UDP.

A dicha simulación de la red Manet se le agrega un agente de inteligencia


artificial el cual se encarga de mejorar la eficiencia en el envió de los paquetes
a lo largo de la red Manet siguiendo un modelo de aprendizaje de maquina
dentro del cual este es capaz de percibir su entorno y con base a un análisis
de este escoge las acciones que aumenten la recompensa obtenida (dados unos
parámetros para el cálculo de dicha recompensa), las ejecuta y ,como proceso
iterativo, vuelve a evaluar su entorno y con base en las observaciones obtenidas
vuelve a escoger sus acciones.

4
Es importante mencionar que ambas partes de la simulación están interna-
mente relacionadas debido a que la red Manet es en ambiente sobre el que se
mueve el agente de gym y este a su vez, mediante su proceso de aprendizaje,
modifica y mejora la red par que tenga un mayor desempeño.

4.1 Código de la red Manet (ManetSimulation.cc)


4.1.1 Descripción de librerı́as utilizadas
El primer paso que se realiza para construir el ambiente de la red Manet para
el agente de gym es importar las librerı́as necesarias para su funcionamiento.

Se incluyen las librerı́as necesarias para la construcción y configuración de


la red Manet.

Se incluyen las librerı́as necesarias para instanciar, configurar y controlar el


tráfico de datos que se generara en la red al momento de la simulación.

Se incluyen la librerı́a necesarias para la definición y configuración de los


parámetros necesarios para la creación del ambiente de gym y para su correcto
funcionamiento.

4.1.2 Definición y configuración de los parámetros y métodos


Posteriormente, luego de instanciar las librerı́as necesarias, se definen los parámetros
del ambiente para el agente de gym. Inicialmente se define el espacio de obser-
vación del agente. Este contiene un objeto de tipo OpenGymBoxSpace dentro
del cual se toman en cuenta todos los nodos pertenecientes a la red Manet.

5
De manera similar a como se realizado con el espacio de observación, se crea
un espacio de acciones el cual a grandes rasgos es igual al espacio de observación
conteniendo un objeto de tipo OpenGymBoxSpace teniendo en cuenta los nodos
de la red, sin embargo el objetivo de estos dos espacios es diferente ya que el
primero corresponde al espacio en el cual el agente toma las observaciones de
su ambiente para analizar posibles acciones y el espacio de acciones es sobre el
cual se ejecutan dichas acciones del agente.

Se definen entonces el espacio de acciones.

Una vez definidos los espacios de observación y de acciones se define la


condición de gameover para el agente.

Luego se define un método el cual se encarga de almacenar toda la infor-


mación de los nodos de la red Manet y la almacena en una estructura de tipo
cola (queue) la cual será posteriormente actualizada para crear el objeto “obse-
vation” utilizado por el agente.

6
Con todo esto construido se puede definir el objeto OpenGymBoxContainer
que corresponde al observation utilizado por el agente el cual contiene infor-
mación relacionada con el número de paquetes de cada uno de los nodos de la
red en un paso determinado de la simulación.

Se define el método que se encarga de las instrucciones que se llevan a cabo


cuando un nodo de la red recibe un paquete.

Como paso primordial se define la función de recompensa utilizada por el


agente para hacer juicios de valor y determinar las mejores acciones a seguir;
en resumen, esta función está directamente relacionada con la forma en la que
aprende el agente.

7
Se definen los mı́nimos y máximos de una onda continua la cual es utilizada
por el agente.

Se construye el método necesario para ejecutar las acciones escogidas por el


agente .

8
Se indica el cronograma que le indica a la simulación cuales son las acciones
que se deben realizar a lo largo de la misma y le notifica a la interfaz de gym el
estado actual de la simulación de la red Manet.

4.1.3 Inicialización de los parámetros de la simulación tanto para la


red Manet como para el ambiente del agente de gym
Previo a la construcción y configuración de la red Manet es necesario definir los
parámetros usados tanto por la red como por el ambiente para el agente de gym
que se crea sobre dicha red.

Inicialmente se definen los parámetros del ambiente.

Posteriormente se definen los parámetros de la red Manet la cual juega el


papel de escenario para el ambiente del agente de gym.

9
Posteriormente se definen los datarates para la red Manet.

Debido a que la simulación permite la definición (opcional) de ciertos parámetros


directamente desde la consola al momento de ejecutar la simulación se agrega
el soporte para dicha tarea.

10
Finalmente se configura la semilla para la simulación.

4.1.4 Creación y configuración de la red Manet


Como se comentó en la sección previa la red Manet juega el papel de escenario
para el ambiente del agente construido en gym.

Para la creación de este escenario se sigue un esquema tradicional de creación


de redes Manet en ns3. Primero se crea un NodeContainer con la cantidad de
nodos definida previamente en la sección de parámetros.

Posteriormente se crea el dispositivo wifi utilizando el estándar 502.11 a


5MHz.

11
Se crea un canal para la comunicación en la red wifi de tipo SpectrumWifi-
PhyHelper.

Se crea la MAC de la red wifi y se configura el datarate previamente definido

Luego se configura dicha MAC en modo Adhoc y finalmente se instala dicho


dispositico wifi con el canal, la MAC y los nodos especificados y configurados.

12
Los nodos de la red utilizan el modelo RandomWaypointMobilityModel a
una velocidad de 20 m/s (sin tiempo de pausa) dentro de una región de 300
metros x 1500 metros. Además estos nodos inicialmente se configuran en una
cuadricula de 5x5 con un espacio de 45 metros entre cada nodo

Se define el Stack de IP y enrutamiento y se asignan las direcciones IP a cada


uno de los nodos de la red. Asimismo, se configura el enrutamiento estático para

13
los nodos de la red.

Para la definición del tráfico de la red se crea un BulkSendApplication y lo


instala en el nodo 0, luego se definen los nodos de origen y de destino para los
paquetes y con estos se definen los sockets necesarios para la trasmisión de datos,
definiendo a su vez el máximo número de paquetes y el tamaño del paquete a
enviar.

Finalmente crea el Application container.

14
4.1.5 Definición (callback) del ambiente de gym
Para poder realizar la correcta comunicación entre el ambiente generado y el
agente creado en gym es necesario instanciar la interfaz de gym e indicarle los
espacios de observación y de acciones, la condición de gameover definida por el
ambiente, la recompensa y los métodos que permiten ejecutar acciones decididas
por el agente dentro del ambiente

4.1.6 Ejecución de la simulación


Finalmente, para ejecutar la simulación primero se debe instancia el Schedule
de la simulación el cual puede verse como el manejador que determina como la
simulación va a ser ejecutada.

Posteriormente con el método stop se define que la simulación debe parar


automáticamente cuando se cumpla con el tiempo máximo de simulación. Uti-
lizando el método run se da comienzo a la simulación.

15
Es importante notificar al agente la finalización de la simulación por parte
del ambiente para que este también finalice su tarea.

4.2 Código del agente de gym (GymAgent.py)


4.2.1 Descripción de librerı́as utilizadas
Se incluye la librerı́a argparse para permitir la modificación de los atributos de
la simulación del agente por consola al momento de la ejecución de la misma. La
librerı́a numpy se utilizará en cálculos matemáticos para la función de onda con-
tinua que indica y define las acciones ejecutadas por el agente y ns3gym.ns3env
permite instanciar el ambiente (red Manet)

4.2.2 Definición de los parámetros de la simulación y de construcción


del agente
Inicialmente se escribe el código para soportar la modificación de atributos por
consola. Estos son el script de inicio de la simulación y el número de iteraciones

16
que se quieren realizar para la simulación del agente y como se verá más adelante
indicar el número de veces que se desea ejecutar el ciclo de aprendizaje.

Posteriormente se definen los demás atributos de la simulación como lo son:


• El puerto por el cual se va a comunicar con el ambiente (red manet) creada
en ns3
• El tiempo de simulación del agente
• El tiempo que se tomara entre cada paso de la simulación
• Parámetros de testing de la simulación

Luego se define el ambiente del agente utilizando ns3env y de este se extraen


los espacios de observación y de acción (definidos en la red manet)

17
Finalmente se definen valores necesarios para los ciclos de aprendizaje

4.2.3 Método de cálculo de onda continua (Continous wave)


El método que implementa la onda continua determina las acciones a realizar
por el agente como un arreglo que indica las acciones a llevar a cabo para cada
nodo de la red.

4.2.4 Ciclo de aprendizaje del agente


El ciclo de aprendizaje como se ha mencionado anteriormente indica la forma en
la que el agente aprende basándose en la observación de su entorno y la toma de
decisiones que llevan a acciones que pueden tener un impacto positivo o negativo
en el agente o en su ambiente, todo esto dentro de un proceso iterativo en el
cual el agente aprende sobre sus decisiones anteriores y optimiza su recompensa.

Para llevar a cabo este proceso de aprendizaje inicialmente se actualiza la


recompensa del agente utilizando el número de paquetes recibidos calculado.

18
Posteriormente, y utilizando la función calculate cw window se definen la
acciones a llevar a cabo por el agente.

Se ”da un paso” utilizando el método step del enviroment de gym pasándole


la acción calculada previamente.

Este método step retorna el vector de observacion que indica el nuevo estado
en el que se encuentra el ambiente después de realizar la acción especificada, la
recompensa obtenida, el indicador de terminado e información extra.

Este proceso iterativo se realizará hasta que el agente detecte que la tarea
a realizar se ha cumplido por lo que finalizara dicho proceso de aprendizaje y

19
reinicia los valores de stepIndex y de numero de paquetes recibidos para una
nueva iteración de la simulación y por ende un nuevo ciclo de aprendizaje. En
caso de que sea la última iteración se reiniciara el enviroment de gym.

Actualización del contador para el numero de la iteración actual de la sim-


ulación y condición de break del ciclo

Finalmente, y utilizando la estructura try vista al inicio de esta sección se


da soporte a la interrupción de la simulación utilizando la combinación de teclas
Ctrl + C. En caso de que no se interrumpa la simulaicon del agente termina el
ambiente (red manet)

20

Вам также может понравиться