Laskurit24

Arvonta

Valitse arvontatapa: nimiarvonta, satunnaisluku vai arpakuutio.

Arvontatapa

Vastaus lyhyesti

Sivu tarjoaa kolme arvontatapaa: nimiarvonta valitsee yhden tai useamman voittajan syötetystä nimilistasta ilman toistoa, satunnaisluku arpoo kokonaisluvun valitulta väliltä, ja arpakuutio heittää yhden nopan nopeaan tarpeeseen. Kaikki kolme perustuvat selaimen kryptografiseen satunnaislukugeneraattoriin, ei tavalliseen Math.random-funktioon.

Miten satunnaisuus on toteutettu

Kaikki kolme arvontatapaa tällä sivulla käyttävät selaimen crypto.getRandomValues-rajapintaa. Se on eri asia kuin Math.random, joka on tarkoitettu esimerkiksi animaatioihin ja peleihin, joissa ennustettavuudella ei ole väliä. Kryptografinen generaattori on suunniteltu niin, ettei sen tuottamaa sarjaa voi käytännössä ennustaa edeltävien arvojen perusteella.

Suora jakojäännös (satunnaisluku % väli) vinouttaisi tulosta lievästi, kun väli ei jaa tasan generaattorin arvoaluetta. Tätä kutsutaan modulo biasiksi. Sivu käyttää hylkäysmenetelmää: jos arvottu luku osuu alueen viimeisen täyden jakson ulkopuolelle, se hylätään ja arvotaan uudelleen. Näin jokainen lopputulos on täsmälleen yhtä todennäköinen.

Math.random vastaan crypto.getRandomValues

JavaScript tarjoaa kaksi eri tapaa tuottaa satunnaislukuja, ja ero niiden välillä on olennainen silloin kun tuloksen ennustamattomuudella on merkitystä. Math.random() on tarkoitettu esimerkiksi animaatioihin, pieniin peleihin ja käyttöliittymän visuaalisiin efekteihin, joissa ei ole väliä vaikka joku pystyisi teoriassa ennustamaan seuraavan arvon. Sen taustalla oleva algoritmi on optimoitu nopeudelle, ei arvaamattomuudelle.

crypto.getRandomValues() puolestaan käyttää käyttöjärjestelmän kryptografista satunnaislukugeneraattoria, joka on suunniteltu tilanteisiin joissa arvattavuudella olisi todellisia seurauksia, kuten salausavainten luonnissa. Arvonnassa tämä tarkoittaa, ettei tulosta voi vaikuttaa tai ennakoida etukäteen millään käytännöllisellä tavalla, mikä on tärkeää erityisesti silloin kun arvonnalla on todellinen voittaja tai palkinto.

Reilun arvonnan periaatteet

Reilu arvonta täyttää kolme ehtoa: jokaisella osallistujalla on sama todennäköisyys voittaa, arvonnan mekaniikka on läpinäkyvä, ja tulos ei riipu arpojan valinnoista arvonnan aikana. Tämä sivu täyttää nämä ehdot teknisesti, mutta reilu arvonta on myös organisatorinen kysymys: kuka saa osallistua, milloin arvonta tehdään ja miten tulos ilmoitetaan.

Milloin arvontaa kannattaa käyttää

Arvonta on hyödyllinen aina, kun päätös pitää tehdä ilman että kenenkään mielipide tai asema vaikuttaa lopputulokseen: kuka aloittaa pelin, kuka saa rajallisen resurssin useamman hakijan joukosta, tai kenelle jaetaan tehtävä tiimissä. Se sopii myös tilanteisiin, joissa haluttu lopputulos on yksinkertaisesti yksi luku, esimerkiksi numerolippuarvonta tai testiä varten tarvittava satunnainen syöte.

Arvontaa ei kannata käyttää tilanteissa, joissa päätöksen pitäisi perustua ansioihin, tarpeeseen tai muihin mitattaviin kriteereihin. Arvonta on työkalu tasavertaisten vaihtoehtojen välillä valitsemiseen, ei korvike harkinnalle silloin kun vaihtoehdot eivät ole tasavertaisia.

Arvonnan dokumentointi

