Wie kann ich in C++ eine zufällige Instanz immer wieder nutzen?

Peter_2498

Lieutenant
Registriert
Apr. 2018
Beiträge
555
Ich habe Algorithmen für ein Projekt geschrieben und will diese nun an "großen" Probleminstanzen testen, allerdings bin ich gerade dabei die Algorithmen zu optimieren und deswegen wäre es gut, wenn diese Menge an Instanzen und die Instanzen an sich immer gleich wären. Ich habe keine Lust jede dieser Instanzen per Hand zu initialisieren(würde zu lange dauern), sondern habe das bis hierhin mit einem Zufallsgenerator für ganze Zahlen gemacht, aber dann sind die Instanzen nach jedem Durchlauf auch anders.

Im Grunde bräuchte ich nur einen Zufallsgenerator für ganze Zahlen, der mir irgendwie in jedem Durchlauf dieselben Zahlen gibt oder eine Möglichkeit eine generierte Anzahl von Instanzen abzuspeichern, um diese im Programm immer wieder benutzen zu können. So kann ich besser einschätzen, ob das was ich an den Algorithmen geändert habe, auch irgendwo zu einer Verbesserung führt.
 
Zufallszahlen mit std::rand() erzeugen
https://en.cppreference.com/w/cpp/numeric/random/rand

Damit immer die gleichen Zahlen kommen, den Pseudozufallszahlengenerator immer mit einem festen, bekannten Wert initialisieren.
https://en.cppreference.com/w/cpp/numeric/random/srand

Bzw. es gibt modernere, schönere Implementierungen von Zufallszahlengeneratoren in C++ (z.B. ab C++11), siehe:
https://en.cppreference.com/w/cpp/numeric/random/uniform_int_distribution
Da gilt das Gleiche: Festen Seed wählen, dann PRNG laufen lassen.

Ist dann aber halt alles nicht mehr zufällig, sondern im Endeffekt hast du eine feste Liste von zufälligen Zahlen. Da ließe sich überlegen, ob es nicht besser wäre, wirklich eine Liste von Zufallszahlen zu erzeugen und einfach Zeile für Zeile zu lesen...


Was dein Anwendungsfall ist, hab ich aber trotzdem nicht verstanden.
 
  • Gefällt mir
Reaktionen: Peter_2498, BAGZZlash und Valeria
Fortatus schrieb:
Was dein Anwendungsfall ist, hab ich aber trotzdem nicht verstanden.
Er hat einen Algorithmus, der mit Daten gefüttert wird.
Diesen möchte er mit zufälligen (damit es repräsentativ wird und/oder die Eingabestabilität gesichert werden kann) Daten testen und optimieren.
Ein Test besteht in der Bearbeitung der pseudozufälligen Datenmenge X.
Er möchte gerne, dass ein X zufällige Daten enthält, aber dieser Inputdatensatz auf Wunsch gleich bleibt/reproduzierbar.
Wieso?
Angenommen der Algorithmus funktioniert bei X1, X2, X3 super, aber bei X4 nicht (Ergebnisse sind nicht optimal oder gar falsch, und/oder die Laufzeit passt nicht).
Dann möchte er gerne den Algorithmus anpassen und nochmals mit X4 testen. Dann möchte er aber die Auswirkung der Änderung(en) weiter überprüfen, indem er X1, X2 und X3 nochmals durchlaufen lässt, und die Ergebnisse/Zeiten vergleicht.

Wenn es dir hilft, stelle dir vor, der TE hat einen Sortieralgorithmus geschrieben und möchte den testen/optimieren/debuggen.
Da braucht er einmal zufällige Inputs, aber bei Bedarf will er wieder auf die zugreifen um den Algorithmus zu analysieren und das Ergebnis zu reproduzieren.

@TE:
Du hast zwei Möglichkeiten:
Entweder du verwendest einen determinierten Zufallsgenerator mit vorgebbarem Seed, oder du protokollierst die Eingaben und speicherst diese in einem System ab, welches bei Bedarf einen Zufallszahlengenerator anschmeißt, oder einen gewünschten Datensatz wiederholt.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Peter_2498
Zurück
Oben