Programación Específica > Inteligencia Artificial

 Desarrollo De Un Ajedrez

<< < (2/2)

Nebire:
iremos por partes para no liarnos..


--- Citar ---Estoy seleccionando las 20 mejores piezas y su jugada, luego de esas 20, vuelvo a hacer otro analisis para decidir las mejores (el 20%), para finalizar, selecciono una de esas al azar
--- Fin de la cita ---
. no selecciones al azar, sólo encaso de que realmente nose te ocurra nada inteligente, siempre hay una acción más inteligente que otra, si no sabemos de entrada cual es más inteligente, entonces aplíqemos una por estadísticas, porqué porque si nos sale mál podremos deducir que la estadística aplicada a tal idea es buena o es mala pero si lo hicimos al azar, nunca podremos saber si será bueno o no en el futuro... luego volvemos a eso de las estadíisticas...


--- Citar ---Si se logra, pero lo que no puedo lograr es como saber cuando hay que hacer un cambio de piezas ("matar un caballo aunque se te coman el alfil"). Ya que muchas veces cuando jugamos ajedrez es mejor tener un caballo que un alfil o viceversa.
--- Fin de la cita ---
'a falta de pan buenas son tortas' . Si no sabes cual pueda ser, usa estadísticas, del tipo cuantas veces se ha movido tal ficha, cuantas veces se moovió hacia atrás, esto no es resolutivo pero tras un rato de partida con varios movimientos, o mejor tras varias partidas, sen pautas del jugador...'prefiere usar los caballos' descubres, entonces piensas... si le como sus caballos es probable que se quede 'cojo'.... por eso valorar que piezas mueve más el adeversario (y tú) te ayuda a sospechar que piezas sabe mover mejor, y cuáles no les gusta arriesgar o bién que no sabe jugar muy bien con ellas. Una decisión basada en estas estadísticas será siempre más positivo para enseñarle que dejarlo al azar. Tambien cosas como tengo 2 alfiles y sólo un caballo yo voy a comerle la reina pero el me comerá la pieza que mate su reina, la duda está en matarla con mi caballo o con mi alfil... en ese caso valora si conviene más tener al menos una peza de cada o 2 del mismo y ninguna del otro...eso siempre podrás echarlo a suerte, pero anotando que se usó... todo a una estadística más general... al finalizar la partida podrás añadir la impresión perdí porque el cabalo que usé para comer la reina dejó un hueco a su alfil y posicionando su otrre me dejó sin salida... entonces puede sacarse enconclusión, no mover el caballo ssin analizar si su alfil y cabalo quedan dispuestos en 2 jugadas ante el rey, en dicho caso usar el alfil en vez del caballo... si guardaste las posiciones de esa jugada crítica, regresa las fichas a dicha posición e intenta ahora con el alfil en vez de con el caballo...




--- Citar ---No habia contado con eso, es una idea excelente, yo se que es muy dificil de implemenar, pero no es una programacion que no sepa hacer
--- Fin de la cita ---
Para hacerlo inteligente hay que ser capaz de recordar cosas, el modo de recordarlas es tenerlas grabadas y calcular cuando sea preciso, ya fuera de juego o no..sin memoria, sin recuerdos, no se puede mejorar... imagina que tratas de llegar a un pueblo te indican un camino y al llegar acierto punto hay varios cruces de caminos complicados, descubres que las indicaciones que te dieron no fueron muy buenas,  y decides que volver atrás a pedir nuevamente indicaciones es bastante más largo, entonces decidas explorar las posibilidades... avanzas por cada uno hasta que veas que está cortado o que es otro pueblo, entonces vuelves y recorres otro camino, pero ...oh... si no tienes memoria de los caminos ya recorridos, podrías repetir hasta 500 veces un camino, pero si recuerdas ya haberlo andado y ver que no tenía salida, sólo debes fijarte en las que te falta por recorrer.


--- Citar ---Voy a estarles informando como voy con el proyecto, mas bien gracias por el aporte, y por favor seria de gran ayuda que tambien pongan consideraciones a evaluar en el ajedrez que todavia no hemos tomado o una mejor sugerencia en los algoritmos.
--- Fin de la cita ---
puésestará bien que informes mucha gente después de resolver alguna duda ya nunca vuelve por el foro.

Sería bueno que señales que consideraciones te parecen oportunas y se puede hablar de ello. Los algoritmos son muy específicos, los de IBM, los tienen al punto de ser algoritmos para jugadas únicas y más o menos famosas, ese nivel de detalle en realidad no es inteligente, ya que no 'crea' una jugada en base a decisiones sino en base a una tabla de 'preguntas-respuestas', eso si el nivel de detalle es muy elevado.