Kun arvontaa käytetään esimerkiksi sosiaalisen median kilpailussa, on hyvä käytäntö kertoa säännöt etukäteen: kuka voi osallistua, milloin arvonta tehdään, montako voittajaa valitaan ja miten voittajalle ilmoitetaan. Tämä ei ole juridinen neuvo, mutta yleinen kuluttajansuojan periaate on, että kilpailun ja arvonnan ehdot ovat osallistujien nähtävissä ennen osallistumista, ei vasta jälkikäteen.

Miksi tasan sama todennäköisyys on tärkeää

Jos arvonnan mekaniikka suosii tiedostamatta joitakin tuloksia toisten kustannuksella, kyseessä ei enää ole aito arvonta vaan vinoutunut valinta, vaikka lopputulos näyttäisi satunnaiselta. Vinouma voi syntyä monella tavalla: huonosti toteutetusta satunnaislukugeneraattorista, virheellisestä sekoitusalgoritmista tai modulo biasista. Tämän vuoksi tekninen toteutus on yhtä tärkeä osa reiluutta kuin näkyvät säännöt.

Nimiarvonta: Fisher-Yates-sekoitus

Nimiarvonta ei arvo voittajaa poimimalla toistuvasti satunnaisen indeksin ja poistamalla sen listasta. Sen sijaan koko nimilista sekoitetaan kertaalleen Fisher-Yates-algoritmilla, joka käy listan läpi lopusta alkuun ja vaihtaa jokaisen alkion satunnaisesti valitun aiemman alkion kanssa. Algoritmi on matemaattisesti todistettu antamaan jokaiselle mahdolliselle järjestykselle yhtä suuren todennäköisyyden. Voittajat poimitaan sekoitetun listan alusta.

Miksi naivi listasta poistaminen voi mennä pieleen

Intuitiivinen tapa arpoa voittaja listasta on arpoa satunnainen indeksi, poimia se listan alkio, poistaa alkio listasta ja toistaa tarvittava määrä kertoja. Tämä voi teoriassa toimia oikein, mutta se on herkempi virheille kuin Fisher-Yates: jos indeksin arvonta ei ole tarkkaan tasajakautunut (esimerkiksi modulo biasin takia), virhe kertautuu jokaisella poistokierroksella ja vinouma kasvaa. Fisher-Yates puolestaan sekoittaa koko listan yhdellä läpikäynnillä, ja jokainen vaihtokohta käyttää tarkasti tasajakautunutta satunnaislukua, joten virhettä ei pääse kertymään usealle kierrokselle.

Toinen käytännön etu on tehokkuus: Fisher-Yates sekoittaa koko listan yhdessä lineaarisessa läpikäynnissä riippumatta siitä montako voittajaa lopulta tarvitaan, kun taas toistuva arvo-ja-poista-menetelmä joutuu käsittelemään koko jäljellä olevan listan uudelleen jokaisella kierroksella.

Modulo bias ja rejection sampling

Kun satunnaisluku pitää sovittaa tietylle välille (esimerkiksi 1-37), yksinkertaisin tapa on ottaa jakojäännös suuremmasta satunnaisluvusta. Ongelma syntyy, kun generaattorin arvoalue ei jaa tasan halutulla välillä: pienet luvut voivat tulla valituksi hieman useammin kuin suuret. Rejection sampling eli hylkäysmenetelmä korjaa tämän: generaattorin arvoalueesta lasketaan suurin osa joka jakautuu tasan halutulla välillä, ja kaikki sen ulkopuolelle jäävät arvot hylätään ja arvotaan uudelleen.

Miksi ihminen ei osaa arpoa satunnaisesti

Kun ihmistä pyydetään keksimään satunnainen luku tai järjestys päästään, tulos ei ole tasajakautunut. Ihmiset suosivat tiedostamattaan tiettyjä lukuja, välttävät toistoa (vaikka esimerkiksi kolikonheitossa kruuna kolme kertaa peräkkäin on täysin tavallista) ja tuottavat kuvioita, jotka poikkeavat aidosta satunnaisuudesta mitattavalla tavalla. Tämän vuoksi tietokoneella tehty arvonta on reilumpi kuin "päästä vedetty" valinta.

