Voor een avondje vriendschappelijk tennis dubbels wil ik graag willekeurig 4 spelers (voor een 2 vs 2 wedstrijdje) uit een lijst van 8 tot 25 spelers selecteren (afhankelijk van de opkomst die avond). Zodra de wedstrijd voorbij is wil ik weer willekeurig 4 spelers selecteren voor de volgende wedstrijd, enzovoort.
De kanttekening hierbij is dat ik de voorkeur wil geven aan de spelers die de minste wedstrijden gespeeld hebben, zodat die een grotere kans hebben om geselecteerd te worden voor de eerstvolgende wedstrijd. De selectie moet dus niet werkelijk willekeurig gebeuren.
Ik geloof dat ik dit kan doen met de NumPy Python library, en wel als volgt:
Waarbij spelers een list van alle aanwezige spelers is en kans een list met per speler de kans om gekozen te worden, waarvan de som 1 moet zijn.
Mijn vraag is nu, wat is een wiskundig verantwoordelijke manier om het aantal gespeelde wedstrijden te wegen en daar een kans om geselecteerd te worden van af te leiden (waarbij meer gespeelde wedstrijden dus moet leiden tot een kleinere kans).
Ik heb momenteel de volgende oplossing waarbij gespeelde_wedstrijden een lijst is met het aantal gespeelde wedstrijden per speler.
Wat ik dus doe is per speler 1 delen door het aantal gespeelde wedstrijden om het omgekeerde te krijgen, daarbij tel ik altijd 0.1 op bij het aantal gespeelde wedstrijden om te voorkomen dat ik door 0 ga delen, maar dat stukje zit mij dwars. Het voelt als een lelijke hack en ik vroeg mij af of er een betere manier is om het omgekeerde te berekenen én rekening te houden met 0 (gespeelde wedstrijden).
Vervolgens bereken ik per speler het percentage van het omgekeerde aantal gespeelde wedstrijden ten opzichte van de som van het omgekeerde aantal gespeelde wedstrijden van alle spelers. Dit percentage gebruik ik regelrecht als kans per speler om "willekeurig" geselecteerd te worden.
Ik sta ook open voor een andere methode om dit probleem aan te pakken trouwens, ook als dit zonder NumPy kan bijvoorbeeld.
De kanttekening hierbij is dat ik de voorkeur wil geven aan de spelers die de minste wedstrijden gespeeld hebben, zodat die een grotere kans hebben om geselecteerd te worden voor de eerstvolgende wedstrijd. De selectie moet dus niet werkelijk willekeurig gebeuren.
Ik geloof dat ik dit kan doen met de NumPy Python library, en wel als volgt:
code:
1
| numpy.random.choice(spelers, size=4, replace=False, p=kans) |
Waarbij spelers een list van alle aanwezige spelers is en kans een list met per speler de kans om gekozen te worden, waarvan de som 1 moet zijn.
Mijn vraag is nu, wat is een wiskundig verantwoordelijke manier om het aantal gespeelde wedstrijden te wegen en daar een kans om geselecteerd te worden van af te leiden (waarbij meer gespeelde wedstrijden dus moet leiden tot een kleinere kans).
Ik heb momenteel de volgende oplossing waarbij gespeelde_wedstrijden een lijst is met het aantal gespeelde wedstrijden per speler.
code:
1
2
| gespeelde_wedstrijden_omgekeerd = [1 / (x + 0.1) for x in gespeelde_wedstrijden] kans = [x / sum(gespeelde_wedstrijden_omgekeerd) for x in gespeelde_wedstrijden_omgekeerd] |
Wat ik dus doe is per speler 1 delen door het aantal gespeelde wedstrijden om het omgekeerde te krijgen, daarbij tel ik altijd 0.1 op bij het aantal gespeelde wedstrijden om te voorkomen dat ik door 0 ga delen, maar dat stukje zit mij dwars. Het voelt als een lelijke hack en ik vroeg mij af of er een betere manier is om het omgekeerde te berekenen én rekening te houden met 0 (gespeelde wedstrijden).
Vervolgens bereken ik per speler het percentage van het omgekeerde aantal gespeelde wedstrijden ten opzichte van de som van het omgekeerde aantal gespeelde wedstrijden van alle spelers. Dit percentage gebruik ik regelrecht als kans per speler om "willekeurig" geselecteerd te worden.
Ik sta ook open voor een andere methode om dit probleem aan te pakken trouwens, ook als dit zonder NumPy kan bijvoorbeeld.