Schaakproblemen, opgelost tot de laatste zet.

Zugwunder 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.

Versie 1.1.15 voor macOS 14 of nieuwer op Apple silicon. De engine op zichzelf draait ook op Linux; Wolfgang, een schaakinterface voor elke UCI-engine, staat eveneens op de downloadpagina.

Schaakprobleem: mat in drie Witte koning op e8, witte dame op e4, zwarte koning op g5. Wit aan zet geeft mat in drie. Oplossing: 1. Kf7 Kh5 2. Kf6 Kh6 3. Dg6 mat.
Mat in drie, wit aan zet. Precies één eerste zet werkt, en het is geen schaak. Zugwunders puzzelgenerator bouwt zulke stellingen uit zijn eindspeltabellen en controleert dat de sleutelzet uniek is.

1. Kf7 Kh5 2. Kf6 Kh6 3. Dg6#Na 1…Kh6 volgt 2. Dg6#.

Gemeten, niet beweerd.

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.

Eén engine, drie programma's.

De engine is een bibliotheek. De Mac-app, de schaakinterface en het zelfstandige UCI-programma zijn drie manieren om hem te gebruiken.

Zugwunder-app-icoon

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 functies
Wolfgang-app-icoon

Wolfgang

Een 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 detail

zugwunder-uci

De 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 halen

Vier modi, één bord.

De 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.

Oplossen

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.

Tactiektrainer

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.

Tegen engine

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.

Bordeditor

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.

Nieuw dit najaar.

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.

  • Schaakpuzzel makennieuw

    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.

  • Stelling uit een foto, in alle vier de talen

    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.

  • Vensteropnamen

    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.

  • Instelbare sterkte voor de UCI-engine

    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.

  • Netwerk v6 en volledige UCI-ondersteuning

    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.

  • De engine als eigen pakket

    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.

Geschreven vanaf de bitboards.

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.

Lees hoe het gebouwd is

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 ….

Probeer het op een stelling die je kent.

Ondertekend en genotariseerd voor macOS. De browserversie hoeft helemaal niet geïnstalleerd te worden.