Samstag, 21. November 2015

Projekt Electronic Dice: Zufall - ist gar nicht so einfach

Mein neues Projekt ist ein elektronischer Würfel. Und dazu braucht es natürlich Zufallszahlen. Wie man in vielen Beträgen lesen kann, ist es gar nicht so einfach gute Zufallszahlen mit dem Arduino zu generieren. Der beste Weg wäre wohl nur mit etwas zusätzlicher Hardware zu erreichen. Das wollte ich mir ersparen. Mit dem Arduino kommt ja bereits eine eingebaute Random Funktion mit. Es gibt auch noch weitere zusätzliche Libraries die man einsetzen kann.  Um mit der Random Funktion etwas zuspielen, habe ich ein kleines Script gemacht. Das Script würfelt 100'000 mal. Nachfolgende Grafiken zeigen, wie oft die einzelnen Würfelwerte vorgekommen sind:


Meine Erwartung war, dass bei einer grossen Zahl von Würfelwürfen, die Anzahl der Würfelwerte ungefähr gleich verteilt sind. Das erfüllt die Arduino Standardfunktion eigentlich ganz gut.

Interessant ist natürlich auch, wie gut die Zufallsfunktion bei nur wenigen Würfelwürfen streut. Hierzu folgende Statisik:

*************************** Arduino standard random funcation **************************
Run:    1 one:      3 two:      0 three:      1 four:      3 five:      0 six:    3
Run:    2 one:      3 two:      3 three:      2 four:      5 five:      1 six:    6
Run:    3 one:      5 two:      6 three:      2 four:      7 five:      3 six:    7
Run:    4 one:      7 two:      9 three:      3 four:     10 five:      3 six:    8
Run:    5 one:      8 two:     10 three:      4 four:     10 five:      5 six:   13
Run:    6 one:      8 two:     12 three:      8 four:     12 five:      5 six:   15
Run:    7 one:      9 two:     14 three:     12 four:     15 five:      5 six:   15
Run:    8 one:      9 two:     15 three:     14 four:     17 five:      7 six:   18
Run:    9 one:     12 two:     15 three:     18 four:     18 five:      7 six:   20
Run:   10 one:     12 two:     18 three:     20 four:     19 five:      9 six:   22
****************************************************************************************


******************************* TrueRandom libary **************************************
Run:    1 one:      3 two:      0 three:      0 four:      1 five:      4 six:    2
Run:    2 one:      6 two:      2 three:      0 four:      1 five:      7 six:    4
Run:    3 one:      9 two:      3 three:      1 four:      1 five:     10 six:    6
Run:    4 one:     11 two:      4 three:      2 four:      2 five:     11 six:   10
Run:    5 one:     12 two:      7 three:      5 four:      3 five:     11 six:   12
Run:    6 one:     14 two:      7 three:      9 four:      3 five:     13 six:   14
Run:    7 one:     15 two:     10 three:     10 four:      5 five:     15 six:   15
Run:    8 one:     17 two:     11 three:     13 four:      5 five:     16 six:   18
Run:    9 one:     19 two:     12 three:     16 four:      5 five:     19 six:   19
Run:   10 one:     22 two:     14 three:     18 four:      6 five:     20 six:   20
****************************************************************************************


Fazit: ich verwende mal die Standard Random Funktion vom Arduino. Für das Spiel sollte eigentlich die Qualität des Randomgenerators ausreichen.

Kleiner Hinweis: Beim Ausführen der Tests ist mir aufgefallen, dass die TrueRandom Funktion wesentlich langsamer ist.

Hinweis: Meine kleinen Tests sind natürlich nicht wissenschaftlich fundiert und nur sehr "hemdsärmlig".