Nimiarvonta käytännössä

Nimiarvontaa käytetään yleisesti sosiaalisen median kilpailuissa, yhdistysten tapahtumissa, työpaikkojen tiimiarvonnoissa ja koululuokkien tehtävänjaossa. Syötä osallistujien nimet, yksi rivi per nimi, ja valitse kuinka monta voittajaa arvotaan. Jos voittajia arvotaan useampi, jokainen nimi voi voittaa vain kerran, koska Fisher-Yates-sekoitus käydään läpi vain kertaalleen ja voittajat poimitaan sekoitetun listan alusta.

Nimilistan tyhjät rivit ja ylimääräiset välilyönnit siivotaan automaattisesti pois ennen arvontaa, joten listan voi liittää suoraan esimerkiksi taulukkolaskentaohjelmasta ilman erillistä muotoilua.

Tulos näyttää myös osallistujien kokonaismäärän ja käytetyn menetelmän nimen, jotta arvonnan laajuus ja tapa on jälkikäteen todennettavissa, vaikka yksittäistä tulosta ei voikaan varmentaa ulkopuolisella palvelimella tai kolmannella osapuolella.

Todennäköisyys nimiarvonnassa

Jos nimilistassa on N osallistujaa ja arvotaan yksi voittaja, jokaisen osallistujan todennäköisyys voittaa on 1/N. Jos osallistujia on esimerkiksi 20, jokaisen todennäköisyys on 5 prosenttia. Kun voittajia arvotaan useampi ilman toistoa, ensimmäisen voittajan todennäköisyys on edelleen 1/N, mutta toisen voittajan todennäköisyys lasketaan enää jäljellä olevista N-1 osallistujasta, ja niin edelleen. Kokonaisuutena jokaisella osallistujalla on silti sama todennäköisyys tulla valituksi johonkin voittajapaikoista, kunhan sekoitusalgoritmi on tasajakautunut.

Satunnaisluku käytännössä

Satunnaisluku-toiminto sopii esimerkiksi arpajaisnumeron valintaan, pelivuoron määrittämiseen tai minkä tahansa tilanteen ratkaisemiseen, jossa tarvitaan yksi ennalta-arvaamaton kokonaisluku tietyltä väliltä. Väli voi olla mikä tahansa, myös negatiivisia lukuja sisältävä, kunhan alkupää on pienempi kuin loppupää. Molemmat rajat, alku ja loppu, ovat mukana mahdollisissa tuloksissa: väli 1-10 voi antaa tuloksena yhtä hyvin 1:n tai 10:n kuin minkä tahansa niiden välissä olevan luvun.

Arpakuutio: nopea heitto ilman lisäasetuksia

Tämän sivun arpakuutio-osio on tarkoituksella suppea: se tarjoaa nopean tavan heittää yksi noppa kuudella tai kahdellakymmenellä sivulla ilman, että täytyy siirtyä toiselle sivulle. Useamman nopan heitot, todennäköisyystaulukot ja roolipelimerkinnät kuten d8, d10 ja d100 löytyvät omalta Noppa-sivulta, jossa aihe on käsitelty kattavasti ilman että sisältö toistuisi tällä sivulla.

Sama periaate pätee kolikonheittoon: jos tarvitset useamman heiton tilastoja tai kruuna-klaava-todennäköisyyksien tarkempaa selitystä, ne löytyvät omalta kolikonheitto-sivulta, joka on rakennettu samalla kryptografisella satunnaisuudella kuin tämä sivu.

Usein kysyttyä

Onko tämän sivun arvonta oikeasti satunnainen?

Kyllä. Kaikki kolme arvontatyyppiä käyttävät selaimen crypto.getRandomValues-rajapintaa, ei Math.random-funktiota. Ero on olennainen: Math.random on tarkoitettu esimerkiksi animaatioihin, ei tilanteisiin joissa tuloksen ennustamattomuudella on merkitystä.

Miten nimiarvonta valitsee voittajan reilusti?

Nimilista sekoitetaan Fisher-Yates-algoritmilla, joka antaa jokaiselle mahdolliselle järjestykselle täsmälleen yhtä suuren todennäköisyyden. Voittajat poimitaan sekoitetun listan alusta, jolloin jokaisella nimellä on sama mahdollisuus tulla valituksi.

Miksi Fisher-Yates on parempi kuin "arvo indeksi ja poista"?

Naivi tapa arpoa toistuvasti satunnainen indeksi ja poistaa se listasta voi tuntua toimivalta, mutta jos satunnaislukugeneraattorin toteutus ei ole huolellinen, tulokset voivat vinoutua. Fisher-Yates on matemaattisesti todistettu tasajakautuneeksi, joten se on standardi tapa sekoittaa lista.

Mitä modulo bias tarkoittaa?

Kun satunnaisluku muunnetaan halutulle välille jakojäännöksellä (modulo), tietyt tulokset voivat tulla hieman todennäköisemmiksi kuin toiset, jos alkuperäisen arvoalueen koko ei jakaudu tasan halutulla välillä. Tämä laskuri välttää sen hylkäysmenetelmällä: alueen ulkopuolelle jäävät arvot arvotaan uudelleen.

Voiko sama nimi voittaa kahdesti samassa arvonnassa?

Ei, jos arvotaan useampi voittaja ilman toistoa. Sekoitettu lista käydään läpi alusta, ja jokainen nimi valitaan korkeintaan kerran. Jos haluat mahdollisuuden samaan nimeen useasti, kyseessä olisi eri arvontatapa (arvonta takaisinpanolla), jota tämä laskuri ei tarjoa.

Onko reilua kertoa arvonnan säännöt etukäteen?

Kyllä, se on hyvä käytäntö. Jos arvontaa käytetään esimerkiksi somekilpailussa, osallistujien on hyvä tietää etukäteen miten voittaja valitaan, milloin arvonta tehdään ja miten voittajalle ilmoitetaan. Tämä ei ole juridinen neuvo, vaan yleinen reiluuden periaate.

Miksi ihminen ei osaa arpoa satunnaisesti?

Ihmiset suosivat tiedostamattaan tiettyjä lukuja ja kuvioita, ja välttävät esimerkiksi peräkkäisiä toistoja, vaikka ne ovat aidosti satunnaisessa sarjassa täysin tavallisia. Tämän vuoksi ihmisen "päästä vedetty" luku tai järjestys ei ole tasajakautunut samalla tavalla kuin tietokoneen tuottama satunnaisluku.

Mitä eroa on tällä sivulla ja nopalla?

Tämä sivu keskittyy nimiarvontaan ja mielivaltaisen väliltä arvottuun satunnaislukuun. Nopan heitto usealla eri sivumäärällä ja todennäköisyystaulukot löytyvät omalta sivultaan, ks. Noppa.

Voiko satunnaisluvun arpoa negatiiviselta väliltä?

Kyllä, jos alku on pienempi kuin loppu, esimerkiksi -10 ja 10 välillä. Laskuri hyväksyy sekä positiiviset että negatiiviset kokonaisluvut rajoiksi.

Mitä tapahtuu jos nimilistassa on tyhjiä rivejä?

Tyhjät rivit ohitetaan automaattisesti eivätkä osallistu arvontaan. Vain rivit joilla on tekstiä lasketaan mukaan.

Voiko arvonnan tuloksen todistaa jälkikäteen?

Tämä laskuri ei tallenna tuloksia palvelimelle, joten yksittäistä arvontaa ei voi todistaa jälkikäteen ulkopuoliselle. Jos arvonnan tulos pitää pystyä todistamaan esimerkiksi kilpailun järjestäjänä, ota kuvakaappaus tuloksesta heti arvonnan jälkeen.

Miksi arpakuutio-osio on suppeampi kuin oma noppasivu?

Tällä sivulla arpakuutio on mukana nopeaa yksittäistä heittoa varten. Todennäköisyystaulukot, useamman nopan summat ja roolipelimerkinnät (d20 ja niin edelleen) on koottu omalle Noppa-sivulle, jotta sisältö ei toistu kahdessa paikassa.

Lähteet