Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 26-08-2005, 10:41   #1 (permalink)
Neuer User
 
Registriert seit: Jan 2002
Beiträge: 30
Math.random() - niedrige Werte bevorzugt?

Hallo,

ich möchte aus den Zahlen 1-20 zufällig 5 Zahlen auswählen, die nur einmal in der Auswahl auftauchen dürfen. Dazu verwende ich den nachfolgenden Code. Nun habe ich den Effekt, dass die statistische Wahrscheinlichkeit ausgewählt zu werden offensichtlich nicht für alle Zahlen gleich groß ist. Ich habe jetzt eine große Zahl von Durchläufen ausprobiert und den Effekt, dass eine Zahl umso häufiger ausgewählt wird, je kleiner sie ist. Die Zahlen 1-10 machen etwa 70% aus und die Zahlen 11-20 etwa 30% (statt 50:50). Die Zahl "20" wird praktisch nie ausgewählt.

ActionScript:
  1. var zahlenpool:Array = new Array()//Anlegen eines Array mit Zahlen von 1-20
  2. for (i=1;i<21;i++) {
  3.     zahlenpool.push(i);
  4. }
  5.  
  6. var fuenf_aus_zwanzig:Array = new Array(); // Array für die Zufallszahlen
  7.  
  8. for (i=0;i<6;i++) {          
  9. zahl=Math.floor(Math.random()*zahlenpool.length)// eine Zahl "zufällig" auswählen
  10.     fuenf_aus_zwanzig.push(zahlenpool[zahl]);     //die Zahl in das Array schreiben
  11.     zahlenpool.splice(zahl,1);              //dafür sorgen, dass die gleiche Zahl nicht nochmal ausgewählt wird
  12. }

Ist das ein "normales" Verhalten der Methode Math.round()

Christian
chromatium ist offline   Mit Zitat antworten
Alt 26-08-2005, 11:41   #2 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg / Stuttgart
Beiträge: 4.338
Bei mir ist die Verteilung recht vernünftig:
ActionScript:
  1. function randomNumbers() {
  2.     var zahlenpool:Array = new Array()//Anlegen eines Array mit Zahlen von 1-20
  3.     for (var i=1;i<21;i++) {
  4.             zahlenpool.push(i);
  5.     }
  6.    
  7.     var fuenf_aus_zwanzig:Array = new Array(); // Array für die Zufallszahlen
  8.    
  9.     for (var i=0;i<6;i++) {
  10.             zahl=Math.floor(Math.random()*zahlenpool.length)// eine Zahl "zufällig" auswählen
  11.             fuenf_aus_zwanzig.push(zahlenpool[zahl]);     //die Zahl in das Array schreiben
  12.             zahlenpool.splice(zahl,1);              //dafür sorgen, dass die gleiche Zahl nicht nochmal ausgewählt wird
  13.     }
  14.    
  15.     return fuenf_aus_zwanzig;
  16. }
  17.  
  18. function countTo(a, pool) {
  19.     for (var i = 0; i < pool.length; i++) {
  20.         a[pool[i]]++;
  21.     }
  22. }
  23. // hierin soll gespeichert werden, wie oft eine Zahl vorkam
  24. // die Position im Array steht für die Zahl
  25. counted = new Array();
  26. for (i=0; i<20; i++) {
  27.     counted[i + 1] = 0;
  28. }
  29.  
  30. for (i = 0; i < 100; i++) {
  31.     countTo(counted, randomNumbers());
  32. }
  33.  
  34. trace(counted);
__________________
»Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!)
Janoscharlipp ist offline   Mit Zitat antworten
Alt 26-08-2005, 13:36   #3 (permalink)
Neuer User
 
Registriert seit: Jan 2002
Beiträge: 30
Hallo,

komisch - so klappt das wirklich mit der Zufälligkeit. Ich habe das Ganze in ein Lernprogramm eingebaut, das Lernkontrollen mit 5 Fragen beinhaltet, welche zufällig aus 20 möglichen Fragen ausgewählt werden. Dort habe ich einfach den Effekt, dass ich diese schiefe Verteilung erhalte.

Christian
chromatium ist offline   Mit Zitat antworten
Alt 26-08-2005, 15:00   #4 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.322
http://www.seibsprogrammladen.de/fra...ispiele/flash5
-> Zufallszahlen
Unterschiedliche Zufallszahlen erzeugen.

das 'gesetz der grossen zahlen' wird schon eingehalten. nur direkt nacheinander gezogene zahlen sind oft nahe beieinander - finde ich.

du kannst ja ein while ergänzen, das z.b. die nächste zufallszahl mindestens 2 nummern grösser/kleiner sein muss.

und
http://www.seibsprogrammladen.de/fra...rithmen/Zufall
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 26-08-2005, 15:57   #5 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg / Stuttgart
Beiträge: 4.338
Kann eigentlich nicht sein, in die Zufälligkeit wird doch nicht eingegriffen, oder?
__________________
»Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!)
Janoscharlipp ist offline   Mit Zitat antworten
Alt 26-08-2005, 19:04   #6 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.322
nein, aber:
1,1,1,1,4,4,3,3,3,2,2,2,6,6,5,1,1,1,...

ist jetzt übertrieben, aber auch zufällig und auf dauer gesehen gleichmässig verteilt.
müsste jetzt wieder bücher welzen. hat wohl etwas mit der varianz zu tun? jedenfalls kann man das auch irgendwie berechnen.
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (26-08-2005 um 19:09 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 26-08-2005, 22:04   #7 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg / Stuttgart
Beiträge: 4.338
Dieses Verhalten kann ich nicht bestätigen, ist aber eine leidige Diskusion, schließlich kann der Zufall immer spielen wie er will, alles kann eintreten, ohne das das bedeuten müsste, das was mit dem Zufall "nicht stimmt" …
__________________
»Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!)
Janoscharlipp ist offline   Mit Zitat antworten
Alt 27-08-2005, 01:29   #8 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.322
ist ja kein echter zufall.

und beim 'würfeln' ist mir das schon aufgefallen, das 'er' verdächtig lange in einer zahlenecke 'hängen' bleibt und das verdächtig oft eine zahl doppelt gewürfelt wird.
ist natürlich nur gefühlt. hab's nicht statistisch ausgewertet. mach ich dann morgen, in einem jahr, wenn schröder noch regiert - wäre dann ja auch ein zufall ;-)
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 19:50 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele