[Wedstrijd] CodeCup 2025 - BOX Vorige deel Overzicht

Pagina: 1
Acties:

Onderwerpen


Acties:
  • +6 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 00:20
Mede-auteur:
  • Vaan Banaan
  • Registratie: Februari 2001
  • Niet online

Vaan Banaan

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 BOX, een abstract bordspel waarbij spelers een geheime kleur toegewezen krijgen, om vervolgens kaarten van 6x2 op een rechthoekig bord leggen, met het doel om vierkanten van hun eigen (geheime) kleur te maken. Hier een screenshot van de website:

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

Hier zie je dat elke kaart zes verschillende kleuren in een willekeurige volgorde bevat (waarbij de tweede rij dezelfde kleuren maar in omgekeerde volgorde bevat). In dit voorbeeld scoort geel 6 punten door een vierkant van 7x7 te maken (de score is altijd 1 minder dan de grootte van het vierkant—vraag me niet waarom).

Interessant aan dit spel is dat strategie gecombineerd wordt met verborgen informatie (de geheime kleuren van de spelers) en willekeurigheid (de kaarten die de spelers op het bord plaatsen). Daardoor is er geen voor de hand liggend optimaal algoritme, maar zijn er verschillende technieken denkbaar die tot een goede strategie leiden.

Lees de regels van het spel hier (in het Engels):
Afbeeldingslocatie: https://images.squarespace-cdn.com/content/v1/52b1e69ce4b0e33e9a993b6d/1480446260217-IR4FLTOUW60GOF1DE0SE/BOX_Pack_O_Game_Rule_Sheet.jpg?format=200wp

Of kijk dit filmpje (drie minuten; de eerste minuut waarin de kaarten verdeeld worden kun je eventueel overslaan, want dat doet de software automatisch):



De CodeCup variant wordt altijd gespeeld tussen twee spelers, maar beperkt zich tot een bord van 16x20 velden, en gaat door tot er geen zetten meer mogelijk zijn. Verder is het principe hetzelfde: je scoret punten door vierkanten te maken van je eigen kleur.

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, 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 18 januari 2025. Dat is nog ver weg. Tot die tijd is er elke drie weken een testcompetitie, waarvan de eerste op zaterdag 14 september 2024 plaatsvindt.

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.

[ Voor 0% gewijzigd door Soultaker op 25-09-2024 19:28 . Reden: C# toegevoegd als mogelijke programmeertaal ]


  • Vaan Banaan
  • Registratie: Februari 2001
  • Niet online

Vaan Banaan

Heeft ook Apache ontdekt

Topicstarter
Ik zie dat de eerste testcompetitie al is geweest, dank voor het aanmaken van het Topic d:)b

Ook dit keer weer een leuk spel en heb nog geen idee hoe ik dit ga aanpakken.
Sowieso leer ik wel elk jaar wel totaal nieuwe dingen. Vorig jaar (Sudoku) weken in Wiki's blijven hangen over wat een SAT solver is.

Hier gaat het dus over maken van vierkanten van je geheime kleur.
Maar ik zal eerst een fatsoenlijk plaatsing algoritme moeten verzinnen. Op een positie kan het voorkomen dat je een kaart niet horizontaal mag plaatsen (vanwege geen aansluiting met andere kaarten of meer dan 4 "stippen" overlap), maar wel verticaal. En andersom.
Dat wordt dus iets fabrieken met 2 maps voor horizontale en verticale plaatsing.
In de laatste 5 kolommen kan geen kaart horizontaal geplaatst worden, de laatste kolom ook niets verticaal, de laatste 5 rijen niets verticaal, de onderste rij ook niets horizontaal. Tralalalala hmm tja, oke, wordt vervolgd...

500 "The server made a boo boo"


Acties:
  • 0 Henk 'm!

  • Bolukan
  • Registratie: Oktober 2002
  • Laatst online: 01-04 21:59
O leuk! Wat zijn de dimensies?
(16-5)x(20-1)+(16-1)x(20-5)=434 mogelijke plaatsingen, beetje filteren wat mag per beurt moet lukken.
16x20=320 vakjes, en elke beurt worden minimaal (12-4) gevuld, dus minder dan 40 zetten max.
1.720 mogelijke combinaties van 4 vakjes die een score geven.
Wie weet ga ik wat maken.

[ Voor 17% gewijzigd door Bolukan op 21-09-2024 00:03 ]


  • Silvero
  • Registratie: Mei 2009
  • Laatst online: 04-06 12:54
Waarom is programmeertaal C# niet toegestaan?

Acties:
  • +1 Henk 'm!

  • Vihaio
  • Registratie: November 2006
  • Laatst online: 23:32
Silvero schreef op woensdag 25 september 2024 @ 09:32:
Waarom is programmeertaal C# niet toegestaan?
Dat is wel toegestaan https://www.codecup.nl/rules_tech.php#csharp

  • Corniel
  • Registratie: April 2002
  • Laatst online: 31-03 14:56

Corniel

De wereld is gek!

Het is fijn dat er nu C# support is. Het is wel jammer da het Mono betreft. We zijn bij C# 12, en Mono ondersteund C# 6 en een deel van de C# 7 features. Ook heb je hierdoor geen mogelijkheid om Iets als BitOperations te gebruiken wat je toelaat om zaken als bit count native te laten bepalen.

