Programa ajedrez

Iniciado por crazykenny, 22 Octubre 2010, 21:16 PM

0 Miembros y 1 Visitante están viendo este tema.

crazykenny

Hola; el caso es que, hoy, mientras estaba trabajando mi media jornada por las mañanas en la perrera, se me ocurrio la idea de desarrollar un programa de ajedrez, y el caso es que no se muy bien como enfocarlo en algunos aspectos, en el sentido de la toma de decisiones del ordenador a la hora de tomar una decision, realizar enroque (y otro movimiento relacionado con peones), determinar jaque mate y cuando hay un jaque; pero bueno, el caso es que lo que estoy pidiendo concretamente es si conoceis algun tutorial u algo que explique como crear un programa de ajedrez desde cero.
Ya se que es mucho pedir y demas, pero agradeceria de buen grado que me pudieseis dar alguna informacion acerca de como crear un programa para jugar al ajedrez contra el ordenador desde cero.
Por otra parte, comentar que en el programa se me ha ocurrido una "rutina" a seguir para que el programa actue en relacion a ella, y si no dispone de cierta informacion, pues que realize una estrategia olvidando la rutina en cuestion, que a fin de cuentas es lo que estoy buscando.
Por ultimo, no quiero involucrar a nadie "directamente" en el proyecto ni nada por el estilo, pese a que lo unico que pido es informacion acerca de crear el programa, nada mas; lo digo mas que nada porque ya he visto algun caso de una persona que decia que queria hacer tal cosa y que luego por una serie de razones lo acabo jodiendo todo y ahora se le considera como un troll, y no quiero tener ninguna discusion con nadie del palo de decir que voy a hacer tal cosa, y comprometer a la gente, y luego por alguna pifia mia o lo que sea que la gente empiece a decir que ya me vale por involucrar a la gente para hacer tal cosa y que ahora por lo que sea tenga que dejarlo y que luego la gente diga que ya me vale, o lo que sea; ya se que suena algo a paranoia, pero el proyecto, si consigo hacerlo, seria a largo plazo, y en cierta manera, tampoco puedo asegurar que pueda completarlo, por la dificultad de este, y por eso lo digo.
Disculpad las molestias.
Saludos.

Lh: No hagas doble post, utiliza el botón modificar.

Hola, y me disculpo por el doble post.
El caso es que, he estado analizando lo que "puedo ir haciendo" en lo que respeta al programa de ajedrez y lo que necesito, y pensando, pensando, pues a fin de cuentas lo que necesitaria seria una rutina de inteligencia artificial, lo que a fin de cuentas seria lo que influye en el programa a la hora de tomar una decision en lo que respeta a donde mover, por decirlo asi, solo eso.
El resto diria que puedo hacerlo solo.
Disculpad las molestias y problemas causados.
Saludos.

A nivel personal, lo que me da mas miedo no son los planteamientos y acciones individuales, sino las realizadas en grupo, ya que estas ultimas pueden acabar con consecuencias especialmente nefastas para todos.
Se responsable, consecuente y da ejemplo.
http://informaticayotrostemas.blogspot.com.es/2013/12/situacion-de-la-educacion-actual-en.html
https://informaticayotrostemas.blogspot.com/

Littlehorse

Es un tema bastante largo como para resumir en pocas lineas. Fijate si te sirven estos links:



An expert is a man who has made all the mistakes which can be made, in a very narrow field.

Sauruxum

Buenas.
Yo desde hace algun tiempo me he interezado en el desarrollo de estructuras neuronales artificiales ( ANN: artificial neural networks ). Se nos hablo en un seminario acerca de este tipo de cosas, el punto es no solo hacer que la computadora sepa mover las piezas o generalmente saber las reglas del juego, sino tambien que pueda tomar decisiones para que pueda ser mediamente competitiva.
Las ANN que mencione antes tienen la cualidad de "aprender" o sea que les haces hacer una operacion y le indicas si la respuesta de la red neuronal es correcta, sino se hacen los ajustes y se continua con el proceso de aprendizaje.
El tema de las AI no es sencillo, pero hay muchisimo material ( en ingles y tengo algunos papers en aleman y japones, estoy en fase de traducirlos ). Como consejo te diria que empieces a entender como funciona una AI simple y lo mas basico es entender el funcionamiento del "perceptron" para saber como va la cosa de las redes neuronales.

Saludos

crazykenny

