Showing posts with label doctorado. Show all posts
Showing posts with label doctorado. Show all posts

Tuesday, February 28, 2023

65 días de una ministra de vergüenza



La todavía ministra de la Suprema Corte, Yasmín Esquivel, no ha podido frenar el escándalo de su tesis (la que plagió), cuando era estudiante de la UNAM en licenciatura. Promovió un amparo para acallar a la UNAM, prohibiéndole hablar públicamente del tema. Sin embargo, la UNAM apelo a este fallo y el amparo se vino abajo. Y mientras la Comisión de Ética de la UNAM toma alguna decisión sobre el caso de la estudiante Esquivel (porque licenciada en Derecho en realidad no lo es), explota una segunda bomba contra la señora, pues ahora el periódico El País saca un artículo indicando que la misma ministra, Yasmín Esquivel Mossa, habría plagiado el 47% de su tesis de doctorado.

Las pruebas presentadas por el País son imposibles de refutar. Hay páginas y páginas completas totalmente copiadas de doce autores. Lo curioso, simpático o mejor dicho, lamentable, es que el abogado de la Sra. Esquivel indica que esos hallazgos del País no son plagio, sino errores al citar a otros autores. Defensa -si así puede llamarse- bastante patética, particularmente por referirse a una tesis doctoral. Vamos, y asumiendo -sin conceder que fuese cierto- que son errores en la forma de citar, nadie copa íntegras páginas y páginas de otros autores (incluso poniendo los pie de notas de los originales) y aún haciéndolo, ¿ningún sínodo le indicó que eso estaba mal? Los argumentos de ese abogado son tan burdos que termino por entender que no se le ocurrió a este señor ninguna idea para sacar al buey de la barranca. La aún ministra es una tramposa en toda la extensión de la palabra.

El título de doctorado, expedido por la Universidad Anáhuac, es absolutamente una mala broma. Los siete sinodales de la aún ministra -se ve- no revisaron la tesis y sólo cumplieron on el formalismo para que la señora llegara a ese grado. Por ende, los sinodales son tan responsables como la Sra. Esquivel, porque permitieron este plagio burdo. Curiosamente, la Universidad Anáhuac ha dicho que una vez pasados tres años de haber otorgado el título nada puede hacer. Sin embargo, parece que le quieren dar carpetazo. El siguiente video analiza las posibilidades de actuación de la propia Anáhuac, que ha demostrado con su deslinde en menos de 24 horas, que no se quiere meter en el tema:



Ivonne Filigrana, Doctora en Pedagogía, por la UNAM, tiene un canal en YouTube, "La Perspectiva Científica", y ahí ha hecho un análisis preciso de la tramposa Yasmín Esquivel. Pero véanlo ustedes mismos:


Ahora, con este nuevo plagio, las argumentaciones de esta tramposa se vienen abajo y probablemente, con más razón, la UNAM pueda concluir lo que nos dijo desde un principio y por ende, pueda tomar acciones como, por ejemplo, anular el título de la impresentable ministra y si eso hace, la SEP puede quitarle la cédula profesional. Quien siga creyendo que no hay lineamiento judiciales para esto, les remito a la nota que salió en Twitter, la cual muestra que la UNAM anuló el título de un alumno (por plagio) y que la SEP le quitó la cédula profesional. Ergo, sí hay mecanismos legales para actuar contra esta tramposa. Más aún, la Sra. Esquivel, con todos esos años de simular ser abogada, debería saber que es susceptible de ser juzgada penalmente por usurpar la función de un profesional en el servicio público. Vamos, que si no era suficiente que le despojaran sus títulos mal habidos, podría ser incluso sometida a 4 años de prisión por esta clara usurpación de funciones.


click para agrandar


Es poco probable que la Sra. Esquivel sea juzgada y procesada por estos delitos. Se siente fuerte y arropada por López Obrador, en donde el contratista favorito del presidente es el esposo de la tramposa. Sin embargo, siguen brincando voces  para que la todavía ministra renuncie a la Suprema Corte y probablemente con esto sepulte su carrera de abogada, de la cual no queda nada.

En mi opinión, la Sra. Yasmin Esquivel renunciará. No puede seguir fingiendo demencia. Está acabada.



Wednesday, September 29, 2021

Mi examen de doctorado


El 28 de septiembre, a la 1 de la tarde, empezó mi examen de grado. Finalmente ya todo estaba listo y debido a la pandemia se hizo de forma virtual. Los tres sinodales que estuvieron fueron: Dr. Francisco Hernández Quiroz (presidente), Dr. Jorge Luis Ortega Arjona (vocal) y Dr. Vladislav Khartchenko (secretario). La mecánica fue más o menos la misma que para otros exámenes. Primero tuve media hora aproximadamente, para hablar del trabajo realizado. Posteriormente hubo preguntas del jurado para que, acto seguido, me mandasen a un cuarto virtual en donde no podía verlos ni saber qué deliberaban. Unos 12 minutos después me dejaron ingresar y me aprobaron. Me dieron la mención honorífica, lo cual me asombró un poco (no la esperaba) pero que sin duda, me puso muy contento. Me tomaron la protesta y los sinodales me felicitaron.

