In een vorige blog heb ik twee random namen uit een lijst gehaald. Dat werd gedaan door een random nummer te bepalen tussen 0 en het aantal namen minus 1 in de lijst. In dat voorbeeld een getal tussen 0 en 49 wat de index van de lijst voorstelt, zodat één van de 50 namen gekozen werd.
Toen vroeg ik me af hoe random die functie is in Dynamo. Wordt eventueel ook de eerste en de laatste index gevonden? Of is het altijd tussen 1 en 48? Tijd om uit te zoeken!
Heleboel keer testen
Om zeker te weten dat iets voor gaat komen, moet je het gewoon heel vaak testen. Vijftig keer testen op 50 items is niet echt betrouwbaar, maar een goede start.

Omdat de random waardes geen hele getallen zijn, worden ze afgerond. Daarmee moeten ze gegarandeerd 0, 49 of een heel getal ertussen zijn. Maar worden ze alle 50 een keer random bepaald?

Sorteren en uniek maken levert in dit geval 31 verschillende getallen op, dus 19 getallen waren dubbel of vaker gekozen. Ergens had ik verwacht dat er minder unieke getallen zouden zijn op slechts 50 keer. Bij 25 opgevraagde nummers zijn er al 21 unieke waarden waardoor er maar 4 waarden niet gevonden zijn.
Bij 100: 41 unieke waarden van de 50 mogelijkheden
Bij 150: 48 unieke waarden
Bij 175: 49 unieke waarden
Bij 185: alle mogelijkheden zijn een keer random gevonden!
Ik had verwacht dat het opvragen van een miljoen waarden uit 50 mogelijkheden vrijwel zeker alle mogelijkheden een keer zou vinden. Maar dat is dus al bij 185 stuks het geval. Maar als je de verjaardagenparadox in het achterhoofd houdt, waar in theorie de 23e jarige van een groep jarig is op een verjaardag van één van de vorige 22, dan is het logisch dat een dubbele waarde gevonden worden in vrij korte tijd. Maar dit lijkt op de andere variant, wat is de kans dat alle waarden dubbel voorkomen? Die kans lijkt verwaarloosbaar klein. En bij 185 keer zijn er nog voldoende waarden die slechts één keer voorkomen, maar zeker in een heel andere verhouding dan de sterke-verjaardagen-paradox.
Nog één controle, worden ze allemaal even vaak gevonden? Dat blijkt ook niet het geval.

Sommige worden maar één keer gevonden, andere 6 of 7 keer. Dat is wel redelijk random dan. En om te beginnen met de oorspronkelijke vraag, ja, ook de eerste en de laatste waarde worden gevonden!
Maar toch…
Hoe vaker je test, hoe meer je iets uit de gemiddelden kunt halen. Test je een miljoen keer, dan blijkt het toch allemaal niet ontzettend random te zijn. Want alle getallen tussen 1 en 48 worden rond de 20.500 keer gevonden, en de getallen 0 en 49, de eerste en laatste dus, worden allebei maar 10.250 keer gevonden! Precies de helft ervan dus.

Wiskundig is dit wel te verklaren vanuit de Round functie. Bij elk getal kan naar boven of naar beneden worden afgerond. Behalve bij het eerste of laatste getal. Om 0 te krijgen, worden alle getallen tussen 0 en 0.49999 afgerond naar 0, om 1 te krijgen worden alle getallen tussen 0.5 en 1.49999 afgerond, enzovoort. Je ziet daarmee al dat de kans op een 1 twee keer zo groot is als een 0.
Tsja, je kunt dus blijkbaar in alle gevallen beter bij de middenmoot horen…
Wil je complexe of repetitieve taken automatiseren in Civil 3D? Dit boek helpt je alles te leren over de design automating tool Dynamo voor Civil 3D. Je wordt een professional in visueel programmeren, en binnenkort zijn al je saaie of complexe taken geautomatiseerd!
This book is only available in English.
