• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Aangepaste versie van HMnieuws bijlage

Status
Niet open voor verdere reacties.

leocod

Gebruiker
Lid geworden
14 jan 2012
Berichten
32
In de laatste uitgave van HM Nieuwsbrief legt Leofact uit hoe je in excel met behulp van VBA een wedstrijdprogramma kunt genereren met een Round Robin algoritme.

Het werkt prachtig maar genereert een matrix voor een hele competitie. Dit is voor kleine verenigingen helemaal geen probleem. Maar met 50 deelnemers heb je al gauw 2450 wedstrijden.
deze mensen zullen naar alle waarschijnlijkheid een halve competitie willen spelen.

Met een paar aanvullende regels in de oorspronkelijke code, die een wedstrijdnummer toekennen en 2 toegevoegde subjes die de resultaten wegschrijven naar een ander blad, krijg je de matrix en op een ander werkblad een genummerde lijst van wedstrijden voor een halve competitie, waarbij de spelers slechts één keer tegen elkaar uitkomen.

Zie hiervoor de bijlage.
 

Bijlagen

Aangepaste versie van HMnieuws bijlage (excuus)

Helaas, soms ben je te snel en let je niet goed op.

In de versie van Leofact spelen de spelers idd slechts één keer tegen elkaar.
Bij deze hiervoor mijn excuus Leo

Maar voor mensen die een kant en klare lijst willen met genummerde wedstrijden is de aangepaste versie misschien wel makkelijk.
 
Omdat het belangrijkste criterium in het systeem is, dat spelers elkaar niet meer dan 1 keer treffen lijken mij de unieke spelerscombinaties van 2 uit het totaal aantal spelers ( (n*(n-1))/2) het uitgangspunt voor de verdeling over rondes.
In dit voorbeeld worden 10 rondes gevuld met spelerscombinaties uit een groep van 50 spelers (zoals in het voorbeeld van Leofact op Blad1).

Code:
Sub M_snb()
  ReDim sn(0, 1 To 10)

  Blad1.Columns(3).SpecialCells(2).Offset(1).SpecialCells(2).Name = "snb"
  sp = [if(row(snb)>transpose(row(snb)),transpose(snb)& "_" & snb,"")]
   
  For Each it In sp
    If it <> "" Then c00 = c00 & "|" & it
  Next
  sq = Split(c00, "|")
   
  Sheet1.Cells(1, 200).Resize(UBound(sq)) = "=rand()"
  sr = Evaluate(Replace("index(rank(~,~),)", "~", "Sheet1!" & Sheet1.Cells(1, 200).Resize(UBound(sq)).Address(0, 0)))
   
  For j = 1 To UBound(sr)
    st = Split(sq(sr(j, 1)), "_")
    For jj = 1 To UBound(sn, 2)
      If InStr("_" & sn(0, jj) & "_", "_" & st(0) & "_") + InStr("_" & sn(0, jj) & "_", "_" & st(1) & "_") = 0 Then
        sn(0, jj) = sn(0, jj) & "_|_" & sq(sr(j, 1))
        y = y + 1
        Exit For
      End If
    Next
    If y = UBound(sp) / 2 * UBound(sn) Then Exit For
  Next
   
  For j = 1 To UBound(sn, 2)
    st = Filter(Split(sn(0, j), "_|_"), "_")
    Sheet1.Cells(j).Resize(UBound(st)+1) = Application.Transpose(st)
  Next
End Sub
 

Bijlagen

Laatst bewerkt:
dat spelers elkaar niet meer dan 1 keer treffen lijken mij de unieke spelerscombinaties van 2 uit het totaal aantal spelers ( (n*(n-1))/2) het uitgangspunt voor de verdeling over rondes.
Het klopt dat de belangrijkste eis was, daarnaast wilde de oorspronkelijke vragensteller dat de wedstrijden op inschrijving van de spelers (spelersnummer) gerangschikt waren, vandaar mijn matrix met spelers en tegenstanders.
Er blijken echter meerdere toernooivormen, met daardoor andere registraties, gebruikt te worden.
 
Laatst bewerkt:
Graag wil ik reageren op het bericht en de stelling.
Ik ga uit van spelers en niet van teams. Het is natuurlijk wel zo dat de spelers een team gaan vormen. In principe wordt er 2 tegen 2 gespeelt. En dan maar 1 maal met dezelfde speler en tegenspelers. De dagelijkse realiteit is echter anders. Hoe gaat dit in praktijk. Om uiterlijk op een afgesproken tijdstip melden de spelers zich. Van te voren is dan niet bekend hoeveel spelers aanwezig zijn. Elke spelers trekt een willekeurig nummer. Het aantal nummers is gelijk aan het aantal aanwezigen. Het spelschema is ook gebaseerd op het aantal aanwezigen..
Als het aantal spelers zodanig is dat er niet steeds 2 tegen 2 gespeeld kan worden moet het soms 2 tegen 3 enz.
De spelschema' s zijn dan ook iedere keer dezelfde. Het spelersaantal wijzigt en de dan aanwezige spelers trekken een nummer. Het nummer en aantal is steeds verschillend. Om dit nu in een programma te realiseren is dit een hele uitdaging. Afhankelijk van het aantal aanwezigen bestaan per ronde de teams 2 tegen 2 of 2 tegen 3 of 1 wedstrijd 3 ten 3 en 2 tegen 3. Het uitgangspunt blijft hetzelfde niet meer dan 1 maal met en tegen dezelfde spelers. Ik probeer dit zelf in Access te realiseren. Alleen is hier elk schema een tabel. Het aantal spelers krijgt een random nummer en wordt middels een query aan de tabel gekoppeld. De schema's zijn vervat in 84 tabellen. max 100 spelers Dit is dan nog uit te breiden met spelers in een poule te zetten.. Ik probeer dit met VBA zo compact mogelijk te maken. Maar hier wordt door mij aan gewerkt. vandaar dat ik met interesse de excel uitleg heb gelezen. Er zijn een aantal programma's voor Jeu de Boules. Maar voor dit onderdeel is via random niet niet een oplossing. In de schema's zie je dan ook dat soms dezelfde spelers samen spelen of te dezelfde tegenspel(s) wordt gespeeld.
Het programma van Arie Alblas heb ik in het verleden wel eens aangeschaft. Ook hij werkte toen met schema's. Wellicht heb ik je een duidelijk beeld kunnen schetsen van hoe het bij dit onderdeel van Jeu de Boule toegaat. Misschien is ook voor deze spelvorm via rnd een oplossing te vinden.
Groet Sytse
 
De beperkingen aan de samenstelling van teams en rondes zijn strijdig met 'random'.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan