{ "cells": [ { "cell_type": "markdown", "id": "5cd9ffa9", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# The Art of Memory Loss\n", "### and the Art of Memory Loss and [...]\n", "#### by Dominic Zimmer" ] }, { "cell_type": "markdown", "id": "4cb168bd", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "
\n", "“Die Kunst des Gedächtnisverlustes beschäftigt sich damit, trotz großer Vergesslichkeit auf lange Sicht stets die Richtigen Antworten zu wissen.”\n", " \n", "— *Irgendjemand, Saarbrücken 2023*\n", "
" ] }, { "cell_type": "markdown", "id": "5384b59e", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "
" ] }, { "cell_type": "markdown", "id": "ffc10d60", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Frösche, Wetten, Wetter und Wetterfrösche\n", "motivierendes bildchen" ] }, { "cell_type": "markdown", "id": "ab8003a9", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "TODO: 2-state beispiel\n", "\n", "```mermaid\n", "stateDiagram-v2\n", " direction lr\n", " l --> r: p\n", " l --> l: 1-p\n", " r --> r: 1-q\n", " r --> l: q\n", "```" ] }, { "cell_type": "markdown", "id": "43e49851", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## Frösche\n", "\n", "
\n", " \n", "- ein Frosch sitzt auf einer von zwei Seerosen $S = \\{l, r\\}$\n", "- mit $p$ hüpft er von $l$ nach $r$\n", "- mit $q$ hüpft er von $r$ nach $l$\n", "- mit $1-p$ bzw $1-q$ bleibt er sitzen\n", "- er beginnt auf $s_0 = l$\n", " \n", "
" ] }, { "cell_type": "markdown", "id": "25a3f2ca", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "
\n", " \n", "Wie oft ist der Frosch im Schnitt in $l$, wie oft in $r$?\n", "\n", "
" ] }, { "cell_type": "markdown", "id": "feb11fcd", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## Frösche Simulieren" ] }, { "cell_type": "code", "execution_count": 1, "id": "f8a3a4d9", "metadata": { "hideCode": false, "slideshow": { "slide_type": "fragment" } }, "outputs": [], "source": [ "import numpy as np\n", "uniform = np.random.random # Zufall in [0, 1]\n", "# Kein numpy? -> from random import random as uniform\n", "\n", "p = 0.6 # von l nach r\n", "q = 0.2 # von r nach l\n", "N = 100_000 # Simulationen\n", "\n", "# Los geht's!" ] }, { "cell_type": "code", "execution_count": 5, "id": "41017b8e", "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "100000/100000\n", " 0.2495 of the time at 0 (24945 total)\n", " 0.7506 of the time at 1 (75055 total)\n" ] } ], "source": [ "visits = [0, 0]\n", "cur = 0\n", "for i in range(N):\n", " if cur == 0:\n", " if uniform() < p:\n", " cur = 1\n", " visits[1] += 1\n", " else:\n", " visits[0] += 1\n", " elif cur == 1:\n", " if uniform() < q:\n", " cur = 0\n", " visits[0] += 1\n", " else:\n", " visits[1] += 1\n", "n = sum(visits)\n", "print(f\"{n}/{N}\")\n", "print(f\" {visits[0]/n:.4f} of the time at 0 ({visits[0]} total)\")\n", "print(f\" {visits[1]/n:.4f} of the time at 1 ({visits[1]} total)\")\n" ] }, { "cell_type": "markdown", "id": "ca2c3139", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "
\n", "\n", "**Warum** ist der Frosch im Schnitt 25% in $l$ und 75% in $r$?\n", "\n", "
" ] }, { "cell_type": "markdown", "id": "3840a6f7", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [ "hide_cell" ] }, "source": [ "## Frösche Analysieren\n", "\n", "
\n", " \n", "Die Wahrscheinlichkeiten für Wechsel sind\n", " \n", "$P(l \\to r) = p$ und $P(r \\to l) = q$\n", "\n", "
" ] }, { "cell_type": "markdown", "id": "5bf90648", "metadata": { "slideshow": { "slide_type": "fragment" }, "tags": [ "hide_cell" ] }, "source": [ "
\n", "\n", "Wie können wir $P(\\text{Frosch links})$ für große $t$ vorraussagen?\n", " \n", "
" ] }, { "cell_type": "markdown", "id": "57a24526", "metadata": { "slideshow": { "slide_type": "fragment" }, "tags": [ "hide_cell" ] }, "source": [ "\n", "| $t$ | $P(\\text{ Frosch links zu }t)$ | $P(\\text{ Frosch rechts zu }t)$ |\n", "| -------- | -------- | -------- |\n", "| $0$ | $1$ | $0$ |" ] }, { "cell_type": "markdown", "id": "74e64a9a", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## Frösche Analysieren\n", "\n", "
\n", " \n", "Die Wahrscheinlichkeiten für Wechsel sind $P(l \\to r) = p$ und $P(r \\to l) = q$\n", "\n", "
\n", "\n", "
\n", "\n", "Wie können wir $P(\\text{Frosch links})$ für große $t$ vorraussagen?\n", " \n", "
\n", "\n", "| $t$ | $P(\\text{ Frosch links zu }t)$ | $P(\\text{ Frosch rechts zu }t)$ |\n", "| -------- | -------- | -------- |\n", "| $0$ | $1$ | $0$ |\n", "| $1$ | $1-p$ | $p$ |\n", "| $2$ | $(1-p)^2 + pq$ | $p(1-p) + p(1-q)$|" ] }, { "cell_type": "markdown", "id": "bce42c67", "metadata": { "slideshow": { "slide_type": "fragment" }, "tags": [ "hide_cell" ] }, "source": [ "
\n", "\n", "$$\n", "\\begin{align*}\n", "P_{t+1}(\\text{Frosch links}) &= P_t(\\text{Frosch links}) \\cdot P(l \\to l) \\\\\n", "& + P_t(\\text{Frosch rechts}) \\cdot P(r \\to l)\\\\\n", "P_{t+1}(\\text{Frosch rechts}) &= P_t(\\text{Frosch rechts}) \\cdot P(r \\to r) \\\\\n", "&+ P_t(\\text{Frosch links}) \\cdot P(l \\to r)\n", "\\end{align*}\n", "$$\n", " \n", "
" ] }, { "cell_type": "markdown", "id": "d33a0be9", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [ "hide_cell" ] }, "source": [ "## Frösche Analysieren\n", "\n", "Unser Experiment zeigt für große $t$:\n", "$$\n", " P_{t-2}(\\text{Frosch links}) \\approx P_{t-1}(\\text{Frosch links}) \\approx P_{t}(\\text{Frosch links}) \\approx \\dots L\n", "$$\n", "\n", "
\n", "\n", "$$\n", "\\begin{align*}\n", "P_{t+1}(\\text{Frosch links}) &= P_t(\\text{Frosch links}) \\cdot P(l \\to l) \\\\\n", "& + P_t(\\text{Frosch rechts}) \\cdot P(r \\to l)\\\\\n", "P_{t+1}(\\text{Frosch rechts}) &= P_t(\\text{Frosch rechts}) \\cdot P(r \\to r) \\\\\n", "&+ P_t(\\text{Frosch links}) \\cdot P(l \\to r)\n", "\\end{align*}\n", "$$\n", " \n", "
" ] }, { "cell_type": "markdown", "id": "85a20830", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## Frösche Analysieren\n", "\n", "Unser Experiment zeigt für große $t$:\n", "$$\n", " P_{t-2}(\\text{Frosch links}) \\approx P_{t-1}(\\text{Frosch links}) \\approx P_{t}(\\text{Frosch links}) \\approx \\dots L\n", "$$\n", "
\n", "\n", "$$\n", "\\begin{align*}\n", "L &= L \\cdot P(l \\to l) + R \\cdot P(r \\to l)\\\\\n", "R &= R \\cdot P(r \\to r) + L \\cdot P(l \\to r)\\\\\n", "1 &= L + R\n", "\\end{align*}\n", "$$\n", " \n", "
\n" ] }, { "cell_type": "markdown", "id": "cfa9063c", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "$$\n", "\\begin{align*}\n", "L &= \\frac{q}{p+q} = 25\\% \\\\\n", "R &= \\frac{p}{p+q} = 75\\%\n", "\\end{align*}\n", "$$" ] }, { "cell_type": "markdown", "id": "74f18541", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Mathematik und Gedächtnisverlust" ] }, { "cell_type": "markdown", "id": "6af0597d", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "
\n", " \n", "**Definition** *(Gedächtnislosigkeit)*\n", "\n", "Ein Prozess ist *gedächtnislos*, wenn zu jedem Zeitpunkt seine Entscheidung nur vom aktuellen Zustand abhängt, nicht aber von dem Weg, wie der aktuelle Zustand erreicht wurde.\n", "
" ] }, { "cell_type": "markdown", "id": "b4507aa2", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "
\n", " \n", "**Beobachtung**\n", "\n", "Das Verhalten der Frösche ist gedächtnislos. Die Aktionen des Frosches und deren Wahrscheinlichkeiten $p$ und $1-p$ (bzw $q$ und $1-q$) hängen nur von der aktuellen Seerose ab. \n", "
" ] }, { "cell_type": "markdown", "id": "90451df9", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Frösche — Formell" ] }, { "cell_type": "markdown", "id": "40c3b0b5", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "> Der Frosch kann auf der linken oder rechten Seerose sitzen.\n", "\n", "Wir modellieren die beiden Seerosen als die zwei Zustände $S = \\{L, R\\}$." ] }, { "cell_type": "markdown", "id": "a034c732", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "> Zufällig hüpft er zwischen den Seerosen hin und her\n", "\n", "Die Zufallsvariable $X_t$ beschreibt wo der Frosch zum Zeitpunkt $t$ ist." ] }, { "cell_type": "markdown", "id": "47b022ef", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Wir könnten zum Beispiel beobachten, dass\n", "\n", "$$\n", "\\dots \\quad X_3 = L \\quad X_4 = L \\quad X_5 = R \\quad X_6 = L \\quad \\dots\n", "$$" ] }, { "cell_type": "markdown", "id": "1bea4ee3", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "> Am Anfang sitzt der Frosch auf der linken Seerose.\n", "\n", "Die Wahrscheinlichkeit $P(X_0 = L) = 1$.\n", "\n", "Analog ergibt sich $P(X_0 = R) = 0$." ] }, { "cell_type": "markdown", "id": "12dde881", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "> Der Frosch hüpft mit Wahrscheinlichkeit $p$ von links nach rechts\n", "\n", "Die Übergangswahrscheinlichkeit, dass der Frosch zum Zeitpunkt $t-1$ in $L$, und zum Zeitpunkt $t$ in $R$ ist, ist $p$.\n", "\n", "$$\n", "\\begin{align*}\n", "&\\phantom{==}\\color{gray}{P(X_t = R \\mid X_{t-1} = L, X_{t-2} = L)}\\\\ \n", "&=\\color{gray}{P(X_t = R \\mid X_{t-1} = L, X_{t-2} = R)}\\\\ \n", "&= P(X_t = R \\mid X_{t-1} = L) \\\\&= p\n", "\\end{align*}\n", "$$" ] }, { "cell_type": "markdown", "id": "7ded753c", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Da die Übergangswahrscheinlichkeiten zum Zeitpunkt $t$ nur von $X_t$ abhängen, schreiben wir kurzerhand\n", "\n", "$$\n", "P(X_t = R | X_{t-1} = L) = P(L \\to R) = m_{L R}\n", "$$" ] }, { "cell_type": "markdown", "id": "0c8c91ad", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Wir können alle Übergangswahrscheinlichkeiten $P(s \\to s')$ elegant als Matrix $M$ notieren:\n", "\n", "$$\n", "M = \n", "\\begin{pmatrix} m_{LL} & m_{LR} \\\\ m_{RL} & m_{RR}\n", "\\end{pmatrix} = \n", "\\begin{pmatrix} 1 - p & p \\\\ q & 1-q\n", "\\end{pmatrix}\n", "$$" ] }, { "cell_type": "code", "execution_count": 4, "id": "9d30de72", "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "ename": "SyntaxError", "evalue": "invalid syntax (2451516634.py, line 3)", "output_type": "error", "traceback": [ "\u001b[0;36m Cell \u001b[0;32mIn[4], line 3\u001b[0;36m\u001b[0m\n\u001b[0;31m :::info\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n" ] } ], "source": [ "\n", "## Frösche brauchen Zufall\n", "\n", ":::info\n", "Viele Leute werfen Münzen in den Teich der Frösche. Wir sollen einen Frosch aussuchen, der der neue Schatzmeister werden soll. Wie können wir aus den 7 Fröschen **fair** einen auswählen?\n", ":::\n", "\n", "**Bedingungen**:\n", "- Jeder Frosch wird mit $\\frac{1}{7}$ ausgewählt\n", "- Zufall nur durch die Münzen\n", "\n", "---\n", "\n", "## Frösche brauchen Zufall\n", "\n", "```mermaid\n", "stateDiagram-v2\n", " state \" \" as 0\n", " state \" \" as 1\n", " state \" \" as 2\n", " state \" \" as 3\n", " state \" \" as 4\n", " state \" \" as 5\n", " state \" \" as 6\n", " state \"1\" as 7\n", " state \"2\" as 8\n", " state \"3\" as 9\n", " state \"4\" as 10\n", " state \"5\" as 11\n", " state \"6\" as 12\n", " state \"7\" as 13\n", " state \" \" as 14\n", " 0 --> 1: 0.5\n", " 0 --> 2: 0.5\n", " 1 --> 3: 0.5\n", " 1 --> 4: 0.5\n", " 2 --> 5: 0.5\n", " 2 --> 6: 0.5\n", " 3 --> 7: 0.5\n", " 3 --> 8: 0.5\n", " 4 --> 9: 0.5\n", " 4 --> 10: 0.5\n", " 4 --> 11: 0.5\n", " 5 --> 12: 0.5\n", " 6 --> 13: 0.5\n", " 6 --> 14: 0.5\n", " 14 --> 0: 1\n", " 7 --> 7: 1\n", " 8 --> 8: 1\n", " 9 --> 9: 1\n", " 10 --> 10: 1\n", " 11 --> 11: 1\n", " 12 --> 12: 1\n", " 13 --> 13: 1\n", "```\n", "\n", "---\n", "\n", "## Gedächtnisverlust\n", "\n", "- Der Frosch hüpft mit $p$ nach links und $q$ nach rechts\n", "- Die Münze fällt gleichwahrscheinlich auf Kopf oder Zahl\n", "\n", "
\n", " \n", ":::success\n", "Die nächste Aktion hängt nur vom **aktuellen** Zustand ab.\n", "Was davor geschah ist irrelevant.\n", ":::\n", "
\n", "\n", "---\n", "\n", "## Bissle Mathematik" ] }, { "cell_type": "code", "execution_count": null, "id": "1aa7ccc8", "metadata": { "hideCode": false, "slideshow": { "slide_type": "slide" } }, "outputs": [], "source": [ "import matplotlib as mpl\n", "import matplotlib.pyplot as plt\n", "import networkx as nx\n", "\n", "seed = 13648 # Seed random number generators for reproducibility\n", "G = nx.random_k_out_graph(10, 3, 0.5, seed=seed)\n", "pos = nx.spring_layout(G, seed=seed)\n", "\n", "node_sizes = [3 + 10 * i for i in range(len(G))]\n", "M = G.number_of_edges()\n", "edge_colors = range(2, M + 2)\n", "edge_alphas = [(5 + i) / (M + 4) for i in range(M)]\n", "cmap = plt.cm.plasma\n", "\n", "nodes = nx.draw_networkx_nodes(G, pos, node_size=node_sizes, node_color=\"indigo\")\n", "edges = nx.draw_networkx_edges(\n", " G,\n", " pos,\n", " node_size=node_sizes,\n", " arrowstyle=\"->\",\n", " arrowsize=10,\n", " edge_color=edge_colors,\n", " edge_cmap=cmap,\n", " width=2,\n", ") \n", "# set alpha value for each edge\n", "for i in range(M):\n", " edges[i].set_alpha(edge_alphas[i])\n", "\n", "pc = mpl.collections.PatchCollection(edges, cmap=cmap)\n", "pc.set_array(edge_colors)\n", "\n", "ax = plt.gca()\n", "ax.set_axis_off()\n", "plt.colorbar(pc, ax=ax)\n", "plt.show()" ] } ], "metadata": { "celltoolbar": "Edit Metadata", "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.3" } }, "nbformat": 4, "nbformat_minor": 5 }