Chessterfield - Echecs et informatique sur PC-Windows

Rechercher
Aller au contenu

Menu principal :

Chessterfield CL i5a, moteur neuronal




La découverte de ce vieux moteur d'échecs oublié de tous a été une véritable surprise. Je cherchais des joueurs faibles, entre 1000 et 1500 Elo, pour offrir des adversaires à la portée de joueurs enfants et/ou débutants quand je l'ai débusqué dans un classement de moteurs de troisième rang. Par chance, j'ai pu trouver à télécharger tous les fichiers.
Quelle ne fut pas ma surprise de découvrir que 18 ans avant AlphaZero, 13 ans avant Rhetoric, Matthias Lüscher avait exploré la piste du réseau neuronal à apprentissage, le fameux deep learning. Utilisé depuis peu pour le go et les échecs, ces techniques ont permis de spectaculaires percées. Mais à la fin du siècle, on savait à peine ce que c'était. Matthias Lüscher travaillait littéralement à contre-courant, sur la piste d'avenir.  


 


L'auteur a donc doté Chessterfield d'un petit réseau de neurones artificiels à trois couches, un classique perceptron. Parallèlement il a conçu un module d'apprentissage chargé de constituer le fichier de "poids" pour le réseau neuronal, à partir de la lecture de plusieurs dizaines de milliers de parties.

La première version de Chessterfield a été diffusée en 1999 et la dernière version publiée date de 2000. L'auteur a vite abandonné son programme, qui pourtant promettait. Il est vrai que les capacités des machines de l'époque ne devaient pas laisser à ce moteur beaucoup de chance de s'imposer. Un réseau neuronal demande beaucoup de puissance-machine et de mémoire vive, pour la constitution des données comme pour jouer. Mais aujourd'hui, nous avons les machines à la hauteur du moteur.



Téléchargement



On trouve tous les éléments à télécharger sur cette page: http://home.datacomm.ch/m.luescher/download_cl.html

Il sont présenté de manière disparate.

➤Dans la section "ChessterfieldCL - WinBoard Engine", chargez d'abord le moteur.

➤Dans
"ChessterfieldEN - Learning Utility" vous trouverez l'utilitaire d'apprentissage "Chessterfield EN"

➤Dans
"Chessterfield - Source Code", téléchargez La table de finale ('Endgames"). Et les sources, si vous savez quoi en faire !

➤Dans
"ChessterfieldCL - Knowledge Updates", vous trouverez enfin deux fichiers de poids alternatifs à celui que fournit l'auteur : celui de John T. Grant, et celui d'Arturo Ochoa. Soit au total trois cerveaux différents, donc trois façons de jouer.


Installation


Créez un dossier  "Chessterfield", copiez y le fichier de poids que vous voulez lancer, "network.dat", l'exécutable du moteur et créez un sous-répertoire "data" où vous décompresserez les fichiers de finales.

Le moteur fonctionne parfaitement avec Arena, qui se débrouille très bien avec les vieux moteurs Winboard. Installation tout à fait standard : menu "Modules" > "Installer nouveau module" et allez chercher le fichier "ChessterfieldCL.exe".

Si vous comptez utiliser plusieurs "personnalités" de Chessterfield (voir plus bas), le mieux est sans doute de copier avec un autre nom le dossier entier du moteur (avec la base de finales il pèse 22 Mo).



Plus fort que prévu

Classé comme moteur faible avec un Elo estimé à 1550, Chesterfield n'attirait pas l'attention. Pourtant, après lui avoir fait ingurgiter 81.000 parties de grands maîtres, j'ai obtenu un fichier de poids avec lequel sa force atteint au moins 1900 Elo. Il bat systématiquement tout moteur de 1800 Elo et gagne une fois sur deux ou obtient le nul contre Sissa (1955 Elo) et Faile (2000 Elo). Il lui arrive aussi de battre Alarm (2200 Elo). Le tout avec un style de jeu humain.
J'ai pu vérifier par la suite que le fichier de poids fourni par l'auteur était de force pratiquement équivalente. J'en déduis que le gain découle uniquement de l'augmentation de la force des machines d'aujourd'hui.  
En revanche, il faut lui laisser le temps de réfléchir. C'est dans les parties de durée moyenne ou longue qu'il s'en sort le mieux. En parties rapides, de type blitz, il ne vaut pas grand chose.


Comment utiliser l'utilitaire d'apprentissage ?

Plutôt que d'intégrer le module d'apprentissage à son moteur, Matthias Lüscher a préféré développer une application séparée. L'avantage, c'est la simplicité. Il suffit de rassembler toutes les parties dans un dossier, d'y copier l'exécutable "chessterfieldEN" avec  le fichier de poids vierge et de le lancer.
Attention, rustique ! C'est une simple application "console", à laquelle vous devez donner un à un le nom (extention .pgn comprise), sans vous tromper, des recueils de parties contenus dans votre dossier : "karpov.pgn", "carlsen.pgn", etc (inutile de mettre les majuscules).
Une fois le stock épuisé, vous écrivez "no" à la place d'un dernier nom de fichier pgn et vous lancez le travail. Quand elle a terminé de traiter toutes les parties que vous lui avez donné, l'application console créé un nouveau fichier de poids, appelé "network.dat", qui fait entre 800 et 850 Ko, jamais plus.
Sur une machine de bureau de puissance assez moyenne (processeurs rapides mais deux coeurs et 4 Go de ram seulement), j'ai pu lui faire avaler plus de 51.000 parties en moins de 3 heures.



Important : l'application console n'est pas capable d'ajouter un nouveau travail au contenu d'un précédent fichier network.dat. Il écrase l'ancien contenu et en produit un nouveau. Pour obtenir un bon fichier de poids, il faut donc lui donner un maximum de parties à ingurgiter en une seule fois ! C'est son plus gros défaut.


Éviter les plantages

Il arrive que le module d'apprentissage bute sur une partie. C'est très rare mais c'est vraiment ennuyeux car il est très difficile d'identifier la partie en cause. D'autant plus que cela peut provenir d'un caractère non-visible présent dans n'importe quel champ.
J'ai utilisé plusieurs techniques pour débusquer les fautives et limiter le risque. En voici trois :


Constituer des collections de parties par joueur, afin d'éviter d'avoir plus de 4 ou 5000 parties par Pgn. On les teste chacune séparément en lançant une fausse opération d'apprentissage. Le module affiche des séries de petits points et c'est durant cette étape qu'il plante, s'il y a une partie à problème. Une fois que la phase des "petits points" est passée, on est sûr que le Pgn est bon et on le met de côté.

Utiliser les capacités de maintenance de Scid v PC : lorsqu'on rencontre un problème avec un Pgn, l'ouvrir dans Scid vs PC et demander à l'outil de maintenance de vérifier les parties. Il arrive qu'il trouve une partie défectueuse ou une simple position perdue au milieu de parties complètes.  Supprimer au passage tout ce qui n'est pas utile au module d'apprentissage : tag, commentaires, variantes... Sauvegarder en Pgn et re-tester aussitôt. Si ça ne marche toujours pas, tester l'astuce suivante.

Astuce avec le module de création de bibliothèques .bin de Lucas Chess : lancer depuis Lucas Chess une opération de création de bibliothèque d'ouvertures .bin. La méthode :

1/ Charger une base Pgn dans Lucas Chess : "outil" > "visualiseur Pgn" >"lire le pgn"
2/ Depuis la liste des parties du pgn faire : "Utilitaires" > "Répertoire Polyglot" > "Créer un répertoire"
3/ Un Widget s'ouvre. Ici il faut :
►Créer un fichier vide avec un nom quelque, par exemple une simple lettre.
►Mettre la profondeur d'exploration en 1/2 coups à 2 (par défaut 40), pour que ce soit rapide.  
Ne changer aucun autre paramètres et lancer l'opération. Si elle arrive à terme, c'est que LC n'a rien trouvé. S'il trouve quelque chose, il vous indique le numéro d'ordre de la partie dans le Pgn. Supprimer-la et recommencez jusqu'à ce que LC ne trouve plus d'erreur. Ne sauvegardez pas la bibliothèque bien sûr. Elle est quasiment vide. N'oubliez pas de sauvegardez le Pgn, par contre...



Mes fichiers de poids

Chessterfield possède déjà au moins huit personnalités différentes : celle de l'auteur, celle de Grant, celle d'Ochoa et les cinq miennes : "Vieux maître", "Jeune maître", "Chesster Offensif", "MiniPolgar" et "Petit-Shirov" (voir plus bas). On peut en créer autant qu'on veut mais on ne peut pas comme avec Rodent manipuler avec finesse des quantités de paramètres pour obtenir un résultat bien précis. On peut cependant poursuivre certains objectifs :

►Obtenir le profil le plus fort possible, ce qui suppose de faire ingurgiter au moteur plus que les 72000 parties que j'ai fourni à la dernière version de "Jeunes Maître", le plus fort des huit. C'est possible, mais c'est du boulot, d'autant plus que le module d'apprentissage devient instable lorsque les quantités dépasse 60.000 parties.
►Obtenir un jeu typé. C'est ce que j'ai fait pour Chesster Offensif, joueur tactique et prompt au sacrifice. Ou avec Vieux maître, qui joue comme au 19eme siècle.
►Imiter le style d'un joueur. C'est plus difficile car les parties ne sont jamais disponibles en quantité suffisante. J'y suis parvenu en trichant, mais les limites sont vite atteintes.

Vous trouverez ci-dessous la genèse de mes fichiers de poids et les méthodes que j'ai utilisé pour les obtenir. Ca vous donnera sûrement des idées.  




"Jeune maître"

L'idée était d'obtenir le moteur le plus puissant en lui proposant autant de parties possible de GMI contemporains. Le premier fichier contenait 81.000 parties, mais les Carlsen jouant avec les Anand,  les Anand avec les Caruana et les Caruana avec les Carlsen, il y avait forcément beaucoup de parties en commun.  J'ai alors utilisé Scid vs PC pour éliminer ces doublons. J'ai obtenu un Pgn de 62.000 parties sans aucun doublon des 25 plus forts joueurs de la dernière génération -  parmi lesquels quelques français.  J'ai obtenu ainsi un fichier de poids qui s'est avéré plus fort que tous les autres fichiers disponibles, y compris celui de l'auteur (voir plus bas). Naturellement je l'ai appelé "Jeune maître".

Télécharger le fichier de poids "Jeune Maître" ?

Remarques :
Le module d'apprentissage semble avoir des problèmes lorsque le nombre de parties dépasse 70.000. Au delà, le succès est très aléatoire. Mon premier essai à fonctionné avec plus de 80.000 parties mais j'ai eu la "chance des débutants". Pour Jeune maitre après plusieurs échecs, j'ai rassemblé toutes les parties avec Scid et j'ai éliminé tous les doublons. J'obtenais un unique gros fichier qui ne passait toujours pas. J'ai alors eu l'idée de découper ce gros fichier en plusieurs morceaux et bingo ! Ca marchait ! Le module d'apprentissage a donc aussi des problèmes lorsque le Pgn est trop gros. En pratique, des Pgn de 20.000 parties (obtenus avec Scid) conviennent très bien.
Rassemblement, écrémage, découpage : j'ai utilisé la même technique pour tous mes autres fichiers de poids.


PS : Nouvelle version de "Jeune maître"


Mon jeune maitre était déjà assez bon mais j'ai décidé de l'améliorer encore un peu.  J'ai refait une sélection de parties de 40 GMI, tous situés dans le classement des 100 premiers joueurs mondiaux. Les 30 premiers y sont tous : Carlsen, Caruana, Liren, Giri, Népomniatchi, Vachier-Lagrave, Mamedyarov...  J'ai rajouté quelques joueurs moins bien classés actuellement mais au jeu particulièrement intéressant :  Gelfand (50eme), Morozevich (88eme) et Shirov (78eme).
C'est à cette ocassion que j'ai remarqué à quel point l'élite mondiale des échecs a rajeunie. Mais où sont passés les anciens ?
J'ai rassemblé environ 120.000 parties ; avec l'élimination des doublons, le stock est tombé à 72.000. Avec 10.000 parties de plus, une meilleure sélection et une élimination plus rigoureuse des doublons, la nouvelle version devrait logiquement être plus forte. Pour être honnête, ce n'est pas flagrant, au vu des résultats des nombreuses parties que je lui ai fait jouer contre la première version. Le nouveau "Jeune maître" peine à prendre nettement l'avantage sur son prédécesseur. Il y a un gain mais il est assez modeste.

Télécharger la nouvelle version ?


"Vieux maître"


Une autre idée m'est venue : réaliser un fichier de poids à partir de parties de joueurs du 18eme et du 19eme siècle. En grattant un peu partout j'ai pu rassembler dans un unique pgn 30000 parties d'avant 1910, sans doublon. D'où son nom : Vieux maître. Tous les joueurs un peu connus y sont passés mais il y a aussi beaucoup de parties de joueurs totalement inconnus.

Évidemment il est moins fort que les autres fichiers de poids. Disons 1800 Elo. Parce qu'il y a beaucoup moins de parties, parce que le niveau moyen est plus faible et parce que même les meilleurs joueurs n'avaient pas la science des échecs dont nous disposons aujourd'hui.
Par contre, il joue à l'ancienne, sortant vite ses pièces majeures sans se préoccuper de déployer son jeu tout en préservant sa position.  C'était le but !

Pour faire bonne mesure, j'ai aussi créé avec ces mêmes 30000 parties anciennes une bibliothèque d'ouvertures au format Abk d'Arena. A utiliser avec Vieux maître, ce qui parachèvera la ressemblance avec le style d'avant 1910. Cette bibliothèque contient 480.000 coups, sur une profondeur de 40 1/2 coups.

Télécharger le fichier de poids "Vieux Maître" et sa bibliothèque ?


"Chesster offensif"

L'idée était ici de collecter les parties de joueurs tactiques et offensifs, coutumiers des gambits audacieux et des combinaisons complexes. J'ai sélectionné 11 joueurs - dont trois anciens romantiques - correspondant plus au moins à ce critère : Anderssen, Karparov, Khalifman, Marshall, Morozevich, Nakamura, Polgar, Shirov, Sutovski, Tal et Topalov.
Pour ne pas laisser le jeu des adversaires contaminer le style tactique-offensif recherché, je n'ai retenu que les parties gagnantes ou nulles – ce qui devrait logiquement minorer leur apport. Au total, il me restait un peu plus de 40000 parties.



Attention monsieur Pacman, Mikhaïl ne vas pas rester tranquille longtemps...

Chesster Offensif est nettement moins fort que Jeune maître. Son niveau se situe autour de 1800-1850 Elo. Il fallait s'y attendre. Le nombre de parties était un peu faible et les styles de jeu risque-tout font naturellement perdre beaucoup de points de Elo. J'espérais mieux mais il joue de la manière prévue. J'ai fait analyser par Lucas Chess une vingtaine de parties parmi la cinquantaine que je lui ai fait jouer et LC confirme que la complexité de son jeu est élevée, le dynamisme et l'activité des pièces également. Le style est très faiblement positionnel (26%) et la facilité à l'échange extrêmement élevée. C'est sympa, si l'on est assez faible pour se contenter de 1800 Elo (ce qui est mon cas) d'avoir un adversaire qui déménage plutôt qu'un champion de la position à la Karpov.

Télécharger ''Chester offensif'' ?

Si vous envisagez de l'utiliser, offrez-lui la bibliothèque "Kasparov Opening Book for Arena.abk", réalisée à partir des ouvertures de Kasparov lui-même. A télécharger sur Rob Jeux, ICI...



"MiniPolgar"

Utiliser Chessterfield pour simuler un joueur particulier est beaucoup plus délicat. Il est capable de joueur à une force de 2000 Elo, avec un fichier de poids tiré de 60 à 70.000 parties bien choisies. Malheureusement il est impossible de rassembler autant de parties d'un même joueur. Pour Judit Polgar, je suis arrivé à en trouver 13.000 en fouinant partout et en raclant littéralement les fonds de tiroir. J'ai récupéré même ses parties de jeunesse, les parties de ses tournois blitz et les parties de confrontations d'importance secondaire.  
C'était malgré tout encore insuffisant pour obtenir un fichier de poids assez fort. J'ai donc enrichi la collection de 14.500 parties uniquement gagnantes de huit joueurs proches du style tactique-offensif de Polgar : Shirov, Tal, Khalifman, Morozevich, Sutovsky, Topalov, Nakamura et Kasparov. C'est un peu de la triche, mais je trouve que le résultat final est probant.



Fort en parties rapides

Certes mon moteur est moins fort que Jeune maître, obtenu avec beaucoup plus de parties de haut niveau. C'est pour ça que je l'ai appelé "MiniPolgar". Mais sa force, supérieure à celle de Vieux maître, est comparable à celle de Chesster Offensif, quelque part vers 1800-1850 Elo.  
Par contre, et c'est surprenant, MiniPolgar est beaucoup plus à l'aise en parties blitz; dans un tournoi Blitz 5/3 toute ronde de 30 parties avec Jeune Maître et Vieux maître, elle remporte la victoire avec 11,5 points contre 10,5 pour Jeune maître et 8 points pour Vieux Maître. En partie normale, Mini-Polgar est nettement surclassée par Jeune Maître. Mais sur les 10 parties jouées contre lui dans ce tournoi, elle en a remporté 5 et obtenu un nul.
Pour le style, cela ressemble bien à celui de Polgar : posé et positionnel, puis tout-à-coup offensif et audacieux, prompt au sacrifice.

Pour que le jeu de MiniPolgar ressemble encore plus à son modèle, j'ai utilisé les parties de Polgar pour créer une bibliothèques d'ouvertures spécifiques au format Abk d'Arena. Elle comporte 115.000 entrées, certaines lignes allant jusqu'à 60 ½ coups de profondeur.

Télécharger MiniPolgar ?


Petit-Shirov

Après Polgar, je me suis attaqué à Alexei Shirov. J'ai utilisé les mêmes techniques que pour Judit Polgar: sélection du maximum de parties possibles du champion Letton (14.000), échantillon que j'ai renforcé avec quelques centaines de parties gagnantes de moteurs au style très proches de Shirov (AnMon, Houdini, Rhetoric) puis avec des parties de joueurs humains pareillement proches du style Shirov (Topalov, Morozevich, Nakamura, Tal, Sutovsky...). Au total environ 42.000 parties ont servi à la constitution du fichier de poids dont un gros tiers appartient à Shirov. Je lui ai fait jouer 10 parties rapides contre Cdrill, Mustang, AdroitChess, Scidlet et MiniPolgar. Résultats:
Contre Cdrill (1850 Elo)
60% : 5 parties gagnées, 2 nulles, 3 perdues
Contre MiniPolgar (1850 Elo)
60% : 5 parties gagnées, 2 nulles, 3 perdues.
Contre Mustang (2040 Elo)
30% : 2 parties gagnées, 2 nulles, 6 perdues
Contre AdroitChess (2080 Elo)
30% : 2 parties gagnées, 2 nulles, 6 perdues
Contre Scidlet (2260 Elo)
5% : 9 parties perdues, 1 nulle.
La force de Petit-Shirov est donc proche de 1900 Elo. C'est pas énorme mais c'est le style qui compte et il donnera tout de même du fil à retordre à bien des joueurs - en commençant par moi.
Comme d'habitude, j'ai créé une bibliothèque d'ouvertures au format Abk d'Arena pour accompagner la simulation. je vous invite à télécharger sur Rob Jeux, ICI, le fichier de poids et la bibliothèque Abk.



Les tournois qui mettent les pendules à l'heure


Pour jauger la force des différents fichiers de poids j'ai organisé avec Crafty Chess Interface un tournoi Round-Robin en trois manches, soit 30 parties, entre Jeune Maître, Vieux Maître, le fichier Ochoa, le fichier Grant et le fichier Lüscher (celui de l'auteur). Les parties étant assez longues (15 minutes/60 coups, + 10 minutes avec incrément de 30 secondes), j'ai laissé Crafty Chess Interface tourner pendant deux jours sur un ordinateur. Résultat final :
Jeune Maître : 8 points, Ochoa : 7,5 points, Lüscher : 5,5 points, Vieux Maître : 5,5 points et bon dernier, Grant : 3,5 points.

J'ai également organisé un tournoi en 5 manches entre Jeune maître et cinq moteurs : Cdrill, Mustang, Alarm, Obender et Phalanx XXIV. Performance de Jeune maître :

100% contre Cdrill (1850 Elo)
40% contre Mustang (2040 Elo)
20% contre Alarm (2200 Elo)
35% contre Obender (2200 Elo)
0% contre Phalanx (2540 Elo)

C'est peu de parties pour fixer un Elo mais je pense quand même pouvoir affirmer que JM tourne autour de 2000, voire un peu plus.

J'ai fait la même chose pour évaluer le dernier né, Chesster Offensif : tournoi en 5 manches de parties 1/2 longue contre Cdrill, Chenard, Jchecs, Scidlet, Nanochess, Sissa, Jeune Maitre et AdroitChess. Performance de Chesster Offensif :

90% contre Nanochess (1200 Elo) *
70% contre Jchecs (1750 Elo)
50% contre Chenard (1820 Elo)
30% contre Cdrill (1850 Elo)
60% contre Sissa (1955 Elo)

20% contre Scidlet (2260 Elo) **

10% contre Jeune Maître

Rob Rob - Actualisation en octobre 2019.


* Une "erreur de casting". L'auteur de NanoChess prétendait que son moteur (le plus petit moteur UCI du monde) valait 1600 Elo. Il s'est un peu monté la tête, il en était loin (ses 10% correspondent à une partie nulle).
** Par erreur j'avais attribué une force de 1800 Elo à Scidlet, au lieu des 2260 que lui donne le site CCRL 40/4. Voilà l'explication du manque de performance de Chesster offensif face à lui.

 
 
 
 
 
 
 
 
Retourner au contenu | Retourner au menu _gaq.push(['_trackPageview']); (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })();