2024美赛数学建模A题思路&源码——七鳃鳗性别比例和生态系统关系

赛题目的:分析一个物种根据资源可用性改变其性别比例的能力的利弊。开发一个模型,分析对生态系统中由此产生的相互作用。

问题一.七鳃鳗性别比例对生态系统的影响

问题分析

建立一个简化版的模型,来探讨以下问题:

  • 1.我们假设七鳃鳗种群的增长遵循Logistic生长模型,其中食物资源的可得性会影响其生长速率和承载力。
  • 2.性别比例由一个简单的逻辑函数控制,该函数以食物资源的可得性为输入。
  • 3.生态系统的其他部分,如七鳃鳗的捕食者和被七鳃鳗捕食的物种,也将以简化的形式纳入模型中。

问题解答

为了更详细地探讨这个问题,我们需要建立一个更为复杂的生态系统模型,其中包含七鳃鳗和它们的食物资源以及可能的捕食者。这里将使用一个简化的生态系统模型,它包含三个组分:七鳃鳗、它们的主要食物来源(假设为一种鱼类),和它们的捕食者(假设为一种较大的鱼类或其他水生动物)。

模型假设:

  • 七鳃鳗以鱼类为食,而这些鱼类的数量可以影响七鳃鳗的生长速度和性别比。
  • 七鳃鳗的捕食者也依赖七鳃鳗作为食物来源,其数量可以由七鳃鳗的数量决定。
  • 食物资源的变化会影响七鳃鳗性别比的变化,进而可能影响繁殖率和种群结构。

建模思路:

  • 设置模型参数,如七鳃鳗的性别比例变化、生长率、食物资源的再生速度、捕食者的捕食率和再生率。
  • 使用差分方程来模拟生态系统内各种群的变化。
  • 运行模拟并可视化结果,了解性别比的变化如何影响七鳃鳗种群和整个生态系统。

简单的exmple.py,只是提供思路:

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

# 设置美观的图表风格
sns.set()

# 参数定义
growth_rate_lamprey = 0.05  # 七鳃鳗的生长率
carrying_capacity_lamprey = 2000  # 七鳃鳗的承载力
initial_population_lamprey = 100  # 七鳃鳗的初始种群数量

growth_rate_prey = 0.08  # 食物资源的再生速度
carrying_capacity_prey = 10000  # 食物资源的承载力
initial_population_prey = 5000  # 食物资源的初始数量

growth_rate_predator = 0.02  # 捕食者的生长率
carrying_capacity_predator = 500  # 捕食者的承载力
initial_population_predator = 50  # 捕食者的初始种群数量

predation_rate = 0.0005  # 捕食率

# 在低食物可得性和高食物可得性条件下的雄性比例
male_proportion_low_food = 0.78
male_proportion_high_food = 0.56

# 性别比例函数
def gender_ratio(prey_population):
    food_availability = prey_population / carrying_capacity_prey
    return male_proportion_low_food - (male_proportion_low_food - male_proportion_high_food) * food_availability

# ...(剩余的代码保持不变)...


# 七鳃鳗种群增长函数
def lamprey_growth(lamprey_pop, prey_pop):
    food_avail = prey_pop / carrying_capacity_prey
    growth = growth_rate_lamprey * lamprey_pop * (1 - lamprey_pop / carrying_capacity_lamprey) * food_avail
    return lamprey_pop + growth

# 食物种群增长函数
def prey_growth(prey_pop, lamprey_pop):
    natural_growth = growth_rate_prey * prey_pop * (1 - prey_pop / carrying_capacity_prey)
    predation_loss = predation_rate * lamprey_pop * prey_pop
    return prey_pop + natural_growth - predation_loss

# 捕食者种群增长函数
def predator_growth(predator_pop, lamprey_pop):
    food_intake = predation_rate * lamprey_pop
    growth = growth_rate_predator * predator_pop * (1 - predator_pop / carrying_capacity_predator) * food_intake
    return predator_pop + growth

