sábado, 1 de octubre de 2016

Cierre del reto

Cierre del reto


Aldo: 
¿Qué aprendizajes personales me llevo del reto? 
Aprendí la la valiosa habilidad de ser paciente, pues a pesar que la implementación en código de nuestro diseño no funcionó las primeras veces, después de dedicar más tiempo al diseño lógico (y repasar algunos temas de Estructuras de Datos) logré junto con mi equipo poder llegar a una solución más eficiente. Asimismo, reiteré que los alumnos con mejores habilidades para programar y con una creatividad loable son aquellos que estudiamos ISC.

¿Qué recomendaciones le haría a un amigo que quisiera llevar este reto en un futuro?
Le recomendaría repasar el lenguaje de Python para la primera sesión, además de resolver problemas tipo ACM para quedar dentro de los primeros puntajes. Para programar el jugador estratégico, le recomendaría leer sobre teoría de juegos y acudir con otros profesores para que le orienten hacia una solución idónea. También le sugeriría no tomarse el proyecto a la ligera y que entre más horas le dedique con su equipo al diseño de la solución, menos serán las horas programando.

¿Qué actividad me gustó más del reto?
La actividad que más me gustó del reto fue la del concurso de programación tipo ACM.

¿Qué actividad me gustó menos del reto?
La actividad que menos me gustó fue ver la película, pues siento que pudimos haber aprovechado ese día para presentar la estrategia del equipo ganador y así aprender todos de ellos.

¿Qué cambios le haría a este reto para mejorarlo?
Incluiría una lista de material bibliográfico para conocer más sobre juegos de estrategia y de esta forma poder llegar a una solución más eficiente. Asimismo, dedicaría otro día al diseño y a la programación del jugador estratégico, pues varios alumnos no traen fresco el lenguaje de programación base para el reto y ello les llevó a perderse o trabarse en pequeñeces.

Daniel:
¿Qué aprendizajes personales me llevo del reto?
Personalmente me llevo un mayor entendimiento de cómo es que las computadoras pueden resolver problemas de una manera tan precisa, y es por eso que su utilidad es tan valiosa. Además, tengo un mayor entendimiento del alcance de la inteligencia artificial y el trabajo en equipo.

¿Qué recomendaciones le haría a un amigo que quisiera llevar este reto en un futuro?
Le recomendaría tener mucha paciencia, tener la mente abierta y tener un buen entendimiento de Python y recursión.

¿Qué actividad me gustó más del reto?
Sin duda el concurso de inteligencia artificial con el juego de la oruga, ya que me otorgó la mayor parte de conocimientos.

¿Qué actividad me gustó menos del reto?
La película, por que aunque de verdad estuvo muy interesante, era una actividad que podíamos hacer en casa. Hubiera preferido que los profesores o el equipo ganador explicarán un algoritmo para resolver el problema de la oruga.

¿Qué cambios le haría a este reto para mejorarlo?
Como lo mencioné en la pregunta pasada, considero necesaria la solución propuesta por los profesores acerca del juego de la oruga.

Isaín:
¿Qué aprendizajes personales me llevo del reto? 
El reto me dio a mí muchísimos nuevos conocimientos, los cuales estoy seguro que utilizare en el futuro, tal vez a muchísima mayor escala, pero por algo se empieza. En el futuro yo más que nada quiero dedicarme al área de análisis y desarrollo de software, pero no dudo que necesite de la inteligencia artificial para que el sistema pueda funcionar de manera óptima y siempre sepa cómo adaptarse a los usuarios.

¿Qué recomendaciones le haría a un amigo que quisiera llevar este reto en un futuro?
Lo que yo le recomendaría es que comience a investigar acerca de teoría de juegos y que realice ejercicios que abran la mente lógica para que a la hora de enfrentarse al reto, pueda desarrollar grandes estrategias.

¿Qué actividad me gustó más del reto?
En general me gustó todo el reto, pero particularmente me gustó más el diseño del jugador estrategico, ya que no me gusta mucho programar o en particular se me hace un tanto difícil; siempre me ha gustado el análisis de la posible mejor solución.

¿Qué actividad me gustó menos del reto?
Realmente no hay nada que no me gustara.

¿Qué cambios le haría a este reto para mejorarlo?
Los únicos cambios que yo propongo son los de dar un día más para la explicación del código fuente y otro día más para el desarrollo del jugador estratégico.

Ex Machina

Ex Machina

  • Is Nathan a reliable or unreliable narrator of his own motives and story? What can we say with certainty that we know about him or his actions in the film?
  • He is reliable in terms that his motives were truthful and evil-free. On the other hand, he was manipulated by Caleb and by Ava, for he just wanted to make an authentic artificial intelligence and do a scientific breakthrough.

  • Does Caleb ever do anything we would consider truly unethical? Does he “deserve” his end?
  • He violated the trust Nathan put on him, but never did something unethical (apart from hacking the system). He did not deserve his end; if any, Caleb shoul've escaped with Ava.

  • Speaking of the ending – how many legitimate storylines can you draft for the final scenes in the film? (“Legitimate” means the words and actions on screen as well as the previous scenes can support the storyline you suggest without breaking people’s expectations for story structure, honesty, or common sense.)
  • The ending was appropriate since Ava needed to use manipulation, intelligence, sensuality and persuasion to accomplish her final goal. Other endings would not fit the storyline as a whole, so would not succeed at all.

  • Do you think there are any plot holes in the film?
  • Just why was Kioko "free" with Nathan around the house, and why did she died if she was only hit in the face, or what did Ava spoke to her before murdering Nathan, her father.

  • Before Ava “puts on” the skin of the other robots, do you think she passes the Turing Test? In other words, is her sentience/conscious awareness enough to allow her to exist with humans, or must she also take on the form of humanity?
  • The Turing Test was passed the moment she achieved that Caleb changed the protocols. She was suppoes to look entirely human in order to fit in the normal society; apart from that, her consciousness was still unique.

  • Kyoko is a disturbing character to watch. What do her interactions with the other characters show us about Nathan, Caleb, and Ava? And about herself?
  • Nathan clearly used her as a sexual object, whilst Caleb used her to discover the evil plan of her employer, and Ava teamped-up with her to plan her escape. She, herself, gas the same ability of consciousness as Ava.

  • If you say it fast enough, Bluebook sounds a lot like Google. The similarities were thinly veiled. What does the film say to us about the dangers of our technophilic world?
  • That nothing is private in this technophilic world. It results concerning that all of our information can be accessed by big companies to analyse not what we think, but how do we think and process information, as Nathan stated.

viernes, 30 de septiembre de 2016

El torneo de estrategias

El torneo de estrategias


  • En el concurso donde competimos con nuestro juegador estratégico obtivimos el 6to lugar, lo cual consideramos no es un mal resultado ya que son 19 equipos. Sin duda, nos faltó desarrollar un mejor algoritmo para poder estar en las primeras tres posiciones. Lo bueno de esta experiencia es que realmente aprendimos una lógica nueva para resolver problemas con una pequeña implementación de inteligencia artificial. Consideramos que el aprendisaje fue excelente porque en vez de aprenderlo del profesor en una clase, pensamos en una solucion por nuestra propia cuenta.
  • Asimismo, de haber contado con más tiempo para desarrollar el proyecto, lo habríamos probado contra otros algoritmos de otros compañeros, o hubiésemos formado alianzas con otros equipos para comparar la estrategia y llegar a una similar.
  • Algo que llamó nuestra atención es que nuestro código finalmente pesó 10 Kb, mientras que el código de otros equipos que obtuvieron una mejor posición que nosotros apenas pesaban 2 Kb. Debemos reconocer la creatividad de otros equipos, pues su algoritmo ganó el 100% de las veces contra los algoritmos de otros equipos.
  • Nos gustaría que todos los equipos subamos nuestro código con el fin de aprender de los mejores y observar cómo podríamos mejorar nuestra implementación o nuestra estrategia. Además, creemos que de haber sido permitido el uso de threads o hilos de procesos, nuestro resultado habría sido distinto, pues habríamos podido crear un algoritmo más inteligente que pudiera analizar los movimientos del oponente y hacer que pierda.
  • Naturalmente, no nos gustó tanto del proyecto el que muchos equipos, incluídos nosotros, no teníamos experiencia previa programando juegos de estrategia, por lo que tuvimos cierta desventaja contra aquellos equipos que ya contaban con ella. Nos habría gustado que los profesores dedicaran uno o dos días a enseñar los principales algoritmos para teoría de juegos, de modo que nosotros pudiésemos calcular y elegir cuál sería mejor..

miércoles, 28 de septiembre de 2016

Programando un jugador estratégico

 

Programando un jugador estratégico


  • Para poder programar nuestro jugador interactivo primeramente pensamos en una estrategia empírica la cual dividía el tablero para intentar dejar al oponente con el menor número de espacios posibles y una vez haciendo eso se movía al lugar que le brindara más posibilidades moverse, este método funcionaba muy bien contra el jugador aleatorio ya que en promedio nos arrojaba una calificación por arriba de 75, sin embargo en el pre-torneo pudimos observar que esa estrategia estaba realmente muy mal ya que  perdimos contra la mayoría de equipos por lo que nos vimos obligados a mejorar nuestra estrategia. La nueva estrategia consiste ahora en que desde un principio checa 5 niveles de profundidad nuestros movimientos posibles y 4 del oponente, esto hace que todos los movimientos que se tomen se hagan de manera inteligente porque podemos predecir cuales son los posibles movimientos del contrincante y si hay manera de encerrarlo y terminar el juego.
  • Nos hemos enfrentado ante diversas situaciones que nos han atrasado muchísimo en la codificación del jugador, pero básicamente todo recae en cómo pasar todas nuestras ideas a estructura de código, ya que cuando lo pensamos todo suena muy bien, pero a la hora de intentar pasarlo a código se nos ha dificultado como programar dichos pensamientos. Afortunadamente con tiempo y dedicación hemos ido codificando de poco en poco todas nuestras ideas. 

  • Este proyecto ha sido muy interesante para todos los integrantes del equipo ya que nos ha permitido pensar más lejos que un simple programa de alguna tarea que nos lleva lo más 1 o 2 horas, en este proyecto tuvimos que poner en practica todos los métodos de programación que hasta la fecha hemos aprendido. Desde el principio supimos que este proyecto no sería fácil y trivial como a los que estamos acostumbrados a desarrollar por lo que comenzamos desde el análisis, los casos de prueba y toda esa serie de pasos hasta llegar a la codificación.
     
  • Los resultados que esperamos para el torneo del día de mañana son quedar entre los primeros 10 lugares, obviamente nosotros deseamos mucho más pero después de ver como los demás equipos destrozaban nuestra estrategia no nos hacemos mucho a la ilusión de quedar más alto, sin embargo, la estrategia que presentamos el día de hoy es totalmente diferente a la que presentaremos el día de mañana así que vamos a presentarnos con toda la actitud y que gane el mejor.

martes, 27 de septiembre de 2016

Framework Dagor

 

Framework Dagor


La teoría de juegos es una teoría cuyo propósito es el de determinar estrategias óptimas para cada uno de los jugadores en un juego con reglas cabalmente establecidas. En un escenario típico, dos jugadores, A y B, juegan un juego donde el jugador A requiere tomar una decisión, ignorando la decisión simultánea o consiguiente que pueda tomar el jugador B. El resultado es una conssecuencia de las dos decisiones. Muchas situaciones de la vida real pueden ser modeladas en términos de teoría de juegos, donde las reglas de los jugadores para determinar sus estrategias son llamadas Reglas de decisión.
 
Relacionando la información investigada previamente nos dimos cuenta de que estamos teniendo una introducción empírica a la teoría de los juegos, lo cual nos parece excelente ya que estamos aprendiendo de una manera práctica acerca de un tema tiene relevancia científica y sin duda usaremos a lo largo de nuestra carrera.

  • ¿Qué fue lo que más les gustó del taller de hoy? Lo que más nos gustó del taller del día de hoy fue aprender cómo se desarrollan los videojuegos de estrategia, principalmente que partimos de un esqueleto que ya tiene programado ciertos comportamientos y a esos solo hay que aplicarles un poco de lógica para poder hacerlos más poderosos a la hora de tomar decisiones.
  • ¿Qué fue lo que menos les gustó? Realmente no hay nada que no nos haya agradado del curso como tal, sin embargo, sentimos que la explicación fue un tanto rápida y no nos dio tiempo suficiente para analizar bien la forma en que debíamos programar la lógica por lo cual tuvimos que invertir muchísimo tiempo extra para averiguarlo.
  • ¿Qué dificultades vislumbran en este momento sobre la elaboración de su proyecto del jugador estratégico para el juego de Orugas? La principal problemática con la que nos hemos enfrentado hasta el momento es la codificación, como mencionábamos en el punto anterior hemos invertido demasiado tiempo en el desarrollo de la codificación y para nosotros que pensamos en un algoritmo meramente completo se nos ha dificultado plasmar todas nuestras ideas en código.  



Fuentes:

lunes, 26 de septiembre de 2016

Concurso de programación

Concurso de programación

El día de hoy, lunes 26 de septiembre del 2016, nosotros tres (Aldo, Daniel e Isaín) participamos en el concurso de programación del reto de inteligencia artificial. Este concurso nos gustó mucho, pues usamos un lenguaje de programación que no recordábamos del todo bien. Al final, el resultado fue el esperado y podemos decir orgullosamente que obtuvimos el 4to lugar.

  • Todos los problemas estuvieron relativamente sencillos en comparación al cuncurso que se realizó en el prototipo de semana i, ya que en esta ocasión pudimos resolver todos los problemas sin complicaciones serias. Únicamente tuvimos un poco de dificultades con el problema llamado Tabla de factoriales ya que en la primer subida nos marco un error por el formato de salida pero fue rápidamente solucionado. Por otra parte en problema Conociendo la moda la solución que propusiomos en primera instancia no fue la adecuada ya que intentamos hacerlo de la manera más elegante posible lo cual nos llevaría a muchísima más logica y al mismo resultado que un algoritmo de fuerza bruta pero al estudiar las posibles salidas pudimos concluir que el algoritmo de fuerza bruta nos cumpliría en tiempo y en memoria que el juez en línea solicitaba y efectivamente el algoritmo de fuerza bruta nos dio 100 en la primer subida.
  • Este concurso nos agradó muchísimo ya que despertó en nosotros la competitividad y el compañerismo para la rápida solución de problemas, así mismo pudimos poner en practica todos los conocimientos que hemos adquirido a lo largo de la carrera como por ejemplo el análisis y diseño de algoritmos. Sea acaso algo que nos haya disgustado el que se desperdiciaran tantas hojas de papel, pues los problemas podían ser visualizados en línea. Quizá sea esta un área de oportunidad para próximas actividades, el ahorrar hojas o solo utilizarlas en casos necesarios (bosquejar el problema).
  • Es probable que necesitemos trabajar con problemas de recursión para actualizar el conocimiento que hemos adquirido estos semestres de la carrera para poder resolver los desafíos de forma más eficiente. Asimismo, un área de oportunidad como equipo es diseñar algoritmos que podamos optimizar para llegar a un código fuente fácil de comprender.
  • Específicamente, repasamos el uso del lenguaje Python en general, ya que últimamente no habíamos tenido mucho contacto con él (pues llevamos materias donde programamos en lenguaje C). Recordamos, mediante errores de sintaxis que marcaba el IDE, cómo manejar listas e incluso diccionarios para el problema que más se nos dificultó. Además, aprendimos que la programación cooperativa funciona para ayudarnos como equipo a lograr un mejor resultado de forma rápida.