π
<-

Conseils pour une IA d'échecs

Discussions diverses, débats, sondages, parler de tout et de rien... mais en restant plutôt sérieux.

Conseils pour une IA d'échecs

Unread postby Persalteas » 07 May 2013, 10:54

J'aurais juré avoir déjà posté ce topic, mais pas moyen de remettre la main dessus...
Dans la continuité de ma démarche de déménagement des topics intéressants d'Espace-TI, en voilà un que j'avais écrit un matin ou j'avais fait des rêves d'intello.


Je me demandais quels paramètres étaient les plus importants à prendre en compte pour faire un IA de jeu d'échecs.
Bien que je n'aie pas l'intention directe de programmer un jeu d'échecs là maintenant ( je fais moins d'une heure de progra par semaine en ce moment...mais ma moyenne a monté de 10 points :P ), ces conseils pourraient servir a tout programmeur...


Bref, bien entendu, je n'ai jamais fait encore une telle IA, et ce que je raconte est peut être faux, si vous avez des idées postez-les à la suite... (surtout si VOUS avez déjà fait une IA d'échecs...)

Donc comme critères principaux, en partant du principe que l'IA ne réfléchit pas à plus d'un tour à l'avance, voici mon raisonnement:

Pour l'instant, je ne me suis pas soucié :
- ni du temps que pourrait prendre l'IA à réfléchir. Je connais une IA d'échecs en ASM qui met 4 minutes par tour...
- ni de la stratégie pour mettre le Roi adverse en Mat : juste éliminer des pièces en préservant les siennes


1) Attaquer une pièce

- Pour chaque pièce, évaluer chaque position qu'elle peut prendre au prochain tour, retenir toutes les positions permettant de prendre une pièce ennemie (ça fait beaucoup)

- Pour chaque pièce ennemie ainsi susceptible d'être prise, évaluer si elle est protégée où non:
Ceci nécessite d'analyser une à une toutes les pièces ennemies pour voir leur rapport avec la pièce concernée.
Si cette pièce est protégée et de niveau inférieur ou égal à la pièce qui attaque, éliminer cette proposition de la liste.

À ce niveau, ne restent dans la liste de coups possibles que les attaques sur pièces non protégées ou pièces protégées mais de niveau supérieur à la pièce attaquante.

- Éliminer de la liste des coups possibles ceux qui mettraient le roi en échec

- Garder dans la liste uniquement les attaques visant les pièces de plus haut grade

- Privilégier l'attaque sur une pièce non protégée

- Si deux pièces peuvent faire cette attaque, envoyer celle de plus faible niveau

Il est bien entendu possible qu'aucune attaque ne soit envisageable ou censée. Dans ce cas, faire autre chose qu'attaquer.

2) Déplacer ses pièces

Pour savoir quelles pièces avancer, il faut se baser soit sur une prévision d'attaque au coup suivant, soit sur une politique de libération du terrain, c'est à dire avancer ses pièces au maximum pour coincer l'autre derrière des barrières. Donc:

- Pour chaque pièce, vérifier si elle peut avancer.

- Éliminer les positions ou la pièce avancerait en étant non protégée et se ferait prendre inutilement par l'adversaire en utilisant la database (voir paragraphe plus loin)

- Dans celles qui peuvent avancer, vérifier pour chaque position qu'elles peuvent adopter s'il n'y a pas une pièce non protégée ou de grade supérieur à attaquer au tour suivant (pour gagner du temps, je pense qui serait préférable d'avoir une matrice ou une base de Data en tout cas, mise à jour à chaque tour selon les pièces qui ont bougé, qui dit tout de suite si la pièce est protégée ou non. Cela épargne d'avoir à faire les tests à chaque pièce.)

- si il y a, retenir le coup permettant d'attaquer la pièce adverse la plus gradée, ceci par la pièce la moins gradée possible, en tenant compte des protections.

- s'il n'y a pas, chercher à avancer des pièces selon un ordre (auquel je n'ai pas encore réfléchi) qui permettrait d'occuper le plus d'espace sur le plateau.

3) Protéger une pièce

On peut aussi choisir de déplacer une pièce pour en protéger une autre, avant même de la déplacer pour "occuper l'espace" (selon moi, l'ordre des priorités donne privilège à la protection...)

- Vérifier la liste des pièces non protégées

- Privilégier la pièce non protégée de plus haut grade

- Parmi les pièces qui peuvent bouger, vérifier quelles pièces pourraient atteindre une position permettant de protéger cette pièce de plus haut grade, si aucune, passer à la pièce de grade inférieur (long en temps !)

- Si des pièces peuvent le faire, choisir la pièce de moindre grade, à une position où elle même serait protégée

LA DATABASE DES PROTECTIONS

Chaque pièce adverse doit être référencée comme protégée OUI ou NON, ça, c'est simple.

Ensuite, chaque case du plateau doit être référencée du point de vue du joueur IA comme:

- Protégée par une de ses pièces où non (est-ce que si je me déplace là bas je suis protégé)
- Potentiellement attaquée par une pièce adverse OUI ou NON
- Permettant d'attaquer une pièce adverse au prochain tour OUI ou NON

Cette database doit être mise à jour a chaque fois qu'une pièce bouge, ainsi, elle ne prend pas de temps à s'actualiser, et simplifie les calculs.


PRIORITÉ DES ACTIONS

Alors, que choisir entre attaquer, protéger une de ses pièces, avancer ?

- Évaluer si attaque envisageable ou pas
- Évaluer si nécessité de protéger une pièce

- Si les deux sont OUI, je ne sais pas encore comment faire pour choisir... Si une des deux est NON, choisir l'autre.

- Si les deux sont NON, choisir d'avancer une pièce soit pour attaquer au coup suivant soit pour occuper la place...


Notez qu'il est possible d'enregistrer en mémoire un coup: exemple

- Si la pièce finalement retenue pour bouger se retrouve a une place qui n'est pas protégée, enregistrer ce coup dans une variable pour forcer le tour suivant à déplacer une pièce pour la protéger. (choix "protection" obligatoire)

- Si une pièce est avancée car on a repéré une pièce de haut grade prenable au coup suivant, forcer son attaque (choix "attaque" obligatoire).

BREF, je vous laisse sur ces considérations, j'essaierai de penser à des trucs moins tordus la nuit prochaine, n'hésitez pas à me faire part de vos idées ! :#wahoo#:

(Bon, pis un de ces jours je tenterai peut-être un jeu d'échecs sait-on jamais...dans au moins 4 mois alors.)
User avatar
PersalteasMembre UPECS
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 6.2%
 
Posts: 2337
Images: 113
Joined: 04 Feb 2010, 00:00
Location: Evry (France)
Gender: Male
Calculator(s):
MyCalcs profile
Class: PhD candidate, Bioinformatics

Re: Conseils pour une IA d'échecs

Unread postby Levak » 07 May 2013, 12:18

Responsable design/graphique de TI-Planet
I do not get mad at people, I just want them to learn the way I learnt.
ImageTNOC [topic][DL]
nClock [topic][DL]
HideManager [topic][DL]
ZLock [topic][DL]
Theme Editor [topic][DL]
Mes programmes
User avatar
LevakAdmin
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Level up: 98.9%
 
Posts: 6414
Images: 22
Joined: 27 Nov 2008, 00:00
Location: 0x1AACC355
Gender: Male
Calculator(s):
MyCalcs profile
Class: BAC+5: Epita (ING3)


Return to Autres discussions

Who is online

Users browsing this forum: ClaudeBot [spider] and 4 guests

-
Search
-
Social TI-Planet
-
Featured topics
Comparaisons des meilleurs prix pour acheter sa calculatrice !
"1 calculatrice pour tous", le programme solidaire de Texas Instruments. Reçois gratuitement et sans aucune obligation d'achat, 5 calculatrices couleur programmables en Python à donner aux élèves les plus nécessiteux de ton lycée. Tu peux recevoir au choix 5 TI-82 Advanced Edition Python ou bien 5 TI-83 Premium CE Edition Python.
Enseignant(e), reçois gratuitement 1 exemplaire de test de la TI-82 Advanced Edition Python. À demander d'ici le 31 décembre 2024.
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
1234
-
Donations / Premium
For more contests, prizes, reviews, helping us pay the server and domains...
Donate
Discover the the advantages of a donor account !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partner and ad
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
983 utilisateurs:
>963 invités
>13 membres
>7 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Other interesting websites
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)