jueves, 29 de septiembre de 2016

El torneo de estrategias

Nuestras fases finales de la implementación de nuestro jugador estratégico fueron interesantes porque solo hasta casi el final nos dimos cuenta de que nuestro programa no hacía lo que nosotros queríamos exactamente. Hasta la fecha no podemos explicar cómo fue que ése programa fue el más fuerte en las primeras etapas de desarrollo.

Las etapas “finales” de desarrollo consistieron en optimización, deshaciéndonos una por una de las piezas de código que nos tomaba más tiempo ejecutar (entre éstas las funciones del framework dagor). Removimos el uso excesivo de la función len() de la librería estándar de python y nos concentramos en hacer nuestro programa tan inteligente como fuera posible para cada caso. Es decir: con modificaciones ligeras al framework dagor para conveniencia y scripts que ejecutaban grupos de enfrentamientos por tamaño de área de tablero probamos nuestro programa exhaustivamente para obtener de manera algo burda las profundidades máximas que el tiempo límite nos permitía alcanzar.

El proceso de optimización y pruebas nos tomo casi tanto tiempo como la implementación debido a que había que correr el profiler cada vez que hacíamos un cambio significativo. Con esto nos dimos cuenta de que no es nada sencillo hacer optimizaciones y que llega un momento que algunas partes de código ya no se pueden mejorar de ninguna forma a menos que se cambien por completo. Sin embargo, creemos que el tiempo y trabajo que nos tomó valió la pena pues nuestro código era más o menos el doble de rápido y funcionaba mejor que nunca, gracias a eso es que obtuvimos los resultados que obtuvimos.

En cuanto a los resultados, la verdad ya estábamos esperando quedar entre los primeros lugares pues en la primera fase habíamos dominado y nuestra segunda implementación vencía a la primera el 90% del tiempo. De todas maneras, no esperábamos tener resultados [100, 0] puesto que incluso el aleatorio por pura suerte nos ganaba 1 a 3 juegos, así que eso si fue una sorpresa.

Si hubiéramos tenido más tiempo creo que nos hubiera gustado implementar un algoritmo que aprendiera de nuestra segunda implementación hasta vencerla (sobre todo porque no estamos muy seguros de cómo podría hacerse), y también buscar una mejor función de evaluación de nodos pues la nuestra absorbía el 70% del tiempo de ejecución 

No hay comentarios.:

Publicar un comentario