Cabe describir que para llegar al examen de grado pasé por 8 revisiones (una por cada semestre), un examen de candidatura, la obligación de publicar un artículo de conferencia y otro en revista arbitrada. Desde luego, hubo que entregar la constancia del examen TOEFL (inglés) y algún requisito más que ya no recuerdo. Debo decir que el posgrado hizo siempre todo para ayudarme y le agradezco a la Secretaria Académica Lulú (Lourdes González Lora), pilar de esta institución. Igualmente el Dr. Javier Gómez, quien es el coordinador del posgrado, del cual no tengo ninguna queja, al contrario, pues siempre se interesó por mi trabajo. 

Aunque ya agradecí -al final del examen- a mi asesor, tutores y sinodales, repito un poco lo que dije: Primero, agradecer a la UNAM que es muy generosa. Vamos, aparte de darme esta educación superior no me cobró jamás ni un centavo. Pero más allá de eso, es claro que ser de la UNAM es un privilegio y lo que soy es en gran medida a la Máxima Casa de Estudios, que es más que un slogan, mucho más. Igualmente agradezco al Dr. Jorge Luis Ortega Arjona, que ininterrumpidamente, por más de cuatro años, nos vimos en su cubículo una vez a la semana para verificar los avances del trabajo. Los dos tutores asignados, el Dr. Héctor Benítez y el Dr. Vladislav Khartchenko, siempre revisaron el trabajo y dieron las sugerencias que venían al caso. Algunas funcionaron bien, otras fueron caminos sin retorno, pero esos caminos hicieron más ilustrativa la investigación y sin duda la enriqueció.

Finalmente tengo que agradecer al Dr. Francisco Hernández Quiroz, que en ocasiones tuve que pedirle asesoría y siempre estuvo de buen ánimo para escucharme. Finalmente quiero agradecerle a la Dra. Atocha Aliseda Llera, que fue mi compañera en algunas clases que llevamos en la Facultad y que cuando supo que estaba realizando el doctorado me dio todos los ánimos. Buena amiga siempre, amén de académica notable.

Desde luego tengo que agradecerle a Pilar, que siempre me ha apoyado. Mujer excepcional que me da gusto tenerla a mi lado y que me hace feliz. Igualmente a mi mamá y hermanos, que siempre están ahí. Esa es la verdad y eso es apoyo, nada de medias tintas.

Para quienes les interese mi tesis, trata de teoría de juegos. Brevemente resumo el asunto: la teoría de juegos es la teoría del conflicto, la teoría del tomar decisiones. En general, por los trabajos de Von Neumann y Morgenstein, sabemos cómo resolver muchos juegos, es decir, cómo hacer para jugar y sacar ventaja. Esto se reduce a dos posibilidades básicas: una matriz de pagos, en donde se ponen a todos los jugadores y las estrategias de cada uno de ellos y se hace el producto cruzado de todas las posibilidades para saber en cada caso las ganancias y las pérdidas. Sin embargo, los juegos que estudié, los de suma-cero (donde la ventaja de un jugador es la desventaja del otro) e información perfecta (en donde toda la información está disponible para todos los agentes, para todos los que juegan), pueden en muchas ocasiones resolverse mediante la observación de patrones que le dan la ventaja a un jugador. Tomé (y no es casualidad), el ajedrez, como caso de estudio, en donde hallé que hay muchos patrones que pueden usarse para resolver la ventaja en lugar de analizar todas las posibilidades como son, por ejemplo, el regalo griego (el sacrificio de un alfil en h7 para iniciar un fuerte ataque contra el rey negro) y el sacrificio de los dos alfiles, como se dio en la partida Lasker-Bauer, Amsterdam 1889, en donde el patrón se repite en partidas incluso modernas, como en Miles-Browne, Olimpiada de Malta 1982 o Jufdit Polgar - Karpov, en un torneo de semirrápidas en donde el excampeón del mundo abandona cuando se da cuentas que ha entrado en el patrón de la partida de Lasker.

De todo este trabajo se creó un lenguaje de descripción de posiciones que puede ser usado para definir patrones. Quien le interese ese artículo, escríbame a morsa@la-morsa.com y se lo envío. La tesis puede descargarse de este enlace.


Thursday, September 23, 2021

Examen doctoral este 28 de septiembre


Después de más de 4 años de trabajo, el martes 28 de septiembre presentaré mi examen de grado para optar por el título de doctor en ingeniería y ciencia de la computación, que otorga la UNAM. Debo decir que cuando empecé me parecía esta fecha como demasiado lejana. Sin embargo, se ha ido la vida muy rápidamente y ya en unos días cerraremos este ciclo. 

Mi asesor, el Dr. Jorge Luis Ortega Arjona, así como los dos tutores, el Dr. Héctor Benítez y el Dr. Vladislav Kartchenko, han sido extraordinarios. Se ve claramente la experiencia que tienen en estos asuntos de dirigir y ayudar a los estudiantes y en las 8 evaluaciones que hice en estos cuatro años, me quedó claro el enorme nivel que poseen. Pero más aún, debo decir que la UNAM es muy generosa, porque todo este entrenamiento de alto nivel ha sido absolutamente gratuito. Me queda claro que estar en la UNAM es un verdadero privilegio.

