Miten arpajaisten voittajat valitaan reilusti ja näytetään arvonnan kulku
Reilu arpominen onnistuu käyttämällä turvalliseen satunnaisuuteen tarkoitettua generaattoria, antamalla jokaiselle osallistujalle yhtä suuren mahdollisuuden ja mahdollistamalla tuloksen tarkistamisen jälkikäteen. Yksinkertaisen arpojan epäreiluus tulee yleensä jommasta kummasta syystä: heikosta satunnaisuuden lähteestä tai pienestä aritmeettisesta virheestä, jota kutsutaan modulo-vinoumaksi. Molemmat on helppo korjata. Julkaistu osallistujalista ja kirjaus arvonnasta ovat paras todiste siitä, ettei kukaan valinnut voittajaa.
SatunnaisvalitsinValitse voittaja reilustiTee se ilmaiseksiAito ja pseudosatunnaisuus
Aito satunnaislähde saa arvaamattomuutensa fyysisestä ilmiöstä, kuten sähköisestä kohinasta. Pseudosatunnaisgeneraattori on kaava. Se lähtee liikkeelle siemenarvosta, suorittaa määrättyjä vaiheita ja tuottaa jonon, joka näyttää satunnaiselta. Jono määräytyy kokonaan siemenarvon perusteella, joten jokainen, joka tuntee siemenen ja kaavan, voi ennustaa kaikki luvut.
Useimmat ohjelmistot käyttävät pseudosatunnaisgeneraattoreita, ja se sopii hyvin soittolistan sekoittamiseen tai pelin tason satunnaistamiseen. Palkintoarvonnassa kysymys kuuluu, voiko joku ennustaa tuloksen tai vaikuttaa siihen. Nopea mutta ennustettava generaattori on väärä työkalu.
Käytä selaimen kryptografista generaattoria
JavaScriptissä Math.random() on nopea pseudosatunnaisgeneraattori. Sen dokumentaatio kertoo, ettei se sovellu kryptografiaan, ja arpajaiset ovat turvallisuuden kannalta arkaluonteinen valinta. Web Crypto -funktio crypto.getRandomValues() täyttää taulukon käyttöjärjestelmän kryptografisen satunnaislähteen arvoilla. Sitä kannattaa käyttää. Satunnaisvalitsin käyttää sitä jokaisessa valinnassa, myös kolikonheitossa ja nopanheitossa. Työkalu, joka ei kerro, mitä se käyttää, on vaikeampi luottaa, joten kysy ennen kuin luotat siihen.
Modulo-vinouma yhdellä esimerkillä
Oletetaan, että lähde antaa satunnaisen tavun eli kokonaisluvun väliltä 0–255, ja haluat valita yhden kolmesta osallistujasta. Helpoin tapa on ottaa jakojäännös jaettaessa luku kolmella. Se näyttää reilulta, mutta 256 ei jakaudu tasan kolmen ryhmiin.
- Arvot 0, 3, 6 ja niin edelleen aina 255:een asti jättävät jakojäännöksen 0. Niitä on 86.
- Jakojäännös 1 jättävät 85 arvoa, ja jakojäännös 2 jättävät myös 85 arvoa.
Merkintä 0 tulee siis 86 kertaa 256:sta, eli noin 33,6 %, kun taas merkinnät 1 ja 2 tulevat 85 kertaa kumpikin, eli noin 33,2 %. Ero on pieni, mutta todellinen. Se kasvaa, kun osallistujia on paljon lähdön arvoaluetta verrattuna.
Korjaus on hylkäysotanta. Arvotaan luku, ja jos se osuu epätasaiseen jäännösosaan, arvotaan uudelleen. Tavuesimerkissä hylätään 255 ja hyväksytään vain 0–254, joka jakautuu tasan kolmella. Kun satunnaisluku on 32-bittinen, jäännökseen osuu noin yksi arvo 4,3 miljardista, joten vinouma on arpajaisissa merkityksetön. Huolellinen arpoja käsittelee sen silti, koska sama virhe pahenee, kun arvoalue pienenee.
Arvonnat ilman toistoja
Jos voittajia on useita, kolmen satunnaisen indeksin arvonta voi osua kahdesti samaan osallistujaan. Kaksi puhdasta tapaa estää tämä:
- Poista jokainen voittaja listalta ja arvo sitten uudelleen muista.
- Sekoita koko lista kerran Fisher–Yates-menetelmällä ja ota voittajat listan kärjestä.
Fisher–Yates käy listan läpi lopusta alkaen, vaihtaa jokaisen paikan kanssa satunnaisesti valitun paikan, joka on samassa kohdassa tai sitä edempänä, ja tuottaa jokaisen järjestyksen yhtä todennäköisesti, kun satunnaiset valinnat ovat reiluja. Menetelmä on lyhyt, tunnettu ja helppo selittää osallistujille. Arpojan vaihtoehdot Poista voittajat listalta ja Ei toistoja hoitavat molemmat menetelmät.
Tee arvonnasta tarkistettava
Reilu arvonta on sellainen, jonka kuka tahansa voi tarkistaa. Ennen arvontaa:
- Julkaise osallistujat numeroituna listana ja kerro, ketkä ovat oikeutettuja osallistumaan.
- Julkaise tuon listan SHA-256-sormenjälki. Sen voi laskea millä tahansa SHA-256-työkalulla, esimerkiksi Hash-laskurilla. Sormenjälki muuttuu kokonaan, jos yksikin osallistuja muuttuu, joten listaa ei voi muokata hiljaa jälkikäteen. Sama tarkistus vahvistaa myös latauksia. Miten lataukselta tarkistetaan SHA-256-tarkistussumma näyttää vaiheet.
Arvonnan aikana ja sen jälkeen:
- Tallenna näyttö alusta asti, kun käynnistät arpojan, aina tulokseen asti.
- Julkaise lopullinen lista voittajan numerolla, jotta ihmiset voivat laskea sormenjäljen uudelleen ja varmistaa, ettei mitään ole muutettu.
- Kerro, miten voittaja valittiin, esimerkiksi: ”valittu selainpohjaisella arpojalla, joka käyttää käyttöjärjestelmän kryptografista satunnaislähdettä”.
Arvontasäännöt vaihtelevat alustoittain, ja arpajaisilla voi olla lakisääteisiä vaatimuksia, jotka riippuvat asuinpaikastasi. Tarkista alustan kilpailusäännöt ja paikallinen lainsäädäntö ennen arvonnan järjestämistä. Tämä on yleinen ohje, ei oikeudellinen neuvo. Kun olet valmis, arvo voittaja satunnaisvalitsimella.
Näin teet sen fixmintillä
- Valitse Nimet ja liitä osallistujat kenttään Nimet, yksi riviltä.
- Aseta Voittajat-kohtaan palkintojen määrä. Rastita Poista voittajat listalta, jotta kukaan ei voi voittaa kahdesti.
- Numeroarvontaa varten valitse Numero, aseta Pienin ja Suurin ja rastita Ei toistoja, jos kukin numero saa voittaa vain kerran.
- Paina Arvo voittajat. Näytön tallennuksen pitää olla jo käynnissä alusta asti.
- Julkaise numeroidut osallistujat, SHA-256-sormenjälki, voittava osallistuja ja kuvaus arpojan käytöstä.
Pikavastaukset
Riittääkö Math.random() arpajaisiin?
Se riittää peleihin ja sekoittamiseen, mutta ei arvontaan, jonka ihmiset tarkistavat, koska sen tuloksia voi ennustaa. Käytä kryptografista lähdettä.
Miksi en vain ottaisi satunnaislukua jakojäännöksenä osallistujamäärästä?
Kun arvoalue ei jakaudu tasan, jakojäännökset ovat epätasaisia, joten jotkin osallistujat ovat hieman todennäköisempiä. Hylkäysotanta poistaa tämän vinouman.
Voinko valita useita voittajia yhdestä arvonnasta?
Voit. Poista jokainen voittaja ennen seuraavaa valintaa tai sekoita lista kerran ja ota ylimmät osallistujat. Kummassakaan tapauksessa sama osallistuja ei voi voittaa kahdesti.
Käännetty tekoälyn avulla: Englanninkielinen alkuperäisteos.
Kommentit
Ei vielä kommentteja. Ole ensimmäinen.