Maar goed, wellicht dat ik een poging ga wagen. Ik heb gisteren al getypt.

while (me.Alive) {
me.KickAss();
}


Acties:
  • +3 Henk 'm!

  • Bolukan
  • Registratie: Oktober 2002
  • Laatst online: 01-04 21:59
Eerste begin gemaakt in C++, meeste tijd ging in het installeren en instellen van de compiler.
Afbeeldingslocatie: https://tweakers.net/i/TjPy7SueV64sCWuUGf6S3P-GK8o=/full-fit-in/4000x4000/filters:no_upscale():fill(white):strip_exif()/f/image/aCwT7VXWLcztqryJ5WCkM1Ox.png?f=user_large
PS: Inmiddels valide zetten, doel: zondag meedoen met valide spel, hoe random ook.

[ Voor 13% gewijzigd door Bolukan op 03-10-2024 18:10 ]


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 00:20
Opgelet: aanstaande zondag is de tweede testcompetitie (niet zaterdag in tegenstelling tot de andere competities — ik weet niet waarom). Je inzending moet op die dag voor 6 uur ’s ochtends binnen zijn om mee te doen.
Silvero schreef op woensdag 25 september 2024 @ 09:32:
Waarom is programmeertaal C# niet toegestaan?
Het is niet zozeer zo dat bepaalde talen “niet toegestaan” zijn, maar meer dat er een beperkt aantal talen door de CodeCup organisatie ondersteund wordt. Aangezien deelnemers broncode insturen, moet er voor elke ondersteunde taal een compiler geïnstalleerd worden op de CodeCup server, die op Linux draait. Praktisch is het dus alleen mogelijk om talen te ondersteunen waarvoor een Linux-compiler beschikbaar is.

En dat verklaart ook het volgende:
Corniel schreef op zaterdag 28 september 2024 @ 14:04:
Het is fijn dat er nu C# support is. Het is wel jammer da het Mono betreft. We zijn bij C# 12, en Mono ondersteund C# 6 en een deel van de C# 7 features.
Ik ben niet helemaal up-to-date met C#, maar ik vermoed dat de compiler/runtime die jij graag wil gebruiken van Microsoft is en niet op Linux draait? Waarschijnlijk is daarom voor Mono gekozen.

Acties:
  • 0 Henk 'm!

  • Corniel
  • Registratie: April 2002
  • Laatst online: 31-03 14:56

Corniel

De wereld is gek!

@Soultaker Dat is zeker wel het geval. Mono is denk ik wel veruit de makkelijkste optie (dus ik begrijp het wel).

Zie: https://dotnet.microsoft.com/en-us/download/dotnet/8.0

while (me.Alive) {
me.KickAss();
}


Acties:
  • 0 Henk 'm!

  • allemensen
  • Registratie: Maart 2021
  • Laatst online: 31-05 19:12
Nou is het is wel weer moeilijk dit jaar zeg: flink veel mogelijke zetten, een kanselement (random tegels) én verborgen informatie.

Domweg brute force een aantal zetten diep kijken is lastig, vanwege al die factoren. Dat moet slimmer kunnen, maar ik ben er nog niet helemaal achter hoe. Ik denk bijvoorbeeld dat die random tegels meestal niet zoveel uitmaken, aangezien je de tegel dan gewoon net iets anders kan neerleggen. Maar soms wel, dus hoe neem je dat nou netjes mee?

En die verborgen kleur (van mezelf en tegenstander) negeer ik nu ook nog maar. Ik vermoed dat het wel wat kan helpen, maar misschien alleen tegen de sterkste bots. En dat los van de benodigde rekenkracht en andere algoritmes.

Ik ben benieuwd wat jullie uitdagingen op het moment zijn!

Acties:
  • 0 Henk 'm!

  • Bolukan
  • Registratie: Oktober 2002
  • Laatst online: 01-04 21:59
Anderen gelukt om in te schrijven afgelopen 3 dagen?
Ik krijg geen email met password binnen. Gevoel is dat er een persoon achter zit, die natuurlijk ook niet net ziek moet zijn. Maar ik maak me zorgen of ik voor zondag iets kan uploaden.

[ Voor 4% gewijzigd door Bolukan op 04-10-2024 16:06 ]


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 00:20
Corniel schreef op vrijdag 4 oktober 2024 @ 12:37:
@Soultaker Dat is zeker wel het geval. Mono is denk ik wel veruit de makkelijkste optie (dus ik begrijp het wel).

Zie: https://dotnet.microsoft.com/en-us/download/dotnet/8.0
Aha, wist ik niet! Dan weet ik ook niet precies waarom er voor Mono is gekozen. Mogelijk makkelijker te installeren idd. Als het belangrijk is zou je het kunnen navragen in het forumtopic: https://forum.codecup.nl/read.php?4,2550
Bolukan schreef op vrijdag 4 oktober 2024 @ 16:06:
Anderen gelukt om in te schrijven afgelopen 3 dagen?
Ik krijg geen email met password binnen. Gevoel is dat er een persoon achter zit, die natuurlijk ook niet net ziek moet zijn. Maar ik maak me zorgen of ik voor zondag iets kan uploaden.
Van de site:
Once you've filled out this form a password will automatically be sent to you via e-mail. If you don't receive the mail (due to strict spam filters), please email us at contest(at)codecup.nl.
De tekst suggereert dat het automatisch zou moeten gaan. Als je het bericht niet kan vinden (ook niet in je spamfolder) zou ik het advies om de organisatie te mailen opvolgen.