Mi trabajo fue sobre patrones ventajosos en teoría de juegos, como una alternativa para resolver algunos juegos. Hay que decir que la teoría de juegos es en realidad la teoría del conflicto, la cual se resuelve en general mediante dos esquemas: una matriz de pagos, en donde se ponen las ventajas y desventajas de cada movimiento que hacen los jugadores y el algoritmo minimax, que se usa muchas veces para resolver de forma heurística algunos "juegos" que no tienen solución final conocida. Cabe decir que como el tema es demasiado amplio, yo lo reduje a juegos de información perfecta (toda la información está en el tablero y todos los jugadores pueden verla) y suma-cero (donde la ventaja de un jugador es exactamente la desventaja de los otros). 

Tengo aún planes académicos para el futuro. Tengo algunas ideas por investigar que me parecen interesantes en muchos sentidos. Ya les platicaré mis impresiones después del examen. Por el momento pueden desearme suerte. Gracias.

Sunday, February 21, 2021

Luz verde para el examen de doctorado


Cuando empecé el doctorado supuse que esos 4 años iban a ser largos pero al contrario, se han pasado demasiado rápido. Recuerdo cuando escribía algunos capítulos de la tesis y me decía a mí mismo: "no sé hacia donde va esto". Hoy se ha aclarado el panorama y el trabajo hecho parece haber dado sus frutos. Tengo un par de contribuciones que me parecen importantes (en la Teoría de Juegos) y que además, he aplicado al ajedrez.

El 10 de febrero tuve la última revisión del doctorado y mis tutores estuvieron de acuerdo que ya había cumplido con los requisitos, por lo que me han dado luz verde para empezar los trámites para pedir así el examen de grado y finalmente recibirme como doctor.

Y aunque aún me falta un importrante punto, corregir la tesis para que quede ya la versión final, me he dado cuenta de las facilidades que la Universidad Nacional Autónoma de México (UNAM), me ha dado todos estos años. Para empezar, tuve la posibilidad dee trabajar con el Dr. Jorge Luis Ortega Arjona, quien fue mi asesor del trabajo de tesis, quien me vio cada jueves en todos estos años para discutir los temas de la tesis. Igualmente, los Doctores Héctor Benítez y Vladislav Khartchenko, quienes revisaron cada semestre los avances de mi trabajo, lo que me parece invaluable. Y vaya que lo es si consideramos que para mis estudios de doctorado no pagué un solo peso y tuve el soporte de estupendos académicos, quienes usaron mucho de su tiempo sin paga alguna. Alguna vez el Dr. Rafael Fernández me dijo: "La UNAM es muy generosa" y hoy puedo confirmar a pie juntillas sus palabras.

Resta pues dar el último esfuerzo: la corrección de la tesis, mandar un segundo artículo a una revista indexada (el cual prácticamente está listo) y realizar los trámites para que en un futuro muy cercano ya, haya terminado este ciclo. Y en su momento hablaré de cuando ocurra eso pero mientra stanto, quiero dejar mi agradecimiento aquí plasmado a todo el esfuerzo de mis tutores para ayudarme a llegar a concluir este nivel académico.

Monday, February 08, 2021

Patrones posicionales


En estos últimos cuatro años he trabajado intensamente sobre los patrones en ajedrez. Los más sencillos de entender son aquellos que involucran táctica, por ejemplo, el patrón denominado "regalo griego". Este puede verse en la siguiente partida:

Buchkou, Yury - Tsiareshka, Alesia, Vilnius Saltinis open 2013

1. d4 e6 2. Nf3 Nc6 3. e4 Nf6 4. Bd3 Bb4+ 5. c3 Ba5 6. O-O O-O 7. e5 Ne8 



8. Bxh7+ Kxh7 9. Ng5+ Kg8 10. Qh5 f6 11. Qh7# 1-0

Este es un patrón muy conocido y la Megabase registra unas 1030 partidas con este tema. El patrón, de hecho, puede representarse así:



Así, cuando se llega a esta configuración de piezas, el sacrificio en h7 casi se puede hacer automáticamente. Desde luego, nunca está de más revisar las variantes antes de realizarlo.

Los patrones son, pues, configuraciones de piezas y peones que atacan y defienden, de forma que cumplen con ciertas características que se ven una y otra vez, aunque las piezas no se encuentren estrictamente en casillas específicas.

En cambio, los patrones posicionales son más complicados de definir porque no hay maniobras realmente tácticas. En este caso básicamente se desea mejorar la posición.

Veamos un primer ejemplo: se presentó en la partida Botvinnik-Boleslavsky, del Campeonato absoluto de la URSS 1941. 


Juegan las blancas

La última jugada del negro fue 24. ... Qc6 y la pregunta aquí es ¿qué debe jugar el blanco? ¿deberá defender el peón de a4? Botvinnik entendía muy bien el juego posicional y sabía que el control de la columna e, además de la posibilidad de colocar un caballo en e5, le daban la ventaja. Sin embargo, había que deshacerse del caballo de g6 para poder tomar e5 en un momento dado. Entonces, debido a esta circunstancia, el patrón posicional se refleja como desalojar y restringir a la pieza (en este caso el caballo negro), de forma que posicionalmente vaya quedando cada vez más inferior el negro. 

