AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Randomize-Chaos

Ein Thema von himitsu · begonnen am 13. Aug 2012 · letzter Beitrag vom 14. Aug 2012
Antwort Antwort
Seite 2 von 2     12   
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#11

AW: Randomize-Chaos

  Alt 13. Aug 2012, 16:10
@Popov: Nach meiner Erfahrung liefert Random schlechte Ergebnisse, wenn man mit einem RandSeed von 0 anfängt. Man kann natürlich irgendeinen anderen konstanten Wert zur Initialisierung nehmen, aber initialisieren sollte man auf jeden Fall.
Was sollen denn das für Erfahrungen sein? Random durchläuft immer die gleiche 32-Bit Sequenz, randseed wählt nur den Einstiegspunkt in die Sequenz.
Ist mir bewusst. Ich habe es nicht wissenschaftlich untersucht, mir ist nur aufgefallen, dass einige meiner Programme sich seltsam verhielten, wenn sie random benutzen und RandSeed nicht initialisiert war... z.B. gab es afair starke Tendenzen zu bestimmten Zahlen.
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#12

AW: Randomize-Chaos

  Alt 13. Aug 2012, 16:26
z.B. gab es afair starke Tendenzen zu bestimmten Zahlen.
Eine Tendenz zu bestimmten Zahlen würde ich nicht behaupten. Allerdings zeigt das kleine Beispiel, dass bei 1000 Abrufen nicht unbeding jede Zahl vorkommt.

Delphi-Quellcode:
var
  x, y: Integer;
begin
  with Canvas do
    for x := 0 to ClientWidth - 1 do
      for y := 0 to ClientHeight - 1 do
        Pixels[Random(ClientWidth), Random(ClientHeight)] := clBlack;
end;
Trotzdem ist die Verteilung gleichmäßig und ohne Tendenz. Finde ich.
  Mit Zitat antworten Zitat
Benutzerbild von Coder
Coder

Registriert seit: 27. Feb 2004
Ort: Bochum
206 Beiträge
 
Delphi 3 Professional
 
#13

AW: Randomize-Chaos

  Alt 13. Aug 2012, 20:03
Popov, ich hab Deinen Code mal in ein Programm umgesetzt.

angehängt das Programm und hier ein Video
nach dem 15.ten Durchgang sind dann in einem kleinen fast 800x600 Feld alle Pixel besetzt.

Tatsächlich sind mir aber Bereiche aufgefallen, die immer wieder bevorzugt besetzt werden.


Video, 1280x800, h264, avi (hab momentan kein avidemux, zum in anderen Container [z.B. mp4] reinpacken, sorry)
http://www.mediafire.com/?0xc6af4zaiaiccr
2,6 MB

Wäre natürlich klasse, wenn das jemand mit Scanline umsetzen könnte ? (schneller?)
Angehängte Dateien
Dateityp: zip Rando.zip (209,8 KB, 3x aufgerufen)
ICQ: 204141443
Delphi 3 Professional, Intel 2x 2,4Ghz, 3 GB-Graka, Sound-onBrd, --
außerdem D2S, D3Pro, D4S, D5S, D6S, D7S + Indy, Lazarus, VB5Std, VC++5Pro, Tasm4+5 - was braucht man mehr?
-
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#14

AW: Randomize-Chaos

  Alt 13. Aug 2012, 20:51
z.B. gab es afair starke Tendenzen zu bestimmten Zahlen.
Eine Tendenz zu bestimmten Zahlen würde ich nicht behaupten. Allerdings zeigt das kleine Beispiel, dass bei 1000 Abrufen nicht unbeding jede Zahl vorkommt.
Wie zufällig wäre denn die 1000ste Zahl, wenn Du verlangst, das bei 1000 Aufrufen jede Zahl von 1-1000 vorkommt?
  Mit Zitat antworten Zitat
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#15

AW: Randomize-Chaos

  Alt 13. Aug 2012, 21:13
Es heißt ja, daß man den (Pseudo)Zufallsgenerator nicht ständig neu initialisieren soll.......
Wer behauptet denn so etwas? Man kann ihn ständig bzw. nach jedem ersten random neu initialisieren. Dann hätte man wohl eine echte Zufallszahlenfolge.