#3
Bueno, Sauruxum, gracias por la informacion y por tu ayuda.
Tambien decir que, bueno, no es que quiera utilizar una super-inteligengia, pero tampoco todo lo contrario, ya que a fin de cuentas tambien trabajare con una base de datos y la IA seria de apoyo de una forma mas o menos "rapida" dentro de lo que me pueda ofrecer un ordenador con mas de un nucleo, por lo que a fin de cuentas tambien estariamos hablando del hecho de aprovechar varios nucleos de "forma relativa" en el sentido de que si hay solo 2 nucleos, pues se utilizaran, pero si por lo que sea tiene mas, y el programa lo ejecutamos en un ordenador con 4 nucleos, por ejemplo, que este utilize los 4.
De todas formas, hablamos de usar solo un ordenador (normalmente/mayoritariamente con dos o mas nucleos), y bueno, si, he leido algo acerca de redes neuronales, y, pese a que si, estoy buscando algo "potente", tampoco es que quiera morir en el intento, ya que hay que recordar, que si, solo trabajo con bases de datos, pero con un esfuerzo tocando temas diversos, podre manejarme con una rutina de IA para el programa, o eso espero.
De todas formas, ya ire mirando lo que me has comentado Sauruxum a ver que puedo hacer.
Espero haberme explicado.
Disculpad las molestias.
Saludos.

------------------------------------------------------------------------------------------------

Gracias por los enlaces Littlehorse, pero lo que estoy buscando, por decirlo asi, serian, no se, algoritmos de inteligencia artificial.
Por otra parte, lo que tengo ya hecho seria un programa donde inserto los nombres de las piezas, tamaño del tablero (numero de casillas horizontales y verticales), posiciones iniciales de cada pieza dentro del tablero, y como se pueden mover insertando los valores de movimientos en X y Y, lo que serian los valores horizontales y verticales.
Por otra parte, se como hacer que se muevan las piezas en el tablero, lo que seria crear una matriz con los valores X y Y (horizontales y verticales) y posicionar las piezas dentro del tablero dependiendo de sus valores iniciales, y luego mover las piezas con los valores correspondientes, y permitiendo el movimiento siempre y cuando una pieza del mismo color no este en la casilla donde se va a posicionar, y eliminando la pieza del oponente si la que se mueve se va a posicionar en la pieza en cuestion del oponente, incluyendo el hecho de que dentro del programa he preparado una rutina para definir el enroque y el otro movimiento que no me acuerdo como se llama que si un peon del oponente esta en la fila horizontal 5 y otro propio en la 4, este pasa detra del peon del oponente eliminandolo; no se si me explico; esto es por ahora lo que se hacer, y lo que puedo preparar, aunque he de definir el codigo que determina cuando se esta realizando un jaque y un jaque mate, pero es otro tema, por lo que, a fin de cuentas necesito, es saber como toma el ordenador la decision de realizar un movimiento y como los "piensa" o "visualiza", por decirlo asi.
Cabe destacar que se me ha ocurrido la opcion de asignarle un valor a cada pieza, como ahora ponerle un valor de 1 a los peones, 2 a las torres, 3 a los caballos, etc., y luego, con estos valores definidos, se me ha ocurrido la opcion de que el ordenador comprueve que movimientos pueden hacer las fichas y luego, con respeto a un movimiento concreto, "mire" que movimientos pueden hacer las piezas del oponente, y luego, con respeto a cada movimiento de la ficha del oponente, haga lo propio con sus fichas, y asi sucesivamente un numero determinado de veces, y entonces, si en un movimiento, el odenador elimina una pieza del oponente, se sume un valor a una variable (que seria el valor de la pieza eliminada), y despues, si el oponente elimina una pieza suya, pues hacer lo mismo con la misma variable, pero en vez de sumar, se le restaria, y luego, despues de pasados, no se, 5 movimientos comprobando todas las combinaciones posibles, el ordenador comprobaria cada jugada, y aquella que tenga un valor mas alto, seria la que el ordenador habria de seguir, y cabe destacar que si en una de las jugadas, el ordenador consigue hacer un jaque, se le asignaria el valor asignado a la pieza del rey (aunque no lo mate), y si consigue hacer un jaque mate, se sumaria un valor bastante elevado (supongamos, no se, 100) para asegurarse de que se realiza esa accion, y si pasa al contrario, pues se realizan restas en vez de sumas; pues bien, habiendo comentado esto, necesitaria, no se, algun ejemplo , por decirlo asi, para que el ordenador pueda "generar" los movimientos. Desde luego, por lo que he leido, se pueden generar una "barbaridad" de movimientos en el ajedrez, por lo que la idea seria limitar las opciones, a mucho apurar en lo que respeta al consumo de memoria y a la toma de decisiones por parte de la CPU, dependiendo del tiempo que se tarde en tomar una decision, claro esta, pero lo en que tengo mas problemas, por decirlo asi, a la hora de hacer el programa, es en como puede el ordenador generar el movimiento.
Disculpad las molestias y gracias de antemano por la ayuda.
Saludos.
------------------------------------------------------------------------------------------------
Hola, y perdonad que moleste tanto editando el post y demas.
Bueno, lo primero; he mirado las normas del foro, y me he fijado en que ponia algo asi como que no dais las cosas hechas; no se si es correcto o no, supongo que si, y me disculpo por si en algun momento cuando he escrito y editado el mensaje (que ya son 3 en este mensaje y en el primero me lo han modificado los admins -supongo- por no fijarme bien) he pedido que "me deis las cosas hechas" en el sentido de pedir ejemplos u algo para luego modificarlos yo mismo, o que me deis algun codigo ya hecho, por lo que me disculpo por haber comentado lo que he comentado.
Por otra parte, decir que esta tarde, mientras iba a comprar comida para mi perra y intentando hacer una siesta que no he podido hacer y buscando datos, se me ha ocurrido una idea que quizas, y solo quizas, me podria servir en lo que respeta a hacer el protocolo de IA del juego de ajedrez, por lo que en cierta manera he de agradecer que no me hayais ayudado en ningun sentido, y no lo digo por molestar ni nada, sino por el hecho de que en cierta manera ya le llevava algo de tiempo dandole vueltas al tema para ver como demonios (por decirlo asi) podria hacer el dichoso protocolo, y solo me falta hacerle un puñado de retoques para que funcione, si es que funciona, claro esta, por lo que, en cierta manera, agradezco que hayais hecho lo que habeis hecho, y insisto, no lo digo ni hago para molestar ni nada.
Saludos.
A nivel personal, lo que me da mas miedo no son los planteamientos y acciones individuales, sino las realizadas en grupo, ya que estas ultimas pueden acabar con consecuencias especialmente nefastas para todos.
Se responsable, consecuente y da ejemplo.
http://informaticayotrostemas.blogspot.com.es/2013/12/situacion-de-la-educacion-actual-en.html
https://informaticayotrostemas.blogspot.com/

