Artificial Neural Network (ANN)

El bot usa raycast como sistema de navegación. Si uno de los rayos colisiona con un objeto o pared este se vuelve rojo, indicando que hay un obstáculo en esa dirección y que por tanto no se puede ir en esa dirección.

La comunicación entre el juego y el entorno de desarrollo (Netbeans) se establece mediante el Pogamut. El Pogamut usa la api del Unreal Engine para transmitir las acciones escritas en java y traducirlas de forma que el engine pueda entenderlas. La partida empieza con 10 bots luchando entre ellos y pasado un cierto tiempo la simulación se detiene para crear una nueva generación de bots.

Las redes neuronales artificiales (Artificial Neural Networks o ANN en inglés) son modelos computacionales inspirados en el sistema nervioso de los animales, concretamente el cerebro, que es capaz de aprender mediante patrones. Las redes neuronales artificiales son presentadas generalmente como sistemas interconectados de neuronas que pueden computar valores de distintas entradas mediante neuronas y dar como salida una respuesta.

La red neuronal usada en este proyecto ha sido configurada para trabajar con 48 inputs como por ejemplo los estados del bot, que armas tiene y cuanta munición de cada tipo, lo que se percive del entorno... después de configurar las entradas la información es enviada a la capa oculta a través de 4608 sinapsis donde se procesa en las 96 de las que dispone la red. Una vez la información ha sido procesada se envía la respuesta a las 46 salidas a través de las 4416 sinapsis. Cada salida corresponde con una acción; saltar, correr, recoger el arma más cercana.. Finalmente cada salida tiene un umbral que determina si la salida se activa o no.

Pasado un tiempo el juego se detiene y todas las sinapsis de cada bot son codificadas en arrays llamados cromosomas. Entonces se seleccionan los cromosomas de los 2 mejores bots (los que han muerto menos y han matado más) mediante elitismo, se duplican y se separan de los otros bots, el resto de cromosomas son cruzados con los duplicados de los mejores bots, de esta manera las nuevas generaciones que se obtienen son siempre igual o mejores que la anterior. Finalmente se aplica un factor de mutación a todos los nuevos bots generados de esta forma. entre ellos con un factor de mutación que se aplica después de cruzarles y que permite obtener pequeñas singularidades en los individuos.

El gráfico muestra las diferencias entre un bot que no ha sido entrenado y otro que si lo ha sido. Después de 100 generaciones podemos apreciar como los bots entrenados matan casi 4 veces más que los que no lo han sido.