Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Inleiding

deelvragen:

Hoe werkt het meerkamp Meerkamp indeling systeem?

Hoe werkt het zwitsers 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?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:

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

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 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 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. 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 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 in de volgende ronde niet 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.


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

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


P1P2P3P4P5
R11-102-93-64-75-8
R27-18-29-310-46-5
R35-12-43-810-67-9
R41-36-24-58-79-10
R51-24-39-56-78-10

Schema 2, nieuw


P1P2P3P4P5
R19-12-610-34-87-5
R21-65-23-87-410-9
R33-12-48-56-109-7
R41-43-210-56-78-9
R55-12-97-34-108-6

Schema 3, nieuw


P1P2P3P4P5
R11-82-107-39-45-6
R27-19-23-84-510-6
R31-43-28-56-910-7
R42-16-34-105-78-9
R51-64-25-39-78-10

Schema 4, nieuw


P1P2P3P4P5
R19-12-63-84-710-5
R21-72-56-310-48-9
R34-13-25-67-810-9
R41-32-48-56-107-9
R55-19-23-104-86-7

12 Spelers 5 ronden


Schema 1; het huidige in Rokade


P1P2P3P4P5P6
R112-111-27-34-98-510-6
R21-72-103-115-46-129-8
R31-86-29-310-45-1211-7
R43-12-54-67-98-1112-10
R51-23-45-67-89-1011-12

Schema 2, nieuw


P1P2P3P4P5P6
R11-1112-23-95-46-87-10
R28-12-611-34-712-59-10
R31-610-23-78-45-911-12
R42-14-37-59-68-1210-11
R51-53-210-46-1211-79-8

Schema 3, nieuw


P1P2P3P4P5P6
R110-12-119-34-127-56-8
R21-89-23-710-411-512-6
R35-14-23-67-118-129-10
R41-42-35-126-910-78-11
R56-12-53-84-712-911-10

Schema 4, nieuw


P1P2P3P4P5P6
R11-102-123-119-48-56-7
R28-111-210-34-75-129-6
R37-12-56-34-89-1110-12
R41-23-45-96-1012-711-8
R51-53-24-67-912-811-10

8 Spelers 5 ronden

Schema 1, het huidige


P1P2P3P4
R11-82-73-54-6
R25-16-27-38-4
R34-13-28-57-6
R41-32-45-76-8
R52-13-65-48-7

Schema 2, nieuw


P1P2P3P4
R16-15-27-34-8
R21-72-83-65-4
R31-42-38-56-7
R41-25-34-68-7
R53-14-27-56-8

Schema 3, nieuw


P1P2P3P4
R11-62-58-37-4
R27-18-26-34-5
R31-53-24-68-7
R42-13-45-76-8
R51-32-45-87-6

Schema 4, nieuw


P1P2P3P4
R16-15-23-84-7
R21-72-83-65-4
R35-12-36-47-8
R41-24-37-58-6
R53-14-28-56-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.