Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Introducción
Resulta intuitivo pensar que las poblaciones de un animal depredador y su presa están
relacionadas de algún modo en el que si una aumenta, la otra lo hace también.
Utilizaremos como ejemplo en este artículo un ecosistema aislado y formado por leones y
cebras que viven en armonía, es decir, los leones comiéndose a las cebras. Imaginemos
que por cualquier circunstancia, por ejemplo, por disponer de mayor cantidad de alimento,
aumenta la población de cebras; los leones dispondrán de más alimento y su población
aumentará, pero ¿qué ocurrirá a partir de este momento? Si la población de leones llega a
ser demasiado grande para el número de cebras en nuestra sabana, podrían acabar con
todas, provocando su propia extinción por inanición. Pero incluso si el festín no es tan
grande como para comerse todas las cebras, pero sí para dejar una población muy
mermada, probablemente los leones tendrán que pasar hambre una buena temporada y
algunos de ellos morirán hasta que las cebras tengan tiempo suficiente para reproducirse y
volver a ser pasto de los leones. ¿Cuántas cebras morirán en el atracón? ¿Cuánto tiempo
pasarán los leones hambre? ¿Cuántos morirán?
E i
https://pybonacci.org/2015/01/05/ecuaciones-de-lotka-volterra-modelo-presa-depredador/ 1/15
9/12/21 16:15 Ecuaciones de Lotka-Volterra: modelo presa depredador – Pybonacci
Ecuaciones
El ecosistema está aislado: no hay migración, no hay otras especies presentes, no hay
plagas…
dx
= αx– βxy
dt
dy
= −γy + δyx
dt
Resolución
Resolveremos este sistema en Python usando la función odeint de scipy.integrate
(puedes ver cómo funciona en el artículo El salto de Felix Baumgartner en Python) y
representaremos los resultados con matplotlib . Para esto usaremos: Python 3.4, numpy
1.9.0, matplotlib 1.4.0, scipy 0.14.0.
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint
def df_dt(x, t, a, b, c, d):
"""Función del sistema en forma canónica"""
dx = a * x[0] - b * x[0] * x[1]
dy = - c * x[1] + d * x[0] * x[1]
return np.array([dx, dy])
# Parámetros
a = 0.1
b = 0.02
c = 0.3
d = 0.01
# Condiciones iniciales
x0 = 40 # Presas
y0 = 9 # Depredadores
conds_iniciales = np.array([x0, y0])
# Condiciones para integración
tf = 200
N = 800
t = np.linspace(0, tf, N)
solucion = odeint(df_dt, conds_iniciales, t, args=(a, b, c, d))
Ahora que ya tenemos la solución, sólo tenemos que pintarla para ver cómo han ido las
cosas en nuestra sabana virtual.
https://pybonacci.org/2015/01/05/ecuaciones-de-lotka-volterra-modelo-presa-depredador/ 3/15
9/12/21 16:15 Ecuaciones de Lotka-Volterra: modelo presa depredador – Pybonacci
Vemos que se trata de una solución periódica en la que, como decíamos al principio, un
aumento en la población de cebras va seguido del aumento del número de leones. Un
gran número de depredadores merma la población de presas y a los pobres leones les toca
pasar hambre una temporada. Otra forma interesante de visualizar estos datos es ver el
número de presas en función del número de depredadores, en lugar de a lo largo del
tiempo, es decir, podemos visualizar su mapa de fases. Podemos pintar también el campo
de direcciones de nuestras ecuaciones usando la función quiver . El tamaño de las flechas
se ha normalizado para que todas tengan la misma longitud y se ha usado un colormap
para representar el módulo.
Si nos fijamos en la línea azul, la coordenada $latex x$ en cada punto indica el número de
presas y la coordenada $latex y$ el número de depredadores. La evolución a lo largo del
tiempo que hemos representado antes, se obtiene al recorrer esta curva en sentido
antihorario. Podemos ver también como el campo de direcciones nos señala la tendencia
del sistema en cada situación. Por ejemplo, una flecha que apunta hacia arriba a la derecha
indica que con ese número de cebras y leones en nuestra sabana, la tendencia será que
aumenten ambos.
Llegados a este punto podemos preguntarnos qué habría ocurrido si el número inicial de
cebras y leones hubiese sido otro. Como ya sabemos integrar ecuaciones diferenciales,
bastaría con cambiar nuestra x0 e y0 y repetir el proceso (incluso podríamos hacer un
widget interactivo). Sin embargo, se puede demostrar que a lo largo de las líneas del mapa
de fases, como la que hemos pintado antes, se conserva la cantidad:
C = α ln y– βy + γ ln x − δx
Por tanto, pintando un contour de esta cantidad podemos obtener la solución para
distintos valores iniciales del problema
https://pybonacci.org/2015/01/05/ecuaciones-de-lotka-volterra-modelo-presa-depredador/ 5/15
9/12/21 16:15 Ecuaciones de Lotka-Volterra: modelo presa depredador – Pybonacci
distintos valores iniciales del problema.
fig, ax = plt.subplots(1,2)
ax[0].plot(solucion[:, 0], solucion[:, 1], lw=2, alpha=0.8)
ax[0].scatter(c/d, a/b)
levels = (0.5, 0.6, 0.7, 0.72, 0.73, 0.74, 0.75, 0.76, 0.77, 0.775, 0.78, 0.781)
ax[0].contour(xx, yy, constant, levels, colors='blue', alpha=0.3)
ax[1].plot(t, solucion[:, 0], label='presa')
ax[1].plot(t, solucion[:, 1], label='depredador')
Vemos que estas curvas se van haciendo cada vez más y más pequeñas, hasta que, en
nuestro caso, colapsarían en un punto en torno a (30, 5). Se trata de un punto de
equilibrio o punto crítico; si el sistema lo alcanzase, no evolucionaría y el número de
cebras y leones sería constante en el tiempo. El otro punto crítico de nuestro sistema es el
(0, 0) . Analizándolos matemáticamente se obtiene que:
El punto crítico situado en (γ/δ, α/β) es un centro (en este caso los autovalores de la
matriz del sistema linealizado son ambos imaginarios puros, por lo que a priori no se
https://pybonacci.org/2015/01/05/ecuaciones-de-lotka-volterra-modelo-presa-depredador/ 6/15
9/12/21 16:15 Ecuaciones de Lotka-Volterra: modelo presa depredador – Pybonacci
matriz del sistema linealizado son ambos imaginarios puros, por lo que a priori no se
conoce su estabilidad).
Mejorando el modelo
Como se puede observar, este modelo tiene algunas deficiencias propias de su simplicidad
y derivadas de las hipótesis bajo las que se ha formulado. Una modificación razonable es
cambiar el modelo de crecimiento de las presas en ausencia de depredadores, suponiendo
que en vez de aumentar de forma exponencial, lo hacen según una función logística. Esta
curva crece de forma similar a una exponencial al principio, moderándose después y
estabilizándose asintóticamente en un valor. Este modelo de crecimiento representa mejor
las limitaciones en el número de presas debidas al medio (falta de alimento, territorio…).
Llevando este modelo de crecimiento a las ecuaciones originales se tiene un nuevo sistema
en el que interviene un parámetro más:
dx dy
= (αx– rx )– βxy
2
= −γy + δyx
dt dt
En este caso se puede observar como el comportamiento deja de ser periódico. El punto
https://pybonacci.org/2015/01/05/ecuaciones-de-lotka-volterra-modelo-presa-depredador/ 7/15
9/12/21 16:15 Ecuaciones de Lotka-Volterra: modelo presa depredador – Pybonacci
Referencias
Si tienes curiosidad sobre como seguir perfeccionando este modelo o cómo incluir otras
especies, quizás quieras echar un vistazo a:
Presentación ETSIINF-UPM.
Si te interesa ver cómo realizar la integración con diferentes métodos, puedes visitar
Predator Prey Model – Bank Assignment of Numerical Mooc.
Actualización
En GitHub puedes encontrar el notebook con el que se ha hecho esta entrada. Si no tienes
instalado el Notebook de IPython, puedes pinchar aquí para verlo con nbviewer (aunque
no podrás jugar con los widgets interactivos).
ANTERIOR SIGUIENTE
¿Quieres empezar con Comprobando presencia de subconjuntos dentro de conjunto de
Python? forma eficiente
ALBERTO
el 2015-01-05 a las 12:20
Responder
KIKO
el 2015-01-05 a las 13:11
Muy interesante!!!
Responder
ÁLEX SÁEZ
el 2015-01-05 a las 14:30
Responder
ADRI
el 2015-01-07 a las 09:43
Buen trabajo
Aunque el modelo no estoy seguro de que entre un caso que sabemos como acaba: ¿qué
hace el modelo cuando sólo queda 1 miembro de la especie? Sabemos que biológicamente
no es fácil aumentar la población :-p
Un saludo
Adri
Responder
ÁLEX SÁEZ
el 2015-01-07 a las 17:16
jajaja tienes razón Adri, el modelo tiene sus hipótesis… La población aumenta
exponencialmente aunque sólo haya un individuo, es más, aunque sólo haya medio
individuo o 0.25 individuos, la cosa fluye: medias cebras que se reproducen por mitosis…
¡qué le vamos a hacer!
Responder
CACHEMEORG
el 2015-01-07 a las 19:56
Este problema es uno de los clásicos para iniciarse en el mundo de las EDOs (ODEs, en
inglés). Por ello, me parece muy buena selección y seguro que vendrá muy bien a aquellos
que estén aprendiendo Python. Me ha gustado además que hayas ampliado un poco las
ecuaciones destacando que, como cualquier otro modelo, todo tiene sus limitaciones. De
hecho, con ese segundo modelo, se ve muy claro en el mapa de fases el impacto de los
valores iniciales (coordenadas donde empieza la espiral).
entrada.
¡Saludos!
Fran
[1] http://www.nature.com/news/ipython-interactive-demo-7.21492?article=1.16261
Responder
ÁLEX SÁEZ
el 2015-01-07 a las 20:20
Lo hice en un Notebook, y estuve jugando con los widgets. Tenía pensado subirlo, pero
con el lío de estos días se ha quedado en el tintero. Digamos ¡Próximamente! Gracias por
el comentario. ¡Un saludo!
Responder
ÁLEX SÁEZ
el 2015-01-22 a las 19:53
Responder
ANÓNIMO
el 2015-06-04 a las 03:35
Es posible sustituir Microsoft Excel por python? y aprovechar lo mejor de los dos y trabajar
con ambos a la vez?
https://pybonacci.org/2015/01/05/ecuaciones-de-lotka-volterra-modelo-presa-depredador/ 11/15
9/12/21 16:15 Ecuaciones de Lotka-Volterra: modelo presa depredador – Pybonacci
Responder
DOMI QUEZADA
el 2015-11-03 a las 22:57
Buenos días, parto por agradecer tu aporte al subir toda esta información estoy
haciendo una exploración matemática, y tengo muchas ganas de usar estas ecuaciones.
hasta ahora he entendido su funcionamiento, me queda eso sí la duda de los valores “a =
0.1
b = 0.02
c = 0.3
estoy intentando aplicar la formula a un caso especifico de conejos y zorros, y ahora estoy
en la parte en que tengo que poner mis propios datos… pero no sé qué poner! si tuvieras
tiempo, agradecería mucho tu ayuda!
Responder
ALEXSAEZ12
el 2015-12-26 a las 13:39
Responder
ANAMVVBLOG
el 2016-03-09 a las 01:41
Si quiero añadir la segunda parte del código(contour) en mi programa python tengo que
dejar la primera parte del código? Me marca error
Responder
ÁLEX SÁEZ
https://pybonacci.org/2015/01/05/ecuaciones-de-lotka-volterra-modelo-presa-depredador/ 13/15
9/12/21 16:15 Ecuaciones de Lotka-Volterra: modelo presa depredador – Pybonacci
Hola, no sé muy bien a qué te refieres con la primera parte del código y la segunda.
Necesitas tener todas las variables que se pasen a contour definidas previamente y los
ejes y la figura creados ( fig, ax = plt.subplots(1,2) ) ¿Qué error está dando?
En cualquier caso puedes ver el código algo más desarrollado y con algún extra respecto
al post en esta dirección:
http://nbviewer.jupyter.org/github/AlexS12/pybonacci_contributions/blob/master/lotka-
volterra/Lotka-Volterra.ipynb
Saludos!
Responder
Comentario
https://pybonacci.org/2015/01/05/ecuaciones-de-lotka-volterra-modelo-presa-depredador/ 14/15
9/12/21 16:15 Ecuaciones de Lotka-Volterra: modelo presa depredador – Pybonacci
Guarda mi nombre, correo electrónico y web en este navegador para la próxima vez que
comente.
Captcha matemático
− three = two
PUBLICAR EL COMENTARIO
https://pybonacci.org/2015/01/05/ecuaciones-de-lotka-volterra-modelo-presa-depredador/ 15/15