Edad de guerra a la AI
Age of War Ai, un proyecto en el que pasé una cantidad de tiempo aborriente, que se convirtió en un código de espaguheti masivo. Fue mi primer gran proyecto y me mostró cuánto más tenía que aprender porque me faltaba (y todavía lo hago más probable) en todos los campos. En el contexto de este proyecto hice lo siguiente:
Cómo no hacer un proyecto
- Obtenga el juego de la edad de guerra de vainilla, haga un módulo que extraiga datos a través de la biblioteca OpenCV a medida que avanza el juego y lo alimenta al algoritmo ordenado. Lo que no me di cuenta es que evaluar de 30 a 50 agentes en un juego que no se acelera y el tiempo de juego promedio de 10 minutos por sesión lleva mucho tiempo a entrenar y no arrojó resultados significativos
- Obtenga el motor de trucos, date cuenta de que no funciona con este juego específico para quién sabe qué razón, luego encuentre un descompilador para juegos flash e inyecte un guión en el juego que genere archivos de texto para eludir todo el asunto de OpenCV para obtener valores. Obtuve resultados ligeramente mejores ya que logré acelerar el juego X2 con el motor de trucos, pero aún así le faltaba mucho.
- Obtener la unidad en marcha. Como ya encontré un camino en el código de juego, invierte la ingeniería de todas las mecánicas de TI e hice una simulación bastante fiel en la unidad que tenía exactamente los mismos parámetros que el juego original.
- Simule 50 entornos en la unidad con velocidad 10x y haga que se comuniquen a través de TCP con mi guión de Python que ahora tenía un gerente de Dios para todos esos entornos y sus respectivas acciones. Aquí en realidad comencé a ver algunos resultados y estrategias significativas para desarrollar y manejar ganar en modo normal yay. Pero quería moe
- Cambie completamente en los agentes de Unity ML esencialmente abandonando el guión de Python, el entrenamiento y el agente con PPO y obtenerlo después de toneladas de parámetros de cambio y sus funciones hacen que tenga una estrategia bastante buena que gana el juego en modo duro
- Pruébelo en el juego original y registelo ganando y se da cuenta de que perdió 2 meses en un proyecto que podría haber terminado en menos de 3 semanas
- Aún así, haga una biblioteca de visualización para usar el motor matemático Manim porque encontré algunos videos geniales de YouTube sobre el tema que no publicaron sus repositorios
Puede ver la descripción general de este dolor aquí: volveré al 100% a este canal para llegar al menos a 1 m, pero por ahora tengo otros objetivos que perseguir.
Corriendo en Python 3.7.9
Entradas:
- Número de tropas en el entrenamiento (1 aporte)
- Enemigo HP - Porcentaje de salud total (1 aporte)
- Mi HP - porcentaje de salud total (1 aportación)
- Money - Normalizado por costo unitario básico (dinero/costo_of_basic_unit) (1 entrada)
- XP - puede actualizar la edad o no (1 entrada)
- Puede activar la capacidad - 0 a 1 aspirador (1 entrada)
- Mis tropas en el suelo tipo 1, 2, 3, 4 (4 entradas)
- Tropas enemigas en el suelo tipo 1, 2, 3, 4 (4 insumos)
- Número de ranuras de cañón disponibles (1 entrada)
- Edad del jugador: una codificación caliente (5 entradas)
- Edad enemiga: una codificación caliente (5 entradas)
- Matriz con torretas y torretas (máx 4) (1 entrada para el tipo ya que se vuelven progresivamente más fuertes y 1 entrada para la deprecación de edad) (2 para cada ranura) (8 entradas)
- ¿Dónde se lleva a cabo la batalla actual (0-1 tu base a la base enemiga) (1 entrada)
Salidas:
- Crear tropas Nivel 1, 2, 3 (3 acciones)
- Crear tropas Nivel 4 para la era espacial (1 acción)
- Comprar ranura de cañón (1 acción)
- Compre el nivel de cañón 1, 2, 3, primero en la ranura disponible (3 acciones)
- Vender cañón en una ranura determinada (4 acciones)
- esperar (1 acciones)
- Utilizar la capacidad
Dependencias:
- numpy
- paleta OCR
- CV abierto
- bisagro
- Python
pip install numpy paddlepaddle paddleocr opencv-python scipy neat-python
Los activos funcionan solo para esa resolución específica Si desea modificar la resolución del juego, tendrá que cambiar el tamaño de los activos en consecuencia (por ejemplo: hacer el juego y los activos x% más pequeños)
Puedes descargar el archivo que usé para el juego desde aquí