Gnochon : le plan (2)

8 février 2017
alice-kent-stoddard-the-chess-game

Alice Kent Stoddard – The Chess Game

1-L’objectif

Comme je l’ai expliqué prédemment, je me lance dans la création d’un programme d’échecs en Smalltalk. J’y pensais depuis longtemps et m’y voici, finalement.  Je tâcherai d’atteindre deux buts : faire un programme d’échecs qui atteindra au moins 2000 Elo et ne consulter aucun code source pour m’inspirer des algorithmes des autres.  Autre défi de taille, essayer de trouver du contenu en français pour vous aiguiller si vous avez besoin d’un coup de pouce supplémentaire!

2-Pourquoi Smalltalk?

Pourquoi Smalltalk, un langage interprété? Tout d’abord, parce que c’est de loin le langage de programmation que je connais le plus comme je l’utilise depuis plus de 22 ans.  Ensuite, parce l’environnement Smalltalk offre une facilité de débogage, une panoplie d’outils et une rapidité de dévelopement inégalés.  Par ailleurs, Smalltalk est pourvu d’une riche et mature librairie de code et d’une multitude de classes de base par défault. Finalement, j’ai aussi choisi Smalltalk parce que c’est un des meilleurs exemples de « write once, run anywhere« .  Pharo et Squeak sont disponibles sur mac (macOS, OS X), Windows (x32, x64) et GNU/Linux (x86 et ARM).

3-Les prérequis

Dans la mesure où vous seriez tentés de suivre ce blogue et cette aventure en essayant vous aussi de coder un programme d’échecs, il vous faudra quelques prérequis pour suivre mes développements.  Premièment, une connaissance de Smalltalk est grandement souhaitable (quoique la syntaxe du langage et le code sont si simples que vous devriez tous être en mesure de comprendre).

Ensuite, une connaissance minimale des règles du jeu d’échecs est nécessaire : cela inclut le déplacement des pièces, la prise en passant, le roque, la promotion du pion, la règle des cinquante coups, la règle de répétition de position, le mat, le pat, les cas de parties nulles (e.g. matériel insuffisant pour mater), la notation algébrique, etc.  Idéalement, vous seriez un joueur d’échecs vous-même quoique cela n’est pas absolument nécessaire comme l’a déjà prouvé Claude Jarry [1]!

Claude Jarry attendant la réponse de son programme d’échecs « L’Excentrique »

4-Les outils

Évidemment, vous aurez besoin de Squeak et/ou Pharo!

Je ne compte utiliser que des solutions open source pour ce projet alors ne craignez pas de dépenser un seul sou! Alors si vous désirez me suivre pas à pas, j’utiliserai Squeak au début puis je migrerai ensuite mon programme sur Pharo.

ampoule48x48

Comme Pharo a comme ancêtre Squeak, vous pourrez utiliser l’un des deux environnements sans distinction ni problème. S’il y a des différences rencontrées en cours de chemin, je me ferai un devoir de vous les souligner et de vous les expliquer!

Il vous faudra aussi un éditeur de texte convenable (je n’ai que de bons mots pour Notepad++).  Puis un logiciel de comparaison de fichier pourra aussi s’avérer très utile (je ne jure que par WinMerge). Ensuite, un logiciel de base de données de parties d’échecs (pour pouvoir construire une bibliothèque d’ouverture, lire et sauvegarder des parties et des positions, imprimer des diagrammes, etc comme SCID vs PC ou SCID) est un outil incontournable et vital pour ce projet. Finalement, un logiciel de compression de données et d’archivage comme 7-Zip (j’utilise principalement les formats zip, gz et 7z).

Dès que le programme sera en mesure de jouer une partie complète, il nous faudra un logiciel d’appariement (comme Arena ou CuteChess) pour automatiser les tests et le faire jouer contre d’autres programmes d’échecs : il nous faudra alors utiliser un des protocoles de communication disponibles  (Xboard ou UCI). Aussi, un autre incontournable, le programme d’extraction PGN-Extract pour les parties d’échecs en format PGN.

