Ein Leitfaden für die praktische Nutzung von Lc0/Leela Chess Zero in Nibbler – basierend auf den Blogartikeln von lczero.org und der Videoserie sowie den Blogbeiträgen von GM Matthew Sadler
Warum dieser Artikel?
Wer Engines nur zur „objektiven“ Stellungsbewertung nutzt, verschenkt seit Sommer 2023 eine der spannendsten Neuerungen der Engine-Welt: WDL Contempt in Lc0 (Leela Chess Zero). Die Funktion wurde mit Version 0.30 eingeführt und in Version 0.31 deutlich verbessert. Sie erlaubt es, Leela nicht mehr „objektiv“ rechnen zu lassen, sondern gezielt aus der Perspektive eines bestimmten Spielstärkeunterschieds – und damit realistische, kämpferische Eröffnungsideen für die eigene Vorbereitung zu generieren, statt nur die theoretisch „beste“ (und oft drittrouten-lastige) Hauptvariante.
Der englische Großmeister Matthew Sadler hat das Thema in einer sehr sehenswerten Blog- und Videoserie („Crazy Leela“) praktisch vorgeführt – unter anderem mit einer verrückten g4-Idee im Grob-Halbslawisch, aggressiven Ideen gegen Sizilianisch-Najdorf mit 6.Bg5 und einer Neuinterpretation des Anti-Sveshnikov. Dieser Leitfaden fasst die technischen Hintergründe (lczero.org-Blog) und die praktische Einrichtung (Sadlers Anleitung) für unsere Vereinsmitglieder zusammen.
1. Was macht WDL Contempt eigentlich?
Lc0 gibt seit Version 0.21 (2019) keine einfache Zentipawn-Bewertung mehr aus, sondern eine WDL-Vorhersage(Win/Draw/Loss – Gewinn/Remis/Verlust-Wahrscheinlichkeiten). WDL Contempt baut darauf auf und rechnet diese Wahrscheinlichkeiten so um, dass sie zu einer bestimmten Spielstärke-Konstellation passen.
Die Grundidee: Man sagt Leela sinngemäß „Ich spiele Weiß gegen einen 400 Elo schwächeren Gegner. Zeig mir Ideen, die meine Gewinnchancen gegen genau diesen Gegner maximieren“. Leela verschärft dann während der Suche gezielt die vorgeschlagenen Züge – nicht durch eine veränderte „objektive“ Bewertung, sondern dadurch, dass die Suche selbst nach Zügen sucht, die bei der angenommenen Fehleranfälligkeit des schwächeren Gegners die höchste Gewinnwahrscheinlichkeit versprechen.
Zwei Dinge sind dabei wichtig:
- Es ist kein reiner „Zufallszug“-Generator. Die Vorschläge sind weiterhin fundiert – sie berücksichtigen nur zusätzlich, dass der (angenommene) Gegner öfter Fehler machen wird, je komplizierter die Stellung ist.
- Die Spielstärke der Suche selbst wird nicht reduziert. Leela „spielt“ also nicht schwächer, sie sucht nur nach Zügen, die bei entsprechend geringerer gegnerischer Präzision am meisten bringen. Taktische Kombinationen weit oberhalb des simulierten Spielstärkeniveaus werden trotzdem gefunden.
Der entscheidende Unterschied zu klassischen „Contempt“-Implementierungen in anderen Engines (z. B. Stockfish früher, Komodo): Weil Lc0 von Natur aus WDL-Wahrscheinlichkeiten statt einer einzelnen Zahl ausgibt, kann Contempt hier direkt auf Basis realer Gewinn-/Remis-/Verlustchancen und einer echten Elo-Kalibrierung arbeiten – nicht nur als pauschaler Bonus/Malus auf die Bewertung.
2. Voraussetzungen
- Nibbler als GUI (die von Sadler und der Leela-Community empfohlene Oberfläche für dieses Feature)
- Eine aktuelle Lc0-Installation ab Version 0.30, idealerweise 0.31.x (spätere Versionen korrigieren wichtige Fehler im Elo-Modell, siehe Abschnitt 5)
- Ein aktuelles Netzwerk (z. B. von der lczero.org-„Best Nets“-Seite)
- Idealerweise Nibbler ab Version 2.4.5, dann lassen sich die wichtigsten Parameter direkt im Menü einstellen (Abschnitt 3); bei älteren Versionen bleibt nur der manuelle Weg über die
engines.json(Abschnitt 4), der – so Sadler selbst – „etwas fummelig“, aber gut machbar ist
3. Der schnelle Weg: Contempt direkt im Nibbler-Menü (ab Version 2.4.5)
Die weiter unten beschriebene manuelle Bearbeitung der engines.json war lange Zeit der einzige Weg – inzwischen hat sich das aber deutlich vereinfacht. Seit Nibbler 2.4.5 gibt es ein eigenes Untermenü im Engine-Menü, über das sich die wichtigsten WDL-Contempt-Parameter direkt in der Oberfläche einstellen lassen, ohne eine einzige Zeile JSON anzufassen. Mit 2.4.6 kam zusätzlich die Option für WDLEvalObjectivity sowie ein kleiner visueller Hinweis hinzu, der anzeigt, wenn Contempt gerade aktiv ist – praktisch, damit man es nach der Eröffnungsvorbereitung nicht versehentlich beim normalen Analysieren anlässt. Getestet und bestätigt in Version 2.5.8.
Im Engine-Menü finden sich dort (unterhalb von Threads/Hash/MultiPV) die folgenden Einträge, jeweils mit einem aufklappbaren Untermenü:
- Contempt-Modus → entspricht
ContemptMode(white_side_analysis,black_side_analysis,play, …) - Contempt → entspricht
Contempt, wählbar in 50er-Schritten (z. B. 250, 200, 150 … bis hinunter zu negativen Werten wie −250) - WDL-Kalibrierungs-Elo → entspricht
WDLCalibrationElo - WDL-Eval-Objektivität → entspricht
WDLEvalObjectivity - Bewertungstyp → entspricht
ScoreType(z. B.WDL_mu, siehe Abschnitt 5)
Praktisches Vorgehen:
- Engine wie gewohnt über Engine → Engine wählen… bzw. Bekannte Engine wählen… laden.
- Im Engine-Menü nacheinander Contempt-Modus, Contempt und WDL-Kalibrierungs-Elo auf die gewünschten Werte setzen (siehe Empfehlungen in Abschnitt 5).
- Optional WDL-Eval-Objektivität und Bewertungstyp anpassen, je nachdem ob eher realistische oder objektive Werte gewünscht sind.
- Die Einstellungen wirken sofort auf die laufende Analyse – kein Neustart von Nibbler nötig.
Wichtige Einschränkung: Nicht alle Parameter sind (Stand 2.5.8) über das Menü erreichbar. Insbesondere WDLDrawRateReference, WDLContemptAttenuation und MovesLeftThreshold tauchen dort nicht auf. Für diese drei Feineinstellungen bleibt weiterhin der manuelle Weg über die engines.json nötig, der im folgenden Abschnitt beschrieben ist. Für den Einstieg reicht die Menü-Lösung aber völlig aus – die drei restlichen Parameter sind eher etwas für die Feinjustierung bei extremeren Contempt-Werten oder ungewöhnlichen Netzwerken.
4. Der klassische Weg: manuelle Einrichtung über die Datei engines.json
Nibbler speichert alle Engine-Definitionen inklusive Startoptionen in einer Datei namens engines.json. Genau dort werden die WDL-Contempt-Parameter eingetragen.
Vorgehen Schritt für Schritt:
- Nibbler schließen – Änderungen an der Datei werden nur übernommen, wenn Nibbler beim Bearbeiten nicht läuft.
- Zunächst über Engine → Choose Engine die lc0.exe auswählen. Dadurch legt Nibbler automatisch einen funktionierenden Basis-Eintrag in der engines.json an.
- Über den Dev-Menüpunkt „show engines.json“ die Datei im Explorer öffnen lassen (Tipp: vorher eine Sicherheitskopie anlegen).
- Die Datei mit einem einfachen Texteditor (Notepad) öffnen – andere Editoren fügen mitunter unsichtbare Formatierungszeichen ein, die die JSON-Syntax zerstören.
- Im Zweig „options“ des jeweiligen Engine-Eintrags die WDL-Contempt-Parameter ergänzen (siehe Abschnitt 4).
- Datei speichern, Nibbler wieder öffnen, die Engine über Engine → Known Engine auswählen.
- Zur Kontrolle im Dev-Menü „List sent options“ aufrufen – hier sieht man, ob die eingetragenen Parameter tatsächlich übernommen wurden.
Wichtige Stolperfallen (aus zahlreichen Nutzerkommentaren zu Sadlers Artikel):
- Die Anführungszeichen
"müssen die geraden, einfachen Tastatur-Anführungszeichen sein – keine „typografischen“„…"-Zeichen, die manche Editoren beim Einfügen automatisch erzeugen. Das ist die häufigste Fehlerquelle bei JSON-Syntaxfehlern. - Kommata und geschweifte Klammern müssen exakt stimmen – am einfachsten einen bestehenden Eintrag als Vorlage nehmen und sorgfältig vergleichen.
- Nach größeren Änderungen hilft es manchmal, in Nibbler unter Analysis die bisherige Analyse zu verwerfen („Forget all analysis“), damit alte, mit anderen Parametern berechnete Werte nicht mehr angezeigt werden.
- Es muss tatsächlich eine Lc0-Version ≥ 0.30 verwendet werden – ältere Versionen kennen die Parameter schlicht nicht und ignorieren sie stillschweigend.
5. Die wichtigsten Parameter im Überblick
| Parameter | Bedeutung |
|---|---|
| WDLCalibrationElo | Die Elo-Zahl der Seite, aus deren Perspektive analysiert wird (idealerweise die FIDE-Elo, angepasst an die Bedenkzeit). Bestimmt, wie stark sich derselbe Contempt-Wert auswirkt – je niedriger die Elo, desto stärker der Effekt bei gleichem Contempt. |
| Contempt | Der angenommene Elo-Unterschied zur Gegenseite. Positiv = eigene Seite stärker, negativ = eigene Seite schwächer (dann sucht Leela nach besonders soliden Zügen). |
| ContemptMode | white_side_analysis bzw. black_side_analysis für reine Analyse aus der jeweiligen Perspektive, oder play, wenn Leela in der „Gegen den Computer spielen“-Funktion tatsächlich selbst ziehen soll. |
| WDLDrawRateReference | Die geschätzte Remisquote in der Ausgangsstellung bei Standardeinstellungen – abhängig vom verwendeten Netzwerk. Richtwerte: 0,65 (neuere T80-Netze), 0,62 (BT4/T2/ältere T80-Netze), 0,47 (T79/T75), 0,43 (T74). |
| WDLEvalObjectivity | 0,0 = möglichst realistische WDL-Werte für genau dieses Matchup (auch für die reine Partiebeobachtung empfehlenswert); 1,0 = die objektive Bewertung bleibt sichtbar, während Contempt nur die Zugauswahl beeinflusst. |
| WDLContemptAttenuation | Skaliert den Contempt-Effekt herunter (z. B. 0,5 = nur halbe Wirkung). Wert 1,0 (bzw. Weglassen) bedeutet volle Wirkung. |
| MovesLeftThreshold | Bei sehr extremen Contempt-Werten oberhalb von etwa 250 empfiehlt sich ein Wert von 0,95. |
Wichtig: Version 0.30 vs. 0.31
Die ursprüngliche Umsetzung in Version 0.30 hatte laut lczero.org-Team zwei Schwachstellen, die in 0.31.0 behoben wurden:
- Ein Fehler reduzierte den effektiven Contempt-Wert bei Netzwerken mit natürlich höherer Remisquote unbeabsichtigt.
- Das zugrunde liegende Elo-Modell war für den Bereich des Top-Engine-Schachs kalibriert und lieferte unterhalb von etwa 2800 Elo deutlich verzerrte Werte – Elo-Werte unter 2200 waren in 0.30 praktisch unbrauchbar.
Mit 0.31 sind auch niedrige Ratings ab etwa 1500 sinnvoll nutzbar, und die Umrechnung zwischen „normaler“ Elo und dem intern verwendeten Modell ist deutlich genauer. Sadlers ursprüngliche Videoserie wurde noch mit 0.30 und den Werten 2700 gegen 2300 bei einer Dämpfung von 0,5 erstellt – das entspricht nach heutiger Umrechnung eher etwa 2300 gegen 1950 bei voller Wirkung. Für neue Einrichtungen sollte daher unbedingt mindestens Version 0.31.x verwendet werden.
Empfohlene Werte für die Eröffnungsvorbereitung (Stand v0.31.x)
Direkt vom Lc0-Team empfohlen für die Eröffnungsrecherche:
ContemptMode:white_side_analysisbzw.black_side_analysis(oderplay, wenn man gegen die Engine spielen möchte)WDLCalibrationElo= die eigene Elo,Contempt= der angenommene Elo-Unterschied zum Gegner (aus der eigenen Perspektive), zzgl. ca. 50 Elo auf die WDLCalibrationElo pro Verdopplung der Bedenkzeit ausgehend von 3+2WDLEvalObjectivity: 0.0undWDLContemptAttenuation: 1.0, wenn möglichst realistische WDL-Werte für genau dieses Matchup gewünscht sind (auch zum „Live-Mitschauen“ von Partien empfehlenswert)WDLEvalObjectivity: 1.0undWDLContemptAttenuationzwischen 0 und 1, wenn verschiedene Aggressivitätsgrade simuliert werden sollen, ohne die objektive Bewertung der gewählten Züge zu verlierenWDLDrawRateReferencepassend zum verwendeten Netz setzen (siehe Tabelle oben)- Mindestens 10.000 Nodes pro Zug rechnen lassen, damit die vorgeschlagenen Züge nicht einfach nur die üblichen Hauptvarianten aus Leelas Policy-Netz widerspiegeln, sondern tatsächlich durch die vertiefte Suche gefunden wurden
Beispiel-Konfiguration (Analyse aus Weiß-Sicht, 400 Elo Vorsprung)
"C:\\Pfad\\zu\\lc0.exe": {
"args": [],
"options": {
"WDLDrawRateReference": 0.62,
"WDLCalibrationElo": 2100,
"Contempt": 300,
"ContemptMode": "white_side_analysis",
"WDLEvalObjectivity": 0.0,
"WDLContemptAttenuation": 1.0
},
"search_nodes": null,
"search_nodes_special": 10000,
"limit_by_time": false
}
Für Schwarz einfach "ContemptMode": "black_side_analysis" setzen. Ist der eigene Gegner stärker, wird Contempt negativ gesetzt (z. B. -300) – Leela sucht dann nach besonders soliden, schwer zu widerlegenden Zügen, statt auf Verwicklungen zu setzen.
6. Zwei Nutzungsarten: Analysieren oder gegen Leela spielen
Für die Eröffnungsvorbereitung bieten sich zwei komplementäre Herangehensweisen an, die Sadler in seiner Videoserie kombiniert:
a) Reine Analyse (ContemptMode: white_side_analysis / black_side_analysis)
Man lässt Leela eine bekannte Stellung – etwa eine Hauptvariante der eigenen Eröffnung – mit den passenden Contempt-Einstellungen analysieren. Statt der „objektiv besten“, oft sehr ausgeglichenen Hauptzüge tauchen unter Umständen deutlich schärfere, seltener gespielte Alternativen ganz oben in der Zugliste auf – Ideen, die zwar nicht zwingend die theoretisch stärksten sind, aber gegen einen Gegner mit dem angenommenen Spielstärkeunterschied besonders unangenehm zu behandeln sind.
b) Gegen Leela spielen (ContemptMode: play)
Der eigentliche Clou: Man lässt sich die gefundene Idee anschließend von Leela selbst vorspielen – über die „Play against engine“-Funktion in Nibbler, mit denselben Contempt-Einstellungen. Das ist deshalb wichtig, weil andere Top-Engines (Stockfish, Komodo etc.) eine von Leela mit Contempt vorgeschlagene, objektiv riskante Idee typischerweise sofort zurückweichend behandeln und in ein solides, aber uninteressantes Endspiel zu retten versuchen. Nur eine Engine, die „an ihre eigene Idee glaubt“ und konsequent auf Vorteil spielt, liefert realistische Trainingspartien gegen die neue Waffe. Genau das leistet Leela im play-Modus mit denselben Parametern.
In seiner Serie hat Sadler diese Methode unter anderem genutzt, um sich selbst als Schwarzer gegen eine von „Crazy Leela“ mit hohem Contempt gefundene g4-Idee im Grob-Halbslawisch antreten zu lassen – mit deutlichem Ergebnis zugunsten der Maschine.
7. Praxisbeispiele aus Sadlers Serie
Zur Einordnung, welche Art von Ideen dabei herauskommt (chronologisch aus der YouTube-Reihe „Leela WDL Contempt“):
- Grob-Halbslawisch mit 5.g4 – eine kaum gespielte, hochaggressive Fortsetzung im Halbslawischen Damengambit
- Anti-Sveshnikov-Ideen
- Königsindisch gegen zwei bekannte KID-Theoretiker (Gawain Jones und Vasilios Kotronias)
- Caro-Kann-Angriffsideen
- Sizilianisch-Najdorf mit 6.Bg5 – inklusive einer Partie gegen GM Anish Giri
Diese Beispiele zeigen gut das Muster: Es handelt sich meist nicht um völlig neue Theoriezüge, sondern um selten gespielte, scharfe Nebenvarianten bekannter Systeme, die gegen einen (simulierten) schwächeren Gegner besonders effektiv sind – oft mit Bauernopfern oder ungewöhnlichen Königszügen, die „objektiv“ vielleicht nicht die Nummer eins sind, aber praktisch sehr unangenehm zu widerlegen.
Ergänzend hat sich in der Community (u. a. der TCEC-Stammgast „mrbdzz“, von Sadler in einem Folgeartikel vorgestellt) ein Werkzeug etabliert, das Contempt-Ideen automatisch mit der Lichess-Partiedatenbank abgleicht, um echte Neuerungen („Novelties“) von nur leicht abweichenden Nebenvarianten zu unterscheiden – für alle, die zusätzlich programmieren möchten, ein spannender Ausbauschritt.
8. Typische Missverständnisse
- „Höherer Contempt = die Engine spielt schwächer.“ Falsch – die Suchtiefe und taktische Präzision bleiben unverändert. Contempt beeinflusst nur, welche Züge als vielversprechend gegen einen Gegner mit angenommener geringerer Präzision gelten.
- „Der genaue Elo-Wert ist eigentlich egal, Hauptsache Contempt stimmt.“ Auch falsch:
WDLCalibrationElobestimmt zusätzlich, wie stark sich ein gegebener Contempt-Wert überhaupt auswirkt – bei niedrigerer Basis-Elo wirkt derselbe Contempt-Wert stärker. - „Ich kann irgendeine alte Lc0-Version nehmen.“ Für belastbare Ergebnisse unbedingt Version 0.31.x oder neuer verwenden – die Elo-Umrechnung in 0.30 war im Bereich unter 2800 Elo deutlich ungenau.
9. Fazit für unsere Eröffnungsvorbereitung
WDL Contempt eröffnet eine neue Dimension der computergestützten Eröffnungsarbeit: statt der immer gleichen, theoretisch „objektiv besten“ Hauptvarianten liefert Leela gezielt kämpferische, gegen bestimmte Spielstärkeklassen zugeschnittene Ideen – und kann diese anschließend im Trainingsmodus auch selbst überzeugend vorspielen. Für die Vorbereitung auf konkrete Gegner in der Hessenliga (oder auch nur zum Auffrischen des eigenen Repertoires mit unbequemen Nebenvarianten) lohnt sich der einmalige Einrichtungsaufwand definitiv – dank der Menü-Option in aktuellen Nibbler-Versionen ist die Einstiegshürde inzwischen deutlich niedriger als noch zur Zeit von Sadlers ursprünglichem Artikel.
Wer selbst experimentieren möchte: Am besten mit einer bekannten eigenen Eröffnungsstellung, moderatem Contempt (z. B. 150–250 Elo) und mindestens 10.000 Nodes pro Zug starten, die Vorschläge mit der eigenen Turnierpraxis abgleichen und sich anschließend im play-Modus selbst der eigenen Vorbereitung stellen.
Quellen und weiterführende Links
- Leela Chess Zero Blog: The Lc0 v0.30.0 WDL rescale/contempt implementation – https://lczero.org/blog/2023/07/the-lc0-v0.30.0-wdl-rescale/contempt-implementation/
- Leela Chess Zero Blog: GM Matthew Sadler on WDL contempt – https://lczero.org/blog/2024/03/gm-matthew-sadler-on-wdl-contempt/
- Matthew Sadler: Getting Leela to analyse and play in the style you want! Part 1 – Setting up WDL Contempt – https://matthewsadler.me.uk/engine-chess/setting-up-wdl-contempt-for-leela-in-nibbler/
- Matthew Sadler: Part 2 – Introducing Crazy Leela’s GROB Semi Slav – https://matthewsadler.me.uk/engine-chess/getting-leela-to-analyse-and-play-in-the-style-you-want-part-2-introducing-crazy-leelas-grob-semi-slav/
- Videoserie „Leela WDL Contempt“ (Teile 1–10) auf Matthew Sadlers YouTube-Kanal „Silicon Road“: https://youtube.com/playlist?list=PLxhvNMc95Uo9N6W48TUAyIwkjK0w1wHKj
- Nibbler (GUI): https://github.com/rooklift/nibbler
- Lc0-Netzwerke („Best Nets“): https://lczero.org/play/networks/bestnets/

Schreibe einen Kommentar
Du musst angemeldet sein, um einen Kommentar abzugeben.