最优捕鱼策略问题

为了保护人类赖以生存的自然环境,可再生资源(如渔业、林业资源)的开发必须适度。一种合理、简化的策略是,在实现可持续收获的前提下,追求最大产量或最佳效益。

考虑对鳀鱼的最优捕捞策略:假设这种鱼分4个年龄组,称为1龄鱼,2龄鱼,3龄鱼,4龄鱼。各年龄组每条鱼的平均质量分别为5.07、11.55、17.86、22.99(g),各年龄组的自然死亡率为0.8(1/年),这种鱼为季节性集中产卵繁殖,平均每条4龄鱼的产卵量为1.109×1011(个),3龄鱼的产卵量为这个数的一半,2龄鱼和1龄鱼不产卵,产卵和孵化期为每年的最后4个月,卵孵化并成活为1龄鱼,成活率(1龄鱼条数与产卵量n之比)为1.22×1011/(1.22×1011+n)。

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

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

②某渔业公司承包这种鱼的捕捞业务5年,合同要求5年后鱼群的生产能力不能受到太大破坏。已知承包时各年龄组鱼群的数量分别为:122,29.7,10.1,3.29(×109条),如果仍用固定努力量的捕捞方式,该公司应采取怎样的策略才能使总收获量最高。

(1)问题的分析与模型的建立

问题假设

①鱼群总量的增加虽然是离散的,但对于大规模的鱼群而言,可设鱼群总量的变化随时间是连续的。

②据题目给出的条件,可设鱼群每年在8月底瞬间产卵完毕,卵在12月底全部孵化完毕。

③i龄鱼到第二年分别长一岁成为i+1龄鱼,i=1,2,3。

④4龄鱼在年末留存的数量占全部数量的比例很小,可假设全部死亡。

⑤持续捕获使各年龄组的鱼群数量呈周期变化,周期为1年,可以只考虑鱼群数量在1年内的情况。

问题分析

①符号说明。

xi(t)——在t时刻i龄鱼条数,i=1,2,3,4;

k——4龄鱼捕捞强度系数;

n——每年产卵量;

ai——每年初i龄鱼的数量,i=1,2,3,4。

②对死亡率的理解。题中给出鱼的自然死亡率为0.8(1/年),我们理解为平均死亡率,这是单位时间鱼群死亡数量与现有鱼群数量的比例系数,由假设可知,它是一个与环境等其他因素无关的常数。鱼群的数量是连续变化的,且1龄鱼、2龄鱼在全年及3龄鱼、4龄鱼在后4个月的数量只与死亡率有关,各龄鱼的数量满足

,t∈[0,1](i=1,2)

,t∈[2/3,1](i=3,4)

③捕捞强度系数的理解。单位时间4龄鱼捕捞量与4龄鱼群总数成正比,比例系数即为捕捞强度k,它是一定的,且只在捕捞期内(即每年的前8个月)捕捞3龄鱼,4龄鱼。所以,一方面捕捞强度系数决定了3龄鱼、4龄鱼在捕捞期内的数量,其变化规律为

,t∈[0,2/3]

,t∈[0,2/3]

另一方面也决定了t时刻捕捞3龄鱼、4龄鱼,其数量分别为0.42kx3(t)和kx4(t)。

④成活率的理解。由于只有3龄鱼、4龄鱼在每年8月底一次产卵,因此可将每年的产卵量n表示为

 

题目中已经说明成活率为,所以每年年初的1龄鱼的数量为

 

(2)Matlab模拟程序与结果

模型如下:

 

s.t

,t∈[0,1]

,t∈[0,1]

,t∈[0,2/3]

,t∈[2/3,1]

,t∈[0,2/3]

,t∈[2/3,1]

计算机程序模拟实验程序:先建立两个M-file。

%[buyu.m]最优捕鱼策略问题

function y=buyu(x)

global a10 a20 a30 a40 total k;

syms k a10;

x1=dsolve('Dx1=-0.8*x1','x1(0)=a10');

t=1;a20=subs(x1);

x2=dsolve('Dx2=-0.8*x2','x2(0)=a20');

t=1;a30=subs(x2);

x31=dsolve('Dx31=-(0.8+0.42*k)*x31','x31(0)=a30');

t=2/3;a31=subs(x31);

x32=dsolve('Dx32=-0.8*x32','x32(2/3)=a31');

t=1;a40=subs(x32);

x41=dsolve('Dx41=-(0.8+k)*x41','x41(0)=a40');

t=2/3;a41=subs(x41);

x42=dsolve('Dx42=-0.8*x42','x42(2/3)=a41');

nn=1.109*10^5*(0.5*a31+a41);

eq1=a10-nn*1.22*10^11/(1.22*10^11+nn);

S=solve(eq1,a10);a10=S(2);

syms t;

t3=subs(subs(int(0.42*k*x31,t,0,2/3)));

t4=subs(subs(int(k*a41,t,0,2/3)));

total=17.86*t3+22.99*t4;

k=x;

y=subs(-total);

 

%[buyu1.m]最优捕鱼策略问题

global a10 a20 a30 a40 total;

[k,mtotal]=fminbnd('buyu',16,18);

ezplot(total,0,25)

xlabel('捕捞强度系数')

ylabel('总收获量(g)')

title('捕捞强度——总收获量曲线图')

format long;

k

total=-mtotal

a10=eval(a10)

a20=eval(a20)

a30=eval(a30)

a40=eval(a40)

format short

clear

 

在Matlab中输入命令:buyu1,回车即得:

k = 17.86984648968516, total = 3.869962667986214e+011,

a10 = 1.192332637390619e+011, a20 = 5.357495888418817e+010

a30 = 2.407278077805501e+010, a40 = 7.262288087797806e+007

同时,还得到图形——图1。

当k=17.86984648968516时,最高年收获量为totalT=3.869962667986214e+011(g),此时每年年初四种龄鱼的数量分别为:

1.192332637390619e+011

5.357495888418817e+010

2.407278077805501e+010

7.262288087797806e+007

关于第二个问题的求解,在此略去。

 

参考文献

[1] 李志林,欧宜贵,数学建模及其典型案例分析,北京:化学工业出版社,2006.12

 

参考页码及索取号

[1] Page22; O141.4/L.Z.L

 

重点注意:用Matlab编程解决数学问题。

转载于:https://www.cnblogs.com/loving-wenqure/p/3868239.html

  • 8
    点赞
  • 76
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个简单的最优捕鱼策略数学建模代码示例,使用Python语言和PuLP库来求解线性规划模型: ```python from pulp import * # 定义捕鱼场景参数 fish_types = ['A', 'B', 'C'] # 鱼的种类 fish_growth_rate = {'A': 0.5, 'B': 0.3, 'C': 0.2} # 鱼的生长速度 fish_reproduction_rate = {'A': 0.2, 'B': 0.15, 'C': 0.1} # 鱼的繁殖率 max_fish_population = {'A': 1000, 'B': 1500, 'C': 2000} # 鱼的最大种群数量 # 定义渔民参数 fishing_boats = ['Boat1', 'Boat2'] # 渔船编号 fishing_tool_efficiency = {'Boat1': {'A': 0.3, 'B': 0.4, 'C': 0.2}, 'Boat2': {'A': 0.2, 'B': 0.3, 'C': 0.5}} # 渔具效率 fishing_cost = {'Boat1': 200, 'Boat2': 250} # 捕鱼成本 # 定义模型 model = LpProblem(name='FishingOptimization', sense=LpMaximize) # 定义决策变量 x = LpVariable.dicts(name='FishPopulation', indexs=fish_types, lowBound=0, cat='Continuous') y = LpVariable.dicts(name='FishingAmount', indexs=fishing_boats, lowBound=0, cat='Continuous') # 定义目标函数 model += lpSum([fish_growth_rate[i] * x[i] - fishing_cost[j] * y[j] for i in fish_types for j in fishing_boats]) # 定义约束条件 for i in fish_types: model += x[i] <= max_fish_population[i] model += x[i] == (1 - fish_reproduction_rate[i]) * x[i] + lpSum([fishing_tool_efficiency[j][i] * y[j] for j in fishing_boats]) # 求解模型 model.solve() # 输出结果 for i in fish_types: print(f"Fish Type {i}: Population {x[i].value()}") for j in fishing_boats: print(f"Fishing Boat {j}: Fishing Amount {y[j].value()}") print(f"Total Fishing Profit: {model.objective.value()}") ``` 该示例代码中,我们使用线性规划模型来描述捕鱼场景和捕鱼策略,定义了捕鱼场景参数和渔民参数,以及决策变量、目标函数和约束条件。最后使用PuLP库的solve()方法来求解模型,并输出结果。 请注意,这只是一个简单的示例,实际应用中,我们需要根据具体场景来定义更多的参数、变量和约束条件,以及使用更复杂的优化算法来求解模型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值