Wieso ist noch keiner Auf die Idee gekommen den Generator gleich in der Inititalization der System.pas zu initialisieren?
Auf die Idee mag schon so mancher gekommen sein. Doch dagegen spricht, daß man dann keine reproduzierbaren (Pseudo-)Zufallszahlenfolgen mehr generieren könnte.
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#16

AW: Randomize-Chaos

  Alt 13. Aug 2012, 21:16
Es heißt ja, daß man den (Pseudo)Zufallsgenerator nicht ständig neu initialisieren soll.......
Wer behauptet denn so etwas? Man kann ihn ständig bzw. nach jedem ersten random neu initialisieren. Dann hätte man wohl eine echte Zufallszahlenfolge.
Ähm was? Nein. Weißt du was randomize macht?
Wieso ist noch keiner Auf die Idee gekommen den Generator gleich in der Inititalization der System.pas zu initialisieren?
Auf die Idee mag schon so mancher gekommen sein. Doch dagegen spricht, daß man dann keine reproduzierbaren (Pseudo-)Zufallszahlenfolgen mehr generieren könnte.
Wie kommst du darauf? Du kannst RandSeed doch immer noch manuell auf einen festen Wert setzen...
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#17

AW: Randomize-Chaos

  Alt 13. Aug 2012, 22:12
Wer behauptet denn so etwas? Man kann ihn ständig bzw. nach jedem ersten random neu initialisieren. Dann hätte man wohl eine echte Zufallszahlenfolge.
Jajn. Eine kleine Erweiterung des oberen Beispiels:
Delphi-Quellcode:
var
  x, y: Integer;
begin
  with Canvas do
    for x := 0 to ClientWidth - 1 do
      for y := 0 to ClientHeight - 1 do
      begin
        Randomize;
        Pixels[Random(ClientWidth), Random(ClientHeight)] := clBlack;
      end;
end;
Die Verteilung ist immer noch fast gleichmäßig. Nur sind hier doch tatsächlich Rechtecke zu erkennen
  Mit Zitat antworten Zitat
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#18

AW: Randomize-Chaos

  Alt 13. Aug 2012, 22:54
Mit diesem beeindruckenden Ergebnis läßt sich schlecht diskutieren.

Soweit ich weiß, ist die Quelle des Randomizes die Systemzeit. Anscheinend ist die abgerufene Auflösung nicht allzu hoch. Die Struktur ist viel zu regelmäßig, was vermutlich darauf zurückzuführen ist, daß die Schleifendauer mit der eingestellten Auflösung als ziemlich regelmäßig bzw. konstant erkannt wird.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.034 Beiträge
 
Delphi 12 Athens
 
#19

AW: Randomize-Chaos

  Alt 14. Aug 2012, 03:45
Wer behauptet denn so etwas? Man kann ihn ständig bzw. nach jedem ersten random neu initialisieren. Dann hätte man wohl eine echte Zufallszahlenfolge.
Der Zufallsgenerator ist so auslegengt, daß er eine möglichst gleichmäßige Verteilung aufweist.

Wenn man da ständig den Generator neu startet, kann dieses Verhalten negativ beeinflußt werden, da die Gleichverteilung über einen größeren Bereich sichergestellt wird.
Nutzt man aber immer wieder nur "kleinere" Auschnitte, dann kann es passieren, daß Diese doch eine Tendenz erzeugen.

PS: Delphi nutzt einen Zufallsgenerator, mit einer Sequenz von theoretisch bis zu 4 Milliarden Werten ... da kann ein Ausschnitt von nur 1000 Werten, in sich auch noch eine größere Tendenz aufweisen.

Und das war besonsers zu merken, als Randomize noch nur GetTickCount verwendete (inzwischen, wenn mögich, QueryPerformanceCounter).
Hat man da sehr schnell hinterienander Randomize ausgeführt und einen/mehrere Werte abgerufen, dann fiehl auf, daß sich sehr oft Wiederholungen einschlichen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (14. Aug 2012 um 03:49 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

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

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz