Categorías
Universitario Videojuego

Computación evolutiva

Aunque la Computación Evolutiva es una disciplina independiente de la llamada Inteligencia Computacional, encaja bien dentro de un tema de Aprendizaje por Refuerzo ya que puede usarse como una forma muy distinta de crear un sistema que se adapte a cierto comportamiento que buscamos.

La Computación Evolutiva puede encajar bien dentro del tema de Aprendizaje por Refuerzo porque ofrece una perspectiva radicalmente distinta: en lugar de optimizar una política mediante el cálculo de gradientes o funciones de valor paso a paso (a nivel de fotograma o de acción), optimiza agentes completos a nivel de población basándose únicamente en el resultado final (el llamado fitness o desempeño global).

La generación procedimental de contenido (ProcGen) puede verse guiada por Computación Evolutiva, por ejemplo para crear monstruos con anatomías complejas que tienen que poder moverse en entornos complejos 3D, o para ir iterando y encontrar una mejor versión de un nivel, un puzle, un arma o algún otro contenido, así como ajustar la dificultad evolucionando bots que se adapten al nivel de habilidad deseado.

En otro nivel de abstracción, hay quien se ha planteado usar Computación Evolutiva para buscar automáticamente los hiperparámetros de un sistema de Aprendizaje Automático… de modo que tendríamos «Auto-Aprendizaje Automático» donde este va evolucionando hasta llegar a ser muy bueno creando un cierto sistema de Aprendizaje Automático. Sin embargo no vamos a adentrarnos en este terreno.

Algoritmos genéticos

Dentro de la Computación Evolutiva, se aplica una metáfora biológica (o se toman unos principios «bioinspirados») para hablar de Algoritmos Genéticos. Se trata de mantener una población de individuos (que pueden ser agentes o soluciones software) que va a sufrir procesos de Selección, Cruce (Crossover) y Mutación a lo largo de varias generaciones. Exactamente como les ocurre a los seres vivos.

Debemos distinguir lo que es el genotipo del fenotipo. El genotipo es el código o vector de parámetros que hace las veces de «cromosomas» del individuo. El fenotipo es el comportamiento del sistema o NPC dentro del juego.

La función de aptitud (fitness function) es la métrica escalar que mide cómo de bien ha rendido un individuo durante su vida (ej. la distancia recorrida por un coche de carreras antes de chocar o los puntos conseguidos por un bot que juega al Pac-Man antes de morir).

Neuroevolución

Estudiar un poquito de Computación Evolutiva, aunque sólo sea los Algoritmos Genéticos es interesante para poder entender el concepto de «Neuroevolución» y es que la naturaleza tiene su manera de resolver problemas de toma de decisiones sin necesidad de andar calculando derivadas.

Por ejemplo, una red neuronal artificial puede «evolucionar» en vez de autocorregirse con backpropagation. La idea de lo que se conoce como Optimización libre de gradientes (Gradient-Free) es dejar de lado la backpropagation, y pasar a considerar los pesos de la red neuronal artificial que controla al sistema como si fuera el «ADN» del individuo. La mutación modifica aleatoriamente estos pesos y la selección conserva las redes que consiguen el mayor fitness.

Esa es una idea, aunque luego hay otra y es la NeuroEvolution of Augmenting Topologies (NEAT), un algoritmo histórico indispensable. Este algoritmo no solo optimiza los pesos de la red, sino que hace evolucionar la propia arquitectura de la red neuronal (¡su TOPOLOGÍA! añade neuronas y conexiones dinámicamente desde estructuras simples), permitiendo descubrir controladores eficientes y diminutos.

Estrategias de evolución

El Aprendizaje por Refuerzo tradicional (como Q-Learning o PPO) analiza la tupla (s, a, r, s’) en cada instante de tiempo. Sin embargo las estrategias de evolución (Evolution Strategies, ES) evalúan al agente completo al final del episodio.

Este enfoque ofrece buena resistencia al ruido y recompensas diferidas… sobresale su aplicación en juegos donde la recompensa es extremadamente escasa (sparse rewards) o donde el entorno es altamente estocástico, situaciones que suelen atascar al Aprendizaje por Refuerzo basado en gradientes.

Además este enfoque es trivialmente escalable: se pueden simular miles de partidas en paralelo en diferentes hilos de CPU o GPU sin preocuparse por sincronicidades de gradientes.

Más información

Para complementar es recomendable consultar otros documentos.