Acties:
  • 0 Henk 'm!

  • Bolukan
  • Registratie: Oktober 2002
  • Laatst online: 01-04 21:59
Soultaker schreef op vrijdag 4 oktober 2024 @ 16:35:
[...]
zou ik het advies om de organisatie te mailen opvolgen.
Dat heb ik afgelopen 3 dagen ook al gedaan, en ik wil niet elke 24 uur een nieuwe email sturen. PS: En spam folder gecheckt, etc, etc.

[ Voor 6% gewijzigd door Bolukan op 04-10-2024 16:37 ]


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 00:20
Bolukan schreef op vrijdag 4 oktober 2024 @ 16:36:
Dat heb ik afgelopen 3 dagen ook al gedaan, en ik wil niet elke 24 uur een nieuwe email sturen. PS: En spam folder gecheckt, etc, etc.
Hm, bij mij reageerden ze meestal wel binnen een dag of 2. Misschien kun je überhaupt geen email van hun ontvangen (en dus ook geen reacties op je vraag)?

Acties:
  • +3 Henk 'm!

  • ludop
  • Registratie: Oktober 2014
  • Laatst online: 21-05 10:39
CodeCup admin hier!

Leuk om dit forum hier te vinden. Om te reageren op de bovenstaande punten:
- De competitie is inderdaad morgen op een zondag. Dat was niet de bedoeling maar we laten het nu voor nu zo, en in de toekomst zijn ze wel weer op een zaterdag.
- Wat betreft C#, ja die heb ik afgelopen maand geinstalleerd. Ik gebruik zelf geen C# maar wist dat Mono werkte. Nu zie ik dat het soort van inactief geworden is sinds het (indirect) gekocht is door Microsoft. Misschien ga ik eens kijken of dotnet ook aan de praat te krijgen is...
- Bolukan: ik heb je een wachtwoord persoonlijk geemaild want je mailclient blacklist ons voor een of andere reden.

Acties:
  • 0 Henk 'm!

  • Bolukan
  • Registratie: Oktober 2002
  • Laatst online: 01-04 21:59
Zoals jullie lezen, is mijn login-probleem opgelost, veel dank daarvoor. We hadden bezoek gisteren, dus vandaag doe ik niet meer mee, ik zag dat deze competitieronde al 37 deelnemers kent. Een van jullie erbij?

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 00:20
Ik heb al een inzending gedaan (m'n naam staat in m'n Tweakers profiel). Wel met een vrij simpele speler tot nu toe.

Acties:
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 23:25
ludop schreef op zaterdag 5 oktober 2024 @ 17:49:
CodeCup admin hier!

...
- Wat betreft C#, ja die heb ik afgelopen maand geinstalleerd. Ik gebruik zelf geen C# maar wist dat Mono werkte. Nu zie ik dat het soort van inactief geworden is sinds het (indirect) gekocht is door Microsoft. Misschien ga ik eens kijken of dotnet ook aan de praat te krijgen is...
...
code:
1
https://learn.microsoft.com/en-us/dotnet/core/install/linux


De laatste Ubuntu versie is .NET 8, dus best recent.

[ Voor 5% gewijzigd door farlane op 06-10-2024 13:55 ]

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Acties:
  • 0 Henk 'm!

  • Corniel
  • Registratie: April 2002
  • Laatst online: 31-03 14:56

Corniel

De wereld is gek!

Ik heb mijn eerste bot geupload. Ik had iets meer tijd nodig om een (hopelijk bugvrije) bit-board implementtie te knutselen. Ik ben nog steeds geen goed idee wat een nuttige strategie is, maar mijn bot doet nu die goed genoeg lijken om een random bot in ieder geval altijd te verslaan, dus dat is een begin.

while (me.Alive) {
me.KickAss();
}


Acties:
  • 0 Henk 'm!

  • Bolukan
  • Registratie: Oktober 2002
  • Laatst online: 01-04 21:59
De emerging strategie van winnende bots bekijken, helpt me daarbij. (Niet dat het iets zegt over hoe je dat bereikt qua programmeren.)
Ik zie bots de punten van een andere kleur gelijk kapot maken. Zelf heb ik geredeneerd dat de meeste punten worden gehaald met de buitenste dots (soort heatmap), maar ik zie dat niet terug. Ik ben bezig met een analyse hoe je dots onveranderlijk kunt maken, of dat taktisch is in te zetten. Zoals je leest, ben ik niet van de monte carlo AI, maar gewoon een goede strategie uitprogrammeren.

Acties:
  • +1 Henk 'm!

  • Corniel
  • Registratie: April 2002
  • Laatst online: 31-03 14:56

Corniel

De wereld is gek!

Bolukan schreef op maandag 7 oktober 2024 @ 19:03:
(..)

Zoals je leest, ben ik niet van de monte carlo AI, maar gewoon een goede strategie uitprogrammeren.
Ik zou zeggen dat je de beste bot krijgt als je die dingen combineert.

while (me.Alive) {
me.KickAss();
}


Acties:
  • 0 Henk 'm!

  • Corniel
  • Registratie: April 2002
  • Laatst online: 31-03 14:56

Corniel

De wereld is gek!

Zijn er mensen die al iets willen delen over waar ze nu staan? Ikzelf zit op het pad van Monte Carlo. Bij het selecteren van welke moves ik doe probeer ik een educated guess te doen. Dit lijkt nipt beter te zijn dan pure random (voor mijn bot).

Ik heb toegang tot een bot die wel heeft meegedaan aan het tweede test event. De mijne scoort wel beter, maar geen idee wat dit binnen het toernooi zou betekenen.

while (me.Alive) {
me.KickAss();
}


Acties:
  • +1 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 00:20
Corniel schreef op woensdag 9 oktober 2024 @ 14:46:
Zijn er mensen die al iets willen delen over waar ze nu staan? Ikzelf zit op het pad van Monte Carlo. Bij het selecteren van welke moves ik doe probeer ik een educated guess te doen. Dit lijkt nipt beter te zijn dan pure random (voor mijn bot).
Uit concurrentie-oogpunt weet ik niet of ik al te veel wil zeggen. Mijn huidige bot kijkt 1 (halve) zet vooruit en probeert dan de situatie te beoordelen, waarmee ik net iets beter ben dan player3 uit de CAIA distributie. Ik ben aan het proberen om twee halve zetten te doen (dus mijn zet, een random tegel, en dan de tegenstanders' zet) maar dat is nog niet eenvoudig om snel genoeg te krijgen, gezien het grote aantal mogelijkheden voor zowel de random tegel als het aantal plekken op het bord waar die geplaatst kan worden.

Acties:
  • 0 Henk 'm!

  • Corniel
  • Registratie: April 2002
  • Laatst online: 31-03 14:56

Corniel

De wereld is gek!

@Soultaker Ik snap die overwegingen.Je scoorde des al niet te min niet slecht bij de (9e van de 37) bij de tweede test-run toch?

while (me.Alive) {
me.KickAss();
}


Acties:
  • 0 Henk 'm!

  • allemensen
  • Registratie: Maart 2021
  • Laatst online: 31-05 19:12
Ik gebruik nu MCTS, maar met deze hoge branching factor is het inderdaad lastig ver vooruit te kijken. Wat vooral helpt is hoe je rekening houdt met de kleur van je tegenstander. Daar niet rekening mee houden (zoals de voorbeeldspelers lijken te doen) is niet zo goed, natuurlijk. Zo'n beetje elke variant die daar wél rekening mee houdt wint al van alle voorbeeldspelers, was mijn ervaring. Daar is denk ik nog steeds wat te winnen.

Dat beiden zie je dan ook terug in de hoogste bots: ze maken de boxes van de tegenstanders direct stuk (dat is vaak makkelijk), maar ik zie ze ook nog niet ver vooruit denken.

Enne, ik wil ook niet teveel weggeven, maar ik heb voor mijn gevoel nog niet iets spannends gemaakt. Blijkbaar is dat nu nog goed genoeg voor plek 4 (of komt dat door toeval?).

Acties:
  • 0 Henk 'm!

  • Corniel
  • Registratie: April 2002
  • Laatst online: 31-03 14:56

Corniel

De wereld is gek!

@allemensen Ik durf niet te zeggen hoe groot de toevalsfactor is. We gaan het wel zien.

while (me.Alive) {
me.KickAss();
}


Acties:
  • +2 Henk 'm!

  • Corniel
  • Registratie: April 2002
  • Laatst online: 31-03 14:56

Corniel

De wereld is gek!

Ik heb de resultaten van afgelopen competitie omgezet in Elo-ratings. Dit geeft mij een beter beeld van de verschillen dan de puntentelling die de organisitie heeft gecommuniceerd.

PosEloBot
12215Bullenbeisser
22094Ingo_R2
32091dotdotdot
42077MikeTyson
52043Boxer
61999Simple
71997carre_v2
81970v6
91898ltbox
101895L7
111876GH16v3
121873Jelle
131849pardhav
141810ZBox
151803dimwit10k
161798HopeYouLikeMe
171786count
181754Dummy2
191718BoxBot
201716McBox_1_2
211685Anila8
221682Rapunzel
231668unbox
241659Kph
251606CosmicCuttlefish
261605ForrestGump
271578Randobox
281491WtrDumbBox
291338dummy
301284LeoJean110
31987Test Player A
32941Rando
33872bokser003
34852R4N4R4M4
35835Boxje
36825Tardis
37762pipo
38697agent


Ik heb van mijn eigen bot alleen data tegen Anila8.

@ludop welke bot is Test Player A? Is dat player1, player2, of player3 uit Caisa, of een andere?

while (me.Alive) {
me.KickAss();
}


Acties:
  • +1 Henk 'm!

  • Joep
  • Registratie: December 2005
  • Laatst online: 00:00
Ik ben blij dat er sinds deze keer C# ondersteund wordt. Ik wil deze keer i.i.g. meedoen en een bot maken die op z'n minst geen foute output geeft :+

Acties:
  • 0 Henk 'm!

  • Corniel
  • Registratie: April 2002
  • Laatst online: 31-03 14:56

Corniel

De wereld is gek!

@Joep een beetje meer ambitie. Ik zou zeggen dat de lat toch ligt op een bot die in ieder geval sterker is en Caisa player2 en Caisa player3 (en dus gehakt maakt van de random bot).

while (me.Alive) {
me.KickAss();
}


Acties:
  • +1 Henk 'm!

  • Joep
  • Registratie: December 2005
  • Laatst online: 00:00
Ja dat zie ik wel hoor :z Ik ken mezelf, heb het al druk genoeg

Acties:
  • 0 Henk 'm!

  • Corniel
  • Registratie: April 2002
  • Laatst online: 31-03 14:56

Corniel

De wereld is gek!

Ben ik de enige die het (soms) frustrerend vindt dat je dan denkt: hé, ik heb een goed idee, en dat dan implementeert, maar pas na (heel veel) simulaties met enige zekerheid kan zeggen dat het ook daadwerkelijk iets heeft opgeleverd qua speelsterkte van je bot? (En meestal is het antwoord in mijn geval:nee, of, yeah, 10 elo punten).

while (me.Alive) {
me.KickAss();
}


Acties:
  • 0 Henk 'm!

  • Joep
  • Registratie: December 2005
  • Laatst online: 00:00
@Corniel Je zou een programmaatje kunnen schrijven dat zelf bots tegen elkaar laat strijden. Dan heb je de volledige controle. Dat hebben sommigen bij voorgaande wedstijden ook gedaan.

Ik heb i.i.g. m'n eerste doelstelling al behaald lijkt het :>

Nu een eerste strategie coderen :)

