Zufall

Zufall ist das unberechenbare Geschehen, das sich unserer Vernunft und Absicht entzieht. -- Gebrüder Grimm (Deutsches Wörterbuch)

Der Volksmund bezeichnet Dinge als Zufall, welche wir nicht vorhersagen können - etwas, was sich Planung und Berechenbarkeit entzieht. Zufällig geschehene Dinge waren so nicht abzusehen und sie geschehen scheinbar willkürlich.

Erfahrungen mit jener Art von Zufall machen wir alltäglich - mal trifft man völlig unverhofft einen alten Bekannten oder ein plötzlich eintretendes Ereignis beeinflußt den Rest unseres eigentlich geplanten Tagesablaufs. In diesen Fällen greifen wir auch oft auf zwei weitere Begriffe zurück, um solches Geschehen greifbar zu machen: Glück und Pech.

In der Wissenschaft hingegen ist der Begriff Zufall deutlicher besetzt:

Man spricht von Zufall - oder noch klarer von reinem Zufall -, wenn ein Ereignis nicht kausal notwendig auftritt. Vom heutigen Standpunkt aus sind die Phänomene der Quantenphysik der einzige Bereich, in dem es einen reinen Zufall geben könnte.[1]

Dies macht deutlich, dass Zufall nicht etwa als alltägliches Phänomen anzusehen ist, sondern als Begriff, welcher einzig und treffend nicht konkret berechenbare Dinge beschreibt. Wenn wir also sagen, dass ein Computer Zufallszahlen generiert (oder deutlicher: berechnet), dann ist dies absurd: Zufall und Berechenbarkeit schließen sich gegenseitig aus. Keine Berechnung kann zufällige Ergebnisse liefern, da sie auf dem Einsatz von #was_sind_parameter">Parametern oder Variablen basiert, welche zwar beliebig sein können, aber dennoch für die Berechnung festgelegt sind. Dadurch wird das Ergebnis bei erneuter Berechnung nicht willkürlich variieren, sondern gleich sein.

Um dennoch einen treffenden Namen für scheinbar wahllose (welche allgemeinem Anschein nach auf zufälligen Berechnungen beruhen) Ergebnisse zu haben, bezeichnet man sie in der Informatik als Pseudozufallszahlen. Generierte Zahlen also, welche wir nicht von wirklichem Zufall unterscheiden können, welche aber durch die Notwendigkeit der Berechnung immer auf einem beruhen.

In der Praxis werden dazu auf Arithmetik basierende Zufallszahlengeneratoren eingesetzt, um solche Pseudozufallszahlen zu berechnen. Ihre Zufälligkeit ist nicht durch die Entstehung, sondern durch die Statistik begründet (Normalverteilung, Gleichverteilung, Unabhängigkeit aufeinanderfolgender Zahlen)[2].

Diese algorithmischen Zufallszahlengeneratoren werden meistens mit einem Startwert, dem sogenannten Seed initialisiert, welcher als Basis der Berechnungen dient - bei gleichem Seed, produziert der Generator immer das gleiche Ergebnis. In der Praxis werden ofmals Werte wie der zur Programmlaufzeit aktuelle Zeitstempel oder ähnliches genutzt.

Was macht die Processing-Funktion random()?

Die Funktion random() berechnet eine solche Pseudozufallszahl: Jeder Aufruf der Funktion gibt einen Wert vom Typ float (#gleitkommazahlen">Gleitkommazahl) zurück, welcher innerhalb des Intervalls [0, 1] liegt.

Will man den Wertebereich beeinflußen, so kann man random() auch mit entweder einem oder zwei #was_sind_parameter">Parametern aufgerufen. Wird ein Parameter n übergeben, so befindet sich die Zufallszahl innerhalb des Intervalls [0, n], also zwischen 0 und dem Wert des Parameters (einschließlich). Werden zwei Parameter (m und n) übergeben, so wird die errechnete Pseudozufallszahl im Intervall [m, n] liegen.

In Processing lässt sich mit der Funktion randomSeed() der Seed, also der Ausgangswert für die Berechnung der Pseudozufallszahl setzen.

Was ist ein Parameter einer Funktion?

Bei einem Funktionsparameter handelt es sich um einen Wert, welcher einer Funktion übergeben wird und auf Basis dessen diese Funktion den zurückzugebenden Wert berechnet. Ein Parameter dient also dazu, bestimmte Größen in die Funktion einzuführen, die den zu errechnenden Wert beeinflußen.

Parameter müssen der im Funktionskopf angegebenen #spezifikation">Anforderungsspezifikation folgen. Das bedeutet, dass sie in einer festgelegten Reihenfolge übergeben werden und von einem bestimmten Typ (Bsp.: Integer oder String) sein müssen.

Ein Programm zur Erzeugung zufälliger Bilder

void setup() {
  // Breite und Höhe
  int width = 200;
  int height = 200;
  // Bildaufbau
  size(width, height);
  background(255);
  stroke(0);
  strokeWeight(1);
  int count = 1000; // Parameter: Anzahl der Punkte
  random_points(count); // Zufallsfunktion aufrufen
} 	

/**
 *  random_points() setzt zufällig die als
 *  Parameter übergebene Anzahl an Punkten
 */
void random_points(int count) {
  for(int i=0; i<count; i++){
    // zufällige Berechnung der Werte innerhalb des Wertebereichs
    float x = random(0, width);
    float y = random(0, height);
    // Setzen der Punkte
    point(int(x), int(y));
  }
}

Die vom Programm erzeugten Bilder können je nach übergebenem Parameter folgendermaßen aussehen:

Die Bilder weisen insofern Gemeinsamkeiten auf, als dass sie keine erkennbare Struktur bieten. Mit zunehmender Anzahl von Punkten, bilden sich in unserer Wahrnehmung allerdings kleinere weisse Flächen, welche zwischen mehreren sie umgebenden Punkten liegen (Gesetz der Nähe, Gesetz der Prägnanz).

Sie unterscheiden sich in ihrem Grauwert, was sich mit zunehmendem Betrachtungsabstand besser nachvollziehen lässt: Je mehr Punkte sich in zufälliger Anordnung auf der Fläche befinden, desto dunkler/grauer wirkt die Flläche, da die Punkte nicht mehr als einzelne Elemente wahrzunehmen sind. Diesen Umstand macht man sich unter anderem in der Drucktechnik zu Nutze (frequenzmoduliertes Raster).

Weiteres dazu...

Auf madeasy.de gibt es eine ausführliche Betrachtung des Begriffs Zufall, bei der auf weitere Betrachtungswinkel eingegangen wird.

Quellen

  1. Wikipedia: Zufall. http://de.wikipedia.org/wiki/Zufall. Aufgerufen am 23.11.2006.
  2. Wikipedia: Pseudozufallszahlengenerator. http://de.wikipedia.org/wiki/Pseudozufallszahlengenerator. Aufgerufen am 21.02.2007.