Sunfish - Le Bottin des Jeux Linux

Sunfish

🗃️ Specifications

📰 Title: Sunfish 🕹️ / 🛠️ Type: Game
🗃️ Genre: Puzzle 🚦 Status: 06. Tested & Working
🏷️ Category: Puzzle ➤ Board Game ➤ Chess ➤ Engine ➤ CECP only 🌍️ Browser-based:
🔖 Tags: Puzzle; Board Game; Chess Engine; CECP Protocol 📦️ Package Name:
🐣️ Approx. start: 2014-02-09 📦️ Arch:
🐤️ Latest: 2021-01-02 🍥️ On Deb repo:
📍️ Version: Latest : (waiting) / Dev : 4af2b5d 📦️ Deb:
🏛️ License type: FOSS/Libre 📦️ RPM:
🏛️ License: GPL-3 📦️ AppImage:
🏝️ Perspective: Third person 📦️ Snap:
👁️ Visual: Text 📦️ Flatpak/Athenaeum:
⏱️ Pacing: Turn-Based ⚙️ Generic bin.: ✓
👫️ Played: Single 📄️ Source: ✓
🎖️ This record: 5 stars 📱️ PDA support:
🎖️ Game design: 5 stars 👫️ Contrib.: Goupil & Louis
🎰️ ID: 15546 🐛️ Created: 2019-02-24
🐜️ Updated: 2021-11-07

📖️ Summary

[fr]: Sunfish est une IA libre et multi-plateforme (en Python) pour le jeu d'échecs, en seulement 111 lignes de code et un niveau sans doute moyen (? ELO). Elle supporte les castings, les passants et les promotions, mais ne sait pas faire de promotion mineure ou de nulle par répétition. Elle communique avec le protocole CECP (les protocoles les plus courants sont CECP aka Winboard/Xboard, et UCI). Elle peut être utilisée directement en console (nécessite d'entrer les coordonnées des pièces) ou via une interface externe Winboard/Xboard (Pychess par exemple). [en]: Sunfish is a libre, cross-platform (Python-based) AI for chess, in only 111 lines of code and probably a medium level (? ELO). It supports castings, passers-by and promotions, but does not know how to make minor promotions or draws by repetition. It communicates with the CECP protocol (the most common protocols are CECP aka Winboard/Xboard, and UCI). It can be used directly from a console (requires entering part coordinates) or via an external Winboard/Xboard interface (Pychess for example).

🎥️ Videos

🎮️ Quelques exemples / Some examples (Showcase) :

🕸️ Links

🏡️ Website & videos
[Homepage] [Dev site] [Features/About] [Screenshots] [Videos t(202xxx) ts(202xxx) gd(202xxx) gu(202xxx) id(202xxx) r(202xxx) lp(202xxx) d(202xxx) g[fr](202xxx) g[de](202xxx) g[ru](202xxx) g[pl](202xxx) g[cz](202xxx) g[sp](202xxx) g[pt](202xxx) g[it](202xxx) g[tr](202xxx)] [WIKI] [FAQ] [RSS: waiting] [Changelog 1 2 3]

💵 Commercial : (empty)

🍩️ Resources
(empty) :
🛠️ Technical informations
[Open Hub] [PCGamingWiki] [MobyGames] [Chess Programming Wiki] [Computer Chess Rating Lists (CCRL)]

🐘 Social
Devs (Sunfish Team [fr] [en]) : [Site 1 2] [mastodon] [twitter] [YouTube] [Interview 1 2]
Devs (Thomas Dybdahl Ahle (thomasahle, lobais) 1 2] [fr] [en]) : [Site 1 2] [twitter] [YouTube] [LinkedIn] [Interview 1 2]
Game : [Blog] [Forums] [mastodon] [twitter] [PeerTube] [YouTube]

🐝️ Related
[Wikipedia (MTD-f) [fr] [en] [de]]

📦️ Misc. repositories

🕵️ Reviews
[metacritic]

📰 News / Source of this Entry (SotE) / News (SotN)


🐘 Social Networking Update (on Mastodon)

🕹️ Title:
🦊️ What's:
🏡️
🐣️
🔖 #linux

🐧 Update:
💼️
📌️ Changes:
📖 Our entry: https://bit.ly/bottinLightOn
🐘 From:
🏝️ http://youtu.be/
🕵️ http://youtu.be/
🕹️ http://youtu.be/
🐧 http://youtu.be/

Source of this Entry:

📕 Description [fr]

Une IA pour les échecs en seulement 111 lignes de code, par la Sunfish Team, initié par Thomas Dybdahl Ahle (thomasahle, lobais).
En Python.

Sunfish est une IA libre et multi-plateforme (en Python) pour le jeu d'échecs, en seulement 111 lignes de code et un niveau sans doute moyen (? ELO). Elle supporte les castings, les passants et les promotions, mais ne sait pas faire de promotion mineure ou de nulle par répétition. Elle communique avec le protocole CECP (les protocoles les plus courants sont CECP aka Winboard/Xboard, et UCI). Elle peut être utilisée directement en console (nécessite d'entrer les coordonnées des pièces) ou via une interface externe Winboard/Xboard (Pychess par exemple).

Sunfish est un moteur d’échecs simple, mais puissant, écrit en Python, principalement à des fins pédagogiques. Sans tables ni interface simple, il ne prend que 111 lignes de code!

Sunfish étant petit et cherchant à être simple, le code constitue une excellente plate-forme d’expérimentation. Les gens l'ont utilisé pour tester des algorithmes de recherche parallèles, expérimenter des fonctions d'évaluation et développer des programmes d'échecs d'apprentissage en profondeur. Forkez-le aujourd'hui et voyez ce que vous pouvez faire!

Caractéristiques

• Construit autour de l'algorithme de recherche bi-MTD simple, mais extrêmement efficace.
• Rempli d'astuces de moteur d'échecs classiques et modernes pour un code plus simple et plus rapide.
• Fonction d’évaluation facilement adaptative par le biais de "Piece Square Tables" (NdT : une table permettant d'assigner des valeurs à des pièces spécifiques sur des carrés spécifiques).
• Utilise des collections Python et des structures de données standard pour plus de clarté et d’efficacité.

Limites

Sunfish supporte les castings, les passants et les promotions. Il ne fait cependant pas de promotion mineure ou de nulle (NdT : ex aequo) par répétition. Toutes les entrées doivent être effectuées avec une notation simple «à deux coordonnées», comme indiqué sur la capture d'écran.

Vous pouvez essayer de renforcer Sunfish de plusieurs façons. Tout d'abord, vous pouvez changer la représentation du tablier en un tableau mutable et ajouter un moyen rapide d'énumérer les pièces. Ensuite, vous pouvez implémenter une génération de capture dédiée, une détection de contrôle et vérifier les évasions. Vous pouvez également tout déplacer vers des bitboards, implémenter des parties du code en C ou expérimenter la recherche parallèle !

L’autre moyen de renforcer Sunfish consiste à lui donner plus de connaissances en matière d’échecs. La fonction d'évaluation actuelle utilise uniquement des tables de pièces carrées - elle ne fait même pas la distinction entre une partie intermédiaire et une partie finale. Vous pouvez également expérimenter davantage d'élagage - actuellement, seul le déplacement nul est effectué - et aucune extension n'est utilisé. Enfin, Sunfish pourrait tirer parti d’une commande de mouvements plus avancée, MVV/LVA et SEE, peut-être ?

Pourquoi Sunfish?

Le nom Sunfish fait en réalité référence au poisson-lune pygmée, qui fait partie des très rares poissons à commencer par les lettres «Py». L'utilisation d'un poisson est dans l'esprit de grands moteurs tels que Stockfish, Zappa et Rybka.

En termes de patrimoine, Sunfish emprunte beaucoup plus à Micro-Max de Geert Muller et PyChess.

📕 Description [en]

"A libre, cross-platform AI for chess, in only 111 lines of code and probably a medium level" (Serge Le Tyrant, Le Bottin des Jeux Linux / The Linux Games Book).

Sunfish is a simple, but strong chess engine, written in Python, mostly for teaching purposes. Without tables and its simple interface, it takes up just 111 lines of code!

Because Sunfish is small and strives to be simple, the code provides a great platform for experimenting. People have used it for testing parallel search algorithms, experimenting with evaluation functions, and developing deep learning chess programs. Fork it today and see what you can do!

Features

• Built around the simple, but deadly efficient MTD-bi search algorithm.
• Filled with classic as well as modern 'chess engine tricks' for simpler and faster code.
• Easily adaptive evaluation function through Piece Square Tables.
• Uses standard Python collections and data structures for clarity and efficiency.

Limitations

Sunfish supports castling, en passant, and promotion. It doesn't however do minor promotion or draws by repetition. All input must be done in simple 'two coordinate' notation, as shown in the screenshot.

There are many ways in which you may try to make Sunfish stronger. First you could change to board representation to a mutable array and add a fast way to enumerate pieces. Then you could implement dedicated capture generation, check detection and check evasions. You could also move everything to bitboards, implement parts of the code in C or experiment with parallel search!

The other way to make Sunfish stronger is to give it more knowledge of chess. The current evaluation function only uses piece square tables - it doesn't even distinguish between midgame and endgame. You can also experiment with more pruning - currently only null move is done - and extensions - currently none are used. Finally Sunfish might benefit from a more advanced move ordering, MVV/LVA and SEE perhaps?

Why Sunfish?

The name Sunfish actually refers to the Pygmy Sunfish, which is among the very few fish to start with the letters 'Py'. The use of a fish is in the spirit of great engines such as Stockfish, Zappa and Rybka.

In terms of Heritage, Sunfish borrows much more from Micro-Max by Geert Muller and PyChess.

🚧️ Installation [fr]

INSTALLATION :

(✔ v. ebe027b) ➥ Installation à partir du binaire du jeu :

Aucune installation n'est nécessaire, un container python est disponible.


LANCEMENT DU JEU :

• En console dans son répertoire racine lancez : $ python sunfish.py


Nota :
• Les caractères ASCII par défaut représentent bien les pièces d'échecs, mais ils sont un peu petits. Néanmoins sous certaines consoles (toutes ?), le maintien de la touche Ctrl + la molette de la souris permet d'agrandir l'affichage, ce qui fait que l'on peut y jouer sans interface externe.
• Si vous souhaitez y jouer via une interface externe, choisissez-en une utilisant le protocole XBoard/CECP (Pychess par exemple).

🔍️ Test [fr]

🕵️ Test (ebe027b) par goupildb (config. : Debian Sid 64-bit):

(test de fonctionnement)
(Doc d'installation créée à l'occasion de ce test)

🕹️ Facilité d'installation

En console dans son répertoire racine il suffit de lancer : $ python sunfish.py
C'est simple et rapide.
L'intérêt de ce petit moteur - outre celui d'apprendre le fonctionnement des moteurs pour les programmeurs (il tient en 111 lignes de code), est de disposer d'un petit moteur jouable en console.
Très bien.
Un grand bravo et merci à ses auteurs !