Gewichtete Zufallszahlenerzeugung in C #

7

Frage

Wie kann ich zufällig einen von zwei Zuständen erzeugen, mit der Wahrscheinlichkeit, dass "rot" in 10% der Fälle generiert wird und "grün" in 90% der Fälle generiert wird?

Hintergrund

Alle 2 Sekunden blinkt entweder ein grünes oder ein rotes Licht.

Diese Sequenz wird für 5 Minuten fortgesetzt.

Die Gesamtzahl der Vorkommnisse eines blinkenden Lichts sollte 300 sein.

    
bugBurger 05.10.2009, 20:28
quelle

8 Antworten

33

Random.NextDouble gibt eine Zahl zwischen 0 und 1 zurück, daher sollte Folgendes funktionieren:

%Vor%     
Michael 05.10.2009, 20:31
quelle
7

Entweder

%Vor%

oder

%Vor%

Dies funktioniert, weil Random.Next(int maxValue) eine einheitlich verteilte Ganzzahl in [0, maxValue) und Random.NextDouble gibt eine einheitlich verteilte double in [0, 1) zurück.

    
jason 05.10.2009 20:31
quelle
3
%Vor%

Zu verwenden:

%Vor%     
MusiGenesis 05.10.2009 20:34
quelle
3

Die anderen Antworten werden definitiv funktionieren, wenn Sie eine zufällige Verteilung benötigen, die 90% grün bevorzugt.

Wenn Sie jedoch eine genaue -Distribution benötigen, funktioniert so etwas:

%Vor%     
Rex M 05.10.2009 20:31
quelle
1

Aufbauend auf Michaels Antwort, aber hinzufügen weiteren Kontext aus der Frage:

%Vor%     
Scott Ferguson 05.10.2009 20:42
quelle
1

Ich schätze, Sie haben den Timing-Teil (so adressiert dieser Code das nicht). Unter der Annahme einer "netten" Teilung werden 10% Rottöne und 90% Grüns erzeugt. Wenn die Genauigkeit nicht wichtig ist, hat Michaels Antwort bereits meine Stimme.

%Vor%     
Austin Salonen 05.10.2009 21:36
quelle
0
%Vor%

random.Next(10) wird nach dem Zufallsprinzip die Zahlen 0..9 zurückgeben und es besteht eine Chance von 10%, dass es 0 zurückgibt.

    
Martin Liversage 05.10.2009 20:32
quelle
0

Wenn Sie möchten, dass diese nur zufällig aussehen, möchten Sie vielleicht Shuffle Bag implementieren

Ссылка

und

Notwendigkeit eines vorhersagbaren Zufallsgenerators

Auf diese Weise sollte die Blinkperiode natürlicher aussehen und Sie können einfach die beschränkte Anzahl von Blinksituationen implementieren.

    
Luka Rahne 06.10.2009 06:33
quelle

Tags und Links