Zugwunder
De Mac-app
Oplosser, tactiektrainer, speelpartner en bordeditor in één native venster. Hij bewijst mat- en probleemschaakopgaven exact, maakt puzzels, analyseert je partijen en drukt opgavenbladen af.
Alle functiesZugwunder is een schaakengine die ik van de grond af in Swift heb geschreven, en de Mac-app die eromheen is gebouwd. Hij bewijst mat, hulpmat en zelfmat exact, bedenkt nieuwe puzzels uit zijn eigen eindspeltabellen, traint je tactiek en speelt op ongeveer 3000 Elo. Al het rekenwerk gebeurt op je eigen Mac.
1. Kf7 Kh5 2. Kf6 Kh6 3. Dg6#Na 1…Kh6 volgt 2. Dg6#.
Elk cijfer hieronder komt uit Zugwunders eigen testruns. De logboeken zitten bij elke release, en een build die een test niet doorstaat, wordt niet uitgebracht.
| Speelsterkte | 3065 ± 20 Elo netwerk v6, één kern | 500 referentiepartijen tegen Stockfish op zijn gekalibreerde UCI_Elo 3100, 60 s + 0,6 s per zet, 256 MB hash, Syzygy-tabellen: 83 overwinningen, 284 remises, 133 verliezen. Daarbovenop heeft het cluster duizenden partijen tegen Stockfish en andere engines gespeeld. Een schatting op de schaal van Stockfish, geen officiële rating. |
|---|---|---|
| Trainingsdata | 236,6 miljoen stellingen | Uit Zugwunders eigen partijen tegen zichzelf en uit partijen tegen Stockfish, gelabeld met Zugwunders zoekresultaten en de partijuitslagen. Geen vreemde code, gewichten of evaluaties zijn in het netwerk terechtgekomen. |
| Evaluatie | NNUE, 6e generatie 768 → 2 × 256 → 1 | Een klein neuraal netwerk, gekwantiseerd naar 16-bits gehele getallen en incrementeel bijgewerkt met SIMD-instructies. Getraind met een PyTorch-script van 150 regels, ingebed in het binaire bestand, uitgevoerd in Swift. |
| Afhankelijkheden | Geen | Alleen Swift en de frameworks van Apple. De enige uitzondering is Fathom (MIT-licentie), dat de Syzygy-eindspeltabellen leest. |
| Tests per release | 364 + 32 | 364 Swift-tests over engine, app en Wolfgang, plus 32 protocoltests tegen het echte zugwunder-uci-programma. Nieuwe zoekideeën moeten eerst een SPRT-match tegen de vorige versie winnen. |
| Talen | 4 | Duits, Engels, Frans en Nederlands, in de app om te schakelen. Deze website volgt dezelfde vier. |
De engine is een bibliotheek. De Mac-app, de schaakinterface en het zelfstandige UCI-programma zijn drie manieren om hem te gebruiken.
De Mac-app
Oplosser, tactiektrainer, speelpartner en bordeditor in één native venster. Hij bewijst mat- en probleemschaakopgaven exact, maakt puzzels, analyseert je partijen en drukt opgavenbladen af.
Alle functiesEen schaakinterface voor elke UCI-engine
Speel tegen Zugwunder, Stockfish of elke andere UCI-engine, laat engines tegen elkaar spelen, organiseer kleine toernooien uit openingsreeksen en bewaar alles als PGN. Genoemd naar de neef die mij schaken leerde.
Wolfgang in detailDe engine op zichzelf
Eén bestand voor macOS, Linux (x86_64 en ARM64) en WebAssembly. Laad hem in Cute Chess, En Croissant, Banksia, Wolfgang of elk ander UCI-schaakprogramma, of laat hem in je browser spelen.
De engine halenDe zijbalk schakelt ertussen; de stelling op het bord blijft bij je. Een puzzel uit de trainer kun je oplossen, tegen de engine uitspelen of bewerken.
Typ een FEN, open een PGN of fotografeer een diagram uit een boek. Zugwunder vindt de beste voortzettingen met meerdere varianten tegelijk, of bewijst een opgave exact: mat, hulpmat, zelfmat of pat in n, met de volledige oplossingsboom en een waarschuwing wanneer een probleem een tweede oplossing heeft.
Puzzels van Lichess op motief en moeilijkheid, je eigen puzzelbibliotheek en puzzels die Zugwunder zelf maakt. Voortgang per puzzel en per motief, tips als je ze wilt, en een herhaalmodus voor de puzzels waar je op vastliep.
Drie sterktes met de namen Beginner, Club en Erik, een openingsboek en een klok met increment. Of speel tegen een andere engine, beperk Stockfish tot een Elo, of kijk toe hoe Zugwunder het ertegen opneemt. Daarna een volledige partijanalyse met evaluatiecurve en een geannoteerde PGN.
Zet de stukken met de hand neer, bepaal wie aan zet is en de rokaderechten, en laat de app controleren of de stelling reglementair is voordat je ermee oplost, traint of speelt.
Sinds eind september groeide de app van een matoplosser uit tot een complete schaakwerkplaats. Hier staat wat het laatst veranderde; de volledige geschiedenis staat in de versienotities van de app.
Kies wie aan zet is, mat in één tot zes zetten, en een dame, toren of pion als extra stuk. Zugwunder trekt een willekeurig driestukseindspel uit zijn exacte tabellen, controleert dat precies één eerste zet op tijd mat geeft, en geeft de stelling aan de trainer. Elke puzzel is nieuw, en elke puzzel is oplosbaar.
Sleep een afbeelding, plak er een met ⌘V of kies een bestand: een diagram uit een boek, een scan of een schermafbeelding. De herkenning gebruikt Claude van Anthropic via je eigen API-sleutel, en het resultaat is een bewerkbaar voorstel dat je bevestigt voordat er iets wordt opgelost. Interface, helpteksten en de opmerkingen van het model volgen nu de taal van de app.
Een cameraknop in alle vier de modi bewaart het hele venster, titelbalk inbegrepen, als PNG waar je maar wilt. Handig voor een schaakrubriek of het clubblad.
Met UCI_LimitStrength aan kiest UCI_Elo een niveau van 1100 tot 3000. De schaal werd gekalibreerd in meer dan 5.000 partijen tegen Stockfish 17.1 en geldt als voorlopig tot een tweede tegenstander en macOS zijn gecontroleerd.
Het zesde netwerk ging in elke build na matches van 500 partijen tegen Stockfish en Arasan. De UCI-implementatie werd aangevuld tot de specificatie van 2006, inclusief ponderen, searchmoves, go mate en knooplimieten, en wordt bij elke release door 32 protocoltests gecontroleerd.
zugwunder-uci werd een apart programma met builds voor macOS, Linux x86_64 en ARM64, en WebAssembly. Beide apps bundelen hun eigen kopie en praten er via UCI mee zoals met elke andere engine.
Een schaakengine is het soort programma waarin elke sluiproute zich toont als een verloren partij. Onder Zugwunder ligt geen enginebibliotheek: zettengenerator, zoekalgoritme, de neurale evaluatie met haar trainingspijplijn, de eindspeltabellen, de probleemoplossers, de apps en de updater horen allemaal bij het project.
De engine antwoordt zoals elke andere UCI-engine. Een snelle test in een terminal:
printf 'uci\nisready\ngo movetime 1000\n' | ~/bin/zugwunder-uci
Hij antwoordt met zijn opties, uciok, readyok, een paar info-regels en ten slotte bestmove ….
Ondertekend en genotariseerd voor macOS. De browserversie hoeft helemaal niet geïnstalleerd te worden.