全国大学生数学建模大赛——黄花鱼的最优捕捞策略

渔业管理部门规定,每年只允许在产卵孵化期前的8个 月进行捕捞作业。如果每年投入的捕捞能力(如渔船数、下网 次数等)固定不变,这时单位时间捕捞量将与各年龄组鱼群条 数成正比,比例系数不妨设为捕捞强度系数。通常使用 13mm  网眼的拉网,这种网只能捕捞3龄鱼和4龄鱼,其 两个捕捞系数之比为0.42:1,渔业上称这种方式为固定努力 量捕捞。

考虑对黄花鱼的最优捕捞策略:假设这种鱼分4个年龄 组,称为1龄鱼,2龄鱼,3龄鱼,4龄鱼。各年龄组每条

鱼的平均质量分别为5.07、11.55、17.86、22.99(g),各年 龄组的自然死亡率为0.8(1/年),这种鱼为季节性集中产卵繁 殖,平均每条4龄鱼的产卵量为1.109×10⁵(个),3龄鱼的 产卵量为这个数的一半,2龄鱼和1龄鱼不产卵,产卵和孵 化期为每年的最后4个月,卵孵化并成活为1龄鱼,成活率(1 龄鱼条数与产卵量n 之比)为:

其 中 ,n 为产卵总量。

(1)建立数学模型分析在采用固定努力量的捕捞方式的 前提下,如何实现可持续捕捞(即每年开始捕捞时渔场中各年 龄组鱼群条数不变),得到最高的年收获量(捕捞总质量)。

(2)略。

[提示:读题并做出如下假设]

[1]鱼在一年内的任何时间都会发生自然死亡(连续)

[2]捕捞是一个连续的过程,不是在某一时刻突然发生

[3]1、2龄鱼体形太小,不能被捕

[4]3、4龄鱼在一年中的后4个月的第一天集中产卵

[5]i龄鱼到来年分别长一岁成为i+1龄鱼,i=1,2,3,  其中上一年存活 下来的4龄鱼仍是4龄鱼

[在问题分析之前,设定T为年份,x(t)为t 时刻i 龄鱼的条数,r 为自然死 亡率,n 为年产卵数量,f为年捕捞量,k 为捕捞强度系数]

论文展示

黄花鱼的最优捕捞策略

摘  要

本文旨在探讨在固定努力量捕捞方式下,如何实现黄花鱼的可持续捕捞,并达到最高的年收获量(捕捞总质量)。通过建立数学模型,我们分析了各年龄组鱼群数量的动态变化,以及捕捞活动对鱼群数量的影响。在满足可持续捕捞条件的前提下,我们优化了捕捞强度系数,以最大化年收获量。

  • 问题分析
    1. 问题背景

在探讨黄花鱼的最优捕捞策略时,我们的主要目标是实现可持续捕捞,即在保证鱼群数量稳定的前提下,达到最高的年收获量(捕捞总质量)。为了实现这一目标,我们需要对鱼群的动态变化进行数学建模,并优化捕捞强度系数。

    1. 问题提出

问题一可持续捕捞的定义,可持续捕捞意味着每年的捕捞活动不会导致鱼群数量的显著减少,即捕捞后的鱼群数量能够恢复到捕捞前的水平。在数学上,这表现为各年龄组鱼群条数在连续年份之间保持不变。

问题二鱼群动态变化的建模,鱼群的动态变化包括自然死亡、年龄增长、繁殖和捕捞四个主要方面。我们需要根据这些方面建立数学模型:

