{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Sistemas dinámicos, Complejidad y Caos con Python" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*Esta notebook fue creada originalmente como un blog post por [Raúl E. López Briega](https://relopezbriega.com.ar/) en [Matemáticas, Analisis de datos y Python](https://relopezbriega.github.io). El contenido esta bajo la licencia BSD.*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "> \"LLamamos *caos* al orden que todavía no comprendemos\"\n", "\n", "**[Edward Lorenz](https://es.wikipedia.org/wiki/Edward_Lorenz)**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Introducción\n", "\n", "Vivimos en un mundo tan bello como complejo. El enfoque tradicional de la ciencia,que busca generalmente reducir a los sistemas complejos en cada una de sus partes, comprender cada parte, y luego entender todo el sistema, parece no ser suficiente. Cuando las partes comienzan a conectarse e interactuar entre sí, las bases científicas de este enfoque comienzan a fallar, y se torna casi imposible predecir el comportamiento del sistema. Los simples supuestos como la [linealidad](https://es.wikipedia.org/wiki/Lineal#Sistemas_lineales), la independencia, o la [distribución normal](https://es.wikipedia.org/wiki/Distribuci%C3%B3n_normal) parecen no ser de mucha utilidad a la hora de modelar los fenómenos incluso más sencillos del mundo que nos rodea. Es a partir de esta realidad, que nuevos enfoques se comenzaron a desarrollar y surgieron nuevos campos de estudio multidisciplinarios como los [sistemas dinámicos](https://es.wikipedia.org/wiki/Sistema_din%C3%A1mico), la [complejidad](https://es.wikipedia.org/wiki/Complejidad), o la [teoría del caos](https://es.wikipedia.org/wiki/Teor%C3%ADa_del_caos). \n", "\n", "\n", "## ¿Qué es un sistema complejo?\n", "\n", "Es difícil definir rigurosamente que es un [Sistema complejo](https://es.wikipedia.org/wiki/Sistema_complejo), podemos decir que es un campo de investigación interdisciplinario que busca explicar cómo un gran número de entidades relativamente simples (las cuales generalmente se denominan *agentes*) se organizan, sin el beneficio de ningún controlador central, en un todo colectivo que crea patrones, usa información y, en algunos casos, evoluciona y aprende. Es el caso típico en que ***el todo es mucho más que la suma de sus partes***. Aunque no existe una buena definición de que es un [Sistema complejo](https://es.wikipedia.org/wiki/Sistema_complejo), si podemos describir algunas de las características principales que poseen estos sistemas, como ser:\n", "\n", "* **El sistema contiene una colección de muchos *agentes* que interactúan.** Las interacciones entre estos *agentes* pueden surgir porque están físicamente cerca el uno del otro, o porque son miembros de algún tipo de grupo, o porque comparten alguna información común. En la medida en que los *agentes* están vinculados entre sí a través de sus interacciones, también se puede pensar que forman parte de una [red o grafo](https://es.wikipedia.org/wiki/Teor%C3%ADa_de_grafos). Por lo que el [análisis de redes](https://es.wikipedia.org/wiki/An%C3%A1lisis_de_redes) es una herramienta importante para comprender estos sistemas. \n", "\n", "* **El comportamiento de estos *agentes* se ve afectado por una memoria o [retroalimentación](https://es.wikipedia.org/wiki/Realimentaci%C3%B3n).** Esto significa que algo del pasado afecta algo en el presente, o que algo que sucede en un lugar afecta lo que está sucediendo en otro, en otras palabras, una especie de efecto de arrastre. El resultado neto de que todos tengan tal memoria puede ser que el sistema como un todo también recuerde. Por lo tanto, un *patrón o secuencia global* particular puede manifestarse en el sistema.\n", "\n", "* **Los *agentes* pueden adaptar sus estrategias de acuerdo a su historia.** Esto simplemente significa que un *agente* puede adaptar su comportamiento por sí mismo, con la esperanza de mejorar su rendimiento.\n", "\n", "* **El sistema es típicamente *abierto*.** Es decir, que el sistema puede ser influenciado por su entorno.\n", "\n", "Así mismo, en el comportamiento característico de los [Sistemas complejos](https://es.wikipedia.org/wiki/Sistema_complejo), podemos observar los siguientes rasgos:\n", "\n", "* **El sistema parece estar *vivo*.** El sistema evoluciona de una manera no trivial y, a menudo complicada, impulsada por una [ecología](https://es.wikipedia.org/wiki/Ecolog%C3%ADa) de *agentes* que interactúan y se adaptan bajo la influencia de la *retroalimentación*. \n", "\n", "* **El sistema exhibe fenómenos *emergentes* que generalmente son sorprendentes y pueden ser extremos.** En terminología científica, el sistema está lejos de alcanzar un *equilibrio*. Esto básicamente significa que cualquier cosa puede suceder, y si se espera lo suficiente, generalmente lo hará. Tales fenómenos generalmente son inesperados en términos de cuándo surgen, de ahí su aspecto de sorpresa. Pero el sistema también tenderá a exhibir fenómenos emergentes que a su vez son sorprendentes en el sentido de que no podrían haber sido predichos en base al conocimiento de las propiedades de los *agentes* individuales.\n", "\n", "* **Los fenómenos emergentes suelen surgir en ausencia de cualquier tipo de *mano invisible* o controlador central.** En otras palabras, un [Sistema complejo](https://es.wikipedia.org/wiki/Sistema_complejo) puede evolucionar de una manera complicada por sí mismo. Por esta razón, a menudo se considera que los [Sistemas complejos](https://es.wikipedia.org/wiki/Sistema_complejo) son mucho más que la suma de sus partes. \n", "\n", "* **El sistema muestra una mezcla complicada de comportamiento ordenado y desordenado.** De manera más general, todos los [Sistemas complejos](https://es.wikipedia.org/wiki/Sistema_complejo) parecen poder moverse entre el *orden* y el *desorden* por su propia cuenta.\n", "\n", "\n", "## ¿Qué es la teoría del caos?\n", "\n", "La [teoría del caos](https://es.wikipedia.org/wiki/Teor%C3%ADa_del_caos), más que una teoría, es un *paradigma* que supuso en su momento una gran revolución científica, al reflejar que muchos sistemas que eran considerados [deterministas](https://es.wikipedia.org/wiki/Determinismo) y previsibles tenían severos límites en dicha previsibilidad. Es decir, que no eran tan útiles como se creía a la hora de predecir eventos futuros. Iniciada por [Henri Poincaré](https://es.wikipedia.org/wiki/Henri_Poincar%C3%A9) y popularizada gracias al trabajo del matemático y meteorólogo [Edward Lorenz](https://es.wikipedia.org/wiki/Edward_Lorenz), la [teoría del caos](https://es.wikipedia.org/wiki/Teor%C3%ADa_del_caos) se ha utilizado en campos como las matemáticas y la meteorología para explicar la inexactitud y la dificultad para obtener resultados previsibles de la realidad.\n", "\n", "### El efecto mariposa \n", "Esta teoría es ampliamente conocida por lo que se denomina el ***efecto mariposa***, según el cual ***el débil aleteo de una mariposa puede ser la causa de un huracán a miles de kilómetros de distancia***. Se indica de este modo que la existencia de una variable concreta puede provocar o alterar otras, influyéndose progresivamente hasta obtener un resultado fuera de lo esperado. En síntesis, podemos considerar que la [teoría del caos](https://es.wikipedia.org/wiki/Teor%C3%ADa_del_caos) establece que pequeños cambios en las *condiciones iniciales* crean grandes diferencias respecto al resultado final, con lo que una gran mayoría de los sucesos y sistemas no resultan totalmente predecibles.\n", "\n", "Es importante tener en cuenta que a pesar de las apariencias, el *caos* al que se refiere esta teoría no implica una falta de orden, sino que los hechos y la realidad no se ajustan a un [modelo lineal](https://es.wikipedia.org/wiki/Modelo_lineal). \n", "\n", "\n", "## El mapa logístico\n", "\n", "Para entender mejor qué es el [caos](https://es.wikipedia.org/wiki/Teor%C3%ADa_del_caos) exploremos el famoso [mapa logístico](https://es.wikipedia.org/wiki/Aplicaci%C3%B3n_log%C3%ADstica), sin duda una de las ecuaciones más famosas en la ciencia de los sistemas dinámicos. El [mapa logístico](https://es.wikipedia.org/wiki/Aplicaci%C3%B3n_log%C3%ADstica) representa un modelo sencillo para intentar explicar la dinámica de una población de la que se ha supuesto que tiene un crecimiento cada vez más lento a medida que se acerca a una cantidad de individuos considerada como límite. El modelo simplifica al combinar los efectos de la tasa de natalidad y la tasa de mortalidad en un solo número, llamado $R$. El tamaño de la población se reemplaza por un concepto relacionado \"fracción de la capacidad de carga\", llamado $x$. Su expresión matemática es la siguiente:\n", "\n", "$$x_{t+1} = Rx_t(1 - x_t)$$\n", "\n", "Esta ecuación define las reglas o dinámicas de nuestro sistema: $x$ representa la población en un momento dado $t$, y $R$ representa la tasa de crecimiento. En otras palabras, el nivel de población en un momento dado es una función del parámetro de la tasa de crecimiento y el nivel de población del intervalo de tiempo anterior. Si la tasa de crecimiento es demasiado baja, la población se extinguirá. Las tasas de crecimiento más altas podrían establecerse hacia un valor estable o fluctuar a través de una serie de auges y declives de la población.\n", "Como podemos ver, es una ecuación muy simple! la más simple en capturar la esencia del [caos](https://es.wikipedia.org/wiki/Teor%C3%ADa_del_caos)!\n", "\n", "El [mapa logístico](https://es.wikipedia.org/wiki/Aplicaci%C3%B3n_log%C3%ADstica) se vuelve muy interesante a medida que vamos variando el valor de $R$; veamos algunos ejemplos numéricos con la ayuda de [Python](https://www.python.org/) y la librería [pynamical](https://pynamical.readthedocs.io/en/latest/)." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# \n", "# Importando las librerías que vamos a utilizar\n", "import pandas as pd\n", "import numpy as np\n", "from fractal import Fern, Lorentz\n", "from pynamical import simulate, bifurcation_plot, phase_diagram, phase_diagram_3d\n", "import matplotlib.pyplot as plt\n", "import warnings\n", "warnings.filterwarnings('ignore')\n", "\n", "# graficos incrustados\n", "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", " | 0.5 | \n", "1.0 | \n", "1.5 | \n", "2.0 | \n", "2.5 | \n", "3.0 | \n", "3.5 | \n", "
---|---|---|---|---|---|---|---|
0 | \n", "0.500 | \n", "0.500 | \n", "0.500 | \n", "0.500 | \n", "0.500 | \n", "0.500 | \n", "0.500 | \n", "
1 | \n", "0.125 | \n", "0.250 | \n", "0.375 | \n", "0.500 | \n", "0.625 | \n", "0.750 | \n", "0.875 | \n", "
2 | \n", "0.055 | \n", "0.188 | \n", "0.352 | \n", "0.500 | \n", "0.586 | \n", "0.562 | \n", "0.383 | \n", "
3 | \n", "0.026 | \n", "0.152 | \n", "0.342 | \n", "0.500 | \n", "0.607 | \n", "0.738 | \n", "0.827 | \n", "
4 | \n", "0.013 | \n", "0.129 | \n", "0.338 | \n", "0.500 | \n", "0.597 | \n", "0.580 | \n", "0.501 | \n", "
5 | \n", "0.006 | \n", "0.112 | \n", "0.335 | \n", "0.500 | \n", "0.602 | \n", "0.731 | \n", "0.875 | \n", "
6 | \n", "0.003 | \n", "0.100 | \n", "0.334 | \n", "0.500 | \n", "0.599 | \n", "0.590 | \n", "0.383 | \n", "
7 | \n", "0.002 | \n", "0.090 | \n", "0.334 | \n", "0.500 | \n", "0.600 | \n", "0.726 | \n", "0.827 | \n", "
8 | \n", "0.001 | \n", "0.082 | \n", "0.334 | \n", "0.500 | \n", "0.600 | \n", "0.597 | \n", "0.501 | \n", "
9 | \n", "0.000 | \n", "0.075 | \n", "0.333 | \n", "0.500 | \n", "0.600 | \n", "0.722 | \n", "0.875 | \n", "
10 | \n", "0.000 | \n", "0.069 | \n", "0.333 | \n", "0.500 | \n", "0.600 | \n", "0.603 | \n", "0.383 | \n", "
11 | \n", "0.000 | \n", "0.065 | \n", "0.333 | \n", "0.500 | \n", "0.600 | \n", "0.718 | \n", "0.827 | \n", "
12 | \n", "0.000 | \n", "0.060 | \n", "0.333 | \n", "0.500 | \n", "0.600 | \n", "0.607 | \n", "0.501 | \n", "
13 | \n", "0.000 | \n", "0.057 | \n", "0.333 | \n", "0.500 | \n", "0.600 | \n", "0.716 | \n", "0.875 | \n", "
14 | \n", "0.000 | \n", "0.054 | \n", "0.333 | \n", "0.500 | \n", "0.600 | \n", "0.610 | \n", "0.383 | \n", "
15 | \n", "0.000 | \n", "0.051 | \n", "0.333 | \n", "0.500 | \n", "0.600 | \n", "0.713 | \n", "0.827 | \n", "
16 | \n", "0.000 | \n", "0.048 | \n", "0.333 | \n", "0.500 | \n", "0.600 | \n", "0.613 | \n", "0.501 | \n", "
17 | \n", "0.000 | \n", "0.046 | \n", "0.333 | \n", "0.500 | \n", "0.600 | \n", "0.711 | \n", "0.875 | \n", "
18 | \n", "0.000 | \n", "0.044 | \n", "0.333 | \n", "0.500 | \n", "0.600 | \n", "0.616 | \n", "0.383 | \n", "
19 | \n", "0.000 | \n", "0.042 | \n", "0.333 | \n", "0.500 | \n", "0.600 | \n", "0.710 | \n", "0.827 | \n", "