Jak férově vylosovat výherce soutěže a ukázat, jak losování proběhlo
Aby losování bylo férové, použijte generátor určený pro bezpečnost, dejte každému účastníkovi stejnou šanci a nechte lidi výsledek dodatečně ověřit. Nespravedlnost jednoduchého losovače nejčastěji vzniká ze dvou míst: ze slabého zdroje náhody nebo z drobné aritmetické chyby zvané zkreslení modulo. Obojí jde opravit. Nejlepším důkazem, že výherce nikdo nevybral, je zveřejněný seznam účastníků a záznam losování.
Náhodný výběrFérově vylosovat výherceVyzkoušet zdarmaPravá a pseudonáhodná čísla
Pravý zdroj náhody čerpá nepředvídatelnost z fyzikálního procesu, například z elektronického šumu. Pseudonáhodný generátor je vzorec. Vychází ze semínka, provádí deterministické kroky a vytváří posloupnost, která vypadá náhodně. Posloupnost je plně určena semínkem, takže kdo zná semínko a vzorec, dokáže předpovědět každé číslo.
Většina softwaru používá pseudonáhodné generátory a pro promíchání playlistu nebo náhodnou úroveň ve hře to stačí. U losování, kde je co vyhrát, je ale rozhodující, zda někdo dokáže výstup předvídat nebo ovlivnit. Rychlý, ale předvídatelný generátor je pro tento účel špatná volba.
Použijte kryptografický generátor prohlížeče
V JavaScriptu je Math.random() rychlý pseudonáhodný generátor. Jeho dokumentace uvádí, že pro kryptografii se nehodí, a losování o ceny je rozhodnutí citlivé na bezpečnost. Funkce crypto.getRandomValues() z Web Crypto naplní pole hodnotami z kryptografického zdroje náhody operačního systému. Právě tuto použijte. Losovač ji používá při každém výběru, včetně hodu mincí a kostkou. Nástroj, který neříká, co používá, se hůř důvěřuje, proto se před použitím zeptejte.
Zkreslení modulo na jednom příkladu
Předpokládejme, že váš zdroj vrací náhodný bajt, tedy celé číslo od 0 do 255, a chcete jeden z tří účastníků. Nejsnazší cesta je vzít zbytek po dělení třemi. Vypadá to férově, ale 256 se na skupiny po třech nerozdělí rovnoměrně.
- Hodnoty 0, 3, 6 a tak dále až po 255 dávají zbytek 0. Je jich 86.
- Hodnot se zbytkem 1 je 85 a hodnot se zbytkem 2 je také 85.
Účastník 0 tedy vyjde 86krát z 256, tedy asi 33,6 %, zatímco účastníci 1 a 2 vyjdou po 85 případech, tedy asi 33,2 %. Rozdíl je malý, ale skutečný, a roste, když je počet účastníků velký vzhledem k rozsahu zdroje.
Řešením je odmítací výběr. Vylosujete hodnotu a pokud padne do nerovnoměrné zbylé části, losujete znovu. Pro příklad s bajtem odmítnete 255 a přijmete jen hodnoty 0 až 254, které se na trojky dělí beze zbytku. U náhodného čísla o 32 bitech připadá na zbytek přibližně jedna hodnota z 4,3 miliardy, takže zkreslení je pro soutěž zanedbatelné. Pečlivý losovač ho přesto řeší, protože stejná chyba se zhoršuje se zmenšujícím se rozsahem.
Losování bez opakování
Pokud potřebujete více výherců, může tři losování indexu vylosovat stejného účastníka dvakrát. Dvě čisté metody tomu zabrání:
- Po každém výhercí ho odstraňte ze seznamu a losujte znovu z ostatních.
- Jednou promíchejte celý seznam metodou Fisher–Yates a výherce vezměte z počátku.
Fisher–Yates prochází seznam od konce, vymění každou pozici za náhodně zvolenou pozici na stejném nebo dřívějším místě a při férových náhodných volbách vytvoří každé pořadí se stejnou pravděpodobností. Je krátká, dobře známá a snadno vysvětlitelná účastníkům. Volby Odstranit výherce a Bez opakování v losovači obsluhují obě metody.
Udělejte losování ověřitelným
Férové losování může ověřit každý. Před losováním:
- Zveřejněte účastníky jako očíslovaný seznam spolu s pravidly, kdo se mohl zúčastnit.
- Zveřejněte otisk SHA-256 tohoto seznamu. Vytvoří ho libovolný nástroj pro SHA-256, například generátor hashů. Otisk se úplně změní, pokud se změní jediný účastník, takže seznam nelze tiše dodatečně upravit. Stejná kontrola ověřuje i stažené soubory; postup ukazuje článek jak zkontrolovat kontrolní součet SHA-256 staženého souboru.
Během losování a po něm:
- Nahrajte obrazovku od okamžiku spuštění losovače až po zobrazení výsledku.
- Zveřejněte konečný seznam s vylosovaným číslem, aby lidé mohli otisk přepočítat a ověřit, že se nic nezměnilo.
- Uveďte, jak byl výherce vybrán, například: „vylosováno prohlížečovým losovačem, který používá kryptografický zdroj náhody operačního systému“.
Pravidla soutěží se na platformách liší a losování o ceny může mít právní požadavky, které závisejí na místě, kde žijete. Před spuštěním si prostudujte propagační pravidla platformy a místní zákony. Jde o obecné vodítko, nikoli o právní poradenství. Až budete připraveni, vylosujte výherce pomocí losovače.
Jak to udělat s fixmint
- Vyberte Jména a vložte účastníky do pole Jména, jedno na řádek.
- Nastavte Výherci podle počtu cen. Zaškrtněte Odstranit výherce ze seznamu, aby nikdo nevyhrál dvakrát.
- Pro číselné losování vyberte Číslo, nastavte Nejmenší a Největší a zaškrtněte Bez opakování, pokud může každé číslo vyhrát jen jednou.
- Stiskněte Vylosovat výherce se spuštěným záznamem obrazovky od začátku.
- Zveřejněte očíslované účastníky, otisk SHA-256, vylosovaný záznam a popis, jak byl losovač použit.
Stručné odpovědi
Je Math.random() vhodné pro soutěž?
Pro hry a míchání ano, ale pro losování, které lidé budou ověřovat, ne, protože jeho výstup lze předpovědět. Použijte kryptografický zdroj.
Proč prostě nevzít náhodné číslo modulo počet účastníků?
Když rozsah není dělitelný beze zbytku, zbytky nejsou rovnoměrné a některý účastník má mírně vyšší šanci. Odmítací výběr tuto zkreslenost odstraní.
Můžu z jednoho losování vybrat více výherců?
Ano. Po každém výhercí ho odstraňte, než vylosujete dalšího, nebo jednou zamíchejte a vezměte první záznamy. V obou případech nemůže nikdo vyhrát dvakrát.
Přeloženo z Anglický originál s pomocí AI.
Komentáře
Zatím žádné komentáře. Buďte první.


