PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Zufallsprinzip?


xXx
2002-12-28, 21:21:20
Wie funktioniert die Zufallsauswahl?

Ich will jetzt nichts programmieren, aber würde gern wissen, wie das Zufallsprinzip sinngemäß funktioniert.

Man kann dem Computer ja nicht einfach sagen: "Wähl irgendeine Zahl zwischen 1 und 10!"

Wie funktioniert das? Der Computer muss dann ja einen eigenen Willen haben.

Eine Frage hätte ich noch zur künstlichen Intelligenz:

Wie soll das funktionieren? Wie kann/ könnte man einem Computer programmieren, sodass er einen eigenen Willen hat, selbst Entscheidungen trifft und lernt?

Stone2001
2002-12-28, 22:21:53
uhh, das große Problem der 'Mathematiker'! ;)
Normalerweise werden Zufallszahlen mit Hilfe der Systemzeit generiert! Man nimmt die Zeit in ms und führt dann eine mod-Division durch. Also bei einer Zahl von 1 - 10 teilt man durch 10 und addiert 1!
Das Problem dabei ist, für Mathematiker, diese Zahlen sind auch in gewisser Weise vorhersagtbar und damit für Mathematiker unbrauchbar (besser gesagt für die Stochastiker).
Es gibt aber auch sog. Pseudozufallszahlengeneratoren die eine 'Zufallszahl' mittels einiger mathematischen Berchnungen erzeugen! (Aber das sind keine richtigen Zufallszahlen!)

Noch kurz etwas zum Thema KI:
Mit Hilfe von Neuralen Netzen ist man in der Lage einem Computer gewisse 'Intelligenz' einzuhauchen!
Ein Neurales Netz ist z.B.: ein große Anzahl von Prozessoren, die untereinander über gewichtete Verbinungen kommunizieren können! Durch Lernalgorithmen können jetzt diese Gewichte verändert werden und so kann der 'Rechner' lernen!
Einen eigenen Willen wird ein Rechner so schnell nicht bekommen, das er aber selbstständig Entscheidungen, aufgrund seiner 'Erfahrung', triff und Dinge lernt ist durchaus möglich!

Demirug
2002-12-28, 22:28:07
ja Stone2001, die meisten Zufallszahlen verfahren bauen auf Pseudozufallszahlengeneratoren auf weil es bei allen anderen Verfahren sehr leicht zu häufungen von bestimmten zahlen kommen kann.

Intel wollte mal einen Zufallszahlengenerator in die CPU/Chipsatz einbauen welcher auf denm statischen rauschen von elektronen aufbaut. Scheint aber irgendwie nichts geworden zu sein.

KR, zur künstlichen Intelligenz könnte man Romane schreiben und das wurde auch gemacht. Dabei gibt es sehr viele unterschiedliche Wege und es hängt immer sehr stark von dem was man erreichen will welchen weg man wählen sollte.

Vedek Bareil
2002-12-28, 22:42:13
Originally posted by KR
Eine Frage hätte ich noch zur künstlichen Intelligenz:

Wie soll das funktionieren? Wie kann/ könnte man einem Computer programmieren, sodass er einen eigenen Willen hat, selbst Entscheidungen trifft und lernt? tja, gute Frage. Wie funktioniert es denn bei natürlicher Intelligenz, wie z.B. bei dir? ;) Wenn man das irgendwann vielleicht einmal weiß, wird man es vielleicht auch beim Computer umsetzen können.

Stone2001
2002-12-28, 22:45:48
Originally posted by Demirug
ja Stone2001, die meisten Zufallszahlen verfahren bauen auf Pseudozufallszahlengeneratoren auf weil es bei allen anderen Verfahren sehr leicht zu häufungen von bestimmten zahlen kommen kann.

Intel wollte mal einen Zufallszahlengenerator in die CPU/Chipsatz einbauen welcher auf denm statischen rauschen von elektronen aufbaut. Scheint aber irgendwie nichts geworden zu sein.

KR, zur künstlichen Intelligenz könnte man Romane schreiben und das wurde auch gemacht. Dabei gibt es sehr viele unterschiedliche Wege und es hängt immer sehr stark von dem was man erreichen will welchen weg man wählen sollte.
Aber auch die Pseudozufallsgeneratoren liefern, je nach Wahl der Startparameter, recht schnell periodisch vorkommende Zufallszahlen! Ich hab mal bei uns im Matheforum mal ne kleine Diskussion verfolgt, in der sich ein paar Mathematiker und Informatiker darüber unterhalten haben, welche Parameter man für welcher Funktion braucht, um recht lange unabhängige Zufallszahlen zu erhalten!

