AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Deterministischer Pseudozufallszahlengenerator gesucht
Thema durchsuchen
Ansicht
Themen-Optionen

Deterministischer Pseudozufallszahlengenerator gesucht

Ein Thema von Florian H · begonnen am 28. Jul 2009 · letzter Beitrag vom 29. Jul 2009
Antwort Antwort
Seite 1 von 2  1 2      
Florian H

Registriert seit: 30. Mär 2003
Ort: Mühlacker
1.043 Beiträge
 
Delphi 6 Professional
 
#1

Deterministischer Pseudozufallszahlengenerator gesucht

  Alt 28. Jul 2009, 18:10
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
Florian Heft
  Mit Zitat antworten Zitat
Benutzerbild von FaTaLGuiLLoTiNe
FaTaLGuiLLoTiNe

Registriert seit: 3. Jul 2004
Ort: NRW
55 Beiträge
 
Delphi XE Enterprise
 
#2

Re: Deterministischer Pseudozufallszahlengenerator gesucht

  Alt 28. Jul 2009, 18:22
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.
Christian
<< FaTaLGuiLLoTiNe >>
Rhinoceroses don't play games!
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#3

Re: Deterministischer Pseudozufallszahlengenerator gesucht

  Alt 28. Jul 2009, 18:27
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.
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Deterministischer Pseudozufallszahlengenerator gesucht

  Alt 28. Jul 2009, 19:57
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Florian H

Registriert seit: 30. Mär 2003
Ort: Mühlacker
1.043 Beiträge
 
Delphi 6 Professional
 
#5

Re: Deterministischer Pseudozufallszahlengenerator gesucht

  Alt 28. Jul 2009, 21:43
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.
Florian Heft
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Deterministischer Pseudozufallszahlengenerator gesucht

  Alt 28. Jul 2009, 21:59
im Prinzip kannst dir auch einfach einen eigenen bauen ... wie der von Delphi arbeitet, sieht man in einigen DP-Threads
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Deterministischer Pseudozufallszahlengenerator gesucht

  Alt 28. Jul 2009, 22:00
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.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Deterministischer Pseudozufallszahlengenerator gesucht

  Alt 28. Jul 2009, 22:04
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
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Cyf

Registriert seit: 30. Mai 2008
407 Beiträge
 
Lazarus
 
#9

Re: Deterministischer Pseudozufallszahlengenerator gesucht

  Alt 29. Jul 2009, 00:08
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.
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).
Man kann einen Barbier definieren als einen, der alle diejenigen rasiert, und nur diejenigen, die sich nicht selbst rasieren.
Rasiert sich der Barbier?
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: Deterministischer Pseudozufallszahlengenerator gesucht

  Alt 29. Jul 2009, 01:41
Hier mal ein Vorschlag in Delphi...
Angehängte Dateien
Dateityp: pas randomu_312.pas (2,0 KB, 22x aufgerufen)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 01:02 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