Hace 14 años | Por Abeel a dciencia.wordpress.com
Publicado hace 14 años por Abeel a dciencia.wordpress.com

Un genial articulo que nos habla un poco de inteligencia artificial, algoritmo MiniMax y más. Dentro de la complejidad del tema, lo explica de una manera muy sencilla a modo divulgativo.

Comentarios

Abeel

#3 De nada, algo divulgativo siempre vale la pena divulgar (ole la redundancia)

Croccam

#7 Por ahora van más visitas que meneos, pero nunca sabré si todos leen el artículo
Muchas gracias, la verdad es que no tenía muy claro si el lenguaje era suficientemente claro, espero que, como decís, sí lo haya sido.

coso

#3 Ya te vale, has ignorado por completo la poda alfa-beta. Ahora todo el mundo pensará que es necesario examinar todas las posibles ramificaciones... .
Buen artículo.

Croccam

#17 si insistes, puedo escribir otro que hable de las posibles variaciones: negamax, negascout, poda alfa-beta... Y lo digo en serio
#16 opino como tú, yo tampoco llamaría al ajedrez algo "básico". Está claro que crear un algoritmo que mueva las piezas es muy sencillo: sólo tiene que conocer las reglas. Pero hacer que sea el mejor es harto más difícil. Larga vida a la tostadora valiente.

Gracias a todos por las felicitaciones.

Por cierto, a modo de sondeo. Yo también quiero aprender con mi blog, así que últimamente pregunto a mis amigos sobre temas que les interesen para investigar sobre ellos y publicar algo. Así que si alguno tenéis una idea, podéis decírmela y si me interesa el tema lo agregaré a mi lista personal de artículos pendientes

s

#18 Te animo a que expliques la versión mejorada con poda alfa-beta u otros algoritmos, ya que puede estar muy interesante. Me recordarán aquellas horas de programación de IAs en la uni, y mucha gente aprenderá cosas interesantes.

Croccam

#19 tomo nota. Podrás verlo dentro de un tiempo, el próximo que publique (que espero que sea pronto) será de teoría de juegos.

Rastikko

#3 Estoy interesado en como podria crear un enfoque heurístico para el reconocimiento de patrones en las cadenas de texto (como evaluaria google por ejemplo). ¿Conoces de algun documento que me puedas recomendar?, gracias. Por cierto me considero un mercernario del codigo, mi nivel de algoritmia es practicamente 0.

Croccam

#31 Gracias. Menearía tu respuesta
Lo de teoría del caos lo había pensado, a ver si me saco un libro de la biblioteca de la etsiit. Apunto todo lo que me has dicho, inclusive lo de las redes neuronales, que es un tema que me interesa bastante. A ver si puede hacerse algo entendible.

#29 La verdad es que ahora mismo no se me ocurre ningún documento. Si no encuentras nada en internet, que a veces pasa, tienes que tirar a lo clásico: libros.

j

#32 Si quieres un libro divulgativo sobre complejidad, éste es, sin duda, "Computational Beauty of Nature". Aunque no sé si soy objetivo, yo personalmente ADORO ese libro

(web del mismo, con programasde los diferentes capítulos y tal: http://mitpress.mit.edu/books/FLAOH/cbnhtml/)

Croccam

#33 El que saque será un libro formal, no divulgativo. Pero apunto ese título que me has dicho.

#34 Exacto, y lo digo justo al comienzo del artículo... También hay otra forma de decir las cosas.

j

#35 Hombre, es el libro que usé en la asignatura "Complejidad Computacional", de la carrera de Ingeniería Informática. Puedo garantizar que es mejor que comenzar con las matemáticas duras desde el principio (más tarde estudié fractales en un Máster en Matemática Computacional, y las matemáticas son duras y sobretodo abstractas).

P

#3 Me ha parecido un post muy interesante. Me ha recordado a mi práctica de Inteligencia Artificial. Tenía que implementar las damas con una poda alfa-beta en Clips... ¡Que tiempos aquellos!.

woopi

char*l="ustvrtsuqqqqqqqqyyyyyyyy}"
" 76Lsabcddcba .pknbrq PKNBRQ ?A6J57IKJT576,+-48HLSU";
#define F getchar()&z
#define v X(0,0,0,21,
#define Z while(
#define _ ;if(
#define P return--G,y^=8,
B,i,y,u,b,I[411],*G=I,x=10,z=15,M=1e4;X(w,c,h,e,S,s)main(){Z++B

shinjikari

Este tipo de cosas me hubieran venido de perlas antes de dejar la carrera de Ingenieria Informática..sniff...XD

mikibcn

Yo hice inteligencia artificial en la uni. Que pena que el enfoque que le dieron no era lo suficientemente bueno, porque el tema es muy interesante. Más flipante me pareció la resolución de problemas más complejos utilizando Hill climbing y otros algoritmos. Un ajedrez es bastante básico, pero imaginaros la de información y posibilidades que puede manejar un bot en un juego de acción.

#1 Ánimos crack, siempre puedes volver al lado oscuro con nosotros

sorrillo

#5 Los juegos de acción no entrañan dificultad alguna.

Se trata de machacar continuamente el botón de disparo, el de saltar y el de ir hacia adelante

mikibcn

#9 Bueno... hay juegos en los que el enemigo te escucha, se esconde, hace fuego de cobertura... no es tan fácil implementarlo como jugarlo

Liteh

#5 Personalmente no definiría el ajedrez como algo "básico".

Genial artículo, muy bien explicado y muy interesante. Siempre había tenido la curiosidad de saber como funcionan esas cosas. (Y que el tipo que lo explique hable de la tostadora valiente da muchos puntos a su explicación.)

Zade

#1 Pues algo de esto se ve en Analisis y Diseño de Algoritmos (ADA para los amigos lol) en la técnica de backtracking.

#6 Hombre, no sé como lo habrán implementado, pero si en el árbol de decisión, el algoritmo para una profundidad 'x' obtiene 10 nodos hijo con la misma máxima puntuación (osease, no sabe cual de todos los posibles movimientos llevan a la victoria entre esos 10 supuestos mejores) pues es bastante probable que en ese caso el algoritmo decida usar el azar (la función random vaya lol) para elegir... y entonces varían las jugadas.

Un saludo!

woopi

Para los interesados en el juego y en la IA, un caso muy interesante es el del Backgammon. A pesar de ser un juego de una sencillez increíble, (más o menos como el parchís, con dados pero con más estrategia), hacer un programa que juegue a un nivel principiante es sencillo,... pero hacer uno que juegue a nivel decente y capaz de derrotar a un buen jugador se resistía. Al menos utilizando algoritmos tradicionales con evaluación de posiciones, cálculo de estadísticas en función de las posibilidades del dado, etc.

El enfoque adecuado ha sido el de redes neuronales y tablas hash precomputadas para dinamitar los finales...

Un programa muy bueno, opensource para los curiosos y con un nivel de juego campeonato es Gnubg http://www.gnubg.org/index.php?itemid=16 Muy intersante. Además el BG es divertido, creo yo...

D

por cierto, para cuándo el primer comentario de "Anatoliiiii" ?

pipulo

Muchas gracias por la noticia.

Para aquellos que tengan interés por el asunto, creo que esta página es interesante

http://www.tckerrigan.com/Chess/TSCP

Se trata de un progrma de ajedrez pensado para aquellos que quieran aprender a programar estos cacharros. El código está bastante comentado y se supone que es bastante sencillo.

Aprovecho para pregntar al autor y demás si conocen de recursos en la red para aprender a sacar un programita e estos.

Croccam

#23 Pipulo, en los enlaces del final del post tienes algunos, te recomiendo:
http://profeblog.es/blog/alfredo/2009/07/28/ajedrez-paso-10-nace-la-inteligencia-minimax-con-poda-alfa-beta/

#24 Programé hace poco una IA para el Othello (similar al Reversi). Si lo que dices del Go! es cierto, no voy a poder evitar enfrascarme en la programación de una IA para él. Si lo llevo a cabo lo dejaré ver por dCiencia.

iRiku87

#25 Como dato, la complejidad de un arbol de juego de ajedrez es de logaritmo en base 10 de 123, mientras que la del go es de logaritmo en base 10 de 360. En dos turnos de cada jugador (4 turnos en total) hay 16702719120 posibles movimientos, y una partida media dura 200-300 movimientos.

Es un tablero de 19x19 donde puedes poner legalmente en cualquier punto, y además cuando te comes grupos de piedras, puedes volver a poner ahi. Es tremendamente sutil, y hay ciertas cosas que no se pueden valorar numéricamente (¿territorio o influencia?)

Es un juego magnífico lol

D

He probado en el Chess de Ubuntu a configurar CPU para ambos jugadores. Creía que serían deterministas, es decir, que las partidas serían iguales pero no, unas veces ganan blancas y otras negras...

fallheim

Un articulo de puta madre. Muchas gracias por hacernos un poco más listos a los que lo hemos leido.
#6 Muy bien hecho. Es una de las cosas que hace alguien con mucha curiosidad.. jeje.

D

Gran aporte, felicidades al autor.

D

Yo voto irrelevante, porque no es nada nuevo... y el que no lo sabía de antes, sería porque el tema no le interesaba demasiado. Yo esto lo he visto cientos de veces.

Croccam

Me veo obligado, por lo menos, a jugar

j

#28 El Go se basa en reconocimiento de patrones, que es lo peor para un ordenador, de ahí el problema... Según tengo entendido (pero hace un par de años, ya no recuerdo):

Un ordenador puede vencer (o más bien empatar) a un experto en 3 en raya
Un ordenador puede vencer a un experto en ajedrez, aunque no a un gran maestro
Un ordenador no puede vencer a un principiante del Go

Son como las tres leyes

A lo que iba: ¡¡¡Excelente Post!!! Muy bien explicado, absolutamente correcto (hay veces que para hacer un trabajo divulgativo se olvidan los detalles y se cometen pequeñas incorrecciones... ¡pero no es tu caso! Has logrado hacerlo siento exquisitamente preciso), y bien redactado. Pó Dió, ¡haz más!

En cuanto a temas interesantes... anda que no hay. Por ejemplo de IA, es sencillo explicar algoritmos genéticos, algoritmos de partículas (eg. optimización con hormigas), aprendizaje por refuerzo, planificación (eg. STRIPS), clasificación (cualquier puede entender el ID3 )

Si hablas de optimización, por cierto, puedes tratar de hablar de tipos de problemas (P, NP, co-NP) que siempre mola. Y luego otros temas clásicos son los de complejidad: Atractores extraños (Lorentz), teoría del caos en general (Logistic), fractales (Julia), etc. Y muchos más, ¡tienes tanto donde elegir!

Cosas que ni creo que se pudieran tratar de divulgar así como así serían las redes neuronas (ni el perceptrón simple, la gente tiene sus problemas para imaginar hiperplanos, normalmente), tampoco visión artificial (yo mismo no recuerdo nada ya :P), etc.

PD: Si haces algo de algoritmos genéticos, please, habla y mete el video de Karl Sims: http://www.archive.org/details/sims_evolved_virtual_creatures_1994

PPD: ¿Ves qué ladrillo me ha quedado? Eso te pasa por preguntar temas Jeje, sorry, es que me he emocionado.

Serjpinski

Siempre me había preguntado eso, incluso pensé en programar yo uno en C lol

aurum

Mis mas sinceras felicitaciones al autor del artículo. Creo que no se puede explicar mejor para un neófito como yo.

c

En realidad el ajedrez no ha sido resuelto computacionalmente puesto que los ordenadores siguen sin ser capaces de crear planes, pero su visión a largo término dada la potencia de cálculo les permite ganar a los mejores jugadores.
Mucho más complejo por tanto sería hacer un programa que entendiese el ajedrez, pero entiendo que hay pocos alicientes para hacerlo dados los resultados obtenidos con métodos más simples.

G

siii! a mi también me ha gustado.
Bien explicado.

suko19

Meneo al canto porque me ha parecido muy interesante, la verdad no tenía ni idea de como funcionaban.

D

#0 y dale con las chorradas, un programa no piensa en todo caso computa en base a algoritmos más o menos complejos; titular amarillo chillón