Botvinnik jugó 25. g3! y las negras contestaron con  25. ... Rd6 (En caso de 25... Qxa4 26. h4 Rd6 (26... Rfd8 27. h5 Nf8 28. h6 y el ataque se juega solo, de acuerdo a las notas de Botvinnik) 27. h5! Nh8 28. Nf4) 26. h4 f6 (busca defender la casilla e5) 27. Qf5 Qc8 (y ahora hay que pensar de nuevo. ¿Cómo debe continuar el blanco? Botvinnik encuentra que la entrada a la séptima fila es decisiva) 28. Qxc8 Rxc8 29. h5 Nf8 30. Re7 Rcd8 31. Nf4 R8d7 32. g4 Rxe7 33. Rxe7 g5 34. hxg6 Nxg6 35. Nxg6 hxg6 36. Rb7 Kf8 37. Kf2 Ke8 38. Ke3 g5 39. Kd3 Re6 40. b4 axb4 41. cxb4 Kd8 42. a5 Kc8 43. a6 b5 44. Rxb5 Rxa6 45. Rxd5 Ra1 46. Rc5+ Kb7 47. d5 Rf1 48. Rc4 f5 49. Ke2 1-0

El siguiente ejemplo es de Botvinnik también. La partida se jugó en la Olimpiada de Leipzig 1960, 19 años después que la partida que vimos de Boleslavsky. Aquí juegan las negras. ¿Cómo deben seguir?

Tamburini-Botvinnik (juegan las negras)

Obsérvese primero la posición. Las negras tienen control sobre la columna e. Pueden poner la torre de a7 en e7 para incrementar la presión. Tienen acceso a la casilla e5, en donde pueden colocar un caballo fuerte. El alfil de h8 eswtá por el momento "escondido", pero claramente jugará un papel importante cuando Botvinnik movilice su caballo de f6.

En esta posición el excampeón mundial se percata de la mala ubicación del caballo en g3 y entiende que está ante el mismo patrón que en su partida con Boleslavsky. Por ende, juega: 21. ... h5! Tamburini entonces se da cuenta que hay que mover el alfil para que el caballo no vaya a una posición demasiado pasiva: 22. Bf1 h4 23. Nge2 Nh5! Nótese cómo Botvinnik gana espacio, su posición cada vez es mejor. Nótese también que no ha habido un solo golpe táctico. Normalmente, cuando la posición ya está madura, la táctica llega y decide la partida. Aquí las blancas se equivocaron y perdieron de inmediato: 24. Nf4?? Nxf4 25. Bxf4 Bd4+ 0-1 pues después de 26. Rh1 f4 gana una pieza.





Wednesday, December 09, 2020

Programación funcional y búsqueda de patrones en ajedrez


Estoy en la etapa final del doctorado (o al menos eso quiero creer), y una de mis tareas es formular mis hallazgos en los patrones en ajedrez (y generalizarlos para los juegos de suma-cero e información perfecta), es la de generar un álgebra para formalizar los resultados. He encontrado que se puede usar un álgebra de conjuntos en donde el ajedrez puede ser perfectamente definido. Cabe decir que encontré un estupendo artículo de Max Euwe, matemático y ex-campeón del mundo ("Mathematics — Set-Theoretic Considerations on the Game of Chess"), en el que me he basado para definir un álgebra de conjuntos en patrones.

La idea es pues desarrollar esta álgebra y ver si por ejemplo, las funciones que definen los patrones pueden ser transitivas, distributivas, etcétera, así como observar si se cumple la composición de funciones, por mencionar una sola característica. Toda la idea es pues hallar si los patrones se aplican en las diferentes posiciones que pueden darse en las partidas analizadas.

Estamos hablando pues de un álgebra de funciones, que se extiende naturalmente de un álgebra de conjuntos. Lo interesante de todo esto es que esta álgebra de funciones puede establecerse dentro del paradigma de la programación funcional. Si lo pensamos con cuidado, la búsqueda de un patrón en una posición determinada es básicamente una función que toma dos parámetros (el patrón y la posición a analizar), y regresa un valor "true" (verdadero) o "false" (falso), que nos dice si el patrón existe en la posición o no.

Mucho del trabajo de la tesis ha sido buscar estos patrones y en un artículo pasado, mediante un programa que manipula las posiciones en formato FEN (Forsyth Edward Notation), logré subir la velocidad de búsqueda de 80 posiciones (una partida de ajedrez promedio) por segundo a 54 partidas completas por segundo (4320 posiciones). Para esto usé Regex (búsquedas regulares), implementadas en una biblioteca en Delphi.

Sin embargo, decidí hacer la prueba usando el paradigma de la programación funcional. Encontré que usando Prolog, un lenguaje declarativo que cumple con buena parte del paradigma funcional, podía ver qué tan rápido se podrían hacer las búsquedas de patrones. En la programación funcional se mapean objetos unos con otros y se observan las propiedades de las funciones en el dominio en el que se esté trabajando.

Pues bien, escribí el siguiente programa en Prolog:

equal([],[]).

equal([X|T],[X|T1]) :- equal(T,T1).

patron([[_,_,_,_,_,_,'k',_],[_,_,_,_,_,_,'p','p'],[_,_,_,_,_,_,'1',_],[_,_,_,_,'P','1',_,_],[_,_,_,_,'1',_,_,_],[_,_,_,'B',_,'N',_,_],[_,_,_,_,_,_,_,_],[_,_,_,'Q',_,_,_,_]]).


     search(Patron,Pos) :- fen(Pos),

                           patron(Patron),

                           equal(Patron,Pos),

                           write('Found in pattern '),

                           write(Pos),nl, 

                           fail.


fen([['r','n','b','q','k','b','n','r'],['p','p','p','p','p','p','p','p'],['1','1','1','1','1','1','1','1'],['1','1','1','1','1','1','1','1'],['1','1','1','1','1','1','1','1'],['1','1','1','1','1','1','1','1'],['P','P','P','P','P','P','P','P'],['R','N','B','Q','K','B','N','R']]).

fen([['r','n','b','q','k','b','n','r'],['p','p','p','p','p','p','p','p'],['1','1','1','1','1','1','1','1'],['1','1','1','1','1','1','1','1'],['1','1','1','1','P','1','1','1'],['1','1','1','1','1','1','1','1'],['P','P','P','P','1','P','P','P'],['R','N','B','Q','K','B','N','R']]).

fen([['r','n','b','q','k','b','n','r'],['p','p','p','p','1','p','p','p'],['1','1','1','1','p','1','1','1'],['1','1','1','1','1','1','1','1'],['1','1','1','1','P','1','1','1'],['1','1','1','1','1','1','1','1'],['P','P','P','P','1','P','P','P'],['R','N','B','Q','K','B','N','R']]).

fen([['r','n','b','q','k','b','n','r'],['p','p','p','p','1','p','p','p'],['1','1','1','1','p','1','1','1'],['1','1','1','1','1','1','1','1'],['1','1','1','1','P','P','1','1'],['1','1','1','1','1','1','1','1'],['P','P','P','P','1','1','P','P'],['R','N','B','Q','K','B','N','R']]).

    .

.

.

fen([['R','1','1','1','1','1','1','1'],['1','1','1','1','1','1','1','P'],['p','1','1','1','1','1','1','k'],['n','1','1','1','1','1','1','1'],['1','1','1','1','b','1','1','1'],['1','1','1','1','1','1','1','1'],['1','1','1','1','1','1','1','1'],['1','1','1','1','1','1','K','1']]).

fen([['R','1','1','1','1','1','1','1'],['1','1','1','1','1','1','1','k'],['p','1','1','1','1','1','1','1'],['n','1','1','1','1','1','1','1'],['1','1','1','1','b','1','1','1'],['1','1','1','1','1','1','1','1'],['1','1','1','1','1','1','1','1'],['1','1','1','1','1','1','K','1']]).

fen([['1','1','1','1','1','1','1','1'],['1','1','1','1','1','1','1','k'],['R','1','1','1','1','1','1','1'],['n','1','1','1','1','1','1','1'],['1','1','1','1','b','1','1','1'],['1','1','1','1','1','1','1','1'],['1','1','1','1','1','1','1','1'],['1','1','1','1','1','1','K','1']]).

fen([['1','1','1','1','1','1','1','1'],['1','1','1','1','1','1','1','k'],['R','1','n','1','1','1','1','1'],['1','1','1','1','1','1','1','1'],['1','1','1','1','b','1','1','1'],['1','1','1','1','1','1','1','1'],['1','1','1','1','1','1','1','1'],['1','1','1','1','1','1','K','1']]).

El predicado "fen" contiene una lista con 8 sublistas, cada una por cada fila del tablero de ajedrez y muestra una posición determinada en la partida de ajedrez. El predicado "patrón" define simplemente el "regalo griego". Tengo un predicado llamado "equal", que toma dos listas y ve si son iguales y finalmente defino la búsqueda del patrón en el predicado "search". Aquí busco en todas las posiciones que tengo definidas, poco más de 110,800. 

Los resultados obtenidos me parecen espectaculares: el programa (compilado) tardó unos 7 segundos en hallar los patrones en las más de 110 mil posiciones. Esto es unas 192 partidas por segundo, o 15,346 posiciones por segundo. Un incremento de casi 400%.




Cabe señalar que originalmente intenté usar Turbo Prolog 2.0, pero enfrenté problemas imposibles de superar porque dicho sistema se hizo para MsDOS. Pasé entonces a Visual Prolog, el sucesor de Turbo Prolog. Pero después de pelearme con el manual y haciendo multitud de pruebas, no pude ejecutar mi programa. Y aunque pienso que Visual Prolog es una estupenda herramienta de desarrollo, creo que no es para cualquiera. Por ende, busqué otra alternativa y hallé swi-prolog, una implementación muy buena, que compila también (y que indica el fabricante que la velocidad de proceso se incrementa dos o tres veces con respecto al código interpretado). Aquí además se mostró que las limitaciones del stack y del espacio para el programa ya no existían y el software corrió de manera expedita y en el tiempo mencionado. Y habría que decir que no he hecho las pruebas en mi máquina con Windows 7, la cual corre más rápido que la máquina con Windows 10. Esto debería subir a -al menos- a unas 25 mil posiciones por segundo, es decir, unasa 313 partidas por segundo.

Estos son los resultados preliminares de mis pruebas usando la programación funcional que pienso es, para el caso que nos ocupa, una de las mejores aproximaciones al problema. Seguiremos informando.

Monday, May 25, 2020

Finalmente se ha publicado mi artículo de patrones