Edit: Ik neem aan dat als je progammaatje foute input output geeft, dit terug te zien is in de refereelogs? :+

[ Voor 16% gewijzigd door Joep op 17-10-2024 22:09 ]


Acties:
  • +1 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 00:20
@Corniel, dat overkomt mij ook heel vaak. Ook met performance-optimalisaties, dat je bijvoorbeeld denkt dat je iets sneller kunt maken door het op een andere manier te implementeren, maar dan blijkt het trager te zijn, en is al het werk voor niets.

Maar ja, dat hoort er een beetje bij. Ik probeer de moed er in te houden door te denken aan de uitspraak van Edison: “I have not failed. I found a 1000 ways that won't work.”
Joep schreef op donderdag 17 oktober 2024 @ 18:49:
@Corniel Je zou een programmaatje kunnen schrijven dat zelf bots tegen elkaar laat strijden. Dan heb je de volledige controle. Dat hebben sommigen bij voorgaande wedstijden ook gedaan.
Dit doe ik ook altijd. Maar de makkelijkste manier om dat te doen is CAIA te gebruiken om lokaal een test-competitie te draaien. (Onder Linux doet competition.sh dat. Je kunt je speler tegen zichzelf laten spelen door 'm simpelweg te kopiëren.)
Edit: Ik neem aan dat als je progammaatje foute input geeft, dit terug te zien is in de refereelogs? :+
Foute output bedoel je neem ik aan, en inderdaad, de referee checkt dat. Dus als je geen fouten te zien krijgt dan werkt het goed! Dit wordt ook nog gecheckt als je je programma uploadt op codecup.nl.

Acties:
  • 0 Henk 'm!

  • allemensen
  • Registratie: Maart 2021
  • Laatst online: 31-05 19:12
@Corniel Ja, dat komt zeker bekend voor, helaas. Ik heb weinig intuitie bij Elo, maar dat komt denk ik neer op 0.057 log-odds. Dat is inderdaad niet zoveel.

Wat helpt is niet alleen naar winst/verlies kijken, daarmee gooi je informatie weg over het puntenverschil. Daardoor heb je meer simulaties nodig. Nadeel, net als bij alleen winst/verlies, is dat de wedstrijd een andere puntenberekening heeft.

In mijn blog van twee jaar geleden schrijf ik ook iets over ideeën en hoe je ze snel kan testen. Samenvatting: snel je ideeën kunnen testen is belangrijk. Dat was voor mijn programma toen mogelijk, misschien heb je er iets aan.

Acties:
  • +1 Henk 'm!

  • Corniel
  • Registratie: April 2002
  • Laatst online: 31-03 14:56

Corniel

De wereld is gek!

@Joep Zo'n programma heb ik. Maar dan heb je alleen data over hoe je (hopelijk net betere) versie van je programma het doet tegen je vorige edities. En dat is gewoon verre van zaligmakend. En succes met een betere strategie.

@Soultaker Ja, of, en dat heb ik deze competitie een aantal keer gehad: dan is het sneller, maar zie ik het niet/nauwelijks meer terug te vinden in (betere) resultaten.

Mijn laatste versie scoort best okay tegen de drie bots (Caias v1/Test player 1 tellen we maar helemaal niet heen) die enige referencie geeft. Alleen Anila8 deed mee aan de tweede ronde (en werd daar 20e).

code:
1
2
3
4
5
6
    20+    2=    3-   25#  84,00% (Beatboxer v1.26 - Caisa v3)
    22+    1=    2-   25#  90,00% (Beatboxer v1.26 - Anila8 v1)
    23+    0=    2-   25#  92,00% (Beatboxer v1.26 - Caisa v2)
     4+    0=   20-   24#  16,67% (Caisa v3  - Beatboxer v1.26)
     4+    0=   20-   24#  16,67% (Anila8 v1 - Beatboxer v1.26)
     1+    0=   23-   24#   4,17% (Caisa v2  - Beatboxer v1.26)


Dit is (denk ik) mijn beste versie tot nu toe, maar ondanks de eerder geplaatste elo resultaten is niet zo dat ik veilig kan inschatten hoe goed ik het tov het huidige deelnemersveld zal doen. Als is het maar omdat Anila8 zijn volle tijd verre van gebruikt en mijn bot wel. En lokaal heb ik duidelijk meer rekenkracht dan op de test server.

Anyhow, ik hoop nog wat nuttige verbeteringen door kan voeren, en in het linker rijtje kan eindigen.

while (me.Alive) {
me.KickAss();
}


Acties:
  • 0 Henk 'm!

  • Corniel
  • Registratie: April 2002
  • Laatst online: 31-03 14:56

Corniel

De wereld is gek!

@allemensen Zorgen dat ik in het bepalen wat de beste versie gebruik maak van de punten zoals door de competitie toegekend is zeker iets wat ik nog een keertje moet. Het fijne aan Elo is dat ik er allerlei mooie statistische uitspraken kan doen. Nu kan dat ook door iets als de uitslag (210/300 - 90/300) door te voeren, maar ik moet nog eens kijken of mijn test arena daar (al) goed mee overweg gaat.

while (me.Alive) {
me.KickAss();
}


Acties:
  • 0 Henk 'm!

  • Joep
  • Registratie: December 2005
  • Laatst online: 00:00
Soultaker schreef op donderdag 17 oktober 2024 @ 19:09:
Foute output bedoel je neem ik aan, en inderdaad, de referee checkt dat. Dus als je geen fouten te zien krijgt dan werkt het goed! Dit wordt ook nog gecheckt als je je programma uploadt op codecup.nl.
Dat bedoelde ik inderdaad. Ik heb het even getest en zie dat er dan inderdaad in de competitionlogs ILLEGAL komt te staan. In de refereelogs komt dan nog wat extra info te staan (out of bounds/too many overlaps).

Ik zie dat ik i.i.g. geen illegale moves heb gemaakt :)

Acties:
  • 0 Henk 'm!

  • Corniel
  • Registratie: April 2002
  • Laatst online: 31-03 14:56

Corniel

De wereld is gek!

Met de opmerkingen van @allemensen aan de slag gegaan. Een nieuwe Elo lijst, maar niet met 1.0, 0.5, en 0.0 scores, maar scores die aageven welk deel van 300 punten een bot had in een wedstrijd. Dus als je met een delta van 10 punten wint, haal je 210/300 = 0.7.

De Elo verschillen worden hierdoor een stuk kleiner, maar het geeft idd betere inzichten in hoe er gescoord gaat worden in de competitie, en je hebt veel meer info uit testruns. Bedankt voor de tip!

[
PosEloBot
11753.9Bullenbeisser
21733.8Ingo_R2
31729.8MikeTyson
41728.3dotdotdot
51721.3Boxer
61712.9carre_v2
71711.6Simple
81708.5v6
91682.9L7
101680.4ltbox
111675.0GH16v3
121667.8Jelle
131663.9pardhav
141654.1dimwit10k
151653.7ZBox
161651.7HopeYouLikeMe
171649.2count
181645.9Dummy2
191629.2McBox_1_2
201621.5BoxBot
211614.6unbox
221614.2Rapunzel
231608.7Anila8
241607.0Kph
251592.0CosmicCuttlefish
261591.6ForrestGump
271581.1Randobox
281556.6WtrDumbBox
291527.5dummy
301504.9LeoJean110
311443.0R4N4R4M4
321439.9Rando
331438.9Caisa
341431.4bokser003
351428.7Boxje
361427.2Tardis
371393.2pipo
381324.1agent


Merk op dat de ranglijst enigszins afwijkt van de ranglijst van de run, omdat hier gecompenseerd wordt voor het relatief meer tegen zwakke dan wel sterke tegenstanders spelen.

while (me.Alive) {
me.KickAss();
}


Acties:
  • +2 Henk 'm!

  • Corniel
  • Registratie: April 2002
  • Laatst online: 31-03 14:56

Corniel

De wereld is gek!

Nog twee dagen voor de derde (voorronde). Ik ben erg benieuwd.

Ik heb nog een tip voor de C# gebruikers onder ons (al zal het voor meerdere talen werken). Gebruik een Defined Constant om local test runs te corrigeren voor het verschil in rekenkracht tussen je lokale testomgeving en competitie server:

C#:
1
2
3
4
5
6
7
8
public static class Env
{
#if LOCAL_TEST
    public const double Factor = 0.19;
#else
    public const double Factor = 1.00;
#endif
}


Door deze te definen in je eigen compilatie heb je dan - zonder er ooit nog over na te hoeven denken - je correctiefactor ingebakken (en niet in de versie op de competitie server).

while (me.Alive) {
me.KickAss();
}


Acties:
  • +1 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 00:20
@Corniel Goede tip. Maar is jouw lokale machine echt ruim 5x zo snel als de server, of was dat slechts een voorbeeld? En dan natuurlijk de vraag: hoe bepaal je die factor precies?

Acties:
  • +1 Henk 'm!

  • Corniel
  • Registratie: April 2002
  • Laatst online: 31-03 14:56

Corniel

De wereld is gek!

@Soultaker Ik log het aantal moves per seconde. Dat houd ik bij omdat het ook een goede maat is om te bepalen of zaken sneller zijn geworden (of juist langzamer). En ik kwam idd tot 5 keer zo snel. Ik ga nog een paar kleine dingen proberen voor a.s. zaterdag. Als ik een 'stabiele' versie heb ik ga hem weer uploaden en kijken welke verschillen ik dan waarneem.

Voordeel van dit (nu aangenomen) rekenkracht verschil is dat ik 5 x meer simulatie potjes ter test kan draaien. :)

