渔业管理部门规定,每年只允许在产卵孵化期前的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 为捕捞强度系数]
论文展示
黄花鱼的最优捕捞策略
摘 要
本文旨在探讨在固定努力量捕捞方式下,如何实现黄花鱼的可持续捕捞,并达到最高的年收获量(捕捞总质量)。通过建立数学模型,我们分析了各年龄组鱼群数量的动态变化,以及捕捞活动对鱼群数量的影响。在满足可持续捕捞条件的前提下,我们优化了捕捞强度系数,以最大化年收获量。
- 问题分析
- 问题背景
在探讨黄花鱼的最优捕捞策略时,我们的主要目标是实现可持续捕捞,即在保证鱼群数量稳定的前提下,达到最高的年收获量(捕捞总质量)。为了实现这一目标,我们需要对鱼群的动态变化进行数学建模,并优化捕捞强度系数。
-
- 问题提出
问题一:可持续捕捞的定义,可持续捕捞意味着每年的捕捞活动不会导致鱼群数量的显著减少,即捕捞后的鱼群数量能够恢复到捕捞前的水平。在数学上,这表现为各年龄组鱼群条数在连续年份之间保持不变。
问题二:鱼群动态变化的建模,鱼群的动态变化包括自然死亡、年龄增长、繁殖和捕捞四个主要方面。我们需要根据这些方面建立数学模型:
问题三:自然死亡,每年各年龄组的鱼都会有一定比例的自然死亡,这可以通过自然死亡率 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()