...
Een meerkamp competitie wordt over meerdere avonden gespeeld. De groepen binnen de meerkampen zijn meestal gevuld met 4 spelers maar dit kunnen er ook meer zijn. Als er binnen de meerkamp competitie 5 spelers of een andere oneven getal zitten dan moet elke speler één keer een ronde uitzitten. Voor het uitzitten van een ronde ontvangt de speler een punt net als bij een overwinning alleen wordt de rating van de speler niet bijgewerkt. Bij een dubbelronde meerkamp zou dat natuurlijk twee keer per speler zijn.
Hoe krijgen wij dit werkend in onze Java applicatie?
Het meerkamp indelingssysteem lijkt mij redelijk simpel. Als de indeling gelijk wordt gedaan kan dit gebeuren met een simpele formule. Met van te voren een check of er even aantallen zijn binnen de groep is het mogelijk om het systeem gewoon door de lijst van spelers te gaan en ze een voor een op een willekeurige wijzen in te delen.
(Het is nog niet bekend welke spelers hoe de spelers zouden worden ingedeeld, is het willekeurig of is het bijvoorbeeld hoogste rating is nummer 1 en dan laagste is nummer 4. Wie bepaalt wie als eerste wit is of moet dit willekeurig gedaan worden per ronde?)
Zwitsers
.
Hoe krijgen wij dit werkend in onze Java applicatie?
Het meerkampindelingssysteem is een redelijk simpel systeem. Bij een enkelrondige meerkamp met 4 spelers speelt elke speler 3 wedstrijden om tegen iedereen te hebben gespeeld. Bij een dubbelrondige meerkamp met 4 spelers speelt elke speler 6 wedstrijden om tegen iedereen te hebben gespeeld.
Voor dit project zal de meerkamp altijd dubbelrondig worden gespeeld. De functie die verantwoordelijk zal zijn voor het aanmaken van de indelingen voor de meerkampen, hoeft alleen te controleren of het aantal spelers oneven is. Als dit is voltooid, kan de functie alle rondes bepalen.
Het belangrijkste is dat elke speler twee keer tegen elke andere speler speelt binnen de gemaakte indeling. Bij een oneven aantal spelers moet er elke ronde een speler zijn die een punt krijgt voor zijn oneven wedstrijd, terwijl dit niks doet voor de rating van de speler.
Zwitsers
Zwitsers is het meest complexe indelingsysteem dat door Klukkluk Zwitsers is het meest complexe indelingsysteem dat voor klukkluk afgehandeld moet kunnen worden. Bij zwitsers is er maar een groep van spelers, en het doel van zwitsers is om mensen in deze groep nooit 2 keer tegen elkaar te laten spelen, en spelers met hogere scores tegen spelers met vergelijkbare sccores te matchen. Een toernooi dat ingedeelt ingedeeld wordt met een zwitserse indeling vind plaats over meerdere sessies, tussen deze sessies moeten de resultaten van de vorige sessie ingevoerd zijn, want deze zijn relevant voor het genereren van een indeling van de volgende ronde.
Voor alle rondes worden de spelers gesorteerd van hoog naar laag. Hierbij wordt eerst gekeken naar score binnen de wedstrijd, daarna naar weerstandspunten, daarna naar SB-punten en daarna een willekeurig nummer. Het aantal rondes dat met zwitsers gespeeld kan worden is gelimiteerd, gezien spelers niet meerdere keren tegen elkaar mogen spelen, maar kan verschillen. Je kan het Een toernooi met 20 spelers kan maximaal 10 rondes hebben, maar er kunnen bijvoorbeeld ook maar 4 of 6 of 7 rondes in totaal gespeeld worden. Je kan het aantal rondes dus instellen in Klukkluk bij het aanmaken van de competitie.
De kleur die de spelers spelen wordt bepaald door de kleuren die de spelers al gespeeld hebben. Iedere speler heeft een kleurensaldo die vermeerdert als er gespeeld wordt met wit en vermindert als er gespeeld wordt met zwart. Als iemand 2 keer achter elkaar dezelfde kleur gespeeld heeft in de vorige twee matches moet die persoon met de andere kleur spelen. Anders moet de persoon met +1 saldo wit spelen, anders moet de persoon met -1 zwart spelen, anders moet een van de spelers de tegenovergestelde kleur kiezen, als dat niet lukt is het randomwillekeurig. Bij een absolute kleurvoorkeur (2 keer achter elkaar een kleur, of kleursaldo van 2 of -2) moeten de matches zo ingedeeld worden dat deze persoon niet weer als deze kleur speelt. In de situatie waarbij beide spelers dezelfde kleuren hebben gespeeld in de laatste ronde pak je of de hoogste, of deel je ze in volgens de laatste keer dat ze niet dezelfde kleur hadden. Bij de eerste ronde krijgen de spelers met een oneven nummer wit, en de spelers met een even nummer zwart.
...
Als een speler uit een puntengroep naar beneden schuift mag deze speler dat niet weer in de volgende ronde krijgenniet weer naar beneden schuiven. Ditzelfde geld voor de persoon met wie deze wordt ingedeeld. Dit heet een float. Een persoon met een float mag niet dezelfde float 2 keer krijgen.
...
Het aantal rondes moet niet hoger worden dan het vooraf bepaalde maximaal aantal rondes.
twee Twee spelers mogen niet twee keer tegen elkaar spelen.
een Een speler mag niet 2 keer in een toernooi een Bye krijgen.
een Een speler mag niet drie keer achter elkaar dezelfde kleur hebben.
een Een speler mag niet een kleursaldo hebben van minder dan -2 of meer dan 2.
...
Zwitsers is een extreem gecompliceerd systeem. Zwitsers is dus al vaak in software geimplementeerd. Fide heeft zelfs regels rond het maken van een pairing engine, en er zijn niet veel die hier langs komen. Het lijkt dus een beter idee om een van deze andere pairings engines over te nemen in klukklukKlukkluk. Een van deze is zelfs geschreven in Java. JaVaFo is een pairing engine die toevallig is geschreven in Java, en dit is gratis te gebruiken als je benoemd dat je JaVaFo gebruikt, en hierbij de naam van JaVaFo correct spelt (JaVaFo, javafo, of JAVAFO).
Heller
Het indelingssysteem Heller wordt binnen UVS gebruikt voor de periodecompetities. Het heller indelingssysteem heeft ongeacht het aantal spelers altijd 5 rondes. De ontvangen voorbeelden bevatten schema's voor 8 ,10 en 12 spelers. Binnen het Heller systeem zit er variatie in de verschillende rondes, het kleursaldo (Wie begint met welke kleur) en de som tegenstanders.
De ronde indeling wordt gelijk al bepaald voor alle rondes i.p.v. dat de winnaar van het ene potje speelt tegen de winnaar van een andere.
10 Spelers 5 Ronden
Schema 1; het oorspronkelijke met voorgestelde aanpassingen in wit/zwart verdeling
...
JaVaFo werkt met het FIDE toernooi report file protocol (trf). En kan aangeroepen worden in een programma als een utility class. Dit kan met streams gedaan worden voor logging redenen, of met Strings, wat voor ons beter is.
Dit programma kan via een adapter pattern toegevoegd worden aan Klukkluk, zodat de code niet hard gekoppeld is aan JaVaFo. Elke keer dat het aangeroepen wordt moeten alle entiteiten namelijk naar een string vertaald worden.
Heller
Het indelingssysteem Heller wordt binnen UVS gebruikt voor de periodecompetities. Het heller indelingssysteem heeft ongeacht het aantal spelers altijd 5 rondes. De ontvangen voorbeelden bevatten schema's voor 8 ,10 en 12 spelers. Binnen het Heller systeem zit er variatie in de verschillende rondes, het kleursaldo (Wie begint met welke kleur) en de som tegenstanders.
De ronde indeling wordt gelijk al bepaald voor alle rondes i.p.v. dat de winnaar van het ene potje speelt tegen de winnaar van een andere.
10 Spelers 5 Ronden
Schema 1; het huidige in Rokade
Schema 1; het huidige in Rokade
...
Schema 2, nieuw
P1 | P2 | P3 | P4 | P5 | |
R1 | 91-110 | 2-69 | 103-36 | 4-87 | 75-58 |
R2 | 7-1-6 | 58-2 | 9-3-8 | 710-410 | 6-95 |
R3 | 35-1 | 2-4 | 3-8 | 10-56 | 67-109-7 |
R4 | 1-43 | 36-2 | 104-5 | 68-78 | 9-910 |
R5 | 51-12 | 24-3 | 97-35 | 46-107 | 8-610 |
Schema 32, nieuw
P1 | P2 | P3 | P4 | P5 | ||
R1 | 9-1-8 | 2-6 | 107-3 | 94-48 | 7-5-6 | |
R2 | 71-16 | 95-2 | 3-8 | 7-4-5 | 10-69 | |
R3 | 3-1 | 2-4 | 3-2 | 8-5 | 6-10 | 910-7 |
R4 | 21-14 | 63-32 | 410-105 | 56-7 | 8-9 | |
R5 | 5-1-6 | 42-29 | 57-3 | 94-710 | 8-106 |
Schema 43, nieuw
P1 | P2 | P3 | P4 | P5 | ||
R1 | 91-18 | 2-610 | 37-83 | 9-4-7 | 105-56 | |
R2 | 7-1 | 9-72 | 23-58 | 64-35 | 10-46 | 8-9 |
R3 | 1-4-1 | 3-2 | 8-5 | -67-89 | 10-97 | |
R4 | 2-1 | 6-3 | 24-410 | 8-56-107 | 78-9 | |
R5 | 51-16 | 94-2 | 5-3 | 9-107 | 4-8 | 6-7 |
...
-10 |
Schema 14, het oorpronkelijkenieuw
P1 | P2 | P3 | P4 | P5P6 | |||||||||||
R1 | 10-1 | 6-2 | 12-3 | 4-8 | 9-5 | 11-7 | 9-1 | R2 | 1-9 | 2-86 | 73-38 | 4-127 | 5-11 | 10-65 | |
R3R2 | 1-7-1 | 2-105 | 6-3-11 | 510-4 | 128-69-8 | ||||||||||
R4R3 | 4-1 | 3-2 | 5-6 | 7-8-7 | 1210-9 | 11-10 | |||||||||
R5R4 | 1-3 | 2-4 | 8-5 | 6-410 | 7-9 | 8-11 | 10-12|||||||||
R5 | 5-1 | 9-2 | 3-10 | 4-8 | 6-7 |
12 Spelers 5 ronden
Schema 1; het huidige in Rokade
...
P1 | P2 | P3 | P4 | |
R1 | 6-1 | 5-2 | 3-8 | 4-7 |
R2 | 1-7 | 2-8 | 3-6 | 5-4 |
R3 | 5-1 | 2-3 | 6-4 | 7-8 |
R4 | 1-2 | 4-3 | 7-5 | 8-6 |
R5 | 3-1 | 4-2 | 8-5 | 6-7 |
Een periodecompetitie bestaat uit een aantal groepen van spelers. Deze groepen zijn niet noodzakelijk allemaal even groot.
Iedere groep speelt vijf ronden (een ronde per avond). De indeling van alle ronden is bij de start van de periodecompetitie bekend.
Het indelingssysteem Heller heeft vanuit het meegegeven document van UVS
Implementatie
3-1 | 4-2 | 8-5 | 6-7 |
Een periodecompetitie bestaat uit een aantal groepen van spelers. Deze groepen zijn niet noodzakelijk allemaal even groot.
Iedere groep speelt vijf ronden (een ronde per avond). De indeling van alle ronden is bij de start van de periodecompetitie bekend.
Het indelingssysteem Heller heeft vanuit het meegegeven document van UVS
Hoe krijgen wij dit werkend in onze Java applicatie?
Om dit in java te kunnen maken worden in arrays gemaakt waarin de matchups zoals de tabellen hierboven staan. Per ronde moeten de matchups uitgelezen en gesplitst worden op "-". Je weet vervolgens dat het eerste getal de witspeler is en het tweede getal de zwartspeler. Vervolgens moeten er voor deze matchups MatchDTO's gemaakt worden. Strategy pattern