jueves, 26 de diciembre de 2019

Sobre mi vida reciente II

Este ha sido un buen año para mi, es justo decirlo. En la segunda mitad de 2018 pasé unos meses bastante duros, honestamente no tenía muchas expectativas en enero. Pero en algún momento de febrero simplemente comencé a unir los puntos. Regresar a Mérida fue una sorpresa. Conocí a mucha gente increíble que ahora han hecho aún más grande mi grupo de "super science friends". Entré al fin a un posgrado (uno que años atrás, en una plática con un estudiante del CIC-IPN, me había parecido un reto muy alto). Tenía mucho que no sentía el haber aprendido más de lo que esperaba en un sólo año y que al fin, después de tanto funciono, bien otra vez.

Encontré un buen argumento más para escribir bitácoras públicas en un lugar inesperado, un librazo sobre inteligencia artificial que me recomendó uno de mis profesores: What to Think About Machines That Think. Pero necesito terminar de reconstruir el contexto antes de llegar a él. En Sobre mi vida reciente I me había quedado en mi sombría segunda mitad de 2018. Recibí 2019 en Zacatepec y regresé a Yucatán la primera semana de enero porque me habían aceptado para el SPI del CIMAT Unidad Mérida. Entre finales de febrero y la primera mitad de Marzo pasé mi última recaída psicológica y desde entonces me sentido como nunca. En mayo si no ml recuerdo me avisaron que había sido aceptado a la maestría en la UNAM (PCIC). Me ha gustado bastante hasta ahora. La carga de trabajo no es excesiva en volumen pero exige mucho tiempo de investigación, desarollo y depuración en el que caso de las tareas prácticas. En septiembre escribí lo siguiente en un estado:

"xkcd tenía una gráfica de conocimiento vs seguridad de saber. Había un pico cerca del origen y luego un valle muy grande, para después volver a subir alto después de mucho. He de estar en el valle porque a pesar de que cada semana aprendo a hacer cosas que se me hacían muy avanzadas para mí en la mitad licenciatura, sigo viendo lejos una capacidad real para resolver problemas de frontera. Porque es como caminar hacía el horizonte; avanzas solo para darte cuenta de que hay más y más camino para recorrer. En el caso de las ciencias naturales esto sería emocionante (¡tanto por descubrir y tan poco tiempo!), pero en las ciencias aplicadas me parece atemorizante (tanto por resolver, tantas herramientas por entender, y tan poco tiempo)."

Me siento más satisfecho con mi despeño desde entonces, pero no puedo evitar sentir ganas de evitar el estancamiento académico (en una sana medida, quiero pensar). La materia que más disfrute fue inteligencia artificial. Los dos profesores que la impartieron son excelentes. Uno de ellos fue el que nos dio una montaña de excelentes recomendaciones de libros de divulgación sobre distintos temas (incluyendo el que comentaba más atrás). La mejor razón que encontrado para escribir con más frecuencia aparece en un ensayo de Cesar Hidalgo: "No creo que las máquinas puedan pensar, pero tampoco creo que las personas puedan". En su opinión, la capacidad de pensar no es algo que este confinado en un solo individuo u objeto. Si una persona hubiera pasado años desde su nacimiento aislada en una cámara de supresión de estímulos, aislada del universo entero, no tendría nada en que pensar. La capacidad de pensar es una propiedad distribuida. Requerimos de la interacción con el mundo, de conversaciones, del conocimiento de la vida e ideas de otras personas para poder pensar. Creo que si más personas regresaran a escribir en bitácoras publicas (cada una con al menos un circulo de lectores significativo), aumentaría la capacidad de pensamiento y empatía en una escala social. No hace falta que se discutan temas profundos. Cada detalle de lo cotidiano es un bloque de construcción necesario. Espero regresar más a menudo al anecdotario y encontrar nuevos bloggers este 2020.

martes, 17 de diciembre de 2019

2006

Back then.
Si me dieran la oportunidad de regresar a 2006 pero sin saber lo que se ahora (en todos los aspectos), no lo aceptaría. El futuro (presente) sería diferente pero no necesariamente mejor ni habría disfrutado del tiempo mejor (dónde aplicaba). Este es mi argumento. Imaginen que se les da la tarea de organizar una biblioteca completa que tiene inicialmente todos los libros en desorden. Supongan que esto les toma dos años enteros. Al final, deciden crear un catálogo en donde aparece la posición correcta de cada libro en los estantes. Si enviaran ese catálogo a su yo de dos años del pasado justo antes de empezar, les tomaría quizá solo un mes ordenar todos los libros en vez de dos años. ¿Ven la idea? La información cuesta esfuerzo (sino de ustedes, de alguien más). Si amaneciéramos mañana en 2006 por una fallo en la matrix (como en la imágen que circula), estamos condenados a repetirlo todo (repetir en categorías, sería distinto por las pequeñas diferencias acumuladas [efecto mariposa] ). Suena un poco desalentador pero creo hay algo muy bueno en todo esto. Si no supimos aprovechar los buenos tiempos o no hicimos las cosas que nos hubieran hecho más felices, entonces no podemos culparnos porque la experiencia no puede crearse de la nada. Si tuvieron antes o tienen ahora las guías correctas, siéntense afortunados porque no existen los oráculos en la vida real.

nota: pueden encontrar aquí la versión formal de esta idea.

viernes, 6 de diciembre de 2019

Juego del gato (tic-tac-toe) vía algoritmo minimax.

Me dejaron el ejercicio de hacer un juego de gato y escogí el camino de la inteligencia artificial de la vieja escuela. Pensé que era algo trivial pero si me costó varios días. Planeo hacer en vacaciones un video sobre el algoritmo minimax en mi canal porque los que hay tienen códigos que ahora me parecen innecesariamente complejos. La verdad es que, aunque mis amigos creen que lo digo sólo por modestia, soy muy pendejo para entender las cosas a la primera y más aún si no me explican paso a paso. Ya que vi claro todo el proceso recursivo me acordé del final de la película War Games. Les debo el video pero por ahora pueden consultar mi reporte aquí. La implementación que hice hace uso de la siguiente clase para instanciar los estados posibles del juego:

Contiene un método que verifica si el tablero ya esta lleno y otro que verifica si es el turno del jugador X. El pseudocódigo es el siguiente:
[click para agrandar]


La función evaluación() retorna +10 si 'X' gana la partida, -10 si 'O' gana y 0 si hay empate o si aún no hay ganador en ese estado. El código completo en Python lo pueden encontrar aquí. Este programa sólo tiene el fin de ayudar a entender el algoritmo minimax. No es una implementación eficiente ya que resuelve el problema por fuerza bruta repitiendo incluso el paso por varios estados ya visitados. Pueden mejorarlo añadiendo estrategias como poda alfa-beta o memorizando estados ya visitados.