# 初始化种群
lamprey_population = initial_population_lamprey
prey_population = initial_population_prey
predator_population = initial_population_predator

# 模拟时间步长
time_steps = 500
data = []

# 模拟过程
for _ in range(time_steps):
    lamprey_population = lamprey_growth(lamprey_population, prey_population)
    prey_population = prey_growth(prey_population, lamprey_population)
    predator_population = predator_growth(predator_population, lamprey_population)
    gender_ratio_current = gender_ratio(prey_population)
    data.append((lamprey_population, prey_population, predator_population, gender_ratio_current))

# 数据转换为 NumPy 数组
data = np.array(data)

# 可视化结果
plt.figure(figsize=(20, 5))

# 七鳃鳗种群图
plt.subplot(1, 4, 1)
plt.plot(data[:, 0], label='Lamprey Population')
plt.xlabel('Time')
plt.ylabel('Population')
plt.title('Lamprey Population Over Time')
plt.legend()

# 食物资源种群图
plt.subplot(1, 4, 2)
plt.plot(data[:, 1], label='Prey Population', color='green')
plt.xlabel('Time')
plt.ylabel('Population')
plt.title('Prey Population Over Time')
plt.legend()

# 捕食者种群图
plt.subplot(1, 4, 3)
plt.plot(data[:, 2], label='Predator Population', color='red')
plt.xlabel('Time')
plt.ylabel('Population')
plt.title('Predator Population Over Time')
plt.legend()

# 性别比例图
plt.subplot(1, 4, 4)
plt.plot(data[:, 3], label='Male Proportion', color='orange')
plt.xlabel('Time')
plt.ylabel('Male Proportion')
plt.title('Gender Ratio Over Time')
plt.legend()

plt.tight_layout()
plt.savefig('ecosystem_simulation.png')  # 保存图像
plt.show()

这段代码创建了一个更完整的生态系统模型,模拟了七鳃鳗种群、它们的食物来源和捕食者的动态变化。我们还计算了性别比例如何随着食物资源的变化而变化
2024美赛数学建模A题思路&源码——七鳃鳗性别比例和生态系统关系_第1张图片

问题二.七鳃鳗种群的优势和劣势

问题解答

优势:

适应性繁殖:在食物丰富时,七鳃鳗可能倾向于产生更多的雌性,从而提高繁殖潜力,因为雌性产卵可以增加下一代的数量。
资源利用:在食物稀缺时,更多的雄性可能降低对食物的总体需求,因为雄性可能需要的能量较少,这有助于种群在资源有限的环境中生存。
劣势:

繁殖效率降低:如果性别比偏向雄性过多,可能导致交配机会减少,因为雌性数量不足。
种群增长慢:在食物稀缺情况下,雄性占比过高会影响种群的增长速度,因为出生率可能会降低。
为了建立模型,我们需要调整之前的模型以包括性别比对繁殖率的影响。这里我们假设食物资源不仅影响性别比,还通过性别比影响繁殖率和种群增长。我们还将增加一个新的变量来模拟繁殖成功率,这个变量将取决于性别比。

简单的exmple.py,只是提供思路:

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

# 设置美观的图表风格
sns.set()

# 参数定义
growth_rate_lamprey = 0.05  # 七鳃鳗的生长率
carrying_capacity_lamprey = 2000  # 七鳃鳗的承载力
initial_population_lamprey = 100  # 七鳃鳗的初始种群数量

growth_rate_prey = 0.08  # 食物资源的再生速度
carrying_capacity_prey = 10000  # 食物资源的承载力
initial_population_prey = 5000  # 食物资源的初始数量

growth_rate_predator = 0.02  # 捕食者的生长率
carrying_capacity_predator = 500  # 捕食者的承载力
initial_population_predator = 50  # 捕食者的初始种群数量

predation_rate = 0.0005  # 捕食率

male_proportion_low_food = 0.78  # 在低食物可得性条件下的雄性比例
male_proportion_high_food = 0.56  # 在高食物可得性条件下的雄性比例