问题三自然死亡,每年各年龄组的鱼都会有一定比例的自然死亡,这可以通过自然死亡率 r 来描述。年龄增长:每年,i 龄鱼会成长为 i+1 龄鱼(除了4龄鱼,它们会保持为4龄鱼。繁殖:3龄鱼和4龄鱼在每年的后4个月产卵,产卵量取决于它们的数量,并且新孵化的鱼成为1龄鱼。捕捞:每年前8个月进行捕捞,只捕捞3龄鱼和4龄鱼,捕捞量与各年龄组鱼群条数成正比,比例系数为捕捞强度系数 k。

问题四:捕捞强度系数的优化,捕捞强度系数 k 是我们需要优化的关键参数。通过调整 k,我们可以控制捕捞量,从而在保证可持续捕捞的前提下,最大化年收获量。

  • 模型假设与符号说明

2.1模型基本假设

(1)鱼在一年内的任何时间都会发生自然死亡(连续)

(2)捕捞是一个连续的过程,不是在某一时刻突然发生

(3)1、2龄鱼体形太小,不能被捕

(4)3、4龄鱼在一年中的后4个月的第一天集中产卵

(5)i龄鱼到来年分别长一岁成为i+1龄鱼,i=1,2,3,  其中上一年存活下来的4龄鱼仍是4龄鱼

2.2符号说明

1 符号说明

符号

含义

备注

T

年份

xi(t)

T时刻i龄鱼的条数

i=1,2,3,4

r

自然死亡率

给定为0.8/年

n

年产卵数量

f

年捕捞量

k

捕捞强度系数

k3和 k4

分别为3龄鱼和4龄鱼的捕捞系数

k3:k4=0.42:1

  • 问题一模型建立与求解

3.1求解思路

由于这是一个连续时间动态系统,我们可以使用数值方法来模拟系统的行为。

设定初始条件xi(t)(假设它们已知或基于历史数据)。使用数值积分(如Euler方法、Runge-Kutta方法等)求解动态方程,计算每年的捕捞量f。

调整k或α,β以最大化f同时保持xi(t)不变

3.2模型建立

繁殖与孵化:

1龄鱼的数量由上一年的产卵量和成活率决定:

自然死亡与年龄增长:

对于2龄、3龄和4龄鱼:

年捕捞量:

为了实现可持续捕捞,需要满足以下条件:

3.3得出结果

通过数值方法求解上述方程组,得到不同 k 下的最优捕捞量,并分析结果以确定最优捕捞强度系数:

图一:捕捞强度系数对总捕捞量的影响

 

 

 

 

定义初始鱼群数量:1龄鱼数量10000条、2龄鱼数量8000条、3龄鱼数量 6000条、4龄鱼数量4000条。

代入模型求解:

最佳捕捞强度系数

最大年捕捞量

1.65

1029137.2520771623千克

  • 模型评价与推广

在模型应用中,可以对不同地区和不同鱼种进行类似的建模,以实现可持续捕捞。未来可以结合实际数据进一步优化模型参数,提高预测精度。

代码展示

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import minimize

# 定义参数
r = 0.8  # 自然死亡率
m1, m2, m3, m4 = 51.07, 11.55, 17.86, 22.99  # 各年龄组鱼的平均质量(克)
f = 1000  # 捕捞总量(可调整)
k3, k4 = 0.42, 1.0  # 捕捞强度系数比例
egg_4 = 1.109e5  # 4龄鱼的产卵量
egg_3 = 0.5 * egg_4  # 3龄鱼的产卵量

# 定义初始鱼群数量
x1 = 10000  # 1龄鱼数量
x2 = 8000   # 2龄鱼数量
x3 = 6000   # 3龄鱼数量
x4 = 4000   # 4龄鱼数量

def survival_rate(eggs):
    """
    计算鱼卵的孵化率
    """
    return 1.22e11 / (1.22e11 + eggs)

def objective(k):
    """
    目标函数,计算总捕捞量
    """
    global x1, x2, x3, x4
    k3 = 0.42 * k  # 更新3龄鱼的捕捞强度系数
    k4 = k         # 更新4龄鱼的捕捞强度系数
    total_catch = 0
    
    for year in range(10):  # 模拟10年
        # 计算捕捞量
        catch3 = k3 * x3
        catch4 = k4 * x4
        total_catch += catch3 * m3 + catch4 * m4
        
        # 更新鱼群数量
        x3_next = x2 * survival_rate(egg_3 + egg_4) - catch3
        x4_next = x3 * survival_rate(egg_3 + egg_4) - catch4
        x2_next = x1 * survival_rate(egg_3 + egg_4)
        x1_next = x1 * np.exp(-r)
        
        x1, x2, x3, x4 = x1_next, x2_next, x3_next, x4_next
    
    return -total_catch  # 返回负的总捕捞量,因为优化器是最小化函数

# 生成不同捕捞强度系数下的捕捞量
k_values = np.linspace(0.1, 2.0, 20)  # 捕捞强度系数范围
catch_values = []

for k in k_values:
    x1, x2, x3, x4 = 10000, 8000, 6000, 4000  # 重置鱼群数量
    total_catch = -objective(k)  # 计算总捕捞量
    catch_values.append(total_catch)

# 绘制折线图
plt.figure(figsize=(10, 6))
plt.plot(k_values, catch_values, marker='o', linestyle='-', color='b')
plt.title('捕捞强度系数对总捕捞量的影响')
plt.xlabel('捕捞强度系数 (k)')
plt.ylabel('总捕捞量')
plt.grid(True)
plt.show()

# 优化捕捞强度系数
result = minimize(objective, x0=1, bounds=[(0, None)])
optimal_k = result.x[0]

print(f"最佳捕捞强度系数: {optimal_k:.2f}")

# 计算最大年捕捞量
x1, x2, x3, x4 = 10000, 8000, 6000, 4000  # 重置鱼群数量
max_catch = -objective(optimal_k)
print(f"最大年捕捞量: {max_catch}")

egg_3 = 0.5 * egg_4  # 3龄鱼的产卵量

# 定义初始鱼群数量
x1 = 10000  # 1龄鱼数量
x2 = 8000   # 2龄鱼数量
x3 = 6000   # 3龄鱼数量
x4 = 4000   # 4龄鱼数量

def survival_rate(eggs):
    """
    计算鱼卵的孵化率
    """
    return 1.22e11 / (1.22e11 + eggs)

def objective(k):
    """
    目标函数,计算总捕捞量
    """
    global x1, x2, x3, x4
    k3 = 0.42 * k  # 更新3龄鱼的捕捞强度系数
    k4 = k         # 更新4龄鱼的捕捞强度系数
    total_catch = 0
    
    for year in range(10):  # 模拟10年
        # 计算捕捞量
        catch3 = k3 * x3
        catch4 = k4 * x4
        total_catch += catch3 * m3 + catch4 * m4
        
        # 更新鱼群数量
        x3_next = x2 * survival_rate(egg_3 + egg_4) - catch3
        x4_next = x3 * survival_rate(egg_3 + egg_4) - catch4
        x2_next = x1 * survival_rate(egg_3 + egg_4)
        x1_next = x1 * np.exp(-r)
        
        x1, x2, x3, x4 = x1_next, x2_next, x3_next, x4_next
    
    return -total_catch  # 返回负的总捕捞量,因为优化器是最小化函数

# 初始化数据
years = np.arange(1, 11)
optimal_ks = []
max_catches = []
total_catches = []

for year in years:
    # 计算最佳捕捞强度系数
    result = minimize(objective, x0=1, bounds=[(0, None)])
    optimal_k = result.x[0]
    optimal_ks.append(optimal_k)
    
    # 计算最大年捕捞量
    x1, x2, x3, x4 = 10000, 8000, 6000, 4000  # 重置鱼群数量
    max_catch = -objective(optimal_k)
    max_catches.append(max_catch)
    
    # 计算总捕捞量
    x1, x2, x3, x4 = 10000, 8000, 6000, 4000  # 重置鱼群数量
    total_catch = -objective(optimal_k)
    total_catches.append(total_catch)

# 绘制折线图
plt.figure(figsize=(14, 6))

plt.subplot(1, 3, 1)
plt.plot(years, optimal_ks, marker='o', linestyle='-', color='b')
plt.title('未来10年的最佳捕捞强度系数')
plt.xlabel('年份')
plt.ylabel('最佳捕捞强度系数')
plt.grid(True)

plt.subplot(1, 3, 2)
plt.plot(years, max_catches, marker='o', linestyle='-', color='r')
plt.title('未来10年的最大年捕捞量')
plt.xlabel('年份')
plt.ylabel('最大年捕捞量')
plt.grid(True)

plt.tight_layout()
plt.show()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张謹礧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值