Kas teil on vaja leida auhinnamängu võitja, kutsuda õpilane vastama või otsustada, kes viib prügi välja? See tasuta veebipõhine juhuslike valikute tööriist teeb ausa loosi igast teie sisestatud nimekirjast. Kleepige oma kanded kasti „Elemendid“ — üks igale reale või komadega eraldatult — määrake väljale „Arv“, mitut tulemust soovite, ja vajutage nuppu „Genereeri“. Nimekiri vajab vähemalt kahte kannet ja mahutab kuni 1000 elementi, igaüks pikkusega kuni 200 tähemärki.
Iga loosimine tehakse otse teie veebilehitsejas, kasutades Web Crypto API-t (crypto.getRandomValues), mis pakub teie operatsioonisüsteemi generaatorist pärinevaid krüptograafiliselt tugevaid juhuarve. Teie nimekirja ei saadeta kunagi ühtegi serverisse, seda ei salvestata kuhugi ja meie seda ei näe — see on siin olulisem kui enamiku generaatorite puhul, sest tavaliselt lisatakse kliendinimekirju, klassipäevikuid või kolleegide nimesid. Nupp „Laadi failist“ peab kinni samast lubadusest: teie veebilehitseja loeb faili ja täidab kasti lokaalselt, laadimata midagi internetti üles.
Valikud on loodud päriselt kasutatavate nimekirjade jaoks. Säte „Eraldaja“ on vaikimisi „Automaatne“, mis tunneb ära reavahetused ja komad ning tuvastab ise, kumba teie nimekiri kasutab. Nii töötab tabelist, vestlusest või dokumendist kopeeritud loend ilma, et peaksite seda ise vormindama. Kui teie andmetes on vormingud segamini, lukustage see valikule „Reavahetus“, „Koma“ või „Tühik“. Pange tähele, et „Tühik“ on alati teadlik valik ja pole kunagi automaatne, sest kanded nagu täisnimed sisaldavad ise tühikuid ja nende automaatne eraldamine rikuks rohkem nimekirju kui parandaks. Väli „Arv“ otsustab, mitu kannet loositakse, vahemikus 1 kuni 100. Kas otsite 200 osaleja hulgast kolme võitjat? Kleepige osalejad, seadke „Arv“ väärtusele 3 ja vajutage „Genereeri“. Kaks seadet rakenduvad alles siis, kui arv on 2 või enam, jäädes seniks halliks: lüliti „Kordusteta“, mis määrab, kas sama kannet saab loosida kaks korda, ja „Väljundvorming“, mis määrab, kuidas valikud eraldatakse — „Üks igal real“, „Tühikuga eraldatud“ või „Komaga eraldatud“.
Kastis „Elemendid“ olev nupurida teeb ära muudatused, mida muidu peaksite tegema kuskil mujal. „Laadi failist“ tõmbab nimekirja otse lihtteksti- või CSV-failist. „Juhuslik“ muudab kannete järjekorda kastis, „Sorteeri“ järjestab need tähestikulises ja loomulikus numbrilises järjekorras ning teine klõps pöörab järjekorra ümber, samas kui „Tühjenda“ teeb kasti täiesti tühjaks. Nupp „Täitke näidisandmetega“ lisab lühikese proovinimekirja, et saaksite tööriista ühe klõpsuga katsetada. Valik „Laienda, et see sobiks sisuga“ teeb kasti suuremaks, et näidata pikka nimekirja täies mahus, ja „Ahenda vaikesuurusele“ muudab kasti taas väikeseks. Tulemuste all asetsev „Kopeeri kõik“ kopeerib iga valiku lõikepuhvrisse, „Salvesta faili“ kirjutab need teie seadmesse ning „Ajalugu“ hoiab teie viimased 10 loosimist veebilehitsejas, et varasem tulemus oleks vaid ühe klõpsu kaugusel.
Kuidas valik tegelikult tehakse? Kui vajutate „Genereeri“, küsib veebileht lehitsejalt juhuslikke väärtusi funktsiooni crypto.getRandomValues kaudu ja kasutab neid teie nimekirjast positsioonide valimiseks, selle asemel et toetuda JavaScripti pseudojuhuslikule funktsioonile Math.random(). Toore 32-bitise väärtuse asukohaks muutmine on koht, kus algoritmid sageli märkamatult eksivad: väärtuse jagamine nimekirja pikkusega ja jäägi (modulo) võtmine on kõige ilmsem, ent samas kallutatud lähenemine. Põhjus on selles, et kui 2^32 ei jagu täpselt nimekirja pikkusega, tulevad nimekirja alguses olevad kanded veidi sagedamini esile kui teised. Seda viga nimetatakse modulokallutatuseks (modulo bias) ja see on mõõdetav, mitte lihtsalt teoreetiline. Meie tööriist aga tühistab kõik väärtused, mis ületavad nimekirja pikkuse suurimat täpset kordajat, ja loosib uuesti — tehnikat nimetatakse tagasilükkamisega valikuks (rejection sampling). See nõuab mõne lisaloosimise tegemist, kuid pakub ligikaudse garantii asemel täpset. Asukoht nimekirjas ei muuda midagi: esimene ja viimane kanne omavad igal loosimisel täpselt sama tõenäosust.
Lüliti „Kordusteta“ eraldab kahte täiesti erinevat tüüpi loosimist, mille jaoks on statistikas eraldi nimed. Kui see on sisse lülitatud, segab tööriist teie nimekirja koopia Fisher-Yatesi algoritmiga ja võtab kanded ülevalt — justnagu tõmbaks piletid mütsist välja neid tagasi panemata, nii et kedagi ei valita kaks korda ja iga selle suurusega rühm on võrdselt tõenäoline. Seda nimetatakse tagasipanekuta valikuks (sampling without replacement) ja see on täpselt see, mida vajate auhindade jagamisel, meeskondade moodustamisel ja järjekorra määramisel. Kui see on välja lülitatud, tehakse iga valik sõltumatult kogu nimekirjast, seega võib sama kanne tulla esile rohkem kui üks kord — see on tagasipanekuga valik (sampling with replacement), mida vajate siis, kui kõik jäävad igas voorus valikusse, näiteks korduvate loosimiste või kiire statistilise valimi puhul. Kumbki režiim pole teisest ausam; need lihtsalt vastavad erinevatele vajadustele.
Aus loosimine ei tohigi ausana näida. Loosige kümnest nimest viis ja te näete regulaarselt kaht valikut, mis olid algses nimekirjas üksteise kõrval, või sama nime kaks korda järjest, kui kordused on lubatud — ja igaüks neist juhtumitest on täiesti tavaline. Iga loosimine on sõltumatu: varasematel valikutel pole mingit mõju hilisematele ning keegi ei ole kunagi võidu „ootel“ pelgalt seetõttu, et on aeg. Instinkt, mis väidab vastupidist, on mänguri eksitus (gambler's fallacy). See on sama instinkt, mis muudab meid endid halbadeks juhuslikeks valijateks — kui meil palutakse suvaliselt valida, väldime esimest ja viimast kannet, püüame nime mitte korrata ning hajutame oma valikud palju ühtlasemalt, kui juhus seda kunagi teeks. Kahtlaselt korrapärane tulemus on inimese sõrmejälg; tõeline juhuslikkus tekitab kobaraid.
Miks valida see juhuslike valikute tööriist?
- Loosimine ainult veebilehitsejas: nimekirja loetakse teie seadmes ja ei saadeta kuhugi
- Web Crypto API juhuslikkus: krüptograafiline turvalisus Math.random() asemel
- Ei mingit modulokallutatust: rejection sampling annab igale kandele võrdse võimaluse
- Igasugune nimekirja kuju: üks real, komadega või tühikutega, ilma ümbervormindamata
- Lüliti „Kordusteta“: loosige võitjad või meeskonnad nii, et kedagi ei valita topelt
- Kuni 1000 kannet ja ühe loosimisega kuni 100 valikut
- Sisseehitatud nimekirjatööriistad: failist laadimine, segamine, sortimine, tühjendamine, näidisandmed
- Ajalugu ja faili salvestamine: hoidke alles jälg loosimisest, mida peate ehk põhjendama
- Piiranguteta ja tasuta: ei mingit registreerimist ega andmeid meie serverites
Juhuslik valik tuleb mängu kõikjal, kus tehtud otsus peab vastu pidama küsimustele. Eesti õpetajad küsivad õpilasi soosikuid valimata ja jagavad klassi projektirühmadesse. Striimijad ja turundajad loosivad auhinnamängude võitjaid publiku ees, kes peab tulemust uskuma. Juhid jagavad ülesandeid, mida keegi vabatahtlikult ei soovi, ja meeskonnad lepivad kokku esitluste järjekorras. Uurijad võtavad kontrollimiseks juhusliku valimi kirjetest. Perekonnad lõpetavad vaidluse selle üle, mida vaadata, ja näljane seltskond valib restorani. Ühine joon on valik, mida igaüks suudab hiljem selgitada: loosimine kasutab krüptograafilist juhuslikkust, see toimub täielikult teie seadmes ning „Ajalugu“ hoiab tulemuse alles, kui keegi peaks hiljem selle kohta küsima.
Sellel tööriistal on mõned ausad piirangud, mida tasub teada. Tööriist ei saa loosida rohkem unikaalseid kandeid, kui teie nimekiri sisaldab — kolme võitja jaoks on vaja vähemalt kolme nime — ja piiriks on 1000 kannet pikkusega 200 tähemärki igaüks, kusjuures ühel loosimisel saab teha kuni 100 valikut. Nupud „Juhuslik“ ja „Sorteeri“ töötavad rea kaupa, nii et ühele reale kleebitud ja komadega eraldatud nimekiri seatakse uude järjekorda alles siis, kui igal real on üks element; mõlemad muudavad kasti sisu, mitte loosimist ennast, mis on täpselt sama aus olenemata teie kannete järjekorrast. Iga kanne kannab samuti disainipäraselt täpselt sama kaalu, seega loosimise puhul, kus üks nimi peaks andma topelthääle, tuleb see nimi ka kaks korda sisestada. Nende piirangute piires on garantii tugev — igal teie nimekirja kandel on täpselt sama võimalus iga üksiku loosimise puhul.