Inleiding
deelvragen:
Hoe werkt het Meerkamp indeling systeem?
Hoe werkt het Zwitsers indeling systeem?
Hoe werkt het Heller tabellen indeling systeem?
Hoe werkt het Berger tabellen indeling systeem? (optioneel)
Hoe implementeren wij dit op een goede manier in ons Java systeem?
Meerkamp
Het indelingssysteem Meerkamp wordt binnen UVS gespeeld over meerdere avonden. De rondes van een meerkamp worden gespeeld in groepen waar iedere speler een keer speelt tegen ieder speler. Het is ook mogelijk om de competitie enkelrondig (iedereen speelt een keer tegen elkaar) of dubbelrondig (iedereen speelt twee keer tegen elkaar) te spelen. Bij een meerkamp ingedeelde competitie is de indeling van alle rondes bij de start van de meerkamp al bekend.
Zie hier een voorbeeld van hoe een ronde binnen de meerkamp competitie werkt:
Naam | 1 | 2 | 3 | 4 | TOT |
---|---|---|---|---|---|
1 | |||||
2 | |||||
3 | |||||
4 |
Ronde 1: 1-4 2-3
Ronde 2: 4-3 1-2
Ronde 3: 2-4 3-1
Voorbeeld document van een scoreformulier van een dubbelrondige meerkamp:
Scoreformulier-vierkampen.pdf
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
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 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, maar kan verschillen. Je kan het 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 willekeurig. 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.
Weerstandspunten en SB punten komen bijna op hetzelfde neer. De weerstandspunten van een speler is de actieve som van de score van alle tegenstanders waartegen die heeft gespeeld. Dit kan soms hetzelfde zijn als een andere speler, dus zijn er ook SB-punten. SB punten zijn de weerstandspunten maar dan met een factor op basis van resultaat. Als een speler de match heeft gewonnen worden de weerstandspunten voor die tegenstander verdubbelt, enkel genomen bij remise, en een speler krijgt geen SB-punten bij verlies.
Als er een oneven aantal spelers is moet een van de spelers een timeout krijgen elke ronde. Dit mag een speler niet twee keer in een toernooi krijgen. Deze speler wordt de laatste die overblijft bij de indeling, die vanwege de sortering van de spelers in de praktijk vaak de laagste is.
Als een speler uit een puntengroep naar beneden schuift mag deze speler dat niet weer in de volgende ronde krijgen. 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.
De absolute regels die aangehouden moeten worden zijn dus:
Het aantal rondes moet niet hoger worden dan het vooraf bepaalde maximaal aantal rondes.
twee spelers mogen niet twee keer tegen elkaar spelen.
een speler mag niet 2 keer in een toernooi een Bye krijgen.
een speler mag niet drie keer achter elkaar dezelfde kleur hebben.
een speler mag niet een kleursaldo hebben van minder dan -2 of meer dan 2.
Een speler mag niet 2 rondes achter elkaar een upfloat of downfloat krijgen.
De sterke regels die verbroken mogen worden om een absolute regel niet te verbreken zijn:
Een speler mag niet twee keer achter elkaar dezelfde kleur hebben.
Een speler mag geen kleursaldo hebben van 1 of -1.
Een speler die naar beneden is geschoven vanwege een oneven aantal spelers in zijn scoregroep mag niet nog een keer naar beneden schuiven.
De voorkeuren die verbroken mogen worden om een sterke regel niet te verbreken zijn:
Een speler moet tegen een speler met dezelfde score spelen.
Een speler moet de tegenovergestelde kleur spelen als in de vorige match die de speler gespeeld heeft.
Hoe krijgen wij dit werkend in onze Java applicatie?
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 Klukkluk. 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
P1 | P2 | P3 | P4 | P5 | |
R1 | 1-10 | 2-9 | 3-6 | 4-7 | 5-8 |
R2 | 7-1 | 8-2 | 9-3 | 10-4 | 6-5 |
R3 | 5-1 | 2-4 | 3-8 | 10-6 | 7-9 |
R4 | 1-3 | 6-2 | 4-5 | 8-7 | 9-10 |
R5 | 1-2 | 4-3 | 9-5 | 6-7 | 8-10 |
Schema 1; het huidige in Rokade
P1 | P2 | P3 | P4 | P5 | |
R1 | 1-10 | 2-9 | 3-6 | 4-7 | 5-8 |
R2 | 7-1 | 8-2 | 9-3 | 10-4 | 6-5 |
R3 | 5-1 | 2-4 | 3-8 | 10-6 | 7-9 |
R4 | 1-3 | 6-2 | 4-5 | 8-7 | 9-10 |
R5 | 1-2 | 4-3 | 9-5 | 6-7 | 8-10 |
Schema 2, nieuw
P1 | P2 | P3 | P4 | P5 | |
R1 | 9-1 | 2-6 | 10-3 | 4-8 | 7-5 |
R2 | 1-6 | 5-2 | 3-8 | 7-4 | 10-9 |
R3 | 3-1 | 2-4 | 8-5 | 6-10 | 9-7 |
R4 | 1-4 | 3-2 | 10-5 | 6-7 | 8-9 |
R5 | 5-1 | 2-9 | 7-3 | 4-10 | 8-6 |
Schema 3, nieuw
P1 | P2 | P3 | P4 | P5 | |
R1 | 1-8 | 2-10 | 7-3 | 9-4 | 5-6 |
R2 | 7-1 | 9-2 | 3-8 | 4-5 | 10-6 |
R3 | 1-4 | 3-2 | 8-5 | 6-9 | 10-7 |
R4 | 2-1 | 6-3 | 4-10 | 5-7 | 8-9 |
R5 | 1-6 | 4-2 | 5-3 | 9-7 | 8-10 |
Schema 4, nieuw
P1 | P2 | P3 | P4 | P5 | |
R1 | 9-1 | 2-6 | 3-8 | 4-7 | 10-5 |
R2 | 1-7 | 2-5 | 6-3 | 10-4 | 8-9 |
R3 | 4-1 | 3-2 | 5-6 | 7-8 | 10-9 |
R4 | 1-3 | 2-4 | 8-5 | 6-10 | 7-9 |
R5 | 5-1 | 9-2 | 3-10 | 4-8 | 6-7 |
12 Spelers 5 ronden
Schema 1, het oorpronkelijke
P1 | P2 | P3 | P4 | P5 | P6 | |
R1 | 10-1 | 6-2 | 12-3 | 4-8 | 9-5 | 11-7 |
R2 | 1-9 | 2-8 | 7-3 | 4-12 | 5-11 | 10-6 |
R3 | 7-1 | 2-10 | 3-11 | 5-4 | 12-6 | 9-8 |
R4 | 4-1 | 3-2 | 5-6 | 8-7 | 12-9 | 11-10 |
R5 | 1-3 | 2-5 | 6-4 | 7-9 | 8-11 | 10-12 |
Schema 1; het huidige in Rokade
P1 | P2 | P3 | P4 | P5 | P6 | |
R1 | 12-1 | 11-2 | 7-3 | 4-9 | 8-5 | 10-6 |
R2 | 1-7 | 2-10 | 3-11 | 5-4 | 6-12 | 9-8 |
R3 | 1-8 | 6-2 | 9-3 | 10-4 | 5-12 | 11-7 |
R4 | 3-1 | 2-5 | 4-6 | 7-9 | 8-11 | 12-10 |
R5 | 1-2 | 3-4 | 5-6 | 7-8 | 9-10 | 11-12 |
Schema 2, nieuw
P1 | P2 | P3 | P4 | P5 | P6 | |
R1 | 1-11 | 12-2 | 3-9 | 5-4 | 6-8 | 7-10 |
R2 | 8-1 | 2-6 | 11-3 | 4-7 | 12-5 | 9-10 |
R3 | 1-6 | 10-2 | 3-7 | 8-4 | 5-9 | 11-12 |
R4 | 2-1 | 4-3 | 7-5 | 9-6 | 8-12 | 10-11 |
R5 | 1-5 | 3-2 | 10-4 | 6-12 | 11-7 | 9-8 |
Schema 3, nieuw
P1 | P2 | P3 | P4 | P5 | P6 | |
R1 | 10-1 | 2-11 | 9-3 | 4-12 | 7-5 | 6-8 |
R2 | 1-8 | 9-2 | 3-7 | 10-4 | 11-5 | 12-6 |
R3 | 5-1 | 4-2 | 3-6 | 7-11 | 8-12 | 9-10 |
R4 | 1-4 | 2-3 | 5-12 | 6-9 | 10-7 | 8-11 |
R5 | 6-1 | 2-5 | 3-8 | 4-7 | 12-9 | 11-10 |
Schema 4, nieuw
P1 | P2 | P3 | P4 | P5 | P6 | |
R1 | 1-10 | 2-12 | 3-11 | 9-4 | 8-5 | 6-7 |
R2 | 8-1 | 11-2 | 10-3 | 4-7 | 5-12 | 9-6 |
R3 | 7-1 | 2-5 | 6-3 | 4-8 | 9-11 | 10-12 |
R4 | 1-2 | 3-4 | 5-9 | 6-10 | 12-7 | 11-8 |
R5 | 1-5 | 3-2 | 4-6 | 7-9 | 12-8 | 11-10 |
8 Spelers 5 ronden
Schema 1, het huidige
P1 | P2 | P3 | P4 | |
R1 | 1-8 | 2-7 | 3-5 | 4-6 |
R2 | 5-1 | 6-2 | 7-3 | 8-4 |
R3 | 4-1 | 3-2 | 8-5 | 7-6 |
R4 | 1-3 | 2-4 | 5-7 | 6-8 |
R5 | 2-1 | 3-6 | 5-4 | 8-7 |
Schema 2, nieuw
P1 | P2 | P3 | P4 | |
R1 | 6-1 | 5-2 | 7-3 | 4-8 |
R2 | 1-7 | 2-8 | 3-6 | 5-4 |
R3 | 1-4 | 2-3 | 8-5 | 6-7 |
R4 | 1-2 | 5-3 | 4-6 | 8-7 |
R5 | 3-1 | 4-2 | 7-5 | 6-8 |
Schema 3, nieuw
P1 | P2 | P3 | P4 | |
R1 | 1-6 | 2-5 | 8-3 | 7-4 |
R2 | 7-1 | 8-2 | 6-3 | 4-5 |
R3 | 1-5 | 3-2 | 4-6 | 8-7 |
R4 | 2-1 | 3-4 | 5-7 | 6-8 |
R5 | 1-3 | 2-4 | 5-8 | 7-6 |
Schema 4, nieuw
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
Strategy pattern