Hauptinhalt
Programmierung
Kurs: Programmierung > Lerneinheit 5
Lektion 2: Zufälligkeit- Random-Walks
- Challenge: Irrer Kleckser
- Wahrscheinlichkeit & ungleichförmige Verteilungen
- Challenge: Kletterwalker
- Normalverteilung von Zufallszahlen
- Challenge: Gaussscher Walker
- Beliebige Verteilung von Zufallszahlen
- Challenge: Lévy-Walker
- Projekt: Farbspritzer
© 2023 Khan AcademyNutzungsbedingungenDatenschutzerklärungCookie-Meldung
Wahrscheinlichkeit & ungleichförmige Verteilungen
Magst du dich noch an deine ersten Programmierschritte auf KA erinnern? Vieleicht wolltest du ganz viele Kreise auf dem Bildschirm zeichnen. Du hast dir gesagt: Ah ich weiß! Ich zeichne all diese Kreise an zufälligen Stellen mit zufälligen Grössen und zufälligen Farben.” In diesem Tutorial versuchen wir aber System gemäß unseren Beobachtungen aus der Natur zu modellieren. Standardmäßig auf Zufälligkeit zu setzen ist keine besonders durchdachte Lösung. Vor allem wenn man eine organische oder natürlich aussehende Simulation erstellen möchte.
Mit ein paar Tricks können wir
random()
dazu bringen, um ungleichförmige verteilte Zufallszahlen zu generieren. Dies wird in diesem Kurs sehr nützlich sein, da wir eine Reihe von verschiedenen Szenarien modellieren. Wenn wir z.b. genetische Algorithmen anschauen, brauche wir z.b. eine Möglichkeit für die “Selektion”. Welche Mitglieder einer Population sollen ihre DNA an die nächste Generation weitergeben? Magst du dich noch an die Evolutionstheroie und dem Überleben der am besten angepassten Individuen erinnern? Wenn z.B. eine sich entwickelnde Population von Affen haben, wird nicht jeder Affe die gleich Chance zur Reprodukion haben. Um die Darwinsche Evolutionstheorie zu simulieren, können wir einfach zufällig zwei Affen als Eltern auswählen. Die “stärkeren” müssen aber eine höhere Wahrscheinlichkeit haben ausgewählt zu werden. Wir müssen die “Wahrscheinlichkeit der stärkeren” definieren. Ein besonders schneller und starker Affe hat z.B. eine 90% Chance sich fortzupflanzen, während ein schwacher Affe nur eine 10%ige Chance hat.Wir machen hier eine Pause und schauen uns die Grundlagen der Wahrscheinlichkeit an. Zuerst untersuchen wir die Wahrscheinlichkeit für jedes einzelne Ereignis, d.h. die Wahrscheinlichkeit dass ein bestimmtes Ereignis eintritt.
Wenn du ein System mit einer bestimmten Anzahl Ergebnisse hast und jedes Ergebnis die gleiche Wahrscheinlichkeit hat, ist die Wahrscheinlichkeit für das Eintreten eines bestimmten Ereignisses gleich die Anzahl Ergebnisse für dieses Ereignis dividiert durch die Gesamtzahl an möglichen Ergebnissen. Ein Münzwurf ist ein einfaches Beispiel mit nur zwei möglichen Ergebnissen (Kopf oder Zahl). Es gibt nur eine Möglichkeit die Münze zu werfen. Die Wahrscheinlichkeit dass die Münze auf Kopf landet ist daher eins dividiert durch zwei: 1/2 oder 50%.
Nehmen wir einen Kartenstapel mit 52 Karten. Die Wahrscheinlichkeit ein Ass zu ziehen ist:
Anzahl Asse / Anzahl Karten = 4 / 52 = 0,077 = ~ 8%
Die Wahrscheinlichkeit Karo zu ziehen ist:
Anzahl Karo / Anzahl Karten = 13 / 52 = 0,25 = 25%
Wir können auch die Wahrscheinlichkeit dass mehrer Ereignisse nacheinander auftreten berechnen.
Die Wahrscheinlichkeit, dass eine Münze dreimal hintereinander auf Kopf fällt ist:
(1/2) * (1/2) * (1/2) = 1/8 (oder 0,125)
Dies bedeutet dass eine Münze bei wahrscheinlich einem aus acht Versuchen (jeder besteht aus drei Würfen) dreimal hintereinander auf Kopf fällt.
Möchtest du das Thema Wahrscheinlich nochmals wiederholen bevor du fortfährst? Schau dir Wahrscheinlichkeiten von mehrstufigen Ereignissen und Bedingte Wahrscheinlichkeit an.
Es gibt verschiedene Möglichkeiten wie wir die Funktion
random()
für Wahrscheinlichkeitsverteilungen verwenden können. Eine Möglichkeit ist es, ein Array mit einer Anzahl Zahlen zu füllen und einige davon mehrfach zu verwenden. Dann wählen wir eine zufällige Zahl aus diesem Array und generieren unsere Ereignisse basierend auf dieser Wahl.Wenn wir diesen Code ausführen, haben wir eine 40%ige Chance dass der Wert 1, eine 20%ige Chance für den Wert 2 und eine 40%ige Chance dass der Wert 3 ausgegeben wird.
Wir können ebenfalls eine Zufallszahl generieren (Einfacherweise nehmen wir eine Dezimalzahl zwischen 0 und 1) und generieren dann das Ereignis wenn die Zufallszahl in einem bestimmten Bereich liegt. Schau dir das Beispiel unten an und klicke auf Neustart bis die Zufällig gezogene Zahl kleiner als der Grenzwert ist:
Diese Möglichkeit kann auch für mehrere Ergebnisse verwendet werden. Nehmen wir an, dass Ergebnis A eine Chance von 60%, Ergebnis B eine Chance von 10% und Ergebnis C eine Chance von 30% hat. Wir implementieren dies indem wir eine Zufallszahl ziehen und prüfen in welchen Bereich diese fällt.
- zwischen 0,00 und 0,60 (60%) –> Ergebnis A
- zwischen 0,60 und 0,70 (10%) –> Ergebnis B
- zwischen 0,70 und 1,00 (30%) –> Ergebnis C
Klick auf den Button Neustart um zu sehen wie oft du unterschiedliche Ergebnisse erhältst:
Auf diese Weise können wir einen Random-Walker implementieren, welcher nach rechts tendiert. Hier ein Beispiel für so einen
Walker
mit den folgenden Wahrscheinlichkeiten:- Wahrscheinlichkeit, dass er sich nach oben bewegt: 20%
- Wahrscheinlichkeit, dass er sich nach unten bewegt: 20%
- Wahrscheinlichkeit, dass er sich nach links bewegt: 20%
- Wahrscheinlichkeit, dass er sich nach rechts bewegt: 40%
Der Kurs "Natürliche Simulationen" ist eine Bearbeitung von "The Nature of Code" von Daniel Shiffman, und wird unter der Creative Commons Attribution-NonCommercial 3,0 Unported Lizenz verwendet.
Willst du an der Diskussion teilnehmen?
Noch keine Beiträge.