Mein Stochastik-Dozent hat glaub mal erwähnt, das IBM oder Apple einen Computer herausgebracht haben, der, laut Hersteller, echte Zufallszahlen erzeugen konnte! Aber auch das war ne Fehlmeldung.

Vedek Bareil
2002-12-28, 23:16:19
ich hatte noch irgendwo ein Pseudozufallszahlen-Generierungsprogramm rumfliegen, dessen Code geht folgendermaßen (in Pascal):

var
i,ia,ic,im,n: integer;
y: double;

begin
i:=1;
ia:=1513;
ic:=4927;
im:=911327;
for n:=1 to im do begin
i:=(ia*i+ic) mod im;
y:=i/im;
ausgabe(y);
end;
end;

Die Variable y durchläuft dann eine Folge von Pseudozufallszahlen, und ausgabe(y) ist eine Prozedur, die für die Ausgabe dieser Folge als Liste (z.B. in eine Datei) sorgt.
Falls die Zahlen ia, ic und im etwas krumm erscheinen: das sind Primzahlen, das ist für die Güte der Zufallszahlen wichtig.
Zur Speicherung der Zufallszahlenfolge könnte man theoretisch auch ein Array y[n] verwenden, praktisch scheiterte das bei mir aber immer daran, daß die mit 911327 doch recht große Zahl der Array-Elemente zu einem Stack Overflow führte.

Um die Güte der Zufallszahlenfolge zu testen, empfiehlt es sich, in einer 2D-Grafik jedes Folgenglied über seinem Vorgänger aufzutragen. Dazu bietet sich z.B. folgende Modifikation meines Programms an:

var
i,ia,ic,im,n: integer;
x,y: double;

begin
i:=1;
ia:=1513;
ic:=4927;
im:=911327;
x:=1/im; //erstes Folgenglied
for n:=1 to im do begin
i:=(ia*i+ic) mod im;
y:=i/im; //neues Folgenglied
plot(x,y); //trage neues über altes Folgenglied auf
x:=y; //ersetze altes Folgenglied durch neues
end;
end;

Je weniger Strukturen in der Grafik zu erkennen sind, d.h. je gleichmäßiger und zufälliger die gezeichneten Punkte verteilt sind, desto besser ist die Folge der Pseudozufallszahlen.

xXx
2002-12-29, 12:40:20
Mit Pascal hab ich mich leider noch nie beschäftigt und verteh deinen Code nicht vollständig. Wenn du ihn noch einmal näher erläutern würdest?

Ein richtiges Zufallsprinzip gibt es also nicht?!
Der Mensch kann irgendeine zahl zwischen 1 und 10 nennen oder es kann bei einem Kartenspiel irgendeine Karte gezogen werden oder beim Lotto verschiedene Kugeln.
Soetwas wird es wohl in der nächsten Zeit nicht geben.

Stone2001
2002-12-29, 14:15:29
Also, so schwer ist der Code nun auch wieder nicht zu verstehen, oder?
Aber, dem Manne kann geholfen werden:

Als erstes braucht man 5 Variablen:

- im (das sog. Modul)
- ia (der sog. Faktor)
- ic (das sog. Inkrement)
- i (der Startwert)
- n (Zählvariable der for-Schleife)

Zu Beginn werden die Variablen mit gewissen Werten belegt!
Durch die Zuweisung i = ((ia * i + ic) % im) wird jetzt in Abhängigkeit vom Modul, Faktor, Inkrement und der vorhergehenden Zufallszahl eine neue Zufallszahl berechnet und der Variable i zugewiesen!
Durch die Zuweisung y = i / im , wird jetzt diese Zufallsvariable auf das Einheitintervall transformiert (d.h. es ist dann eine Zahl zwischen 0 und 1)!

Dieser Generator heißt 'linearer Kongruenzgenerator' und kann (muß aber nicht) max. 'im' verschiedene Zufallszahlen erzeugen! Deshalb wählt man 'im' am besten sehr groß.

Ein richtiges Zufallsprinzip, das man im Computer implementieren kann gibt es bis jetzt noch nicht! Wenn man echte Zufallszahlen will muß man weiterhin z.B.: Passanten in der Fußgängerzone nach einer Zahl zwischen 0 und 1000 fragen,...!

Vedek Bareil
2002-12-29, 21:29:32
Originally posted by KR
Mit Pascal hab ich mich leider noch nie beschäftigt und verteh deinen Code nicht vollständig. Wenn du ihn noch einmal näher erläutern würdest?ich kann ihn ja mal nach C/C++ übersetzen:

int i = 1;
int ia = 1513;
int ic = 4927;
int im = 911327;
double y;
for (int n = 1; n <= im; n++)
{
i = (ia*i + ic) % im;
y = ((double) i)/((double) im);
ausgabe(y)
}


Ein richtiges Zufallsprinzip gibt es also nicht?! Ein Computer ist eine deterministisch arbeitende Maschine: sein Output wird vollständig durch den Input festgelegt. Ein zufälliger Output ließe sich nur durch einen zufälligen Input (z.B. indem man ihn mit Rauschen füttert) realisieren.
Einen zufälligen Output selbst erzeugen könnte nur ein Quantencomputer, dessen Arbeitsweise indeterministisch ist. Quantencomputer sind aber leider noch nicht auf dem Markt ;)

Stone2001
2002-12-29, 22:00:00
Originally posted by Vedek Bareil
Ein Computer ist eine deterministisch arbeitende Maschine: sein Output wird vollständig durch den Input festgelegt.

Soweit, so gut!

Ein zufälliger Output ließe sich nur durch einen zufälligen Input (z.B. indem man ihn mit Rauschen füttert) realisieren.

Ist das jetzt nicht ein Widerspruch, zu dem, was du gerade geschrieben hast? Demnach ist der 'Input' zwar zufällig, der 'Output' aber, immer noch komplett vorhersagbar (deterministisch)! Oder?

Einen zufälligen Output selbst erzeugen könnte nur ein Quantencomputer, dessen Arbeitsweise indeterministisch ist. Quantencomputer sind aber leider noch nicht auf dem Markt ;)
Bist du sicher, das Quantencomputer indeterministisch arbeiten? AFAIK haben die Quantencomputer ein Problem, sie geben jede mögliche Lösung zur gleichen Zeit aus! Der Algorithmus aber, der zu den Lösungen führt ist meines Wissens nach, aber immer noch deterministisch!

P.S.: Ich glaub, wir kommen etwas vom Thema ab, oder?

Vedek Bareil
2002-12-30, 01:55:19
Originally posted by Stone2001
Ist das jetzt nicht ein Widerspruch, zu dem, was du gerade geschrieben hast? Demnach ist der 'Input' zwar zufällig, der 'Output' aber, immer noch komplett vorhersagbar (deterministisch)! Oder?
der Output ist vorhersagbar, wenn du den Input kennst. Die Zufälligkeit kommt im besprochenen Fall daher, daß der Input zufällig ist, du also den Input nicht vorhersagen kannst. Der Output bleibt dabei natürlich durch den Input determiniert, besitzt also sozusagen keine "eigene" Zufälligkeit.


Bist du sicher, das Quantencomputer indeterministisch arbeiten? AFAIK haben die Quantencomputer ein Problem, sie geben jede mögliche Lösung zur gleichen Zeit aus!
sie geben nicht jede mögliche Lösung zur gleichen Zeit aus, sondern sie berechnen jede mögliche Lösung gleichzeitig. Wenn sie damit fertig sind und man mißt, in welchem Quantenzustand sie sich befinden, kommt ein Indeterminismus ins Spiel.
Nimm z.B. einen sehr einfachen QC, der aus einem Quantenregister mit zwei QBits besteht. Auf diesem läßt du nun einen Algorithmus laufen, der dafür sorgt, daß der Zustand des Registers schließlich

|Psi> = 1/2 (|00> + |01> + |10> + |11>)

ist. Wenn du nun mißt, welches QBit welchen Zustand (|0> oder (|1>)einnimmt, so findet eine Zustandsreduktion statt, bei der der Zustand des Registers in einen der vier Zustände |00>, |01>, |10>, |11> übergeht. Welcher dieser vier es jedoch ist, ist zufällig. Vor der Messung läßt sich lediglich sagen, daß die Wahrscheinlichkeit für jeden der vier 1/4 ist.


Der Algorithmus aber, der zu den Lösungen führt ist meines Wissens nach, aber immer noch deterministisch! aber wenn der Algorithmus fertig ist, muß zum Zweck der Ausgabe immer noch eine Messung durchgeführt werden. Und an der Stelle wird's indeterministisch.