clc disp('Optimal fish Harvest example with use of EV option') c1=1.15; c2=0.15; recruitment = @(S,A) c1*S./(1+c2*S).*(1-A); harvest = @(S,A) c1*S./(1+c2*S).*A; ns=126; smax=1.25; na=50; s=linspace(0,smax,ns)'; a=linspace(0,1,na)'; X=rectgrid(s,a); [Ix,S]=getI(X,1); Splus=recruitment(X(:,1),X(:,2)); EV = @(V) pchip(s,V,Splus); g = @(X) recruitment(X(:,1),X(:,2)); clear options options.algorithm='f'; options.modpol=500; options.getAopt=1; clear model1 model1.name='Fish EV demo - uses pchip interpolation to compute E[V+|X]'; model1.X=X; model1.P=EV; model1.EV=true; model1.R=harvest(X(:,1),X(:,2)); model1.discount=0.99; model1.ns=ns; model1.Ix=Ix; tic results1=mdpsolve(model1,options); toc v1=results1.v; a1=results1.Xopt(:,2); model2=model1; model2.name='Fish EV demo - uses g2P to compute P matrix'; model2.P=g2P(g,s,X); model2.EV=false; tic results2=mdpsolve(model2,options); toc v2=results2.v; a2=results2.Xopt(:,2); fprintf('Maximum difference in value function: %1.4e\n',max(abs(v1-v2))) fprintf('Maximum difference in strategy: %1.4e\n',max(abs(a1-a2))) ss=linspace(0,1.5,16)'; figure(1) plot(ss,g([ss,zeros(size(ss,1),1)]),'-k.',ss,ss,'k') set(gca,'Xtick',ss,'YTick',ss) grid on xlabel('S') ylabel('S^*') figure(2) plot(s,[v1 v2]) xlabel('population size (S)') ylabel('value (V)') figure(3) plot(s,[a1 a2]) xlabel('population size (S)') ylabel('optimal harvest rate (A)')
时间: 2024-03-15 20:42:49 浏览: 126
clc.rar_clc_matlab 中值滤波_中值_中值滤波 S函数_中值滤波 matlab
这是一个 MATLAB 脚本,用于演示一个渔业资源管理的最优捕问题。具体来说,脚本中包括以下部分:
- `clc` 和 `disp`:清除命令窗口并输出一行文字。
- `c1=1.15; c2=0.15;`:定义两个常数。
- `recruitment` 和 `harvest`:定义两个匿名函数,分别表示鱼群增长函数和捕捞函数。这里的具体形式采用了经验公式,其中 `S` 表示鱼群数量,`A` 表示捕捞率。
- `ns=126; smax=1.25; na=50;`:定义三个参数,分别表示鱼群数量、鱼群最大值和捕捞率的数量。
- `s=linspace(0,smax,ns)'; a=linspace(0,1,na)'; X=rectgrid(s,a);`:生成一个二维网格,其中 $x$ 轴表示鱼群数量,$y$ 轴表示捕捞率。
- `getI`:一个自定义函数,用于获取网格中每个点的索引。
- `Splus=recruitment(X(:,1),X(:,2)); EV = @(V) pchip(s,V,Splus);`:计算每个状态的期望回报,其中 `Splus` 表示每个状态下的鱼群增长率,`EV` 是一个匿名函数,用于根据当前状态的鱼群数量计算期望回报。这里采用了 pchip 插值的方法。
- `g`:一个匿名函数,表示鱼群增长函数。
- `options`:一个结构体,包含一些求解 MDP 问题的选项。
- `model1`:一个结构体,用于描述 MDP 问题的模型。其中包括状态、动作、转移概率、回报等信息。
- `mdpsolve`:一个自定义函数,用于求解 MDP 问题。
- `results1`:一个结构体,包含求解结果,包括最优值函数和最优策略。
- 同理,`model2`、`results2`、`v2` 和 `a2` 是用于比较不同求解方法的变量。
- `fprintf`:用于输出一些比较结果。
- `ss`:一个行向量,表示用于绘图的 $x$ 坐标。
- `figure`:用于创建图形窗口。
- `plot`:用于绘制图形。
- `set`:用于设置图形属性。
- `xlabel` 和 `ylabel`:用于设置坐标轴标签。
整个脚本的作用是,通过求解一个 MDP 问题,得到在不同情况下的最优捕捞策略和期望回报。同时,通过绘制图形的方式,展示了鱼群数量和最优捕捞率之间的关系,以及不同求解方法的比较结果。
阅读全文