Zufallszahlen

  • Huhu,

    wir haben in AutoIt ja die schöne Funktion Random(), die uns pseudo Zufalllszahlen generiert.
    Normalerweise geht man mit der Inversionsmethode vor.

    Hat jmd von euch bereits schoneinmal versucht solche zu generieren?
    Ich b rauchte Zufallszahlen von 2 bis 7 und habe folgendes probiert, um 'pseudo Zufallszahlen zu erstellen'.
    Die einzige Zufälligkeit ist allerdings der Zeitpunkt des Ausführens des Skriptes.
    Ich glaube auch nicht, dass diese Zahlen in einem Test auf eine Zufallsverteilung bestehen würden.

    Spoiler anzeigen
    [autoit]


    #include <Date.au3>
    #include <Array.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global $tSystem[8], $quo[2]
    Do
    $aTime=_Date_Time_GetSystemTime()
    $tSystem = _Date_Time_SystemTimeToArray($aTime)
    ;_ArrayDelete($tSystem, 2)
    $quo[0] = 0
    $quo[1] = 1
    For $i = 0 To (UBound($tSystem)-1)
    $quo[0] = $quo[0] + Number($tSystem[$i])
    If $tSystem[$i] <> 0 Then
    $quo[1] = $quo[1] * Number($tSystem[$i])
    EndIf
    Next
    $exp=($quo[1]/($quo[0]*$quo[0]))/(Sqrt(Number($quo[1]))*0.1)
    ; If $exp < 0.7 Then
    ; $rand = $exp*10
    If $exp > 0.7 And $exp < 2 Then
    $rand = Exp($exp)
    ElseIf $exp > 2 And $exp < 7 Then
    $rand = $exp
    Else
    $rand = $exp/7
    EndIf
    Until $rand >= 2 And $rand <= 7
    MsgBox(0, '', Round($rand, 0))
    Exit

    [/autoit]

    MfG bocky

  • Wenn du zufällige zahlen von 2 bis 7 haben willst die nicht vorher bestimmt sind dann mach das doch so:

    [autoit]


    $Var = Random(200000, 700000)

    [/autoit][autoit][/autoit][autoit]

    Switch $Var
    Case $Var < 300000 and $Var > 200000
    $Var = 3
    Case $Var < 400000 and $Var > 300000
    $Var = 4
    Case $Var < 500000 and $Var > 400000
    $Var = 5
    Case $Var < 600000 and $Var > 500000
    $Var = 6
    Case $Var < 700000 and $Var > 600000
    $Var = 7
    EndSwitch

    [/autoit]

    Es gibt sehr viele Leute, die glauben. Aber aus Aberglauben.
    - Blaise Pascal

  • Das weiß ich auch net, aber so sind sie zufälliger O.o
    Er wollte doch PSEUDO ?

    Es gibt sehr viele Leute, die glauben. Aber aus Aberglauben.
    - Blaise Pascal

  • Hm....


    Definition Zufälliger:

    Wenn etwas Zufällig ist, und durch diesen Zufall etwas Zufällig passiert, ist es ZUFÄLLIGER :D (english: more random :D)

    in auto it:

    [autoit]


    $Var1 = Random(2,7,0)
    Switch $Var1
    Case 2
    $Var2 = Random(2,7,0)
    Switch $Var2
    Case 2
    MsgBox(0, "", "2")
    EndSwitch
    EndSwitch

    [/autoit][autoit][/autoit][autoit]

    ;So defieniert man ZUFÄLLIGER ZUFALL :D

    [/autoit]

    Es gibt sehr viele Leute, die glauben. Aber aus Aberglauben.
    - Blaise Pascal

  • Egal welche Routine/Funktion man verwendet, es sind immer pseudo Zufallszahlen.
    Das beinhaltet auch Random().
    Ein Computer kennt das Wort bzw. den Umstand zufällig in dem Sinne nicht, weil es nicht definiert ist.

    An und für sich wollte ich nur erfahren ob jmd. ohne Random Zahlen generierte. Vlt bin ich auch der einzige,d er auf solche Ideen kommt.

  • doch das geht durchaus, nur wie is ne andere frage :D


    naja könntest ja coden mit verschiedenen komponenten ;)

    Es gibt sehr viele Leute, die glauben. Aber aus Aberglauben.
    - Blaise Pascal

  • Entweder es ist zufällig oder nicht.

    Ein Computer kennt das Wort bzw. den Umstand zufällig in dem Sinne nicht, weil es nicht definiert ist.

    ansich kann der Computer keine Zufallszahl errechnen. Sowas können nur logisch denkende Tiere wie Giraffen,Mäuse,trolle und evtl. der homo spaiens sapiens. Die zufällige aktion der zuletzt genannten tierart kann man nutzen.zum beispiel wäre @Sec ein zufallswert zwischen 0 und 59, da es normalerweise nciht beeinflussbar ist, wann der nutzer das Programm startet. Jedoch kann man ruhigen gewissens Random nehmen, da man es so ohne weiteres nicht vorraussagen kann, welche zahl kommen wird...

  • An und für sich wollte ich nur erfahren ob jmd. ohne Random Zahlen generierte.

    >>Klickmich<<

    Das die Zufallszahlen mit Random doch ziemlich gleichverteilt und somit tatsächlich ausreichend zufällig sind kann man selbst leicht anschaulich überprüfen:

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global $N = 1e6
    Global $aZahlen[10]

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 1 To $N
    $aZahlen[Random(0,9,1)] += 1
    Next

    [/autoit] [autoit][/autoit] [autoit]

    _ArrayDisplay($aZahlen)

    [/autoit]
  • Eine Häufigkeit lässt sich eher so besser darstellen bzw nachvollziehen:

    Spoiler anzeigen
    [autoit]


    #include <Array.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global $aZahlen[100], $zahl[10], $per[10], $control=0

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To (UBound($aZahlen)-1)
    $aZahlen[$i] = Random(0, 9, 1)
    Next
    For $i = 0 To (UBound($zahl)-1)
    For $j = 0 To (UBound($aZahlen)-1)
    If $aZahlen[$j] = $i Then $zahl[$i] = $zahl[$i] + 1
    Next
    Next
    ;_ArrayDisplay($aZahlen)
    ;_ArrayDisplay($zahl)
    For $i = 0 To (UBound($zahl)-1)
    $per[$i] = String(Round($zahl[$i]/UBound($aZahlen)*100, 2)) & '%'
    $control = $control + $per[$i]
    Next
    _ArrayDisplay($per)
    MsgBox(0, '', String($control) & '%')
    Exit

    [/autoit]

    Aber sollten Zufallszahlen nciht eher normalverteilt statt gleichverteilt sein?

  • Warum denn normalverteilt?
    Um welchen Mittelwert denn?
    Wo kommt da eine Standardabweichung her?

    Wenn du unbedingt Prozentzahlen haben willst statt (eigentlich schon aussagekräftiger) Absolutsummen so sollte die Stichprobenmenge schon deutlich größer sein als nur 100 Zahlen.
    Erst mit gegen unendlich gehender Stichprobengröße kann man die "Zufälligkeit" der Random-Funktion überprüfen:

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global $N = 1e6
    Global $aZahlen[10]

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 1 To $N
    $aZahlen[Random(0,9,1)] += 1
    Next

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To 9
    $aZahlen[$i] = $aZahlen[$i] / $N * 100 & "%"
    Next

    [/autoit] [autoit][/autoit] [autoit]

    _ArrayDisplay($aZahlen, "Wahrscheinlichkeit des Auftretens")

    [/autoit]
  • Wenn du eine größere Stichprobe haben willst, setze einfach statt der 100 bei Gobal $aZahlen auf 2^x.
    Inwieweit sind Absolutsummen aussagekräftig, wenn kein Bezug vorhanden ist?
    (Mal von deinem Beispiel abgesehen, dass sie sich durch ein Aufaddieren in zufällig gewählten Zeilen annährten.)

    Das arithmetische Mittel existiert in jeder Stichprobe bzw hier wohl besser Gesamtheit.
    Die Standartabweichung sagt aus, wie weit entfernt die einzlenen Werte vom Mittelwert durchschnittlich sind.
    Macht bei Random() aber wenig Sinn, da es gleichverteilt ist.

  • Inwieweit sind Absolutsummen aussagekräftig, wenn kein Bezug vorhanden ist?

    Wenn Random() ideal zufallsverteilt arbeitet müssen alle generierten Zahlen gleich oft vorkommen (gleichverteilt).
    Das kannst du problemlos an den Anzahl der Vorkommen erkennen.
    Im übrigen ist die Gesamtanzahl eine Zehnerpotenz (1e6) so dass du gar nicht in Prozentwerte umrechnen musst.
    Es sind die selben Werte - nur um die entsprechenden Kommastellen verschoben.
    Die Absolutwerte entsprechen in meinem Beispiel also der Häufigkeitswahrscheinlichkeit um ein paar Kommastellen verschoben ohne erst den Prozentwert auszurechnen.
    Ich denke das ist aussagekräftig genug.

    Das arithmetische Mittel existiert in jeder Stichprobe bzw hier wohl besser Gesamtheit.

    Wo?
    Ich kann nirgends erkennen wo eine Normalverteilung vorkommen soll.

    Die Standartabweichung sagt aus, wie weit entfernt die einzlenen Werte vom Mittelwert durchschnittlich sind.
    Macht bei Random() aber wenig Sinn, da es gleichverteilt ist.

    Danke - ich weiß was die Standardabweichung ist. (Zusammen mit dem Mittelwert der 2. beschreibende Parameter zur Definition einer Normalverteilung).
    Da, wie du mittlerweile nun selbst sagst, keine Normalverteilung vorliegt sondern eine Gleichverteilung gibt es ergo auch keine Standardabweichung.

  • Zitat von bocky3

    Aber sollten Zufallszahlen nciht eher normalverteilt statt gleichverteilt sein?


    Ich stellte eine Frage und keine These auf.
    Da diese allgemein gehalten war, bezieht sie sich nicht direkt auf Random(). Du hast sie nur leider so interpretiert wie ich annehme.
    spontan fallen mir 2 Kriterien für Zufallszahlen ein:

    • unabhängig generiert
    • gleiche Häufigkeitsverteilung

    Die Unabhängigkeit des Generierens spricht nicht (bedingt) gegen eine Normalverteilung.
    Die gleiche Häufigkeitsverteilung allerdings schon.
    Durch sie bildet sich eine Asymptote. Bsp.: y=4
    Ich kann Funktionen allerdings verändern, in dem ich ihre Asymptote verändere.
    Bsp.: y=-64^(-1)*x^2+4 (Dämpfungsfunktion wäre angebrachter, aber gerade zu faul dafür)
    Damit verändere ich logischerweise einzelne Häufigkeitsverteilungen.
    Die Frage ist, ob man damit die Verteilung an sich negativ beeinflusst. Immerhin werden die pseudo Zufallszahlenverteilungen nach einem bestimmten Muster geformt, was aber an sich natürlicher wirkt.
    Sprich das generieren nach einem bestimmten Schema zum Darstellen von 'natürlichen' Prozessen.

    Aus dem Kontext gerissene Zitate sind immer recht interessant ;)

  • Ich stellte eine Frage und keine These auf.

    Und ich hab darauf geantwortet und am Skriptbeispiel gezeigt das sie sich gleichverteilt verhalten.

    spontan fallen mir 2 Kriterien für Zufallszahlen ein:
    unabhängig generiert
    gleiche Häufigkeitsverteilung

    Würde ich anders sehen:
    Nur gleiche Häufigkeitsverteilung.
    Ob du sie unabhängig oder abhängig erreichst ist egal solange dennoch die Gleichverteilung am Ende herauskommt.
    Dann sind sie zufällig.

    Die gleiche Häufigkeitsverteilung allerdings schon.
    Durch sie bildet sich eine Asymptote. Bsp.: y=4
    Ich kann Funktionen allerdings verändern, in dem ich ihre Asymptote verändere.
    Bsp.: y=-64^(-1)*x^2+4

    Kannst du das bitte nochmal genau erklären was du damit meinst.
    Was ist z.B. y und x?
    Ich weiß grad nicht was du damit zeigen willst.

    Edit: Hab nochmal drüber nachgedacht und kann vielleicht doch mit der unabhängigen Generierung mitgehen.
    Wenn man z.B. die derzeitige Sekunde der Zeit nimmt sind die Zahlen von 1-60 gleichverteilt - aber halt abhängig davon in welcher Zeit man sich gerade befindet.
    Sie ist also nicht zufällig.
    Daher stimme ich dir zum Punkt der unabhängigen Generierung nun doch zu.

    Einmal editiert, zuletzt von AspirinJunkie (11. Mai 2010 um 20:34)

  • die derzeitige Sekunde der Zeit nimmt sind die Zahlen von 1-60 gleichverteilt - aber halt abhängig davon in welcher Zeit man sich gerade befindet.
    Sie ist also nicht zufällig.


    mal abgesehen, das es von 0 - 59 geht....

    Wenn ihr schon soweit seit, das das nciht zufällig ist, dann kann ich nur sagen: Der Computer kann keine Zufallszahl bestimmen. Zufallszahl bedeutet, das Sie unabhängig von irgendwelchen einflüssen generiert wird. d.h. Der PC müsste logisch denken können. wie Allseits bekannt, kann er das nicht, sondern nur rechnen. Ergo: Es gibt keine Zufallszahlszahlen von seiten des PC's nur von seiten des benutzers.

  • Ja ist richtig und dem hab ich auch nicht widersprochen.
    Es gibt aber Algorithmen welche Zahlen generieren deren statistische Eigenschaften schon sehr nah an Zufallszahlen herankommen.
    Deshalb Pseudo-Zufallszahlen.
    Quasizufallszahlen wie z.B. die Mausbewegung eines Nutzers in einer bestimmten Zeit oder ähnliches sind halt auch wieder "steuerbar" und damit auch vorhersehbar.
    Benutzereingaben sind also keine sauberen Zufallsereignisse (der Nutzer kann sie ja steuern).
    Zufallszahlen müssen also eine gleiche Häufigkeitsverteilung aufweisen und nicht vorhersehbar sein.
    Und ich behaupte der Mensch ist auch nicht in der Lage saubere Zufallszahlen zu generieren.
    Wenn man jemanden auffordert 10.000 zufällige Zahlen auszudenken wären deren statistische Eigenschaften eher schlecht als Zufallszahlen geeignet. (manche haben ja Lieblingszahlen was unterbewusst für verfälschungen sorgt.).
    Logisches Denken ist also keine Voraussetzung für Zufallszahlen.

    Die Random-Funktion erfüllt, wie wir gesehen haben, die Gleichverteilung sehr gut.
    Zweiteres lässt sich hingegen schwer überprüfen da man den Algorithmus dahinter nicht kennt.
    Deshalb wird Bocky wohl diesen Thread angestoßen haben um selbst mal zu testen wie man Pseudozufallzahlen generiert und welche Güte sie dann besitzen.
    Um deren Güte zu testen fällt mir persönlich erstmal nur ein mit hinreichend großer Stichprobengröße die Gleichverteilung zu testen.

    Ich hab mal von einer Möglichkeit gehört bei der das Hintergrundrauschen der Soundkarte für die Erzeugung von Zufallszahlen genommen wurde.
    Das Rauschen dort entspricht in der Regel einem weißen Rauschen.
    Also einem Mischsignal bei dem jede Frequenz mit der selben Häufigkeit auftritt.
    Das wär dann schon eher als reine Zufallszahl zu bezeichnen.