Excel VBA: Die Rnd () - Methode ist nicht zufällig genug

1552
tkulogo

Ich verwende Excel und VBA, um eine große Anzahl von Würfelrollen zu simulieren.

Das Problem, das ich habe, ist nach einer bestimmten Zeit, die Rollen beginnen sich zu wiederholen, und ich bekomme Ergebnisse, die alles andere als zufällig sind.

Ich verwende INT = RND() * 6 +.5für jeden Würfel.
Gibt es eine Möglichkeit, es um einige Größenordnungen willkürlicher zu machen?
Ich benutze Randomizevorher Hand, um zu verhindern, dass jedes Mal derselbe Start erfolgt.

0
Was haben Sie bisher recherchiert? Wie haben Sie festgestellt, dass die Sequenz wiederholt wird? Welchen Code verwenden Sie? James Snell vor 10 Jahren 1
Menschen haben kein gutes Gefühl für wahre Zufälligkeit. Ich habe ein Skript geschrieben, um eine zufällige ep von startrek auszuwählen und abzuspielen, aber ich habe bemerkt, dass sie ein paar Eps zu oft abgespielt hat. Ich entschied mich dafür, es mit einer Charge von 200 eps zu testen, und analysierte die Statistiken. Mein Algorithmus war eigentlich "besser" als zufällig, weil er 77% der möglichen eps auswählte und nie mehr als zweimal wiederholte. Ein wirklich zufälliger Algorithmus würde etwa 67% des Bereichs abdecken. Am Ende stellte ich fest, dass ich nicht willkürlich will und fügte eine History- / Blacklisting-Funktion hinzu, um Wiederholungen zu verhindern. Ich hoffe, dass eine Anekdote hilft. Frank Thomas vor 10 Jahren 0
Wie haben Sie festgestellt, dass die Ausgabe "nicht zufällig genug" ist? Haben Sie einen Chi-Quadrat-Test gemacht? Ich bin nur Neugierig. Es würde auch helfen, Ihren Code zu sehen. Excellll vor 10 Jahren 0
Verwenden Sie "Randomize" oder "Randomize Timer" (wie auf SO erklärt) (http://stackoverflow.com/questions/1174246/vba-more-realistic-randomnumbergenerator)? nixda vor 10 Jahren 0

1 Antwort auf die Frage

1
LawrenceC

VBA implementiert wahrscheinlich eine Pseudozufallsfunktion. Da es sich um eine Funktion handelt, wird es wiederholt, generiert jedoch eine Reihe von Werten, die eine zufällige Verteilung haben.

Möglicherweise müssen Sie eine Bibliothek entwickeln oder suchen, die eine Zufallsquelle verwendet und darauf basierend eine Folge von Zufallszahlen generiert. Eine solche Quelle für Unvorhersehbarkeit ist die Zeit zwischen Tastendrücken oder das Erfassen von Eingaben wie etwa Mausbewegungen.

Sie können auch einen Webservice verwenden und eine große Anzahl von Zufallszahlen herunterladen. random.irb.hr und random.org sind zwei solcher Dienste.

random.irb.hr hat auf seiner Site einige Bibliotheken, mit denen Sie programmgesteuert auf den Dienst zugreifen können, sobald Sie ein Konto erstellt haben.

Sie können auch den tatsächlichen Generator kaufen, den sie verwenden, und die Software verwenden, die sie damit liefern.