n3ptun

Hola crazykenny:


Aun te interesa algo sobre programas de Aejdrez?

crazykenny

Hola n3ptun; no es que no me interese; a decir verdad, bueno, si, me interesa, pero desde que puse el post, me he ido planteando como hacer el apartado de IA en lo que respeta a hacer que el ordenador decida que movimiento hacer, y se me ha ocurrido que la mejor forma de hacer que el ordenador se decante por hacer un movimiento u otro, es ponerle un valor a cada movimiento, en el sentido de que, por ejemplo, cada pieza tiene un valor, y si con un movimiento se elimina una pieza del oponente, pues se le suma x al valor del movimiento, y si con ese movimiento, el oponente le elimina una pieza al ordenador, se le resta y; entonces, el ordenador guardara el/los movimientos con el valor positivo mas alto (por ejemplo; el ordenador ha memorizado 3 movimientos; 1 con valor 2 y 2 con valor 3; entonces, el ordenador se memoriza los de valor 3 y elige uno al azar para memorizarlo en otra matriz de donde mirara que hacer descartando el resto; y si solo hay 1 de 3 puntos y dos de 2 puntos, por ejemplo, directamente se guardara el de 3 puntos eliminando el resto); entonces, esto queda muy bonito, pero el trabajo a la hora de crear el programa ha podido conmigo en el sentido de que no he podido plasmar la idea en lineas de codigo, pero lo que es la idea la tengo, por lo que dejare de trabajar, por ahora, con el programa, lo cual no significa que mas adelante no vuelva a retomarlo, y por eso he comentado que no queria involucrar a nadie en el sentido de pedir ayuda para la realizacion de codigo, y mi intencion personal solo ha sido pedir cierta informacion para resolver ciertas dudas, pero sin decir que tal persona esta haciendo conmigo el proyecto; no se si me explico.
De todas formas, insisto en que por ahora quisiera dejar el proyecto dada la dificultad y que esta puede conmigo; aun asi, n3ptun, si quieres mostrar algo de informacion sobre programas de ajedrez, me lo mirare, y agradeceria que lo pusieses.
Disculpad las molestias causadas y muchisimas gracias por vuestra ayuda y interes.
Saludos.
A nivel personal, lo que me da mas miedo no son los planteamientos y acciones individuales, sino las realizadas en grupo, ya que estas ultimas pueden acabar con consecuencias especialmente nefastas para todos.
Se responsable, consecuente y da ejemplo.
http://informaticayotrostemas.blogspot.com.es/2013/12/situacion-de-la-educacion-actual-en.html
https://informaticayotrostemas.blogspot.com/

