• Offizieller Beitrag

    Hallo

    Dieses SRandom(BETA)/Random funktioniert anscheinend doch nicht so super wie es sollte.

    Spoiler anzeigen
    [autoit]

    $ti = TimerInit()
    While 1
    $rand = Random(1, 10, 1);erstes Random 1-10
    SRandom(Random(0, 164, 1));Setze Randomseed auf eine Zahl zwischen 0 und 164
    $rand2 = Random(1, 10, 1);zweites Random 1-10 (mit seed)
    TrayTip("", $rand & @CR & $rand2, 2);Ausgabe
    If $rand = $rand2 Then;wenn Random1 = Random2 ist
    Beep($rand * 100, 100); Dann beep
    ConsoleWrite($rand & "_" & TimerDiff($ti) & @CRLF);und schreib in SciTe console
    Else;Ansonsten timerneustarten
    $ti = TimerInit()
    Sleep(100)
    EndIf
    WEnd

    [/autoit]

    Bei mir gibt es in der Coonsole periodisch folgende Zahlen:

    Code
    8_214.311847984015
    9_213.976823624123
    1_320.051930990465

    Also $rand = $rand2 ca alle 214 ms
    Nach ca 213ms ist $rand = $rand2 mit 9
    Nach ca 320ms ist $rand = $rand2 mit 1.

    Und das ist Periodisch, also es geht unendlich soweiter.

    Spoiler anzeigen

    Ist das bei euch auch so?

    Mfg Spider

  • bei mir funktioniert es garnet... ne weile lang kommt ein traytip mit unterschiedlichen Zahlen und dann kommt einfach nur imemr die gleichen zwei zahelen...

  • Moin,

    die Seed für Random liegt im Bereich von -2^31 bis 2^31-1.
    Wenn man da eine Zufallszahl von 1 bis 164 setzt ist das fast wie eine feste Zahl.
    Ergo kommt immer (fast) das gleiche raus.
    Außerdem wieso eigentlich die Seed umsetzen?
    Das Ergebnis wird dadurch nicht wirklich 'zufälliger'. ;)

  • Jo, mit der Version von GTASpider bekomm ich periodisch nach ca. 110 ms immer 2

    Mit der von Oscar bekomm ich erst immer ca. 50x 7, dann 50x 8, dann 50x 9 usw.

    //Edit: mit

    [autoit]

    SRandom(Int(Random(200,Timerinit()-3000000)))

    [/autoit]

    bekomme ich alle 110 ms eine zufällige Übereinstimmung

    Einmal editiert, zuletzt von progandy (20. Februar 2008 um 18:29)

  • Mal ne Frage dazu: Wie wird eigentlich eine Zufallszahlahl "generiert"?

    Projekte: Keine größeren (und fertigen)
    Gegen Internetzensur:
    https://epetitionen.bundestag.de/index.php?acti…s;petition=3860
    (Zeichnungsfrist abgelaufen)
    __________________________________________________________________________________________________________________________________
    Dieser Beitrag wurde bereits 264 mal editiert, zuletzt von »Fast2« (30. Februar 2009, 12:99)

  • ist nen mischmasch aus seriennummern von festplatten, macadresse, der uhrzeit etc...


    grez

  • In c++ heißt eine Funktion für eine Pseudozufallszahl rand();
    Da der Computer aber nicht würfeln kann, rechnet er.
    In c++ wird eine Zufallszahl in etwa so generiert:

    static long holdrand = 1L;
    int rand(void)
    {
    return (((holdrand = holdrand * 214013L + 2531011L) >> 16) & 0x7fff);
    }

    Ein ähnlicher code wird für autoit sicherlich auch genutzt, allerdings mit einer kleinen Erweiterung.
    Die Funktion rand(); kann mit einer Zahl initialisiert werden, und hier nutzt man höchst wahrscheinlich die Aktuelle Computerzeit in MS, genau kann ich's dir aber nicht sagen.
    Ansonsten kann ich dir nur empfehlen mal ein wenig danach zu googeln.

    MfG

  • mmmm

    Wenn ich das richtig verstanden habe wollt ihr doch ne zufallszahl erstellen?

    Warum nicht so? ;)

    [autoit]


    $key1 = ''

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

    For $i = 1 To 7

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

    $zahlen = Chr(Random(48,57))

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

    $key1 = $key1&$zahlen

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

    Next

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

    MsgBox ( 0,"",$key1)

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

    ergebnis 7 stellige Zufallszahl...

    MFG chris :!:

  • Wiki sagt :
    http://de.wikipedia.org/wiki/Zufallsgenerator
    Demnach benutzt AutoIt einen deterministischen Zufallszahlengenerator. Und weil dort nur 'Pseudo'-Zufallszahlen generiert werden, ist nur die Frage wann sie sich wiederholen. Die Seed zu verändern hat wenig bis keinen Einfluss darauf, außer (wenn falsch eingesetzt) einen negativen.

    Das hier :
    http://de.wikipedia.org/wiki//dev/random
    kann benutzt werden um echte (nicht-deterministische) Zufallszahlen zu generieren.

    Jetzt ist es hoffentlich etwas klarer was bei der Generierung von Zufallszahlen passiert. :)

  • @JanSmidt: Schon glesen :D (Wie heißt das Verzeichnis eigentlich bei Windows(falls überhaupt vorhanden)).
    Aber mich hat eigentlich interressiert wie AutoIt-Zufallszahlen generiert werden, da ein Computer ja wie gesagt nicht Würfeln kann.

    Projekte: Keine größeren (und fertigen)
    Gegen Internetzensur:
    https://epetitionen.bundestag.de/index.php?acti…s;petition=3860
    (Zeichnungsfrist abgelaufen)
    __________________________________________________________________________________________________________________________________
    Dieser Beitrag wurde bereits 264 mal editiert, zuletzt von »Fast2« (30. Februar 2009, 12:99)

    • Offizieller Beitrag

    Hallo

    Mal ein kleines Beispiel von mir eines Pseudorandoms in AutoIt:

    Spoiler anzeigen
    [autoit]


    While 1
    TrayTip("",_PseudoRand(2),1)
    Sleep(10)
    WEnd

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

    Func _PseudoRand($iDecimalplaces=1)
    Local $iRet
    $iRet = ((((_MSec() * (BitRotate(@SEC,_MSec()))) + (345 / 0xfc)) - BitShift(_MSec(),@MIN))*@MDAY)/(_MSec()-$iDecimalplaces)
    $iRet = Round($iRet,$iDecimalplaces)
    Return $iRet
    EndFunc ;==>_PseudoRand

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

    Func _MSec()
    Local $stSystemTime = DllStructCreate('ushort;ushort;ushort;ushort;ushort;ushort;ushort;ushort')
    DllCall('kernel32.dll', 'none', 'GetSystemTime', 'ptr', DllStructGetPtr($stSystemTime))
    $sMilliSeconds = StringFormat('%03d', DllStructGetData($stSystemTime, 8))
    Return $sMilliSeconds
    EndFunc ;==>_MSec

    [/autoit]

    Mfg Spider

    • Offizieller Beitrag

    Ich wollte gerade mal die Häufigkeitsverteilung der Zufallszahlen testen und habe mir dafür ein Script geschrieben:

    [autoit]


    #include <array.au3>
    Global $w[6]=[0,0,0,0,0,0]

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

    For $i = 1 To 600000
    $r = Random(0, 5, 1)
    $w[$r] += 1
    Next

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

    _ArrayDisplay($w)

    [/autoit]

    Startet das Script mal unter der aktuellen Beta-Version. Mit der letzten Stable klappt alles.
    Bei der Beta wird die letzte Zahl (5) nie generiert. Könnt ihr das bestätigen?

    • Offizieller Beitrag

    Hallo

    Jo, mit der Beta 3.2.11.1 wird 5 nie generiert.
    Sieht fast so aus wie ein Rundungsfehler. So funktioniert alles:

    Spoiler anzeigen
    [autoit]

    #include <array.au3>
    Global $w[6]=[0,0,0,0,0,0]

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

    For $i = 1 To 600000
    $r = Random(0, 5)
    $w[Round($r)] += 1
    Next

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

    _ArrayDisplay($w)

    [/autoit]

    Mfg Spider