Sådan vælger du konkurrencevindere fair og viser, hvordan du gjorde
For at vælge en vinder fair skal du bruge en generator lavet til sikkerhed, give hver deltager den samme chance og lade folk kontrollere resultatet bagefter. Det meste uretfærdighed i en simpel vælger kommer fra et af to steder: en svag tilfældighedskilde eller en lille regnefejl kaldet modulo-bias. Begge dele kan rettes. En offentliggjort liste over deltagere og en registrering af trækningen er det bedste bevis for, at ingen har valgt vinderen.
Tilfældig vinderVælg en vinder retfærdigtPrøv gratisÆgte og pseudo-tilfældig
En ægte tilfældighedskilde henter sin uforudsigelighed fra en fysisk proces, for eksempel elektrisk støj. En pseudo-tilfældig generator er en formel. Den starter fra et seed, anvender deterministiske trin og producerer en følge, der ser tilfældig ud. Følgen er fuldt bestemt af seedet, så enhver, der kender seedet og formlen, kan forudsige hvert eneste tal.
De fleste programmer bruger pseudo-tilfældige generatorer, og det er fint til at blande en playliste eller tilfældigt vælge et banetrin i et spil. Ved en trækning, hvor folk har noget at vinde, er spørgsmålet, om nogen kunne forudsige eller påvirke resultatet. En generator, der er hurtig, men forudsigelig, er det forkerte værktøj.
Brug browserens kryptografiske generator
I JavaScript er Math.random() en hurtig pseudo-tilfældig generator. Dens dokumentation siger, at den ikke er egnet til kryptografi, og en præmietrækning er et sikkerhedsfølsomt valg. Web Crypto-funktionen crypto.getRandomValues() fylder et array med værdier fra operativsystemets kryptografiske tilfældighedskilde. Det er den, du skal bruge. Tilfældig vælger bruger den til hvert valg, herunder møntkast og terninger. Et værktøj, der ikke fortæller, hvad det bruger, er sværere at stole på, så spørg, før du regner med det.
Modulo-bias, med et eksempel
Antag, at din kilde giver en tilfældig byte, et helt tal fra 0 til 255, og at du vil have én ud af tre deltagere. Den nemme vej er at tage resten, når du dividerer med 3. Det ser fair ud, men 256 kan ikke deles jævnt i grupper af tre.
- Værdierne 0, 3, 6 og så videre op til 255 giver rest 0. Der er 86 af dem.
- Værdier, der giver rest 1, er 85, og værdier, der giver rest 2, er også 85.
Deltager 0 kommer altså op 86 gange ud af 256, cirka 33,6 %, mens deltagerne 1 og 2 kommer op 85 gange hver, cirka 33,2 %. Forskellen er lille, men den er reel, og den vokser, når antallet af deltagere bliver stort i forhold til kildens område.
Løsningen er afvisningssampling. Træk en værdi, og hvis den falder i den uens rest, så træk igen. I byte-eksemplet afviser du 255 og accepterer kun 0 til 254, som kan deles jævnt med tre. Med et 32-bit tilfældigt tal er resten cirka én værdi ud af 4,3 milliarder, så biassen er ubetydelig for en konkurrence. En omhyggelig vælger håndterer den alligevel, for den samme fejl bliver værre, når området bliver mindre.
Trækninger uden gentagelser
Hvis du skal have flere vindere, kan det ske, at du trækker det samme indeks to gange. To rene metoder undgår det:
- Fjern hver vinder fra listen, og træk derefter igen blandt de resterende.
- Bland hele listen én gang med Fisher–Yates-metoden, og tag vinderne fra toppen.
Fisher–Yates går igennem listen bagfra, bytter hver position med en tilfældigt valgt position på eller før den og giver alle rækkefølger lige stor sandsynlighed, når de tilfældige valg er fair. Den er kort, velkendt og let at forklare over for deltagerne. Vælgerens indstillinger Fjern vindere og Ingen gentagelser dækker begge metoder.
Gør trækningen kontrollerbar
En fair trækning er en, som alle kan verificere. Før trækningen:
- Offentliggør deltagerne som en nummereret liste sammen med reglerne for, hvem der var berettiget.
- Offentliggør et SHA-256-fingeraftryk af listen. Ethvert SHA-256-værktøj kan lave et, for eksempel Hash-generatoren. Et fingeraftryk ændrer sig helt, hvis blot én deltager ændres, så listen ikke stille og roligt kan redigeres bagefter. Den samme kontrol bekræfter downloads; sådan tjekker du en downloads SHA-256-checksum viser trinene.
Under og efter trækningen:
- Optag skærmen fra det øjeblik, du starter vælgeren, til det viste resultat.
- Offentliggør den endelige liste med det vindende nummer, så folk kan genberegne fingeraftrykket og bekræfte, at intet er ændret.
- Fortæl, hvordan vinderen blev valgt, for eksempel „valgt med en browserbaseret vælger, der bruger operativsystemets kryptografiske tilfældighedskilde”.
Reglerne for konkurrencer er forskellige fra platform til platform, og præmietrækninger kan have juridiske krav, der afhænger af, hvor du bor. Tjek platformens regler for kampagner og din lokale lovgivning, før du kører en. Dette er generel vejledning, ikke juridisk rådgivning. Når du er klar, vælg en vinder med Tilfældig vælger.
Sådan gør du med fixmint
- Vælg Navne, og indsæt derefter deltagerne i Navne, ét pr. linje.
- Sæt Vindere til antallet af præmier. Sæt flueben i Fjern vindere fra listen, så ingen kan vinde to gange.
- Til en nummereret trækning vælger du Nummer, sætter Mindst og Størst, og sætter flueben i Ingen gentagelser, hvis hvert nummer kun må vinde én gang.
- Tryk på Vælg vindere, mens din skærmoptagelse allerede kører fra start.
- Offentliggør de nummererede deltagere, SHA-256-fingeraftrykket, den vindende deltager og hvordan vælgeren blev brugt.
Hurtige svar
Er Math.random() fint til en konkurrence?
Det er fint til spil og blandinger, men ikke til en trækning, som folk vil kontrollere, fordi dens resultater kan forudsiges. Brug en kryptografisk kilde.
Hvorfor ikke bare tage et tilfældigt tal modulo antallet af deltagere?
Når intervallet ikke kan deles jævnt, bliver resten ujævn, så nogle deltagere har lidt større sandsynlighed. Afvisningssampling fjerner denne bias.
Kan jeg vælge flere vindere i én trækning?
Ja. Fjern hver vinder, før du trækker den næste, eller bland én gang og tag de øverste deltagere. Uanset metode kan ingen deltager vinde to gange.
Oversat fra Engelsk original med AI-hjælp.
Kommentarer
Ingen kommentarer endnu. Vær den første.


