Menu principal :
Greko 2015 ML
L'ancienne version programmable
J'ai découvert fortuitement, en lisant un article sur les joueurs simulés de Lucas Chess, que les anciennes versions de GreKo permettaient de créer de nouvelles personnalités. La dernière à le proposer aura été la 2015 ML(1). Cette version était créditée d'une force de 2600 Elo -
GreKo est naturellement un moteur plutôt tactique et offensif, conçu davantage pour l'attaque, avec un style qui ressemble à celui de Kasparov. Mais contrairement à beaucoup de forts moteurs tactiques de sa génération, l'évaluation pèse d'un bon poids dans le choix d'un coup. C'est donc un moteur polyvalent, qui pourra être utilisé avec succès pour créer des personnalités fortement positionnelles ou même défensives.
Pour les généralités sur GreKo, voir la page dédiée à ce moteur. Cet article a pour but de souligner les particularités de la version 2015, notamment en matière de programmation de personnalités.
(1) ML signifie "Machine learning". Autrement dit, il s'agit d'un module d'apprentissage automatique qui est activé depuis une commande console. Je ne l'ai pas utilisé, je signale le fait pour être complet. Notez que c'est la seule différence entre GreKo 2015 et GreKo 2015 ML. Pour en savoir plus, lisez le fichier "history.txt" qui se trouve à la racine du répertoire du moteur.
(2) Je ne parle pas de GreKo 2021 NNUE, version expérimentale à intelligence hybride (mi-
Plan de l'article
Téléchargement
Les paramètres de la version 2015
Paramètres généraux
Paramètres de la recherche
Paramètres de personnalisation
Programmation de personnalités
Six personnalités type
Bibliothèques d'ouvertures
Procédure avec Arena
Arena GreKo 2015
Gérer la force de GreKo 2015
Slider Strength vs UCI_Elo
Normaliser UCI_Elo
Téléchargement
GreKo 2015 ML est téléchargeable avec toutes les autres versions du moteur sur le site de l'auteur. Je précise que la version GreKo 2015 est identique à la version 2015 ML sauf sur un point : elle n'intègre pas le module d'apprentissage. Vous pouvez donc l'utiliser de la même façon et vous obtiendrez les mêmes résultats.
Les paramètres de la version 2015 ML
Le menu de configuration de GreKo 2015 est beaucoup plus chargé que celui de la version la plus récente du moteur. Pas de quoi paniquer : l'essentiel concerne la programmation de personnalité et ce n'est pas tellement compliqué. Je rappelle que pour l'interface Arena, on y accède depuis le menu "Modules" > "Modules 1" (ou "Module 2") > "Configurer" ou Ctrl+1 . N'oubliez pas toutefois que le moteur doit déjà être sélectionné. Si ce n'est pas le cas, ouvrir le menu "Modules" > "Gérer" (ou F11) puis de l'ongler "Choix", sélectionner un ou deux des moteurs installés dans l'interface et validez par "Ok" ou "Appliquer".
Voici comment ce menu se présente dans Arena : 
Il y a trois paramètres généraux, des paramètres de réglage de l'évaluation et des paramètres de réglage de la recherche.
Paramètres généraux
Il s'agit de Hash, MultiPv et LimitKnps. Seul Hash est vraiment important à connaître.
Hash : une classique table de hachage à régler en taille. Par défaut elle à 32 Mo, valeur basse. Vous pouvez certainement la porter sans soucis à 128 Mo. 256 Mo est encore mieux mais il est inutile d'aller au delà car le gain serait pratiquement nul.
MultiPv : le Multi-Pv est désactivé par défaut (sur "1") et devrait le rester. Demander au moteur de suivre plusieurs lignes à la fois équivaut à abaisser fortement sa force. Pour seulement une deuxième ligne, la chute est déjà de 200 points Elo. Le Multi-Pv a d'ailleurs été purement et simplement supprimé des versions postérieures de GreKo.
LimitKnps : il est possible ici de limiter le nombre de noeuds explorés par le moteur. Par défaut le champ est à 9999 (centaines de Nps), c'est à dire en fait sans aucune limitation. LimitKnps n'est d'aucun intérêt si on utilise GreKo comme un moteur UCI. En effet, il est possible de réduire la force depuis l'interface grâce à la commande UCI_Elo (ici entre 1600 et 2400 - ou à la force maximale). Avec Arena, menu "Niveau" > "Limite Elo de la force de jeu".
Moteur moderne, GreKo est doté d'une recherche performante, assistée de nombreuses heuristiques d'élagage - procédés qui éliminent les branches non-productives de l'arborescence des coups. Certaines de ces heuristiques sont réglables, disons, pour simplifier, en intensité ; car un élagage vigoureux augmente la force mais diminue la qualité de jeu, certaines positions peuvant être très mal comprises et éliminées à tort par les routines d'élagage. Ici, il s'agit principalement de Lazy Evaluation (LazyEvalMargin), Null Move Pruning (MoveRéduction, MoveMinDepth, PruningMargin) et Late Move Reduction (LmrMinDepth, LmrMinMoveNumber et Qchecks).
Les paramètres par défaut constituent un choix optimal conjuguant un niveau de force élevé avec une excellente qualité de jeu. Je conseille de ne pas les modifier.
Paramètres de personnalisation
Nous entrons ici dans le vif du sujet qui nous intéresse. Voici les sept paramètres réglables permettant d'influer sur le style du moteur :
Material
Ce paramètre permet de régler la valeur donnée par le moteur au matériel. Valeur par défaut : 50. Plus haut : le moteur devient plus matérialiste, sacrifie moins facilement. Plus bas : le moteur sacrifie plus facilement pour l'initiative ou pour une compensation.
BoardControl
Règle le souci du moteur pour contrôler les cases clés et les cases centrales. Valeur par défaut : 60. Plus haut : le moteur apprécie davantage de prendre possession de l'espace et restreindre l'espace de l'adversaire. Plus bas : le contrôle spatial devient moins important.
Mobility
Ce paramètre affecte l'évaluation de la mobilité, c'est-à-dire la quantité de mouvements disponibles pour chaque pièce. Attention toutefois : l'auteur indique que si l'on choisit une valeur très élevée pour Mobility, il va avoir tendance à devenir un "grinder" : il essaiera de maximiser sa mobilité mais aussi d'étouffer son adversaire, en limitant ses mouvements.
Je n'avais pas prêté assez d'attention à cette phrase. Pour beaucoup de moteurs, Mobility signifie essentiellement : "plus mes pièces ont de cases légales, mieux c'est". Donc la valeur de la position augmente si le moteur augmente sa mobilité. Et c'est tout. Un autre paramètre prendra en charge le niveau de restriction de l'adversaire.
Pourtant, la remarque de Medvedev signifie clairement que GreKo code la valeur différemment. C'est plutôt : Mobilité = mobilité de mes pièces - mobilité des pièces adverses. Plus GreKo a de liberté, plus l'adversaire a de liberté. Donc, le moteur va aussi tenter de réduire la mobilité adverse. Reprenons à la lumière de cette découverte :
Mobility plus haut : le moteur devient plus prophylactique et recherche les positions contenues. Sa préférence pour l'espace se traduit par : moins de sacrifices, pression lente, beaucoup de manœuvres et conversion technique en finale. Le jeu est plus lent, plus restrictif. Un style Karpovien, en somme.
Mobility plus bas : le moteur va moins se soucier de l'activité de ses propres pièces et aussi moins de limiter l'adversaire. Le jeu sera plus direct, plus opportuniste, plus tactique, moins prophylactique.
En résumé, nous avons presque une inversion du sens.
PawnStruct
Règle le souci du moteur d'avoir une bonne structure de pions. Plus la valeur est élevée, plus le moteur est attentif à éviter les trous, les pions doublés, arriérés, isolés...
PawnPassed
Modifie la tendance du moteur à créer les conditions pour obtenir un ou plusieurs pions passés. Par défaut 60. Plus haut : le moteur cherchera à obtenir des pions passés au détriment d'autres facteurs offensifs.
KingSafety
Modifie le comportement du moteur concernant la sécurité de son roi et de celui de l'adversaire. Par défaut 50. Plus haut : le moteur sera plus prudent et consacrera plus d'efforts à la protection de son roi (posture défensive). Plus bas : le moteur va privilégier la mobilisation de ses pièces pour l'attaque de l'adversaire.
DrawScore
Détermine l'attitude du moteur vis-à-vis de la nulle. Plus le chiffre est élevé, plus la personnalité sera réticente à accepter la nulle dans une position qui lui est défavorable. C'est l'équivalent du paramètre Contempt que proposent beaucoup de moteurs. Plage de réglage entre -1200 (hyper-frileux) et + 1200 (ne renonce jamais). Par défaut : 0.
Evidemment, c'est assez léger ; mais c'est du léger avec lequel on peut faire quand même pas mal de cuisine et dessiner quelques grands traits de caractères. Je propose ci-dessous 5 profils qui vous aideront à développer vos propres personnalités. 
Programmation de personnalités
Six personnalités type
Pour vous aider à paramétrer correctement des personnalités alternatives je vais vous proposer 6 profils type que vous pourrez faire évoluer à votre convenance. Avant cela, une précision importante : plus les paramètres choisis s'éloignent de la personnalité neutre* plus le moteur perdra en force. J'ai évalué grossièrement la baisse de niveau de chaque personnalité. Celle-ci sera plus sensible dans les niveaux de force élevés. Il faudrait sans doute que vous en teniez compte en choisissant un niveau UCI_Elo.
Le dynamique offensif
Material = 40 (accepte volontiers les sacrifices)
BoardControl = 70 (pression centrale, domination spatiale, initiative)
Mobility = 40 (activité sans obsession de restreindre l'adversaire)
PawnStruct = 45 (faiblesse tolérée sans laxisme)
PawnPassed = 60 (attentif aux pions passés sans onsession)
KingSafety = 55 (prudent mais pas parano).
Drawscore = 300 (combatif mais pas suicidaire)
Nous obtenons un joueur dynamique et combatif moderne, pas romantique. Vous remarquerez que nous sommes très proche du réglage par défaut de GreKo, qui est souvent comparé à Kasparov.
Perte de force moyenne : entre 20 et 60 points Elo
Le Stratège positionnel
Material = 60 (jeu matérialiste, sacrifices bien calculés)
BoardControl = 70 (fort contrôle de l'espace)
Mobility = 70 (mobilité très fortement restrictive)
PawnStruct = 60 (structure forte)
PawnPassed = 65 (fort respect pour les pions passés)
KingSafety = 65 (roi bien abrité)
Drawscore = -300 (préfère sécuriser la nulle)
Le jeu est calme, la pression plus positionnelle que tactique, les finales sont techniques ; pas de sacrifices “romantiques”, mais peut punir un adversaire trop optimiste. Ressemble à : Karpov.
Perte de force moyenne : entre 20 et 70 points Elo
L'attaquant romantique
Material = 35 (forte propension à sacrifier)
BoardControl = 60 (forte volonté de maîtrise de l'espace)
Mobility = 30 (mobilité favorable à l'initiative)
PawnStruct = 35 (accepte les structures moches si l'attaque compense)
PawnPassed = 50 (intérêt moyen pour les pions passés)
KingSafety = 40 (l'activité privilégie l'attaque, ce qui suppose un roi plus exposé).
Drawscore = 700 (n'abandonne pas facilement)
Un style spectaculaire, qui sacrifie facilement, cherche les complications mais perd en force pure. Un Tal light.
Perte de force élevée : entre 80 et 200 points Elo (les paramètres offensifs extrêmes entraînent une chute de force importante).
Le joueur pragmatique
Material = 55 (matérialiste sans excès)
BoardControl = 60 (bon contrôle de l'espace)
Mobility = 45 (mobilité favorisant légèrement l'activité)
PawnStruct = 60 (structure solide)
PawnPassed = 60 (attention notable aux pions passés)
KingSafety = 60 (roi bien protégé)
Drawscore = -100 (pas frileux mais pas gambler non plus=
Un style propre, rationnel, privilégiant modérément la sécurité positionnelle au chaos tactique. Rappelle : Euwe.
Perte de force faible : entre 0 et 20 points Elo (très proche de la personnalité neutre).
Le technicien des finales
Material = 60 (garde l'avantage matériel)
BoardControl = 55 (bon contrôle de l'espace sans excès)
Mobility = 50 (jeu neutre)
PawnStruct = 70 (structure très solide)
PawnPassed = 65 (les pions passés sont très appréciés)
KingSafety = 65 (roi en sécurité, prêt à centraliser en finale)
Drawscore = -400
Ce style recherche les petites faiblesses sans s'exciter tactiquement. Il massifie la position et convertit patiemment en finale. Un Carlsen technique.
Perte de force assez faible : entre 10 et 30 points Elo
Le "classique moderne"
Material = 50
BoardControl = 50
Mobility = 50
PawnStruct = 50
PawnPassed = 50
KingSafety = 50
Drawscore = 0
Eh oui, c'est le réglage totalement neutre de GreKo, qui, je le rappelle, n'est pas le réglage par défaut du moteur. C'est le joueur équilibré, sobre, qui applique les principes du jeu sans parti pris. Ni boa, ni pyromane, ni maximaliste, simplement raisonnable. C'est Boris Gelfand, l'échiquier sans émotion.
Pas de perte de force (c'est la personnalité de référence).
* J'ignorai si la référence devait être la personnalité neutre ou la personnalité par défaut. Un tournoi de 100 parties entre les deux a tranché la question. La personnalité optimisée au maximum est la personnalité neutre. La personnalité par défaut est biaisée vers un style plus dynamique et plus offensif qui la rend plus fun mais légèrement moins forte (j'estime la chute entre 30 et 40 Elo). 
GreKo utilise une petite bibliothèque interne contenue dans le fichier "book.bin". Elle est très légère (6 Ko), peu profonde (elle dépasse rarement 5 ou 6 coups) et joue des ouvertures courantes. Malgré les apparences, elle n'est pas au format Polyglot. Aucune autre bibliothèque "*.bin" n'est acceptée. C'est un peu dommage car nous aimerions pouvoir doter chaque personnalité d'une bibliothèque correspondant à son style.
L'autre difficulté est qu'elle n'est pas débrayable. Avec Arena par exemple, il ne m'a pas été possible de lier une autre bibliothèque au module autrement qu'en activant la bibliothèque principales d'Arena. Ce n'est pas trop grave. Au moins le moteur ne sera pas trop fort dans l'ouverture.
Procédure avec Arena
GreKo a le même défaut que CDrill : rien n'est prévu pour sauvegarder une personnalité modifiée ; du moins lorsque le moteur fonctionne avec le protocole UCI. Pour créer une nouvelle personnalité, le seul moyen est de modifier les paramètres d'un GreKo 2015 déjà installé depuis son menu de configuration. Par contre, si c'est le protocole de communication xboard qui est utilisé, les nouveaux paramètres seront sauvegardés dans un fichier "ini" et il sera possible de les réutiliser. J'y reviens plus loin, dans une section séparée.
Je ne peux pas fournir une procédure pour toutes les interfaces avec lesquelles GreKo pourrait être utilisé, mais je vais le faire pour Arena, interface particulièrement bien adaptée aux moteurs programmables. De plus je fournirai plus bas une version portable d'Arena avec toutes mes personnalités déjà installées et dotées de nombreuses bibliothèques.
Pour installer GreKo dans Arena, suivre la procédure habituelle : menu "Modules" > "Installer nouveau module" et allez chercher le fichier "GreKo.exe". A partir de là, deux possibilités :
➤Créer plusieurs personnalités en utlisant le même "GreKo.exe". Lorsque vous demandez à Arena d'installer plusieurs fois le même moteur, l'interface vous propose en effet un nom provisoire, comme "GreKo [001]", "GreKo [002]", "GreKo [003]"... Vous pourrez ensuite pour chacun d'eux d'adapter les réglages de personnalité et donnner aux copies des noms plus explicites. L'inconvénient de cette solution est que le moteur utilisera toujours la même bibliothèque.
➤Dupliquer GreKo dans le dossier "Egines" d'Arena autant de fois qu'il y a de personnalités puis installer toutes ces copies séparément. Ensuite, doter chacun de ces moteurs d'une nouvelle personnalité et d'une bibliothèque dédiée. C'est une solution plus longue à mettre en oeuvre mais c'est la meilleure. Voyons celle-ci en détail...
Un moteur GreKo par personnalité avec Arena
Voyons comment cela fonctionne en supposant que nous voulions intégrer une déclinaison de GreKo dotée d'une personnalité appelée "Pragmatique" :
Préparation
➤Faire une copie du dossier de GreKo dans le répertoire "Engine" d'Arena en lui donnant un nom explicite. Par exemple "Pragmatique".
➤Renommer le fichier "GreKo.exe" en "Pragmatique.exe".
Prise en compte du nouveau moteur par l'interface
Menu "Modules" > "Installer nouveau module". Utilisez le sélecteur de fichiers pour aller chercher le nouveau moteur, ici "Pragmatique.exe". En principe, "UCI" est sélectionné. Cliquez sur "Ok" puis acceptez de "démarrer le nouveau module". GreKo version "Pragmatique" sera maintenant disponible dans la liste des moteurs installés dans Arena.
Configuration du nouveau moteur
A cette étape, on règle les paramètres généraux du moteur et on modifie la personnalité du moteur : menu "Modules" > "Module 1" > "Configurer" ou Ctrl +1.
➤Réglez la taille de la table de Hash en fontion de vos besoins.
➤Changez les valeurs des critères de personnalisation en recopiant ceux de la personnalité Pragmatique, ci-dessus (ou une des votres, bien sûr !)
➤Cliquez sur "Ok".
Utilisation
Pour jouer avec la personnalité Pragmatique : menu "Modules" > "Gérer" ou F11. Sélectionnez l'onglet "Choix" et choisissez le moteur "Pragmatique" dans la liste. Si vous ne connaissez pas encore Arena, je vous invite à lire le mode d'emploi que je lui consacre sur ce site.
Bien sûr, il faut recommencer tout le processus pour chaque personnalité.
Arena GreKo
Pour ceux qui aimeraient une interface prête à l'emploi avec toutes les déclinaisons du moteur déjà installées, je vous propose de télécharger ici une version portable d'Arena avec les six personnalités décrites ci-dessus, plus la personnalité par défaut du moteur. Chaque personnalité a sa table de Hash fixée à 32 Mo et ses paramètres préréglées. L'interface est francisée et tout ce qui était superflu a été supprimé, notamment les autres moteurs, les bibliothèques d'ouvertures abk de l'interface, la database O-Deville, etc.
Par contre, le dossier "books" contient une nouvelle bibliothèque: "Chessterfield.abk". Peu profonde (12 1/2 coups) mais très large (127.000 entrées), elle a été obtenue à partir de 80.000 parties de 24 des meilleurs joueurs mondiaux de juin 2024. Généraliste témoignant des pratiques modernes en matière d'ouvertures, j'en ai fait la bibliothèque par défaut de l'interface et toutes les personnalités l'utilisent.
Si vous souhaitez qu'une personnalité utilise plutôt la mini-bibliothèque interne : menu "Biblio." > "Gérer" et décocher "Utiliser biblio. principale d'Arena".
Bref, c'est une Arena uniquement pour GreKo 2015 !
Pour obtenir l'archive d'Arena Greko 2015, il vous suffira de remplir le formulaire ci-dessous pour donner une adresse mail valide ; le lien de téléchargement vous sera aussitôt renvoyé... C'est totalement gratuit et sans engagement.
Pour l'utiliser, décompressez l'archive où vous voulez sur votre disque dur et créez un raccourci vers le fichier "Arena.exe" du répertoire principal. L'interface devrait fonctionner sans problème sur n'importe quel PC / Windows.
La cadence a été fixée sur un temps fixe de 1 seconde par coup, de façon a ce que vous puissiez l'utiliser avec UCI_Elo selon la norme définie plus bas (voir "Gérer la force de GreKo"). Rappel : pour régler UCI_Elo, menu "Niveaux" > "Limite ELO de la force de jeu".
Gérer la force de GreKo 2015
Slider Strength vs UCI_Elo
Il est étonnant de constater que la dernière version de GreKo, GreKo 2021, emploie un système de réduction de force à l'ancienne (Strenght) alors que la version 2015, beaucoup plus vieille, dispose d'un module UCI_Elo valide. Il est probable que l'auteur ait voulu simplifier le code et limiter la maintenance. Avec UCI_Elo, chaque nouvelle version nécessite une nouvelle longue procédure de recalibration. Un slider Strength interne est relatif, donc toujours valide.
Cela nous ramène aux problèmes soulevés par le module UCI_Elo. Lui, il n'est pas relatif ! Le programmeur l'a testé avec un ordinateur, le sien, un contrôle de temps (souvent blitz), 1, 2 ou 4 cœurs, une table de hachage d'une certaine taille...
Or, la mesure n'est vraiment valable que pour ces conditions là. Chez vous, c'est forcément différent. Je vous propose bien sûr de l'utiliser mais nous allons le faire sur la base d'un protocole d'usage simplifié...
Greko 2021 tutoie les 2900 Elo et pourrait être utilisé comme moteur d'analyse. Avec 300 Elo de moins, GreKo 2015 sera parfait, lui, pour un usage purement "loisir". Voyez-le comme un partenaire de jeu très fun, au style dynamique et d'allure humaine. Mais qui est quand même bien plus fort que vous - c'est probable. Pour cela, nous allons employer UCI_Elo en figeant un maximum des conditions initiales. La version 2015 n'est pas multi-threads, ne gère pas la pondération ni l'accès à des tables de finales. Donc rien à faire de ce côté. Par contre, la table de Hash sera toujours à 32 Mo.
Utilisez la bibliothèque interne, très légère, ou l'une des bibliothèques de 6 coups que je propose.
Quant au contrôle de temps, il sera invariablement un temps fixe de une seconde par coup.
Je vous entend déjà me dire : "en une seconde, GreKo n'a pas le temps d'être intelligent !" Détrompez-vous. GreKo est un moteur moderne. En une seconde, sur un PC correct, il explore de 1 à 2 millions de nœuds et peut atteindre de 10 à 13 demi-coups de profondeur utile. Ce sera suffisant pour voir les tactiques simples et moyennes, détecter vos plus grosses bévues, trouver des coups tout à fait respectables en positions normales...
Choisissez ensuite une valeur pour UCI_ELo (entre 1600 et 2400 Elo) et affrontez le moteur dans une partie amicale, c'est-à-dire sans contrainte de temps pour vous (ou avec des contraintes de temps améliorées). Si nécessaire une échelle utile :
UCI_Elo = 1600
Ce niveau s'adresse aux amateurs sérieux et aux joueurs de club débutants et débutants avancés (~1400-1600 Elo humain). Le moteur sera un adversaire agréable, humainement crédible qui développera correctement, respectera les principes d'ouvertures, maîtrisera les tactiques simples à deux coups de profondeur. Il ratera parfois ses tactiques à trois coups, sera peu prophylactique, comprendra mal les menaces indirectes, aura du mal à assurer la transition entre le milieu de jeu et la finale. Enfin, il sera très médiocre en finale.
UCI_Elo = 1800
Ce niveau s'adresse aux joueurs de club moyens (~1700-1850 Elo humain) qui veulent s'entraîner sans se faire écraser. Le moteur restera un partenaire d’entraînement amical très réaliste. Il mènera à bien les tactiques simples et moyennes, défendra correctement, développera des plans basiques et ses pièces seront assez bien coordonnées. Evidemment, il ne sera pas très fin, ni stratégiquement, ni tactiquement. Et il aura du mal avec les finales complexes.
UCI_Elo = 2000
Le niveau pour bon joueur de club (~1900-2050 Elo humain) voulant un vrai combat mais pas contre une machine inhumaine. Le moteur sera encore un adversaire sérieux, mais battable avec du bon jeu. Ses limitations concerneront principalement l'aptitude à comprendre des positions complexes et à échafauder des plans de long terme. Il aura encore du mal en finale.
UCI_Elo = 2200
Ce cran s'adresse à un public de forts joueurs de club (~2100–2250 Elo humain). GreKo sera pour eux un adversaire exigeant, mais encore “humain” dans ses erreurs. Il sera assez bon dans tous les compartiments du jeu : tactique, défense, compréhension de la position, finale... Il ne fera pas ou peu de fautes grossières.
UCI_Elo = 2400
Le niveau pour joueurs experts (~2300–2400 Elo humain) qui trouveront ici un partenaire d'entraînement de haut niveau mais pas monstrueux. Il sera bon dans tous les compartiments du jeu. La différence d'avec un moteur à plein régime concernera principalement sa moindre profondeur d'exploration tactique et stratégique.
Rob Rob, juillet 2021 (Article entièrement revu en janvier 2025)