Los que siguen mi blog saben que en los últimos años he trabajado en mi doctorado en ciencias de la computación, el cual realizo en la UNAM. Uno de los requisitos obligatorios es la publicación de al menos un artículo en una revista internacional arbitrada. El asunto supone que si se acepta en ese tipo de publicaciones, con académicos que no saben quién es uno, que finalmente sólo leen lo que único está investigando, pues debe tener valor. Esa idea parece que fue de Sandoval Vallarta, físico, profesor en el MIT y del Instituto de Física de la UNAM, quien alguna vez indicó a un reportero que le preguntó cómo es que la ciencia nacional podía validarse, su respuesta fue: "publicando en el extranjero". Y tiene su propia lógica viniendo de un país que es del tercer mundo. Por ejemplo, mi asesor estudió su doctorado en el Reino Unido y no había ese requisito e incluso, les sorprendía cuando le pregunta eso a sus tutores.

Como sea, después de casi dos años desde que mandé el primer borrador del artículo, finalmente lo aceptaron. Mi asesor me decía que no tomara a mal las correcciones que me hacían, pues no eran personales. Así que aguanté todo lo que me dijeron, corregí todo lo que me pidieron y finalmente fue aceptado y publicado -según entiendo- en el número de mayo 2020. Esta revista sale cuatro veces al año.



Así pues, requisito cumplido y además contento, porque creo que la contribución vale la pena, particularmente en los patrones de ajedrez, en los que llevo trabajando desde mucho antes de que entrara al doctorado.

Cabe decir que en estos días de cuarentena se me ha ocurrido que el lenguaje de descripción podría hacerse más robusto si le añadimos la capacidad de ser programable. Es decir, por el momento, en el artículo se analiza cómo describir posiciones en ajedrez de manera generalizada, lo que haría finalmente tener la posibilidad de describir los patrones en ajedrez, cuyo mérito es que muestran que no necesariamente hay que analizar profundamente en un árbol de variantes para encontrar la mejor jugada.

Por ello mismo, añadiendo capacidad de procesamiento de los patrones en bases de partidas, se podría tener un ambiente en donde podríamos eliminar los manejadores de bases de datos (de encuentros ajedrecísticos) y darle así independencia al lenguaje de descripción de este tipo de aplicaciones.

Ya hablaré más de esto en la medida que vaya progresando en el problema. Por lo pronto, como ya dije antes, creo que empiezo a ver la luz al final del túnel.

Friday, August 09, 2019

El nuevo libro de mi asesor del doctorado



Los jueves se han convertido en estos últimos años en algo así como "jueves de regaño", pues es el día que veo a mi asesor del doctorado, el Dr. Jorge Luis Ortega Arjona, quien revisa mis avances en mi trabajo de tesis, los dislates, los fallos y en ocasiones, hasta los aciertos.Se dice fácil, pero hay que estar cada jueves revisando las barbaridades que a uno se le ocurren. El doctorado no tiene desperdicio.

Debo reconocer que el doctorado me ha dado una visión mucho más estricta de lo que se hace en ciencia. Aquí no hay mucho margen para la especulación y hay que demostrar contínuamente lo que uno está afirmando. Es claro que hay un rigor que no se ve en la licenciatura ni en la maestría. Así pues, este estudio me ha dado muchas satisfacciones y creo que se me ha ampliado el espectro del análisis en mi trabajo académico. Realmente esto me tiene contento.

Pues bien, el Dr. Ortega finalizó su año sabático publicando un nuevo libro titulado "Temas Selectos de Computación", el cual desde luego, tiene el rigor académico pero no por eso es complicado de leer. Trata un buen número de temas: Diseño de computadoras y sistemas digitales, análisis de algoritmos, estructuras de datos, autómatas, criptología, complejidad, hasta Inteligencia artificial, entre otros temas. En mi opinión los capítulos y secciones dan una muy buena idea de los temas más importantes hoy día en lo que se refiere a cómputo y que pueden servir como inspiración para que los alumnos desarrollen muchos de estos temas.

La Facultad de Ciencias es la editora de esta obra y sin duda es una buena adición al acervo bibliográfico en donde el autor es un académico de la propia facultad. La semana del 12 al 16 de agosto del 2019, al menos, será la Feria de Libros en la Facultad de Ciencias. Una muy buena oportunidad para hacerse de este libro.

Sunday, June 04, 2017

¿Por qué funciona el lenguaje de patrones de ajedrez?



En este último par de años he trabajado intensivamente sobre la idea del lenguaje de patrones de ajedrez, del cual ya he hablado aquí en este blog. Lo que anima la idea en general es que la descripción es muy parecida a la que hacen los ajedrecistas en sus partidas.

Es común escuchar a un jugador, platicándonos de su partida, algo como esto: "Llevo blancas. Imagina que tengo un caballo atacando f7 pero además, que puedo dar jaque con la dama en a4". Estos datos son insuficientes en general para describir alguna posición, pero nos dice que la dama blanca probablemente está en d1, c2 o b3 aunque por la descripción del jugador no podemos asegurar esto. Sin embargo, cierta experiencia nos dice que en general, un jaque de una dama en a4 implica que la dama está en alguna de las casillas mencionadas.

Igualmente, decir que un caballo ataca la casilla f7 puede significar que el caballo en cuestión está en g5 o e5 o quizás (menos probable), en d6. Así, podemos imaginar más o menos la situación que nos está planteando este jugador. De nuevo, no tenemos certeza al respecto de la posición pero evidentemente hay muchos "tips" que nos pueden ayudarnos a hacernos una imagen mental.

Curiosamente, la idea de que los ajedrecistas poseen mente fotográfica y que recuerdan posiciones como si fuesen diapositivas o instantáneas en imágenes, ya fue descartada por Adrian de Groot, psicólogo holandés y fuerte jugador, que mostró que lo que realmente recuerdan los jugadores son las relaciones entre las piezas propias y enemigas más que en una posición específica como si fuese una foto.

Así, si le ponemos a alguien esta posición:



tal vez, después de algunas semanas, si le pedimos al ajedrecista que recuerde esta posición, probablemente no pueda hacerlo exactamente, pero quizás nos diga: no sé exactamente dónde estaba este alfil, pero podría haber estado en cualquier casilla de esta diagonal.


La descripción del patrón del alfil es simplemente A(ph7) (el alfil blanco ataca al peón negro en h7). ¿Dónde está el alfil realmente? Esto no es relevante. Lo que sí importa es qué casilla o peón ataca.

Y en ese sentido, el lenguaje de patrones funciona porque es equivalente a la descripción que hacemos los jugadores de nuestras posiciones en el tablero. Y aunque parece un lenguaje poco preciso, lo es sólo en apariencia. En realidad es muy preciso para describir patrones en general.

Por ejemplo, en la siguiente figura pueden verse tres tableros, cuyo patrón es equivalente en los tres. Me parece notable que el mismo patrón describa estas tres posiciones (y podría describir muchas otras más) de manera perfecta.



Por esto creo que el camino es el correcto, porque la representación es adecuada y funcional y además, porque es breve pero dice lo que tiene que decir. Realmente me tiene contento esta idea.

Wednesday, October 05, 2016

Aceptaron mi artículo para el congreso de Argentina


Hace un par de días recibí un correo de la organzación del SugarLoafPlop, una conferencia dedicada al tema de patrones de diseño. El artículo es una parte de mi tesis de doctorado que me está dirigiendo el Dr. Jorge Luis Ortega-Arjona.

Debo decir que en estos dos años y medio casi de trabajo, he aprendido el rigor que la ciencia impone. Sin duda es muy ilustrativo y muy formativo y me demuestra lo que ya sabía desde hace mucho: que nunca uno deja de aprender.

Ya daré cuenta de lo que acontezca en este tema.

Monday, August 24, 2015

Un lenguaje para patrones en ajedrez


Hace unos meses escribí un artículo para un congreso que se llevaría a cabo en Holanda. Organizado por la ICCA (que es la Asociación Internacional de Juegos por Computadora), mi colaboración era un análisis de uno de los artículos más relevantes en lo que se refiere a la representación de las posiciones en ajedrez. El artículo, que salió originalmente en el Scientific American a principios de los años setenta del siglo pasado, hablaba de un programa (el US chess program), que jugaba a través del análisis de ciertas instancias, que formaban algo así como patrones.

