Wie zufällig sind random Funktionen in Programmiersprachen z.B. Python?

7 Antworten

Die PRNGs sind natürlich deterministisch mit begrenzter Periode.Du kannst natürlich aussuchen, bei welchem Wert Du startest (seed).

Und natürlich gibt es bei PRNGs unterschiede in der Qualität, die sich auch bemessen lassen, wie z.B. die Periodenlänge. Wie Du der Doku entnehmen kannst, nutzt Python den Mersenne Twister.

Du redest von "perfektem Zufall", aber so wie du es beschreibst, suchst du eher nach dem Begriff "gleichverteilt". Eine typische pseudo-Zufallsfunktion, wie sie in vielen Programmiersprachen zu finden ist, ist gleichverteilt, d.h. jedes Ergebnis tritt gleich oft bzw. mit gleicher Wahrscheinlichkeit auf.

Die Funktionen sind aber nicht zufällig, es ist eben nur ein pseudo-Zufallsgenerator. Das ist eine mathematische Funktion, die immer einen anderen Wert liefert, und die Ergebnisse sind eben gleichverteilt.

Wenn man aber den Input für diese Funktion kennt, kann man den Output auch vorhersagen.

Für Spiele beispielsweise ist sowas völlig ausreichend, der Spieler kennt weder den Input, noch die Pseudo-Zufallsfunktion, und kann daher nicht wissen, welche Zahl als nächstes kommt, für ihn erscheint das Ergebnis völlig zufällig.

Nicht verwenden sollte man solche Funktionen z.B. zur Generierung von Passwörtern, denn kennt ein Angreifer den Input, kann er damit ein "zufällig" generiertes Passwort herausfinden.

Hierfür braucht es dann einen kryptografischen Zufallsgenerator.

Die Zufallsfunktionen in Programmiersprachen wie Python sind in der Tat Pseudozufallsfunktionen, was bedeutet, dass sie Zahlen erzeugen, die zufällig aussehen, aber tatsächlich von einem bestimmten Algorithmus generiert werden. Ein solcher Algorithmus beginnt mit einem "Seed"-Wert und generiert dann eine Sequenz von Zahlen, die schwer vorherzusagen sind, ohne den Seed-Wert oder den Algorithmus zu kennen. Wenn du denselben Seed-Wert verwendest, erhältst du dieselbe Sequenz von "zufälligen" Zahlen.

Die Zufälligkeit dieser Funktionen kann durch verschiedene statistische Tests gemessen werden, die darauf abzielen, Muster oder Regelmäßigkeiten in den generierten Zahlen zu erkennen. Es gibt viele solcher Tests, einschließlich der "Frequenztest" (auch bekannt als "Monobit-Test"), der "Runs-Test", der "Poker-Test" und viele andere.

Es ist jedoch wichtig zu beachten, dass keine dieser Methoden eine echte Zufälligkeit garantieren kann. Sie können nur die Anwesenheit bestimmter Arten von Mustern oder Strukturen erkennen. Wenn ein Pseudozufallszahlengenerator alle diese Tests besteht, bedeutet das, dass seine Ausgabe sehr gut "aussehen" kann wie eine echte Zufallssequenz, aber es garantiert nicht, dass sie wirklich zufällig ist.

Das Konzept einer "Prozentsatz"-Bewertung der Zufälligkeit ist daher etwas irreführend, da es keine objektive Metrik für die "vollkommene" Zufälligkeit gibt. Es gibt nur verschiedene Grade der "Ununterscheidbarkeit" von echter Zufälligkeit, gemessen anhand bestimmter Tests. Man könnte also argumentieren, dass ein guter Pseudozufallszahlengenerator "nahezu 100%" Zufälligkeit erreicht, aber das hängt immer davon ab, wie man "Zufälligkeit" definiert.

Schließlich ist es wichtig zu bedenken, dass Pseudozufallszahlengeneratoren in vielen Anwendungsfällen absolut ausreichend sind, insbesondere in Bereichen wie Simulationen, Spielen und vielen anderen. In sicherheitskritischen Anwendungen, wie der Kryptographie, werden jedoch speziell entwickelte und gründlich getestete Zufallszahlengeneratoren benötigt, um sicherzustellen, dass die erzeugten Zahlen nicht vorhersagbar sind.

eterneladam  17.06.2023, 07:48

Wie zufällig ist der Auswurf von chatGPT?

0
magicced01  17.06.2023, 15:25
@eterneladam

Das Modell von GPT, einschließlich GPT-4, arbeitet nach einem Wahrscheinlichkeitsprinzip, basierend auf den Daten, mit denen es trainiert wurde. Es wählt aus den möglichen Ausgängen basierend auf den Wahrscheinlichkeiten aus, die es aus seinen Trainingserfahrungen gelernt hat. Das heißt, wenn du GPT eine Eingabe gibst, erzeugt es viele mögliche Antworten und wählt dann eine basierend auf den Wahrscheinlichkeiten, die es in seiner Ausbildung gelernt hat.

Ein gewisser Grad an Zufälligkeit wird in diesen Prozess eingebaut, um sicherzustellen, dass das Modell nicht immer genau dieselben Antworten auf die gleichen Eingaben gibt. Dies wird oft als "Temperatur" bezeichnet. Eine höhere Temperatur führt zu mehr Zufälligkeit in den Antworten, während eine niedrigere Temperatur zu mehr Konsistenz führt.

Es ist wichtig zu bemerken, dass obwohl ein gewisser Grad an Zufälligkeit besteht, das Modell immer noch stark von den Daten beeinflusst wird, mit denen es trainiert wurde. Es ist nicht in der Lage, völlig neue Informationen zu generieren oder zu lernen, die über sein Training hinausgehen. Daher sind seine "Entscheidungen" nicht wirklich zufällig im traditionellen Sinne, sondern basieren auf Mustern, die es während seines Trainings gelernt hat.

0

Das kommt darauf an, welchen Zufallsgenerator du in deinem Programm benutzt. Der Standardgenerator erzeugt Pseudzufallszahlen, siehe die anderen Antworten. Aber je nach Programmiersprache gibt es weitere, bessere Zufallsgeneratoren (z.B. Klasse secrets in Python). Diese benutzt die Systemfunktionen um Zufallswerte zu erzeugen. Zumindest unter Linux wird da "echter" Zufall eingesammelt, wie das Rauschen des Mikrofoneingangs, Zeit zwischen Tastenanschlägen, etc.

Die Zahlen sind zu 100% gleichverteilt, also wie du es nennst "perfekter Zufall".

Nur sind sie eben vorhersehbar, das ist der Nachteil.

Woher ich das weiß:Studium / Ausbildung – Bachelor in Informatik 👨🏻‍🎓