Hace años diseñe un juego con reglas diferentes al ajedrez pero que al caso también movía fichas y acabé dejándolo por aburrimiento porque aunque se comportaba bien yo siempre le ganaba, cuando tu lo has creado parece natural ganarlo porque conoces los algoritmos, tu los has diseñado, pero esto no es verdad, si es inteligente, lo cierto es que lo diseñes tú o no, una máquina puede hacer más cálculos en menos tiempo que tu de este tipo y por tanto se supone que debe originar al menos un centnarde posibles soluciones antes de mover una ficha, tu mentalmente  puedes elaborar 7 ú 8 jugadas diferentes ó bien 2 ó 3 movimentos con 4 ó 5 jugadas hacia adelante, osea unas 15-20 movimientos, más allá hay que estar muy entrenado en un juego, e incluso con dudas tu encuentras mejores soluciones que el programa.

Yo por ejemplo usaba un algoritmo que llamaba de sombra... el tablero cada casilla del tablero tenía una valoración que iba cambiando a cada jugada, donde estaban las fichas enemigas sólo por ello tenían un valor positivo , donde estaban mis fichas tenían un valor negativo, casilla sin ocupar tenían también su valor,  el modo en que valoraba las casillas era complejo pues sufrió muchas modificaciones pero te cuento lo recuerdo.... la distancia tenía un valor tenía una fórmula para asignar un valor posicional sólo por distanca, tenía otra fórmula para dar valor sólo por casillas vacías entre fichas, tenía otra fórmula para valorar casillas basado en el valor de cada ficha... (en el ajedrez yo les daría valores en base 10... peones 10, alfiles y caballos 100 torres y rey 1000,  reina 10000.) , tenía otra fórmula que valoraba casillas en función del las 8 casillas que le rodeaban (esto es la media de las 8 figuras que rodeaban la ficha), todos estos valores eran sumados y conservaba los valores delos últimos 4 movimientos de ambos jugadores, aparte de esos tenía otro que registraba la diferencia entre los valores de las casillas anteriores a un movimiento y el siguiente, estos valores de las casillas los usaba luego para otmar las decisiones de que ficha mover y hacia donde, debía compensarlo con el valor de las mías... ya que enviar a una ficha 'valientemente' hacia el enemigo sin protección tampoco tiene mucho sentido.

Valorar justamente el sacrificio de las fichas es de lo más difícil, cuando un 'error' da al traste con una estrategia que se venía elaborando, el plan entero se rompe, por eso de último estaba probando sistemas que no reuquieran un plan muy elaborado ni muy largo porque tras ese trabajo si te coemn una ficha clave la jugada es ya imposible, sino jugadas oportunistas y puntuales, hasta que el juego estuviera más avanzado cuando un plan más elaborado pudiera dar sus frutos, cuando hay muchas fichas en 3 movimientos puede cambiar mucho el juego.

bueno corto.....

hdsk:
Hola,

Creo que vos no deberias analizar las cosas sino que deberias tratar de construir un programa capaz de hacer los analisis por si mismo.

En lo que es la

Hdsk

hdsk:
Hola,

Creo que vos no deberias analizar las cosas sino que deberias tratar de construir un programa capaz de hacer los analisis por si mismo.

En lo que es IA lo que tratamos de hacer siempre es encontrar una función de evaluación para los tableros. Esto seria una función que toma un tablero y te devuelve un valor (entero o real).

Digamos que si tuvieras una funcion de evaluación perfecta para tu problema, tu le darias un tablero y esta te devolveria un valor que indicaria que tan bueno o malo seria el tablero. De esta forma dado un tablero el problema seria encontrar todos los tableros siguientes posibles, evaluarlos con dicha función y quedarte con el que te dio el valor mas grande (o mas chico).

El problema es que no hay forma de saber cual es esa función (la optima) y lo que tenemos son formas de tratar de aproximarnos a ella. Para esto existen varios metodos, personalmente para un juego de tablero me gusta mas que nada QLearning si bien tiene un requerimiento de espacio brutal se puede hacer QLearning utilizando una red neural con lo que no hay requerimientos de espcio y además de eso la función aprende a generalizar mas para otros tableros.

Luego de tener programados los algoritmos o utilizar un paquete que los tenga basta con dejar a la maquina jugar contra si misma un par de dias sin parar y tendras un jugador aceptable. A todo esto te recomiendo un poco de cuidado y aque muchas vees es complejo modelar el problema con una red neuronal y los algoritmos para aplicarla con QLearning son un poco mas complejos a mi gusto.

Hdsk

Navegación

[0] Índice de Mensajes

[*] Página Anterior

Ir a la versión completa