Programación Específica > Inteligencia Artificial
Desarrollo De Un Ajedrez
manix:
que tal amigs!!!! tengo una pequena duda.. resulta que estoy por terminar un ajedrez en java (que por cierto esta muy entretenido) y no quiero que esta aplicacion se limite ha juegos humano-humano, sino tambien que el usuario puedo jugar contra la aplicacion. Estuve averiguando al respecto y parece ser que es posible ponerle una mente artificial. Es aqui donde tengo mi pregunta. Se puede poner mente arificial (es que me suena como de meter unos logaritmos y ya) al ajedrez? de ser asi como seria? porque me gustaria trabajar para lograrlo montar bien tan solo ocupo que me digan como funciona el asunto, si tengo que conseguir un programa o algo. Les agradezco toda la ayuda de antemano que yo se que siempre hay alguien que se las sabe todas!!! espero haberme explicado bien y gracias de nuevo!
Masiosare:
Para ese caso mas que una mente artificial (red neuronal o algo asi), lo adecuado para este caso seria un Sistema experto. He leido sobre sofware de ajedrez con mentes artificiales con la capacidad de aprender, los cuales fueron capaces de ganarles a campeones de carne y hueso, pero son proyectos demasiado complejos.
Los sistemas expertos no son una simulacion de una mente, no simulan relacion de ideas, aprendizaje, o lenguaje (a menos que su objetivo sea conversar). Los sistemas expertos son algoritmos complicados que tienen procedimientos completos y conocimientos detallados sobre como realizar determinada actividad, por ejemplo, jugar ajedrez. Suena complicado pero puede ser mas facil que programar una mente.
De poder ponerlo si se puede pero requiere de bastante tiempo, y de como no se exactamente como por que es tambien muy complicado, existen lenguajes orientados a la inteligencia artificial como por ejemplo prolog y miranda, pero casi cualquier lenguaje puede servir, sobre todo si se trata de un sistema experto.
http://es.wikipedia.org/wiki/Sistemas_Expertos
manix:
gracias por el aporte... estare al tanto de estos sitemas expertos. Y a ver si termino el ajedrez... Gracias!!! ;)
Nebire:
Efectivamente dotar de inteligencia artificial a tu juego te va a ser complicado.
Sin enmbargo tu primera meta debe ser más que inteligente, que no sea tonto, te explico un poco por encima...
Después de cada movimiento del adversario debes comprobar que la reina-máquina y el rey-máquina estén protegidos, revisando si a uno, 2 o x movimientos secolocaría el adversario en jaque y no pudieras remediarlo... la x debe primeramente ser un número finito y corto o sería muy muy lento cada movimiento...
Antes de mover, procede ahora a la inversa, sería el mismo algoritmo, pero con 1 diferencia y un añadido. Cambian los adversarios y los atacantes. El añadido sería que después de esa comprobación habría que decidir que ficha mover...
De entrada experimenta con dejarle caer en una trampa y que mueva a la trampa (aprovechar el movimiento hacia la ficha más vulnerable) luego de practicar tu mismo con el juego podrás encontrar mejor como evitar caer en una trampa a base de analizar el movimiento hacia la ficha más vulnerable.
Qué ficha mover ???... No lo pongas aleatorio, sería tonto, no inteligente, tampoco eches una ficha adelante, atrás, adelante.. también sería tonto... al menos practica un algoritmo de confusión que no permita al adeversario cual es la táctica empleada...
Puedes en determinadas situaciones tener una pequeña base de datos de 'jugadas resueltas' especialmente cuando sólo hay pocas fichas en el tablero... esto te ayudará a rematar un juego que ha evolucionado bién. Estos pasos por tanto no serían inteligentes sino pasos fijos porque se conoce que la meta sigue justo ese camino establecido.
Por último examina y crea una base de datos de jugadas que no marcó buenas y salieron mal, para no repetirlas, igualmente con las que salieron bién para repetirlas.
Aparte te sería de gran ayuda para simplificar las reglas, dividir las fichas en 2 grupos, fichas de poder y fichas con escaso poder (peones), y cada uno de esos grupos divídelos aún en 2 están implicadas en la jugada actual y los que no están implicados en la jugada actual. Por ejemplo al inicio de la jugada la torre no tiene acceso a jugadas porque está bloqueado por el peón y el alfil, y mientras no se liberen tales piezas seguirá sin estar implicado en una jugada, siempre que la torre enemiga no tenga otra ficha suya delante, esa torre no entra en el juego... Esto te permitirá restringir el diseño de movimientos al no ser necesario analizar posibilidades con fichas que no entran en la jugada actual... naturalmente esto es relativo ya que si quieres analaizar posibilidades a x movimientos hacia adelante, las posiblidades se multiplican y todas las fichas entrarían en juego, sin embargo para empezar no te compliques por caminos que no sabrías a priori resolver.
Luego podrás ir mejorándolo poco a poco... los de IBM (big-blue) también lo van mejorando poco a poco ...
Saludos...
manix:
Ok... lo que tengo es lo siguiente:
--- Citar ---Qué ficha mover ???... No lo pongas aleatorio, sería tonto, no inteligente, tampoco eches una ficha adelante, atrás, adelante.. también sería tonto...
--- Fin de la cita ---
--- Citar ---Antes de mover, procede ahora a la inversa, sería el mismo algoritmo, pero con 1 diferencia y un añadido. Cambian los adversarios y los atacantes. El añadido sería que después de esa comprobación habría que decidir que ficha mover...
--- Fin de la cita ---
:exclamation: 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.
--- Citar --- experimenta con dejarle caer en una trampa y que mueva a la trampa
--- Fin de la cita ---
:exclamation: 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.
--- Citar ---Puedes en determinadas situaciones tener una pequeña base de datos de 'jugadas resueltas'
--- Fin de la cita ---
--- Citar ---Por último examina y crea una base de datos de jugadas que no marcó buenas y salieron mal, para no repetirlas, igualmente con las que salieron bién para repetirlas.
--- Fin de la cita ---
:exclamation: 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
--- Citar ---Aparte te sería de gran ayuda para simplificar las reglas, dividir las fichas en 2 grupos, fichas de poder y fichas con escaso poder (peones), y cada uno de esos grupos divídelos aún en 2 están implicadas en la jugada actual y los que no están implicados en la jugada actual.
--- Fin de la cita ---
:exclamation: Eso estoy tomando en cuenta, de todas formas, cuando se hace la seleccion de las mejores jugadas todas se toman en cuenta ya que puede ser que en las proximas 2-x jugadas esten en una estancia mas fuerte
--- Citar ---Luego podrás ir mejorándolo poco a poco... los de IBM (big-blue) también lo van mejorando poco a poco ...
--- Fin de la cita ---
:exclamation: bueno, primero lo primero, mi meta es terminarlo de la mejor manera, tampoco me quiero apresurar, todo a su tiempo. 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.
^_^ Saludos!
Navegación
[#] Página Siguiente
Ir a la versión completa