jueves, 29 de septiembre de 2016

El Torneo de Estrategias

El torneo en general nos gustó mucho a todos los integrantes del torneo, fue emocionante ver como se disputaban las partidas a una velocidad vertiginosa, aunque fuera contra el algoritmo aleatorio. Además, ver los resultados que iban saliendo poco a poco fue algo que nos ponía a todos nerviosos, como ver el clímax de una película. Ver los frutos de nuestros esfuerzos ha sido algo genial, ya que demuestra el tiempo que invertimos en mejorar nuestro algoritmo.

Esta actividad desde nuestro punto de vista fue muy enriquecedora porque nos ayudó a poner en práctica nuestros conocimientos de programación así como las habilidades correspondientes para la resolución de problemas. Siendo los aprendizajes más marcados tienen que ver con el hecho que antes de resolver un problema (por m
ás complejo que pueda ser) lo mejor es empezar a analizar “todos los casos” posibles en donde pudiera ocurrir. De esta forma paulatinamente se puede empezar a “visualizar” un patrón que nos puede llevar a la solución, quizás esta no sea definitiva y en algunos casos puede no funcionar pero nos ayuda a simplificarlo. Después de esta etapa es cuando se debería empezar a programar, ya que si se hace al revés se harán muchos códigos “inservibles” y se perderá innecesariamente tiempo del equipo de trabajo.

Durante la implementación del jugador estratégico tuvimos diferentes obstáculos como fue el hecho que no pudimos identificar adecuadamente “los casos ganadores del juego” y nos limitamos a analizar el mejor “futuro posible” de nuestro algoritmo en la cuadrícula. Esta situación volvió nuestro código más lento que todos los demás pero lo volvía muy efectivo a la hora de tomar las decisiones, características que nos hicieron ganadores del segundo lugar del torneo. Aun cuando este fue un resultado bastante bueno yo creo que con un poco más de tiempo hubiéramos podido optimizar nuestro algoritmo de tal forma que tuviera que hacer menos cálculos (principalmente por todas las comparaciones que hace) y además que lograra identificar la “opción más viable” de una mejor manera. Así como identificar la posibilidad de “acabar” al enemigo tan pronto como tuviera la oportunidad y acabar más rápido la partida.

miércoles, 28 de septiembre de 2016

Programando un jugador estratégico

Para el diseño de nuestra IA, nos basamos en la teoría y conocimientos vistos en clase, incluyendo la teoría de juegos. Al principio las quisimos aplicar a un nivel muy superficial, pero con el tiempo nos dimos cuenta que esto no es muy efectivo, así que cambiamos el algoritmo para poder “ver a futuro” los movimientos que nosotros quisiéramos. Esto nos ayudó a ver estrategias nuevas y formas de atacar y defendernos contra el adversario.

Cuando vimos por primera vez el Framework Dagor y los primeros juegos que se probaron (D10 y Super Gato), pensamos que el reto sería más ligero y que el tipo de estrategias que necesitaríamos implementar serían bastante directas. Sin embargo, cuando vimos el juego de Orugas y sus reglas, nos dimos cuenta de que se trataba de algo mucho más interesante y retador.  El día martes nos frustramos, debido a que varias veces nos costaba visualizar cual debería ser el siguiente movimiento dado el estado del tablero, resultando en una implementación lenta y poco eficiente. Sin embargo, eso no nos desmotivo y al final logramos implementar un código más entendible y práctico.

Tal vez porque somos también un equipo de programación competitiva, nos ha parecido de los mejor este reto, ya que prueba habilidades que desarrollamos constantemente y que tienen que ver mucho con nuestra carrera y a lo que queremos especializarnos. Nos hubiera gustado tener más tiempo para implementar una solución más eficiente y que incluso fuera adaptativa.


Para el torneo de mañana, esperamos lograr un buen lugar. Gracias al pre-torneo, nos hemos dado cuenta que nuestra IA es una de las más lentas, pero también de las mejores, logrando un tercer lugar ganando en una gran cantidad de casos. Aunque algunas de las soluciones son bastante intimidantes y se ven muy bien implementadas, esperamos mejorar nuestro algoritmo y conseguir un mejor lugar general. 

martes, 27 de septiembre de 2016

Teoría de Juegos