MCKSys Argentina

Fijate este source: http://www.redhotpawn.com/rival/download/downloader.php?file=rival-source-1.8.28.zip

Contiene un programa completo de chess. Incluida la parte donde juega el computador.

El source esta en C.

Saludos!

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."


crazykenny

Hola, y perdon por tardar tanto en responder
Gracias por el codigo MCKSys Argentina; acabo de mirar el codigo, y me ha pasado exactamente lo mismo que con otros codigos diferentes que he mirado; que no me aclaro por el hecho de tener que incluir varias funciones en archivos diferentes.
Si soy sincero, y me disculpo por exigir tanto, la verdad es que buscaba algo pero todo escrito sin incluir nada de archivos externos con funciones para luego acceder a ellas.
Ya se que estoy en plan caprichoso y se que en cierta manera mi comportamiento deja mucho que desear, pero desde hace algun tiempo solo trabajo en un editor de juegos llamado blitz3D, y antes de trabajar con este editor, trabaje con darkbasic (darkbasic pro no, el anterior), y pensaba que buscando codigo quizas encontraria algo pero todo compilado en un mismo archivo, que es como trabajo yo; creo todo el codigo, pero dentro de un mismo ejecutable, y sin usar funciones, y es como tenia planeado hacer el programa, por lo que es de suponer que me he hecho demasiadas ilusiones, y que en este sentido quizas me haya pasado de caprichoso a la hora de buscar codigos esperando poder aclararme aunque sea todo en el mismo ejecutable, por lo que en este sentido me disculpo, porque a decir verdad esperaba imposibles, por decirlo asi.
De todas formas, he acabado un programa de gestion de compras y ventas para tiendas bastante simple, y mirare de colgarlo (en otro tema, desde luego), para que veais un poco como programo; y insisto, soy un chapuzas programando en el sentido de que no paro de utilizar el comando goto y el for/next para mis codigos, y pocos comandos mas; aun asi, el programa que he hecho funciona, y eso que me he pasado toda la tarde para implementar un sistema de busquedas por referencias, del palo de indicar al programa varias posibilidades y luego decir que producto tiene tal posibilidad y tal otra, pero bueno, que ya mirare de colgar el programa cuando me asegure de que funciona bien.
Disculpad las molestias causadas, y gracias por todo.
Saludos.
A nivel personal, lo que me da mas miedo no son los planteamientos y acciones individuales, sino las realizadas en grupo, ya que estas ultimas pueden acabar con consecuencias especialmente nefastas para todos.
Se responsable, consecuente y da ejemplo.
http://informaticayotrostemas.blogspot.com.es/2013/12/situacion-de-la-educacion-actual-en.html
https://informaticayotrostemas.blogspot.com/

n3ptun

Hola crazykenny :

no resulta facil hacer este tipo de codigo, vas bien hasta ahora, te dare de todas formas una paginilla para que la mires y veas que tal, hay codigo fuente en la web que puedes revisar, descargate robbolito y mira su programacion es codigo abierto, esta en C. :silbar: casi todos los motores fuertes estan programados en C.

http://sites.google.com/site/motoresdeajedrez/programas--interfaz-y-motor/motor

saludos

crazykenny

Gracias por la informacion n3ptun, pero ya lo digo; el programa ha podido conmigo.
Aun asi gracias por la ayuda.
Saludos.
A nivel personal, lo que me da mas miedo no son los planteamientos y acciones individuales, sino las realizadas en grupo, ya que estas ultimas pueden acabar con consecuencias especialmente nefastas para todos.
Se responsable, consecuente y da ejemplo.
http://informaticayotrostemas.blogspot.com.es/2013/12/situacion-de-la-educacion-actual-en.html
https://informaticayotrostemas.blogspot.com/