种群竞争模型
应用
种群竞争模型是当两个种群为争夺同一食物来源和生存空间相互竞争时,常见的结局是,优胜劣汰。使用种群竞争模型可以描述两个种群相互竞争的过程,分析产生各种结局的条件。
条件
- 有
x
1
x_1
x1和
x
2
x_2
x2两个种群,它们独自生存时数量变化均服从Logistic规律:
d x i d t = r i x i ( 1 − x i N i ) , i = 1 , 2 \frac{dx_i}{dt}=r_ix_i(1-\frac{x_i}{N_i}),i=1,2 dtdxi=rixi(1−Nixi),i=1,2
其中 t t t是时间, r i r_i ri是这个物种的自然增长率, N i N_i Ni是这个物种的最大环境容量。 - 但当两个物种在一起生存时,每一个物种对另一个物种的发展都有阻滞作用,这时候他们的数量变化就服从以下规律了:
d x 1 d t = r 1 x 1 ( 1 − x 1 N 1 − S 1 x 2 N 2 ) \frac{dx_1}{dt}=r_1x_1(1-\frac{x_1}{N_1}-S_1\frac{x_2}{N_2}) dtdx1=r1x1(1−N1x1−S1N2x2)
d x 2 d t = r 2 x 2 ( 1 − x 2 N 2 − S 2 x 1 N 1 ) \frac{dx_2}{dt}=r_2x_2(1-\frac{x_2}{N_2}-S_2\frac{x_1}{N_1}) dtdx2=r2x2(1−N2x2−S2N1x1)
其中 S i S_i Si表示对于供养 x i x_i xi的资源来说,相对于 N j N_j Nj的单位数量的 x j x_j xj的消耗为相对于 N i N_i Ni的单位数量的 x i x_i xi消耗的 S i S_i Si倍。
python代码
# 种群竞争模型
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint # 用以求常微分
plt.rcParams['figure.dpi'] = 100 # 绘图的dpi
plt.rcParams['font.sans-serif'] = ['SimHei'] # 正常显示中文
plt.rcParams['axes.unicode_minus'] = False # 正常显示正负号
# 两个物种的参数
type_x1 = [500, 1.2, 15000, 0.0004] # [初始数量, 自然增长率, 环境容量, 资源消耗]
type_x2 = [2560, 1.3, 3000, 0.0001] # 上面资源消耗的意思是:对于可以供养x2的资源,单位数量的x1的消耗为单位数量x2消耗的倍数
# 阻滞作用
def propagate(init, time, x1, x2):
ix1, ix2 = init
rx1 = x1[1]*ix1*(1-ix1/x1[2])-x1[3]*ix1*ix2
rx2 = x2[1]*ix2*(1-ix2/x2[2])-x2[3]*ix1*ix2
rx = np.array([rx1, rx2])
return rx
# 画图
def ploter(time, numer):
plt.xlabel('时间')
plt.ylabel('物种量')
plt.plot(time, numer[:,0], "b-", label="物种$x_1$")
plt.plot(time, numer[:,1], "r-", label="物种$x_2$")
plt.legend()
plt.show()
# 运行
time = np.linspace(0, 200, 1000) # 时间为200个单位,均分为1000份
init = np.array([type_x1[0], type_x2[0]])
numer = odeint(propagate, y0=init, t=time, args=(type_x1, type_x2))
ploter(time, numer)
结果图如下: