Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Deterministischer Pseudozufallszahlengenerator gesucht (https://www.delphipraxis.net/137785-deterministischer-pseudozufallszahlengenerator-gesucht.html)

Florian H 28. Jul 2009 18:10


Deterministischer Pseudozufallszahlengenerator gesucht
 
Aloha,

ich entwickle im Moment ein Spiel und möchte bei diesem Spiel "zufällig" Levels generieren können.
Bisher nutze ich dazu einfach ein Math.random() (Java), was mir eine double-Zahl zw. 0 und 1 liefert.
Jetzt habe ich mir aber überlegt, dass ich zwecks Vergleichbarkeit in einer Online-Highscore-Liste bei allen Spielern dieselben zufälligen Levels erzeugen will.

Deshalb möchte ich mir einen möglichst einfachen Pseudozufallszahlengenerator basteln, der je nach Startwert (Seed) eine Folge von bestimmten, aber eben zufällig erscheinenden, Zahlen zurückliefert. Setze ich den Startwert irgendwann wieder auf denselben alten Startwert, kommen dieselben "Zufalls"zahlen.

Da gibts natürlich hunderte Möglichkeiten, aber vielleicht hat ja schon jemand Erfahrung und kann wertvolle Tipps geben?
Wenn man "einfach mal so" aufm Papier sich was ausdenkt und das dann umsetzt, gibt das wohl keine wirklich guten Zahlen (Gleichverteilung, Wiederholungen, erkennbare Nicht-Zufälligkeit, ...). Andererseits will ich auch keine 20 Seiten Quellcode portieren, zumal es möglichst performant laufen sollte.


Schöne Grüße
flo

FaTaLGuiLLoTiNe 28. Jul 2009 18:22

Re: Deterministischer Pseudozufallszahlengenerator gesucht
 
Zitat:

Zitat von Florian H
Deshalb möchte ich mir einen möglichst einfachen Pseudozufallszahlengenerator basteln, der je nach Startwert (Seed) eine Folge von bestimmten, aber eben zufällig erscheinenden, Zahlen zurückliefert. Setze ich den Startwert irgendwann wieder auf denselben alten Startwert, kommen dieselben "Zufalls"zahlen.

Ist das nicht schon genau das, was der Delphi-eigene PRNG (und jeder andere PRNG den ich kenne) macht?

//edit: Oh, ich sehe gerade: Java. Was der Zufallszahlengenerator von Java macht, weiss ich leider nicht. Sollte aber vom Prinzip her auch nichts anderes sein.

Nikolas 28. Jul 2009 18:27

Re: Deterministischer Pseudozufallszahlengenerator gesucht
 
In Java:

Delphi-Quellcode:
import java.util.Random;
Random generator2 = new Random( 19580427 ); // irgendein long int als Seed
Wie man nachlesenkann, setzt math.random genau diesen Generator ein.

himitsu 28. Jul 2009 19:57

Re: Deterministischer Pseudozufallszahlengenerator gesucht
 
Bei Java hast du aber ein Problem.

Da ja der "Zufalls"Generator der Java-Runtime-Library verwendet wird
und sich die Berechnung des Zufalls in verschiedenen Version der JRE unterscheiden kann,
kann es vorkommen, daß auf unterschiedlichen PCs auch eine unterschiedliche Zahlenfolge enstehen kann, selbt wenn der Startwert (Seed) gleich ist.

Florian H 28. Jul 2009 21:43

Re: Deterministischer Pseudozufallszahlengenerator gesucht
 
Zitat:

Zitat von Nikolas
In Java:

Delphi-Quellcode:
import java.util.Random;
Random generator2 = new Random( 19580427 ); // irgendein long int als Seed
Wie man nachlesenkann, setzt math.random genau diesen Generator ein.

Danke, das ist perfekt :)

@himitsu: Hm, das ist natürlich ärgerlich .. muss mir da mal was überlegen. Aber im Moment reicht die Lsg von Nikolas vollkommen.

himitsu 28. Jul 2009 21:59

Re: Deterministischer Pseudozufallszahlengenerator gesucht
 
im Prinzip kannst dir auch einfach einen eigenen bauen ... wie der von Delphi arbeitet, sieht man in einigen DP-Threads

Apollonius 28. Jul 2009 22:00

Re: Deterministischer Pseudozufallszahlengenerator gesucht
 
Schaut doch mal in die Dokumentation zu java.util.Random:
Zitat:

If two instances of Random are created with the same seed, and the same sequence of method calls is made for each, they will generate and return identical sequences of numbers. In order to guarantee this property, particular algorithms are specified for the class Random. Java implementations must use all the algorithms shown here for the class Random, for the sake of absolute portability of Java code.
Mit anderen Worten: Der Algorithmus ist festgelegt und damit in allen VMs gleich. Das von himitsu angesprochene Problem besteht daher nicht.

himitsu 28. Jul 2009 22:04

Re: Deterministischer Pseudozufallszahlengenerator gesucht
 
also wenn der Algo unveränderlich festgelegt ist, dann gibts da keine Probleme.

z.B. in der Delphi-Hilfe steht schon seit vielen Jahren, daß man den Generator aus soeinem Grund nicht für Verschlüsselungen nehmen so,
aber bis jetzt hat weder Borland noch Codegear oder Embarcadero da was umgebaut :roll:

Cyf 29. Jul 2009 00:08

Re: Deterministischer Pseudozufallszahlengenerator gesucht
 
Ich würde dazu spontan mal mehr auf sowas wie lineare Abhängigkeit der Pseudozufallszahlen und die Tatsache, dass man den Algorithmus weiter- und rückrechnen kann, tippen. :wink:
Gute Zufallszahlen für Verschlüsslungen müssen möglichst viel Entropie aufweisen (also baut man sich am besten radioaktiv zerfallende Stoffe in den Rechner ein und errechnet sie daraus).

omata 29. Jul 2009 01:41

Re: Deterministischer Pseudozufallszahlengenerator gesucht
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hier mal ein Vorschlag in Delphi...


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:38 Uhr.
Seite 1 von 2  1 2      

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