Finalement, si votre esprit s’égare parfois d’une idée à l’autre comme moi, la technique Pomodoro (et un minuteur Pomodoro approprié) sont plus que bénéfiques!

5-Les ressources

Pour apprendre à jouer aux échecs : l’article dans Wikipedia, les leçons d’échecs pour débutants en ligne, le WikiLivre Apprendre à jouer aux échecs.

Pour apprendre Squeak : le livre Squeak par l’exemple.

Pour apprendre Pharo : le livre Pharo par l’exemple.

Pour de l’aide en programmation (général) : developpez.net

Pour de l’aide en Squeak ou Pharo : sachez que les listes de diffusion (toutes en anglais) de Pharo et Squeak sont toujours très efficaces et rapides à répondre aux questions.  Qui plus est, un grand nombre d’utilisateurs de Squeak et Pharo sont situés en Europe et parlent français!  Évidemment nétiquette oblige, posez vos questions en anglais en premier lieu!

Pour toute autre aide pour ce projet : bien que les salons de discussions sur IRC (sur irc.freenode.net) soient habituellement en anglais, sachez que vous me trouverez toujours sur ##chessprogramming, #pharo ainsi que #squeak sous l’alias lamneth (et un peu partout sur IRC dans tous les salons reliés à Smalltalk de près ou de loin)!

6-Pourquoi le nom Gnochon?

En québécois, un gnochon désigne une personne idiote, stupide, imbécile.  C’est probablement ce dont aura l’air mon programme d’échecs au début!

7-Les étapes

Voici une liste assez complète de tout ce dont j’ai l’intention d’équiper mon programme.  J’ai divisé le projet en sept jalons afin de ne pas perde de vue l’objectif final ni de céder au découragement ou à l’éparpillement des efforts!

a) Avoir un programme qui génère tous les coups valides d’une position

Définir les classes de base : l’échiquier et les coups.
Définir le générateur de coups
Arriver à lire/écrire des fichiers EPD
Tester le générateur de coups avec perft
Définir un évaluateur de position de base (matériel seulement)
Définir un mécanisme de tri des coups (move ordering)

b) Avoir un programme capable de faire une recherche de plusieurs niveaux

Définir les tables de piece-square et bitmasks nécessaires/manquants
Définir la recherche alpha-beta (ou équivalent)
Définir le iterative deepening

c) Avoir un programme capable de jouer une partie complète

Définir un gestionnaire de temps de réflexion (pour respecter les cadences)
Gérer le protocole de communication utilisé (XBoard ou UCI, à décider)
Définir une fonction d’évaluation positionnelle
Arriver à lire/écrire des fichiers PGN

d) Raffiner l’élagage de l’arbre et accélérer la recherche

Implémenter le null move
Implémenter le concept de aspiration window
Implémenter le static exchange evaluator
Arriver à lire une bibliothèque d’ouverture (opening book)

e) Permettre au programme de chercher à une plus grande profondeur

Implémenter le futility pruning
Implémenter le late move reduction
Implémenter la quiescence search
Implémenter une table de killer move

f) Accélérer l’évaluation et permettre un meilleur jeu en finales

Ajouter le support pour les tables de fin de partie (tablebases)
Implémenter une table de transposition avec le Zobrist hashing
Implémenter une table de hachage pour la structure de pions
Implémenter le late move reduction

g) Mieux gérer les débuts et les fins de partie

Implémenter un évaluateur de fin de partie
Générer ma propre bibliothèque d’ouvertures avec les parties du CGR
Ajouter des algorithmes de gestion de fin de partie pour certaines finales

8-Et après?

Il y aura toujours d’autres fonctionalités et algorithmes qu’on pourra ajouter à n’importe quel programme d’échecs.  Que ce soit le contempt factor, le desperate move, la recherche en parallèle, le pondering, etc.  Tellement de trucs ont été essayés, tellement de papiers ont été écrits sur le sujet, tellement d’algorithmes et de structures de données ont été expressément développées dans le cadre des jeux d’échecs par ordinateur que c’est une inépuisable spirale qui bouffera tous vos temps libres si vous n’y faites pas attention!

L’important est d’y aller lentement, pas à pas.  Et surtout de tester.  De retester.  De tester encore. Et d’encore tester! À chaque étape, à chaque changement!

Parce que comme Ken Thompson l’a déjà dit, écrire un programme d’échecs a été une des choses les plus difficiles qu’il a faite.

ken-joe

Ken Thompson (à droite) et Joe Condon

Quand on sait que le gars a inventé des fontes d’échecs, qu’il a inventé le langage B et participé à l’élaboration du langage C, qu’il a développé Unix, qu’il a développé le système d’exploitation Plan 9, qu’il a généré les toutes premières tables de finales de parties d’échecs, qu’il a écrit Belle (programme d’échecs champion en 1978, 1980, 1981, 1982 et 1986), qu’il a co-inventé le langage Go, qu’il a élaboré les expressions régulières, implémenté les éditeurs de texte QED et Ed, qu’il a participé à la définition du standard du codage UTF-8, bien on se dit que si Ken Thompson a trouvé qu’écrire un programme d’échecs c’était difficle, c’est que ça doit l’être!

kenthompsonchessfonts

Les fontes d’échecs inventées par Ken Thompson

Note: pour une liste encore plus longue de tous les accomplissements de Ken Thompson, la page wikipedia en anglais en encore plus complète.  La liste des choses que ce génie de l’informatique a réalisé est tout simplement hallucinante!

 

 

Publicités

Dolphin

5 mars 2016

Pour ceux qui en auraient raté l’annonce, Dolphin Smalltalk (version 7) est maintenant open source.

Les packages/contributions sont maintenant sur GitHub ici, le wiki est ici,  le Gitter (l’équivalent de IRC mais pour GitHub) est ici, et finalement la branche de développement de Dolphin (image et machine virtuelle) sont ici.

Vous voulez convertir du code d’un autre dialecte de Smalltalk pour l’importer dans Dolphin?  Vous trouverez très certainement une implémentation de SIF (Smalltalk Interchange Format) sur Web pour faciliter la transition.

Sinon, si vous devez communiquer avec un autre dialecte de Smalltalk et échanger des données, il y a SIXX (Smalltalk Instance eXchange in XML).

Si vous développez sur Windows et pour Windows, je vous recommande très fortement de jeter un coup d’oeil à Dolphin!


MySQL en vrac (5)

16 février 2016

Un sondage sur le déploiment et la gestion de bases de données open source ici.

On vous demande votre utilisation des SQL Modes ici.

Une présentation sur PERFORMANCE_SCHEMA.

La taille du buffer pool : quelques précisions ici.

L’allocation de mémoire des buffers pour le performance schema dans MySQL 5.7 : quelques conseils.

La perte de données au démarrage de MySQL : des explications.


Dolphin Smalltalk 7

5 janvier 2016

Dolphin Smalltalk est maintenant open source! La présentation de la version 7 est ici.

Mais si, tout comme moi, vous possédez la version Dolphin X6 (Community Edition ou la version Pro) installée sur votre ordi, sachez qu’il existe (pour l’instant) quelques problèmes lors de l’installation de la version 7.  Les détails ici.


LibreOffice 4.4

7 février 2015

La version 4.4.0 de LibreOffice  est maintenant disponible!


FOSDEM 2015

2 février 2015

Excellent résumé des impressions sur FOSDEM 2015 ici.


Cryptol

4 mai 2014

Si vous êtes férus de cryptographie, vous devriez jeter un coup d’oeil au langage de programmation Cryptol.  C’est simple, efficace, minimaliste et open source!