while (me.Alive) {
me.KickAss();
}


Acties:
  • 0 Henk 'm!

  • Joep
  • Registratie: December 2005
  • Laatst online: 00:00
Heb zin om vanavond een eerste strategie te programmeren om morgen mee te doen :Y Er mogen van mij nog wel meer spelers meedoen. M'n collega's hebben er helaas geen zin in }:| Ben alleen bang dat er met een oproep op bepaalde andere kanalen teveel mensen gaan meedoen en/of gaan samenwerken :/

Acties:
  • +1 Henk 'm!

  • Corniel
  • Registratie: April 2002
  • Laatst online: 31-03 14:56

Corniel

De wereld is gek!

Joep schreef op vrijdag 25 oktober 2024 @ 15:15:
Ben alleen bang dat er met een oproep op bepaalde andere kanalen teveel mensen gaan meedoen en/of gaan samenwerken :/
Teveel, dat kan toch niet? (Waar ben je bang voor?)

Zelf heb ik mijn via LinkedIn een oproep gedaan, hoe meer zielen, hoe meer vreugde immers.

while (me.Alive) {
me.KickAss();
}


Acties:
  • 0 Henk 'm!

  • Corniel
  • Registratie: April 2002
  • Laatst online: 31-03 14:56

Corniel

De wereld is gek!

-

[ Voor 99% gewijzigd door Corniel op 25-10-2024 17:22 . Reden: Vekeerd gekeken ]

while (me.Alive) {
me.KickAss();
}


Acties:
  • +1 Henk 'm!

  • Corniel
  • Registratie: April 2002
  • Laatst online: 31-03 14:56

Corniel

De wereld is gek!

De resultaten van vanmorgen zijn bekend. Ik heb dit maal zowel de rating op basis van de punten (derde colomn) als op basis van het result (winst/remise/verlies, laatste colomn) toegevoegd.

PosBotPointsElo
1Bullenbeisser 1710,51974
2cuadrado 1709,71966
3Ingo_R2 1706,01941
4Boxer 1686,81874
5carre_v2 1672,71826
6b 1659,81778
7MikeTyson 1658,21766
8v7d 1652,61767
9dotdotdot 1649,71755
10Beatboxer 1641,31736
11Simple 1623,41670
12Jelle 1613,91658
13Marty_20241024 1611,71638
14ZBox 1606,41626
15HopeYouLikeMe 1604,01624
16L7 1602,91603
17unbox 1593,61581
18McBox_1_3 1591,91580
19pardhav 1586,51575
20count 1574,91535
21dimwit10k 1574,11527
22BoxBot 1568,51512
23Program 1565,31504
24GH16v3 1561,41499
25LeBarrage 1553,41484
26Rapunzel 1548,51443
27gpdraft1 1546,21437
28Randobox 1527,01399
29CosmicCuttlefish 1519,01362
30Anila8 1510,11355
31ForrestGump 1499,31312
32WtrDumbBox 1489,51317
33flo6a 1482,61333
34Test5 1479,81244
35leojean890 1471,51331
36BoxerBot 1456,81145
37Pipo 1449,71303
38bokser003 1394,11141
39ltbox 1386,51150
40Rando 1384,81120
41Tardis 1382,71146
42Caisa v1 1381,51117
43GetOutTheBoxing... 1367,41142
44a 1363,61062
45agent1 1362,91081
46Box_Bot 1286,61013


Voorzichtige conlcusie: Bullenbeisser is onaantastbaar. Zelf ben ik niet ontevreden met een 10e plek. Kijken of ik dat een beetje vast kan houden, en wellicht nog iets naar boven kan kjken. O-)

while (me.Alive) {
me.KickAss();
}


Acties:
  • 0 Henk 'm!

  • allemensen
  • Registratie: Maart 2021
  • Laatst online: 31-05 19:12
@Corniel top overzicht!