En el artículo que escribí ponía cuatro posiciones, las cuales se veían diferentes pero las cuatro eran finalmente el mismo patrón. El artículo no fue aceptado pero incluso así, los revisores me mandaron los "peros" que hallaron al mismo. Uno de los argumentos era, ¿cómo puedes caracterizar las cuatro posiciones que identifican el mismo patrón? Buena pregunta. En el seminario del IIMAS, en donde hago el doctorado, presenté mis reflexiones sobre el artículo que escribí y los doctores Jorge Luis Ortega Arjona y Héctor Benítez volvieron a hacer la misma pregunta. Más aún, el Dr. Ortega iba un poco más allá cuando en alguna de nuestras sesiones semanales de avance de la tesis me preguntaba: ¿Cómo puedes generalizar estos patrones (y no sólo para el ajedrez, sino para los juegos de suma cero? De nuevo buena pregunta a la cual no tenía contestación.

Pues bien, me puse a tratar de entender cómo podía representar las posiciones en ajedrez y descubrí que quizás un lenguaje que inicia en los grafos podría ser la solución. La idea no es absolutamente mía y hay un par de referencias al respecto (ver bibliografía). Sin embargo, de pronto hallé que podía representar las posiciones que había puesto en mi artículo de forma tal que eran las cuatro identificables con el mismo patrón. Asombroso. Pero más aún el notar que la idea en realidad no es nada complicada. Funciona así.

Todo comienza con los elementos del ajedrez más básicos: el ataque y la defensa. Los ajedrecistas vemos cuando nos atacan una pieza o cuando nosotros defendemos alguna o incluso, cuando somos nosotros los que atacamos. En general, lo que decimos es que una pieza ataca a un peón, sin necesariamente decir en qué casilla está. Esto, curiosamente, es como los jugadores recuerdan posiciones. Ya De Groot halló que el ajedrecista no ve posiciones como si fuesen fotografías, sino que el cerebro las codifica como un conjunto de relaciones entre las piezas. Esta es la razón por la cual cuando De Groot puso posiciones -sin lógica ajedrecística- para que los jugadores de su experimento las recordaran, estos tuvieron las mismas dificultades que tenían los aficionados. Por una parte entonces, se elimina el mito de que el ajedrecista tiene una memoria fotográfica del tablero y por otro, se confirma que de alguna manera el jugador recuerda las relaciones que hay entre las piezas en una posición dada.

Por ejemplo, consideremos un alfil blanco en c2 que ataca un peón negro en h7 (véase diagrama). Un ajedrecista recordará esta posición no por la posición de las piezas en particular, sino por la relación que hay entre el alfil blanco y el ataque al peón negro en h7. De hecho, si le pedimos al ajedrecista que nos reproduzca la posición del diagrama (meses después de hacer el experimento), quizás el jugador simplemente se acuerde del ataque pero no pueda decidir si el alfil está en b1, c2 o d3, por ejemplo.


Un alfil blanco que ataca a un peón en h7

Así entonces, hablamos de relaciones entre las piezas y el único modelo al respecto, como ya dijimos, es ataque/defensa. Considerando esto, pensemos en definir que una pieza A ataca a una pieza B, Podemos representar eso como:

P1 P2

en donde P1 es la pieza 1 y P2 es la pieza 2. Si es un ataque es claro que P1 es de un color y P2 es del color contrario. Si son del mismo color hablamos de una defensa entre ambas piezas. Ahora consideremos la siguiente posición (ver siguiente diagrama):


La dama blanca ataca el peón negro de f7. 
La torre blanca en f1 ataca (con rayos X) el peón de f7

En este caso, tenemos que la Dama blanca (P1), ataca el peón de f7 (P2), pero también tenemos que la Torre en f1 (P3) ataca también el peón negro en f7. Podemos pensar que el ataque de la torre blanca es como en rayos X, pues pasa por sobre la dama, que se encuentra en f3. Si ponemos la dama blanca en h5, podemos ver con flechas los ataques de ambas piezas sin necesidad de pensar en este ataque como de rayos X.

En términos del lenguaje de patrones, podríamos poner una posición que bien podría ser equivalente:



Pero pensemos también que las piezas no atacan/defienden necesariamente a otras piezas. Podríamos pensar que las piezas atacan o defienden casillas. Por ejemplo, un peón blanco en h3 defiende la casilla g4. De esta manera podemos escribir:


P1C1

Donde P1 es la pieza 1 y C1 es una casilla en particular. En el caso del diagrama podría ponerse como P(h3)g4 o Ph3-g4, por ejemplo.

Así pues, en primera instancia estos son los bloques de un lenguaje de patrones para describir posiciones de ajedrez.

Con esto en mente, ¿Cómo podrían describirse las siguientes posiciones, en donde todas se comparte el mismo patrón? Veamos los siguientes ejemplos y saquemos al final conclusiones:

Posición 1:


Díaz Lombardo, I - López, M
Juegan las negras

La posición puede describirse (letras mayúsculas son piezas blancas, letras minúsculas son piezas negras): 

d(Pf2)
t(Pf2)
t(c1)

Posición 2:


McNab - Mullen
Juegan las blancas

D(pf7)
T(pf7)
T(a8)

Posición 3:


Atasik - Ruck
Juegan las blancas

D(pf7)
T(pf7)
T(h8)


Con estos tres primeros ejemplos basta. Todos se expresan de la misma manera. La Dama y la Torre (blancas o negras, sea el caso), atacan el peón de f7 (o f2) y la torre restante puede entrar en la octava fila del rival. En terminos generales debe estar claro que se trata de un patrón al menos similar, muy similar, a pesar de que no necesariamente las piezas están en los mismos lugares.

Pero observemos estos otros ejemplos:

Posición 4: 


Lasker-Bauer
Juegan las blancas

D(h5) //no importa si hay o no una pieza en esa casilla
A(ph7)
A(pg7)
T(f3)

Posición 5:


Polgar, Judit - Karpov, A
Juegan las blancas

D(h5)
A(ph7)
A(pg7)
T(h3)

Posición 6: 


Miles - Browne
Juegan las blancas

D(h5)
A(ph7)
A(pg7)
T(c3)

Posición 7:


Nimzowitsch - Tarrasch
Juegan las negras

d(h4)
a(Ph2)
a(Pg2)
t(d5)

Si se observa con cuidado, veremos que estamos hablando del mismo patrón. En esencia es prácticamente el mismo. 

Cabe decir que esta es una primera aproximación. Es claro que la descripción no es estrictamente la misma para las posiciones, pero las semejanzas y similitudes son evidentes para cualquier ajedrecista. Por ello, hay que señalar que estamos hablando de un lenguaje que debe lidiar (o al menos intentar hacerlo), con posiciones que no necesariamente son iguales, sino que son similares. En otras palabras, tienen un margen difuso.

Dentro de poco hablaré de cómo extender el lenguaje para que sea más dinámico. Por el momento, es claro que solamente estamos describiendo las posiciones estáticamente, pero evidentemente, debe haber un componente dinámico, es decir, las jugadas por hacer.

Bibliografía:

Learning to play chess selectively by acquiring move patterns
Lev Finkelstein and Shaul Markovitch
ICCA 1998

Adaptive Pattern Oriented Chess
Robert Levinson y Richard Snyder
AAAI-91 Proceedings 1991

Monday, August 04, 2014

¡Buenas noticias!


Después de N trámites, exámenes y demás angustias, fui aceptado en el doctorado en ciencias e ingeniería de la computación, en la UNAM. Son 4 años que espero resulten muy fructíferos en términos académicos. El inicio formal del doctorado es precisamente ¡hoy!