# 性别比例函数
def gender_ratio(prey_population):
    food_availability = prey_population / carrying_capacity_prey
    return male_proportion_low_food - (male_proportion_low_food - male_proportion_high_food) * food_availability

# 繁殖成功率函数
def breeding_success_ratio(male_ratio):
    ideal_ratio = 0.5
    success_rate = 1 - abs(male_ratio - ideal_ratio)
    return success_rate

# 七鳃鳗种群增长函数
def lamprey_growth(lamprey_pop, prey_pop, gender_ratio_current):
    food_avail = prey_pop / carrying_capacity_prey
    breeding_success = breeding_success_ratio(gender_ratio_current)
    growth = growth_rate_lamprey * lamprey_pop * (1 - lamprey_pop / (carrying_capacity_lamprey * food_avail)) * breeding_success
    return lamprey_pop + growth

# 食物种群增长函数
def prey_growth(prey_pop, lamprey_pop):
    natural_growth = growth_rate_prey * prey_pop * (1 - prey_pop / carrying_capacity_prey)
    predation_loss = predation_rate * lamprey_pop * prey_pop
    return prey_pop + natural_growth - predation_loss

# 捕食者种群增长函数
def predator_growth(predator_pop, lamprey_pop):
    food_intake = predation_rate * lamprey_pop
    growth = growth_rate_predator * predator_pop * (1 - predator_pop / carrying_capacity_predator) * food_intake
    return predator_pop + growth

# 初始化种群
lamprey_population = initial_population_lamprey
prey_population = initial_population_prey
predator_population = initial_population_predator

# 模拟时间步长
time_steps = 500
data = []

# 模拟过程
for _ in range(time_steps):
    gender_ratio_current = gender_ratio(prey_population)
    lamprey_population = lamprey_growth(lamprey_population, prey_population, gender_ratio_current)
    prey_population = prey_growth(prey_population, lamprey_population)
    predator_population = predator_growth(predator_population, lamprey_population)
    data.append((lamprey_population, prey_population, predator_population, gender_ratio_current))

# 数据转换为 NumPy 数组
data = np.array(data)

# 可视化结果
plt.figure(figsize=(25, 5))

# 七鳃鳗种群图
plt.subplot(1, 5, 1)
plt.plot(data[:, 0], label='Lamprey Population')
plt.xlabel('Time')
plt.ylabel('Population')
plt.title('Lamprey Population Over Time')
plt.legend()

# 食物资源种群图
plt.subplot(1, 5, 2)
plt.plot(data[:, 1], label='Prey Population', color='green')
plt.xlabel('Time')
plt.ylabel('Population')
plt.title('Prey Population Over Time')
plt.legend()

# 捕食者种群图
plt.subplot(1, 5, 3)
plt.plot(data[:, 2], label='Predator Population', color='red')
plt.xlabel('Time')
plt.ylabel('Population')
plt.title('Predator Population Over Time')
plt.legend()

# 性别比例图
plt.subplot(1, 5, 4)
plt.plot(data[:, 3], label='Male Proportion', color='orange')
plt.xlabel('Time')
plt.ylabel('Male Proportion')
plt.title('Gender Ratio Over Time')
plt.legend()

# 繁殖成功率图
plt.subplot(1, 5, 5)
breeding_success_rate = np.array([breeding_success_ratio(ratio) for ratio in data[:, 3]])
plt.plot(breeding_success_rate, label='Breeding Success Rate', color='purple')
plt.xlabel('Time')
plt.ylabel('Breeding Success Rate')
plt.title('Breeding Success Rate Over Time')
plt.legend()

plt.tight_layout()
plt.savefig('ecosystem_with_breeding_simulation.png')  # 保存图像
plt.show()

增加了一个新的繁殖成功率函数,它考虑了性别比例对繁殖成功率的影响。通过这种方式,我们可以模拟在不同的食物资源条件下,性别比变化给七鳃鳗种群带来的优势和劣势。我们还增加了一个新的图表来显示繁殖成功率随时间的变化。

2024美赛数学建模A题思路&源码——七鳃鳗性别比例和生态系统关系_第2张图片

问题三.

问题分析

要讨论七鳃鳗性别比例的变化对生态系统稳定性的影响,我们可以利用之前的模型,并增加更多的数据分析和可视化。我们将观察七鳃鳗种群、食物种群和捕食者种群的动态变化,以及性别比例和繁殖成功率如何随时间和环境条件变化。

建模思路概述:

  • 模型框架:使用差分方程来模拟三个种群(七鳃鳗、食物资源、捕食者)的动态变化。
  • 性别比例因子:根据食物资源量来调整七鳃鳗的性别比例。
  • 繁殖成功率:将性别比例转化为繁殖成功率,影响七鳃鳗种群生长。
  • 生态系统稳定性:分析长期内种群数量的波动幅度和周期性,以及种群的持久性(是否有种群灭绝的情况发生)。
  • 参数敏感性分析:探究不同的参数对模型结果的影响,如改变初始种群大小、生长率等。

问题解答

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

# 设置图表风格
sns.set(style="whitegrid")

# 参数定义
params = {
    'growth_rate_lamprey': 0.05,
    'carrying_capacity_lamprey': 2000,
    'initial_population_lamprey': 100,
    'growth_rate_prey': 0.08,
    'carrying_capacity_prey': 10000,
    'initial_population_prey': 5000,
    'growth_rate_predator': 0.02,
    'carrying_capacity_predator': 500,
    'initial_population_predator': 50,
    'predation_rate': 0.0005,
    'male_proportion_low_food': 0.78,
    'male_proportion_high_food': 0.56
}

# 定义性别比例函数
def gender_ratio(prey_population):
    food_availability = prey_population / params['carrying_capacity_prey']
    male_ratio = params['male_proportion_low_food'] - (params['male_proportion_low_food'] - params['male_proportion_high_food']) * food_availability
    return male_ratio

# 定义繁殖成功率函数
def breeding_success_ratio(male_ratio):
    ideal_ratio = 0.5
    success_rate = 1 - abs(male_ratio - ideal_ratio)
    return success_rate

# 定义七鳃鳗种群增长函数
def lamprey_growth(lamprey_pop, prey_pop, gender_ratio_current):
    food_avail = prey_pop / params['carrying_capacity_prey']
    breeding_success = breeding_success_ratio(gender_ratio_current)
    growth = params['growth_rate_lamprey'] * lamprey_pop * (1 - lamprey_pop / (params['carrying_capacity_lamprey'] * food_avail)) * breeding_success
    return lamprey_pop + growth

# 定义食物种群增长函数
def prey_growth(prey_pop, lamprey_pop):
    natural_growth = params['growth_rate_prey'] * prey_pop * (1 - prey_pop / params['carrying_capacity_prey'])
    predation_loss = params['predation_rate'] * lamprey_pop * prey_pop
    return prey_pop + natural_growth - predation_loss

# 定义捕食者种群增长函数
def predator_growth(predator_pop, lamprey_pop):
    food_intake = params['predation_rate'] * lamprey_pop
    growth = params['growth_rate_predator'] * predator_pop * (1 - predator_pop / params['carrying_capacity_predator']) * food_intake
    return predator_pop + growth

# 模拟时间步长和初始化数据结构
time_steps = 1000
data = np.zeros((time_steps, 5))

# 初始化种群
lamprey_population = params['initial_population_lamprey']
prey_population = params['initial_population_prey']
predator_population = params['initial_population_predator']

# 运行模拟
for t in range(time_steps):
    gender_ratio_current = gender_ratio(prey_population)
    lamprey_population = lamprey_growth(lamprey_population, prey_population, gender_ratio_current)
    prey_population = prey_growth(prey_population, lamprey_population)
    predator_population = predator_growth(predator_population, lamprey_population)
    breeding_success = breeding_success_ratio(gender_ratio_current)
    data[t] = [lamprey_population, prey_population, predator_population, gender_ratio_current, breeding_success]

# 可视化结果
fig, axes = plt.subplots(5, 1, figsize=(10, 15))

