{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Zellulärer Automat"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In dieser *optionalen Aufgabe* betrachten wir einen **zellulären Automaten**, dessen Zellen durch drei Parameter $a, b, c \\in [0, 1)$ beschrieben werden, welche die Konzentration dreier Spezies beschreiben sollen. Zu Anfang seien die Werte zufällig aus dem möglichen Wertebereich gewählt. \n",
"\n",
"Der zelluläre Automat funktioniert nun nach den folgenden Regeln:\n",
"* Für jede Zelle wird der durchschnittliche Wert $\\overline{a}, \\overline{b}, \\overline{c}$ als Mittelwert der acht umgebenden Zellen sowie des Werts der Zelle selbst berechnet.\n",
"* Der neue Zustand ist dann gegeben durch\n",
"\n",
"$\\quad a = \\min\\left(1.0,\\; \\overline{a}\\cdot\\left(1. + \\overline{b} - \\overline{c}\\right)\\right)$\n",
"\n",
"$\\quad b = \\min\\left(1.0,\\; \\overline{b}\\cdot \\left(1. + \\overline{c} - \\overline{a}\\right)\\right)$\n",
"\n",
"$\\quad c = \\min\\left(1.0,\\; \\overline{c}\\cdot \\left(1. + \\overline{a} - \\overline{b}\\right)\\right)$\n",
"\n",
"Beachten Sie, dass alle Zellen *gleichzeitig* in den neuen Zustand übergehen, d.h. die Berechnung der Mittelwerte darf ausschließlich mit den Werten des vorherigen Iterationsschritts passieren und nicht mit denen der schon partiell veränderten Matrix.\n",
"\n",
"In den unteren beiden Zellen finden Sie ein Skelett, das Sie um das Update der Zellen erweitern sollen. Visualisiert werden kann der zelluäre Automat, in dem eine der drei Konzentrationen dargestellt wird.\n",
"\n",
"Eine experimentelle Umsetzung dieses Modells finden Sie in dem eingebundenen Video:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"PyObject "
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"using PyCall;@pyimport IPython.display as d;d.HTML(\"\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"using PyPlot\n",
"pygui(true)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"** Programmskelett**"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"L = 256 # system size\n",
"\n",
"automaton_a = rand(L, L)\n",
"automaton_b = rand(L, L)\n",
"automaton_c = rand(L, L)\n",
"\n",
"coarse_automaton_a = zeros(L, L)\n",
"coarse_automaton_b = zeros(L, L)\n",
"coarse_automaton_c = zeros(L, L)\n",
"\n",
"fig = figure()\n",
"ax = fig[:add_subplot](111)\n",
"image = imshow(automaton_a)\n",
"axis(\"off\")\n",
"\n",
"for step in 1:200\n",
" ### ...\n",
" ### Fuegen Sie Ihren Code hier ein\n",
" automaton_a = rand(L, L)\n",
" ### ...\n",
" # updated automaton_a is set as the new image\n",
" image[:set_data](automaton_a)\n",
" pause(0.0001)\n",
"end"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Julia 0.5.2",
"language": "julia",
"name": "julia-0.5"
},
"language_info": {
"file_extension": ".jl",
"mimetype": "application/julia",
"name": "julia",
"version": "0.5.2"
}
},
"nbformat": 4,
"nbformat_minor": 1
}