Bonjour, ou re - bonjour.
Je suis partant pour faire un petit tutoriel de programmation de jeu d’échecs.
On pourrais s’y mettre à plusieurs, avec des contributions basées sur une première.
J’ai longtemps cherché comme je dis plus haut.
La plus grande difficulté à été d’obtenir une partie gagnante en faisant appel à l’algorithme minmax dont il existe plusieurs variantes me semble t - il dons l’algorithme alpha-beta qui opère un élagage visant une optimisation des calculs à entreprendre.
Avec minmax on parle de recherche en largeur d’abord. Alpha-beta une une variante de même type qui devrait être un peu plus rapide.
J’ai implémenté une classe abstraite d’un tablier, ce qui m’a obligé à utiliser un adressage dynamique.
Je n’utilise quasiment pas de mémoire.
Mes calculs sont assais gourmand en revanche.
Les valeurs des pieces mise en jeu sont primordiale dans le calcul d’une solution.
J’ai éssayé une dixaine de variantes mais je suis resté très proche des valeurs que l’on m’a induiqués il y a dix ans aujourd’hui afin de parvenir à mon objetif.
En effet, comme les calculs peuvent prendre du temps, j’ai eu la mauvaise idée de vouloir faire vite malgrès tout et pour ce, je testais mon jeu niveau zéro qui bien que faisant appel à l’heuristique, n’implique pas toute les fonctions nécéssaire à l’exploitation des algorithmes de calcul tel que minmax.
Jouer au premier niveau diffère de ce que j’ai posté précédemment en fait lequel était un niveau zéro, donc aucune recherche en profondeur.
Je suis finalement parvenu à un mat ce matin niveau 1, c’est à dire que j’appelle minmax avec une profondeur de 2.
Les calculs pour parvenir à un mat à ce niveau sont différant qu’au niveau zéro.
J’ai écris des heuristiques qui ont des résulats surprenants.
Certain sont invalides, d’autres tournent en boucle, avec des organisations plus que « systématiques », d’autres encore refusent de jouer, certain jouent puis rangent les pièces au fur et à mesure, bref, parfois c’est de l’anti - jeu.
Tout dépend des objectifs peut - être, obtenir un mat à zéro joueur est une chose, écrire une heuristique pour jouer contre l’ordinateur est je pense différent.
Je ne dirai pas que mon programme est un jeu éfficace, il est amusant pour moi pour le moment.
Ici donc, avec une profondeur de deux, j’obtien une mat assaie rapidement sur une machine de l’an dernier, un « Ryzen » 7 :
Pour jouer aux échecs avec minmax il faut :
un jeu d’échecs
une condition d’arrêt
une fonction permettant d’obtenir l’ensemble des sucesseurs pour un état du jeu
une heuristique
Le jeu d’échecs est :
- le tablier ou apron en english text
- les pieces de même nom pour nos voisins
- deux réservoirs pour stocker les pieces car la promotion permet d’en recupérer 8.
La fonction d’arrêt est une procédure qui établie une état comme en échec et en echec et mat ou en pat alors que ce dernier état est une fin de partie nulle.
Les successeurs sont l’ensemble des mouvement admis pour l’ensemble des pieces pour un joueur particulier, c’est à dire les movement des pione, des valeys (fous) ou bichop, les chavaliers, la dame, les tours, le roi.
L’heuristique est une fonction qui doit permettre d’obtenir la valeur de l’état d’un jeu pour le mesurer à d’autre et choisir le plus avantageux.
Je détallerai dans mon prochain message les caractéristique de mon heuristique caractérisée par mon amateurisme autant en programmation qu’aux échecs.