La teoría de juegos es una rama de la matemáticas aplicadas enfocada en la “predicción” de comportamientos de varios elementos que se encuentran en el mismo medio, es decir que las reglas de su entorno se aplican para todos las variables del experimento. La teoría de juegos es comúnmente utilizada para formular, estructurar, analizar y comprender escenarios estratégicos. (Turocy y von Stengel, 2001). Por el anterior motivo esta disciplina es ampliamente utilizada con la finalidad de “reducir” o mejorar la precisión los cálculos necesarios para predecir un estado finito. De esta forma se pueden lograr soluciones más complejas en computación con un gasto significativamente menor de recursos. Siendo otra ventaja que se pueden realizar “fórmulas” más sencillas (tanto de implementación como de comprensión humana) para la solución de diferentes situaciones.

Lo anterior se liga directamente con lo que vimos el día de hoy en el “Framework Dagor para juegos de estrategia”, porque analizando los diferentes casos de los juegos nosotros hemos podido determinar algoritmos que puedan darnos el resultado deseado (que en este caso es el de ganar los juegos). Lo que más nos gustó del taller del día de hoy fueron las estrategias para poder determinar “el algoritmo correcto”  y también la facilidad con la cual el Framework Dagor puede implementar juegos de estrategia. Por otra parte lo que no nos gustó tanto es el hecho que este reto puede llegar a ser un poco tedioso si no sabes cómo podrías mejorar tu algoritmo o cambiar tus casos prueba.

Referente al avance del proyecto hemos podido deducir algunos casos en el cual el “algoritmo funciona adecuadamente” pero este algoritmo depende drásticamente del tamaño de la cuadrícula por lo que no funciona en todos los casos. Por otra parte hemos querido implementar una lógica de Min-Max pero nosotros presentamos problemas al poder “predecir” los estados futuros y escoger el adecuado para ir ganando paulatinamente el juego. Creo que el principal problema que nos vamos a enfrentar es el tiempo que tenemos para implementar el código, así como vislumbrar la mayor parte de los casos para poder ganar en la mayoría de las confrontaciones durante la competencia.



Fuentes consultadas

  • Turocy, Theodore y von Stengel, Bernhard. (2001) Game Theory. London School of Economics and Political Science. Consulta realizada el 27 de septiembre de 2016. En: http://www.cdam.lse.ac.uk/Reports/Files/cdam-2001-09.pdf
  • McGuire, Morgan y Chadwicke, Odest. (2009) Creating Games: Mechanics, Content and Technology. USA: A K Peters.
 

lunes, 26 de septiembre de 2016

Autobiografía de Servio Tulio Reyes Castillo



Mi nombre es Servio Tulio Reyes Castillo, tengo 19 años y actualmente estoy estudiando el tercer semestre de la Ingeniería en Sistemas Computacionales. Una de las cosas que más me apasiona es comprender y ayudar en el desarrollo de nueva tecnología que pueda mejorar nuestra forma de vivir. Por tal motivo escogí este reto, para ir comprendiendo paulatinamente como estos algoritmos de “Inteligencia Artificial” puede ayudarnos a resolver las diferentes situaciones que se nos presenten en nuestra existencia. Siendo esta también mi principal expectativa de la Semana i, así como el hecho de poner en práctica mis diferentes habilidades como programador y determinar la calidad de las mismas.

Hablando un poco más de su servidor, me gusta mucho leer -prácticamente de todo los temas- aunque el libro que más me ha gustado recientemente es el de El Conde de Montecristo de Alejandro Dumas, esto por representar tan vívidamente muchas de las emociones que un ser humano pudiera experimentar en su vida. Para relajarme me gusta escuchar música de los géneros de Rock y Metal principalmente, siendo mis grupos favoritos Bon Jovi, Queen, Def Leppard y Metallica

Debido a la carga escolar últimamente no he podido ver mucho la televisión pero en vacaciones disfruté de varias películas y series que me agradaron mucho, las cuales tenían temáticas de ciencia ficción -que es mi género de películas favorito-. Algunas de estas series fueron las de Stranger Things y de Los Expedientes Secretos X, que tenían una temática paranormal con ciencia ficción en un ambiente de suspenso. Y en cuanto a las películas que más disfruté fueron las de Lucy, que trataba el tema del potencial de la mente humana, y la película de Star Trek: En la Ocuridad siendo mi parte favorita la de poder viajar por el universo curvando el mismo (motor warp), que desde mi punto de vista lo considero como una posibilidad bastante realista para conocer el cosmos en base a las leyes de la física que conocemos.