Zufallsformel
Übersicht

![]() |
Kernle 32DLLBetreff: Zufallsformel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Huhu...
Also mein Problem ist wiefolgt... Ich habe eine unbekannte Anzahl von möglichen Fällen die eintreten könnten. Fall1 Fall2 Fall3 Fall4 ... Das Problem ist nun, das ich einen Zufallsgenerator schreiben will, der sich einen der Fälle rauspickt (zufällig halt ^^) und mir zurückgibt. Problem dabei: Die Fälle haben nicht alle die gleiche Wahrscheinlichkeit. Fall1 Fall2 Fall3 Fall4 ... 10% 21% 02% 40% ... (Man gehe davon aus das die Summe aller Fälle mit ihren Wahrscheinlichkeiten 100% ergibt) Ich habe mir schon mehrere Gedanken gemacht, bin aber zu keiner ansatzweise funktionierenden Lösung gekommen. Hat sich schonmal jemand damit beschäftigt ? (Hab in der Forensuche nichts gefunden :/) Will auch keinen vorgebastelten Code, da ich das ganze auch verstehen will ![]() Bin für jede Hilfe dankbar ![]() Grüßle: Kernle PS: Achja, am besten währe ein Ansatz, der es ermöglicht das ganze in einre Schleife zu errechnen... Also das ich am Anfang die Fälle mit ihren Wahrscheinlichkeiten angebe (Types ?), und am Ende der Schleife(n) ich weis welcher Fall eintritt... :/ |
||
Mein PC: "Bluelight" - Xtreme Gamer PC [Video]
Meine Projekte: Cube-Wars 2010 [Worklog] Anerkennungen: 1. Platz BCC #7 , 1. Platz BCC #22 , 3. Platz BAC #89 Ich war dabei: NRW Treff III, IV ; Frankfurter BB Treffen 2009 |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
dafür gibts ne billige variante.
füll einen Array mit X slots (X kann 100 sein wenn du nur ganze prozent hast und sonst entsprechend grösser). wenn zb etwas mit 10% dran kommt, füllst du 10% der slots mit diesem fall, sonst 0.02% etc danach einfach ne zufallszahl von 1 - arraygrösse und du hast deinen zufallsentscheid |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
SpionAtomBetreff: Re: Zufallsformel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich würde eine Zufallszahl X = Rand(1, 100) erstellen.
Nun kannst du mit Select prüfen, ob diese Zahl im Bereich 1-20, oder 20-33, oder 34-100 liegt. (als Beispiel) Muss natürlich nicht von 1-100 gehen, kann man sich anpassen wie mans gerade braucht. |
||
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080 |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hat das problem dass die verteilung vorher bekannt sein muss da select zur Compile Zeit bestimmt wird. | ||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
SpionAtom |
![]() Antworten mit Zitat ![]() |
---|---|---|
Potz Tausend! Die Anzahl der möglich eintretenden Fälle ist tatsächlich unbekannt. Hatte deine Methode auch noch nicht gelesen, als ich das schrieb, Dreamora.
Aber selbst für ein statisches Select gibts einen entsprechenden Workaround. Wenn gewünscht, dann schreib ich einen. |
||
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080 |
![]() |
Kernle 32DLL |
![]() Antworten mit Zitat ![]() |
---|---|---|
OK, ich merke gerade das mein wahrscheinlichkeitsrechungswissen (was für ein langes wort) wohl doch etwas eingerostet ist ^^ Ich denke mal ich muss erstmal wissen wie man überhaupt mit einer wahrscheinlichkeit hantiert... also z.b. 20% (20/100 als bruch ![]() Mir schwebt da was vor wir rand(0,20), aber weiter weiß ich grad auch nicht ^^ (Mensch komm ich mir gerade dumm vor ^^) Grüßle: Kernle PS: Danke für die schnellen Antworten, auch wenn ich damit erstmal nix anfangen konnte ![]() |
||
Mein PC: "Bluelight" - Xtreme Gamer PC [Video]
Meine Projekte: Cube-Wars 2010 [Worklog] Anerkennungen: 1. Platz BCC #7 , 1. Platz BCC #22 , 3. Platz BAC #89 Ich war dabei: NRW Treff III, IV ; Frankfurter BB Treffen 2009 |
![]() |
SpionAtom |
![]() Antworten mit Zitat ![]() |
---|---|---|
!Spoilerwarnung! Falls du selber noch dran knobeln willst, dann lies einfach drüber hinweg...
Fingerübung: Code: [AUSKLAPPEN] ;Anzahl der Ereignisse
Data 4 ;"Ereignis", Wahrscheinlichkeit Data "A", 20 Data "B", 30 Data "C", 40 Data "D", 10 ;Werte einlesen Dim E$(99) Dim P%(99) Dim H%(99) Read anz For i = 1 To anz Read E(i), P(i) Next SetBuffer BackBuffer() r = 0 Repeat r = r + 1 Cls Locate 0, 0 x = Zufall(anz) H(x) = H(x) + 1 Print "Ereignis, Wahrscheinlichkeit, Häufigkeit, prozentuale Häufigkeit" For i = 1 To anz Print E(i) + ", " + P(i) + ", " + H(i) + ", " + H(i) / Float(r) Next Flip(0) Until KeyDown(1) WaitKey End ;Das Array P% muss korrekt gefüllt sein ;P%(1) ist die Wahrscheinlichkeit für das erste Ereignis, P%(2) für das zweite, usw... ;Zurückgegeben wird der Index des erwürfelten Ereignisses. Function Zufall(anz) mp = 0 For i = 1 To anz mp = mp + P(i) Next x = Rand(1, mp) pp = 0 For i = 1 To anz pp = pp + P(i) If x <= pp Then Return i Next Return -1 ;Error End Function |
||
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080 |
![]() |
Justus |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn etwas mit der Wahrscheinlichkeit von 20% passiert (richtig: 20/100, wie du schriebst), bedeutet das (kürzen) 1/5.
Das heißt in einem von 5 Fällen passiert es durchschnittlich. Code: [AUSKLAPPEN] If Rand(1,5) = 1 Then
MakeItHappen() EndIf Ich halte die Methode, die Dreamora vorschlug tatsächlich für das einfachste. |
||
![]() |
Kernle 32DLL |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke euch dreien ![]() ![]() Kann geschlossen werden ![]() Grüßle: Kernle |
||
Mein PC: "Bluelight" - Xtreme Gamer PC [Video]
Meine Projekte: Cube-Wars 2010 [Worklog] Anerkennungen: 1. Platz BCC #7 , 1. Platz BCC #22 , 3. Platz BAC #89 Ich war dabei: NRW Treff III, IV ; Frankfurter BB Treffen 2009 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group