Ik ben er niet echt meer aan toegekomen de laatste weken, mijn bot is onveranderd sinds vorige testwedstrijd. Op zich is plek 6 (plek 9 bij Corniel's lijstje) niet slecht, maar ik denk dat er nog meer in zit voor mij, zodra ik er weer wat moeite in stop. En dat moet ook, anders zak ik vanzelf omlaag als de rest beter wordt.

Bullenbeisser/Tapani Utriainen is zeker een van de favorieten, hij scoort afgelopen jaren altijd goed. Maar op het moment is zijn voorsprong echt niet heel groot.

Acties:
  • +1 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 00:20
Ik heb nog geen updates doorgevoerd dus ben niet verbaasd dat ik tot een vijftiende plek gedemoveerd ben.
Corniel schreef op zaterdag 26 oktober 2024 @ 10:49:
De resultaten van vanmorgen zijn bekend. Ik heb dit maal zowel de rating op basis van de punten (derde colomn) als op basis van het result (winst/remise/verlies, laatste colomn) toegevoegd.
Hoe vertaalt een verschil in ELO zich naar een kans op winst? Zelfs mijn simpele speler heeft een keer gelijkgespeeld tegen de nummer 1, en gewonnen van de nummer 2. Dus het lijkt dat toeval een vrij grote factor is.

Acties:
  • +1 Henk 'm!

  • Corniel
  • Registratie: April 2002
  • Laatst online: 31-03 14:56

Corniel

De wereld is gek!

Neem Bullenbeizer: die heeft een (op punten gebaseerde elo) die 200 hoger is dan Anila8. Dat betekent dat de verwachting is dat eerstgenoemde 75% van de punten pakt in een onderlinge wedstrijd, maw: dat er gemiddeld met 25 punten verschil wordt gewonnen (er van uit gaande dat eerst genoemde alles wint).

In de tweede kolom betekent 200 elo punten verschil dat als Bullenbeizer tegen b 75% van de overwinningspunten pakt. Iets als 75 keer winst, en 25 keer verlies, of met wat remises er bij: 70 overwinningen, 10 remises, en 20 nederlagen.

In jouw geval zou je op basis van het Elo-verschil verwachten dat jouw bot slechts 10% van de punten pakt tegen de nummers 1 en 2. Daar heb je het (op basis van deze Elo's) dus relatief goed tegen gedaan. Tegen mijn bot heb je volgens mij twee keer verloren, terwijl je volgens die elo verschillen 33% had moeten pakken.

Laten we het er op houden dat geen enkel systeem perfect is.

Zie Elo rating system

[ Voor 0% gewijzigd door Corniel op 27-10-2024 00:02 . Reden: Typos ]

while (me.Alive) {
me.KickAss();
}


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 00:20
Let op: de volgende testcompetitie is morgen. Als je een (nieuwe) inzending wil doen moet je dat dus vandaag doen (of uiterlijk voor 6 uur 's ochtends op zaterdag).

Zelf heb ik een aanzienlijke verbetering weten door te voeren in m'n speler. Ik hoop dat ik daarmee in de top 10 kan inbreken, maar we zullen het zien!

Acties:
  • 0 Henk 'm!

  • Corniel
  • Registratie: April 2002
  • Laatst online: 31-03 14:56

Corniel

De wereld is gek!

Ik zit een beetje vast. Ik heb twee weken lang van alles geprobeerd om m'n bot beter te maken, maar zit denk ik op een dood spoort. (Mijn versie van de laatste testronde was dezelfde als die van de ronde er voor).

while (me.Alive) {
me.KickAss();
}


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 00:20
Corniel schreef op woensdag 20 november 2024 @ 07:47:
Ik zit een beetje vast. Ik heb twee weken lang van alles geprobeerd om m'n bot beter te maken, maar zit denk ik op een dood spoort. (Mijn versie van de laatste testronde was dezelfde als die van de ronde er voor).
Dat is vervelend... ik zat ongeveer in hetzelfde schuitje vorige testcompetitie, maar in de laatste heb ik wel een flinke sprong weten te maken. Soms loont het om het helemaal over een andere boeg te gooien als je huidige denkrichting niets meer oplevert.

Interessant genoeg was jouw speler 1 van de slechts 5 waarvan ik in de afgelopen testcompetitie verloren heb, dus ofwel je had veel mazzel, of je doet toch iets goed!

Acties:
  • +1 Henk 'm!

  • Corniel
  • Registratie: April 2002
  • Laatst online: 31-03 14:56

Corniel

De wereld is gek!

@Soultaker Ik denk zeker dat ik iets goed doe. Ik bepaal vanuit de positie alle mogelijke nieuwe posities, speel die pseudo-random uit en kies de beste voortzetting. Dit doek ik op de testserver in een tempo waarbij ik ca 200k posities bekijk per seconde vanaf de begin positie (en lokaal haal ik ca 1M/s).

Mijn simulaties zijn niet helemaal random, maar alles wat ik van af een gegeven moment probeerde leverde geen verbeteringen meer op. Misschien dat ik nog iets probeer, maar wellicht dat ik het er ook bij laat. AoC komt er immers ook aan, en er moet af en toe ook gewerkt worden.

while (me.Alive) {
me.KickAss();
}

Pagina: 1