titles = ['Lamprey Population', 'Prey Population', 'Predator Population', 'Male Proportion', 'Breeding Success Rate']
colors = ['blue', 'green', 'red', 'orange', 'purple']

for i, ax in enumerate(axes):
    ax.plot(data[:, i], label=titles[i], color=colors[i])
    ax.set_title(titles[i])
    ax.set_xlabel('Time')
    ax.set_ylabel(titles[i])
    ax.legend(loc='best')

plt.tight_layout()
plt.savefig('ecosystem_stability_analysis.png')
plt.show()

可以通过调整params字典中的参数来进行参数敏感性分析,以了解不同参数对生态系统稳定性的影响。此外,为了更深入的稳定性分析,你可以添加额外的指标,如种群数量的标准差、波动幅度、周期性等。
2024美赛数学建模A题思路&源码——七鳃鳗性别比例和生态系统关系_第3张图片

上面展示了七鳃鳗、食物资源和捕食者随时间的种群变化,以及性别比例和繁殖成功率的变化,并将这些图表保存为一个名为ecosystem_stability_analysis.png的文件。

这个模型并不包含所有可能影响生态系统稳定性的因素。为了更全面的分析,可能需要考虑其他生态和环境因素,如种群迁移、气候变化、疾病等。此外,这个模型的结果取决于所设定的参数和初始条件,因此在解释模型输出时应保持谨慎。

问题四.

问题分析

要讨论七鳃鳗种群性别比例变化对其他物种(如寄生虫)的优势,我们需要考虑寄生虫如何与宿主(七鳃鳗)相互作用,并可能受到七鳃鳗性别比例的间接影响。以下是解决这一问题的建模思路:

  • 模型扩展:在现有的模型中添加一个寄生虫种群,其生长率可能与七鳃鳗的种群大小成比例。
  • 宿主-寄生虫相互作用:寄生虫种群的增长可能受到宿主种群大小的影响,宿主的性别比例可能影响宿主的抵抗力或易感性。
  • 性别比例与寄生虫关系:设定一个假设,如雄性可能由于竞争压力而更容易受到寄生虫感染,或者雌性在季节性繁殖期间更易感染。
  • 稳定性与竞争:分析寄生虫种群如何影响七鳃鳗种群的稳定性,以及如何影响整个生态系统的稳定性。
  • 参数敏感性:探索不同参数配置下模型的行为,以了解性别比例变化对寄生虫种群的具体影响。

问题解答

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import seaborn as sns

# 设置图表风格
sns.set(style="whitegrid")

# 参数定义
params = {
    'growth_rate_lamprey': 0.05,
    'carrying_capacity_lamprey': 2000,
    'initial_population_lamprey': 100,
    'growth_rate_prey': 0.08,
    'carrying_capacity_prey': 10000,
    'initial_population_prey': 5000,
    'growth_rate_predator': 0.02,
    'carrying_capacity_predator': 500,
    'initial_population_predator': 50,
    'predation_rate': 0.0005,
    'male_proportion_low_food': 0.78,
    'male_proportion_high_food': 0.56,
    'initial_parasite_population': 50,
    'parasite_growth_rate': 0.1,
    'time_steps': 200
}

# 定义性别比例函数
def gender_ratio(prey_population):
    food_availability = prey_population / params['carrying_capacity_prey']
    male_ratio = params['male_proportion_low_food'] - (
        params['male_proportion_low_food'] - params['male_proportion_high_food']
    ) * food_availability
    return male_ratio

# 定义繁殖成功率函数
def breeding_success_ratio(male_ratio):
    ideal_ratio = 0.5
    success_rate = 1 - abs(male_ratio - ideal_ratio)
    return success_rate

# 定义七鳃鳗种群增长函数
def lamprey_growth(lamprey_population, prey_population, gender_ratio_current):
    food_avail = prey_population / params['carrying_capacity_prey']
    breeding_success = breeding_success_ratio(gender_ratio_current)
    growth = params['growth_rate_lamprey'] * lamprey_population * (
        1 - lamprey_population / (params['carrying_capacity_lamprey'] * food_avail * breeding_success)
    )
    return lamprey_population + growth

# 定义食物种群增长函数
def prey_growth(prey_population, lamprey_population):
    natural_growth = params['growth_rate_prey'] * prey_population * (
        1 - prey_population / params['carrying_capacity_prey']
    )
    predation_loss = params['predation_rate'] * lamprey_population * prey_population
    return prey_population + natural_growth - predation_loss

# 定义捕食者种群增长函数
def predator_growth(predator_population, lamprey_population):
    food_intake = params['predation_rate'] * lamprey_population
    growth = params['growth_rate_predator'] * predator_population * (
        1 - predator_population / params['carrying_capacity_predator']
    ) * food_intake
    return predator_population + growth

# 定义寄生虫种群增长函数
def parasite_growth(parasite_population, lamprey_population, male_ratio):
    infection_chance = 1.0 + 0.5 * (male_ratio - 0.5)  # 雄性比例越高,寄生虫增长越快
    growth = params['parasite_growth_rate'] * parasite_population * (
        1 - parasite_population / (lamprey_population * infection_chance)
    )
    return parasite_population + growth

# 初始化种群和数据存储
lamprey_population = params['initial_population_lamprey']
prey_population = params['initial_population_prey']
predator_population = params['initial_population_predator']
parasite_population = params['initial_parasite_population']
data = np.empty((params['time_steps'], 6))

# 运行模拟
for t in range(params['time_steps']):
    gender_ratio_current = gender_ratio(prey_population)
    breeding_success = breeding_success_ratio(gender_ratio_current)
    lamprey_population = lamprey_growth(lamprey_population, prey_population, gender_ratio_current)
    prey_population = prey_growth(prey_population, lamprey_population)
    predator_population = predator_growth(predator_population, lamprey_population)
    parasite_population = parasite_growth(parasite_population, lamprey_population, gender_ratio_current)
    data[t, :] = lamprey_population, prey_population, predator_population, parasite_population, gender_ratio_current, breeding_success

# 可视化结果
fig = plt.figure(figsize=(16, 10))

# 3D散点图:七鳃鳗种群、性别比例、繁殖成功率与寄生虫种群关系
ax = fig.add_subplot(121, projection='3d')
x = data[:, 0]  # Lamprey Population
y = data[:, 4]  # Male Proportion
z = data[:, 5]  # Breeding Success Rate
colors = data[:, 3]  # Parasite Population
scatter = ax.scatter(x, y, z, c=colors, cmap='viridis')
ax.set_title('Lamprey Population Dynamics with Parasite Influence')
ax.set_xlabel('Lamprey Population')
ax.set_ylabel('Male Proportion')
ax.set_zlabel('Breeding Success Rate')
cbar = fig.colorbar(scatter, shrink=0.5, aspect=5)
cbar.set_label('Parasite Population')

# 时间序列图:观察所有种群随时间的变化
ax = fig.add_subplot(122)
ax.plot(data[:, 0], label='Lamprey')
ax.plot(data[:, 1], label='Prey')
ax.plot(data[:, 2], label='Predator')
ax.plot(data[:, 3], label='Parasite')
ax.set_title('Ecosystem Over Time')
ax.set_xlabel('Time')
ax.set_ylabel('Population Size')
ax.legend()

# 保存和显示图像
plt.tight_layout()
plt.savefig('ecosystem_with_parasites.png')
plt.show()

2024美赛数学建模A题思路&源码——七鳃鳗性别比例和生态系统关系_第4张图片
在上述模型中,我们假设了雄性七鳃鳗更易于感染寄生虫。寄生虫种群的增长函数parasite_growth受雄性比例影响,表现为雄性比例越高,寄生虫增长越快。这个简单的模型可以进一步扩展,考虑更多的生态和行为因素,以及寄生虫感染如何影响宿主的生存率和繁殖能力。

赛题翻译:

你可能感兴趣的:(数学建模,美赛,美国大学生数学建模,python)