如何为我的模拟每年获得不同的捕食值?

时间:2018-04-11 19:40:08

标签: python-3.x

我正在尝试运行这种种子捕食和种群动态的模型,但我不熟悉编码,我只获得了一个在不同世代重复的捕食价值。如何获得不同年份的不同捕食价值? 此外,使用的规范化方法是否存在问题?

import numpy as np
import matplotlib.pyplot as plt

def is_odd(year):
    return ((year % 2) == 1)

def reproduction(p_iter, year, dead):
    if is_odd(year):
        predation = dead
        seedsProd = p_iter*s_oddd       
        seedsPred = K*predation*200*(seedsProd/np.sum(seedsProd))
        return (seedsProd - seedsPred) + np.array([0,0,p_iter[2]])
    else:
        predation = dead
        seedsProd = p_iter*s_even
        seedsPred = K*predation*200*(seedsProd/np.sum(seedsProd))
        return (seedsProd - seedsPred) +np.array([0,p_iter[1],0])
def normalize(p_iter):
    if is_odd(year):
        x = np.copy(p_iter)
        x[2] = 0
        x = (K-p_iter[2]) * x / sum(x)
        x[2] = p_iter[2]
        return x
    else:
        x = np.copy(p_iter)
        x[1] = 0
        x = (K-p_iter[1]) * x / sum(x)
        x[1] = p_iter[1]
        return x

此处定义了捕获:

def predation():
    return (np.array(np.round(np.random.uniform(0.4,0.6),2)))

#max_years
Y = 100

#carrying capacity
K = 1000

#initial populaton
p_1, p_2, p_3 = 998., 1., 1.

#seed released per plant
s_1, s_2, s_3 = 200, 260, 260

p_init = np.array([p_1, p_2, p_3],dtype=float)
s_oddd = np.array([s_1, s_2, 0.0])
s_even = np.array([s_1, 0.0, s_3])
n = len(p_init)
m = np.append(p_init,s_oddd)

p_iter = p_init
dead = 0
norm = 0

for year in range(1,Y+1):
    dead = predation()
    seeds = reproduction(p_iter, year, dead)
    p_iter = np.maximum(seeds,np.zeros(p_iter.shape))
    p_iter = normalize(p_iter)

    m = np.vstack((m, [*p_iter]+[*seeds] ))

0 个答案:

没有答案