[Wedstrijd] CodeCup 2026 - 0.1 (Zero Point One) Vorige deel Overzicht

Pagina: 1
Acties:

Onderwerpen


Acties:
  • +4 Henk 'm!

  • Joep
  • Registratie: December 2005
  • Laatst online: 14-10 23:34
Afbeeldingslocatie: https://www.codecup.nl/images/codecup_head.png


De CodeCup is een jaarlijkse programmeerwedstrijd, ontstaan uit de Nederlandse Informatica Olympiade, waarbij deelnemers een programma schrijven dat een spel kan spelen. Die programma's nemen het dan tegen elkaar op in een toernooi.

Het spel van dit jaar heet 0.1 (Zero Point One) dat erg veel weg heeft van een vroege versie van schaken. De belangrijkste verschillen met schaken zijn de andere "schaak"-stukken, het feit dat je ze bij aanvang van het spel zelf op het bord mag plaatsen en het feit dat je verslagen schaakstukken op het bord mag terugplaatsen als eigen schaakstuk.

Afbeeldingslocatie: https://www.codecup.nl/0.1/figure1.png

Voorbeeld van het spelverloop. Voor details, lees de volledige regels op de CodeCup site.

Technische details

Om mee te doen moet je een speler schrijven in één van de ondersteunde programmeertalen: C, C++, C#, Go, Haskell, Java, JavaScript, OCaml, Pascal, Python of Rust.

Je programma mag per potje maximaal 30 seconde CPU-tijd gebruiken op een 2 GHz CPU (geen multithreading), en maximaal 2 GB geheugen. Zie verder de technische details op de CodeCup site.

Lokaal testen

Voordat je je programma instuurt, kun je lokaal testen dat je aan het spelprotocol voldoet. Daarvoor stelt de organisatie een tool genaamd Caia ter beschikking. Ook zitten er drie testspelers in de Caia distributie. Die zijn heel handig om je speler te verbeteren.

Belangrijke data

De finale is op zaterdag 14 januari 2026. Dat is nog ver weg. Tot die tijd is er elke drie weken een testcompetitie, waarvan de eerste op zaterdag 20 september 2024 plaatsvond.

De testcompetities zijn nuttig om te verifiëren dat je programma correct werkt in het CodeCup systeem, en om uit te vinden hoe sterk je speler is vergeleken met die van andere deelnemers.

Acties:
  • 0 Henk 'm!

  • Joep
  • Registratie: December 2005
  • Laatst online: 14-10 23:34
Gereserveerd.

Acties:
  • 0 Henk 'm!

  • Bolukan
  • Registratie: Oktober 2002
  • Laatst online: 28-09 18:33
Dank Joep voor de post.

Ik heb er even naar zitten kijken en vraag me af of dit oplosbaar is zonder AI? (Daar zit niet mijn kracht). Kortom, aan anderen de vraag: hoe stel je hier vast wat de passende aanpak is?

Ik tel 16!/(8! 4! 2! 1! 1!) 10.810.800 begin opstellingen. Het aantal lijkt me niet relevant, want je kunt daar vooronderzoek naar doen. Het lijkt op Stratego waar mensen hun voorkeurs-opstellingen hebben.Misschien kan je je opening nog optimaliseren op de voorkeuren van de tegenstanders.

De 8 Alfils/'pionnen' die 2/2 kunnen springen, lijken op het eerste zich heel krachtig, maar bewegen zich in 8 verschillende sets van cellen, net zoals lopers bij schaken niet kunnen wisselen tussen 2 sets de zwarte en witte vlakken.

Bruto heb je met de initiele set stukken een upperbound van 68 opties voor een zet (1x4+1x8+2x4+4x4+8x4). Gecorrigeerd voor niet over de rand van het bord springen, breng je het terug naar gemiddeld 45 opties en met niet op elkaar springen=je eigen stuk slaan, wordt het nog lager. Het neerzetten van een eerder geslagen stuk verhoogt het aantal opties echter weer enorm. De voorlopige conclusie is dat brute force geen optie lijkt. Maar bruto forcen van de laatste zetten rond het bijna "schaakmat" zetten met de nabije stukken, sluit ik niet uit.

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 08:34
Bolukan schreef op zondag 28 september 2025 @ 13:29:
Ik heb er even naar zitten kijken en vraag me af of dit oplosbaar is zonder AI? (Daar zit niet mijn kracht). Kortom, aan anderen de vraag: hoe stel je hier vast wat de passende aanpak is?
Het spel is niet volledig oplosbaar, net zoals b.v. het schaakspel dat niet is.

De competitie zou niet interessant zijn als iedereen optimaal speelt. De uitdaging is om een zo sterk mogelijke speler te bouwen gegeven de tijd- en geheugenlimieten.

Aangezien het spel lijkt op schaken, kun je ook vergelijkbare algoritmen gebruiken. Daar zijn heel veel mogelijkheden voor, maar de bekendste methoden zijn gebaseerd op minimax game tree search, en
Monte Carlo tree search (MCTS).

Ik zou bij minimax beginnen; dat is eenvoudiger te begrijpen, hoewel het in zekere zin lastiger te implementeren is, omdat je zowel de zoekroutine moet schrijven, als een evaluatie-functie voor een willekeurige positie, terwijl je bij (de basisvariant van) MCTS alleen een stelling hoeft uit te spelen totdat de wazir (koning) geslagen is.

Beide algoritmen kun je verder nog enorm veel verbeteren. Bijvoorbeeld, voor minimax search kun je gebruik maken van transposition tables om identieke stellingen die via meerdere paden bereikt kunnen worden te elimineren, en bij MCTS kun je heuristieken gebruiken om random playouts realistischer te maken.
Ik tel 16!/(8! 4! 2! 1! 1!) 10.810.800 begin opstellingen.
Goed gezien. Voor de eerste zet kun je die nog delen door twee, vanwege de horizontale symmetrie van het spel.
De 8 Alfils/'pionnen' die 2/2 kunnen springen, lijken op het eerste zich heel krachtig, maar bewegen zich in 8 verschillende sets van cellen, net zoals lopers bij schaken niet kunnen wisselen tussen 2 sets de zwarte en witte vlakken.
Klopt, en dit geldt voor alle stukken: je hebt precies evenveel stukken van een type dat nodig is om het hele bord te kunnen bereiken.

De dabbaba's, die twee velden horizontaal of verticaal kunnen springen, kunnen 1 van 4 sets van velden bereiken, dus heb je er 4 van. De Ferzes die 1 stap diagonaal zetten, zijn net als lopers gebonden aan de zwarte of witte velden, en dus heb je er 2. De wazir (koning) en paard kunnen beiden alle vakjes bereiken dus heb je er 1.

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 08:34
Wie het spel uit wil proberen, kan dat via mijn website doen.

(Je kunt tegen jezelf spelen, of tegen een ander door een speler-link te delen, of tegen een van de 3 voorbeeldspelers uit de Caia-distributie.)

Het is best een leuk spel; het lijkt wat op schaken, maar doordat je geslagen stukken opnieuw in het spel kunt brengen, gaat het veel sneller. Het lijkt dus ook minder van belang wie de meeste stukken geslagen heeft, want zelfs als je qua materiaal fors achterstaat, kan je soms toch nog de Wazir van de tegenstander slaan (die minder mobiel is dan de koning in het schaakspel).