-
Notifications
You must be signed in to change notification settings - Fork 3
/
fleet-management.Rmd
318 lines (207 loc) · 11.2 KB
/
fleet-management.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
---
title: "Manage Catch and Effort of Fleets"
output: rmarkdown::html_vignette
vignette: >
%\VignetteIndexEntry{fleet-management}
%\VignetteEngine{knitr::rmarkdown}
%\VignetteEncoding{UTF-8}
---
```{r, include = FALSE}
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>",
message = FALSE
)
```
`marlin` allows for a wide range of options to govern both the management and internal dynamics of fishing fleets.
Things you can adjust include
- The `fleet_model` option, which at the moment supports `constant effort`, in which total fishing effort remains constant, and `open access` where total effort increases or decreases in response to profits.
- Closed fishing seasons per critter, for example enforcing a closed season for species X but not species Y
- Catch quotas per species
- Effort caps per fleet
- Size limits and selectivity forms per metier and critter
- no-take Marine Protected Areas
You can mix and match most of these options (e.g. an open-access fleet subjected to a total quota for some species but not for others).
First, let's set up the system and the critters we will deal with, in this case a simple example of one bigeye tuna population.
```{r setup}
library(marlin)
library(tidyverse)
theme_set(theme_marlin(base_size = 14) + theme(legend.position = "top"))
resolution <- 10 # resolution is in squared patches, so 20 implies a 20X20 system, i.e. 400 patches
years <- 50
seasons <- 4
time_step <- 1 / seasons
steps <- years * seasons
fauna <-
list(
"bigeye" = create_critter(
scientific_name = "Thunnus obesus",
adult_diffusion = 10,
density_dependence = "post_dispersal",
seasons = seasons,
fished_depletion = 0.8,
resolution = resolution,
steepness = 0.6,
ssb0 = 1000
)
)
fauna$bigeye$m_at_age
```
## Open Access
Let's set up two fleets, one open access, one constant effort. open access dynamics are based around the profitability of the fishery, and so require a few more parameters, though reasonable defaults are provided.
The open access fleet model is
$$E_{t+1,f} = E_{t,f} \times e^{\theta log(R_{t,f} / C_{t,f})} $$
where *E* is total effort in time *t* for fleet *f*. $\theta$ controls the responsiveness of effort to the ratio of revenues *R* to costs *C* in log space. A value of 0.1 means that a 1 unit increase in the revenue to cost ratio results in a roughly 10% increase in effort.
Revenue is defined as
$$R_{t,f} = \sum_{s=1}^Sp_{f,s}Catch_{f,s}$$
where *p* is the price and *Catch* is the catch for species *s* caught by fleet *f*
Costs are defined as
$$C_{t,f} = \sum_{p=1}^P \gamma_f (E_{t,p,f}^{\beta_f} + \eta_{f,p} E_{t,p})$$
where $$\gamma_f$$ is the base cost per unit effort for fleet *f*, $\beta$ allows for thec cost of effort to scale non-linearly, and $\eta$ is the cost of fishing in each patch *p*, allowing for the model to account for travel costs for different patches.
Many of these parameters are intuitive and easy to set (e.g. price), but others are not. In particular, the cost per unit effort parameter $\gamma$ can be difficult to adjust as it depends on the units of effort and biomass to work correctly.
As such, the model works bets when specifying a `cr_ratio` rather than a $\gamma$. The `cr_ratio` specifies the ratio of costs to revenue at equilibrium conditions. So, a value of 1 means that profits are zero at equilibrium, >1 that profits are negative, < 1 that profits are positive.
The function `tune_fleets` then takes these parameters and finds the cost parameters that results in the desired equilibrium `cr_ratio`.
```{r}
fleets <- list(
"longline" = create_fleet(
list("bigeye" = Metier$new(
critter = fauna$bigeye,
price = 10,
sel_form = "logistic",
sel_start = 1,
sel_delta = .01,
catchability = 0,
p_explt = 2
)
),
base_effort = resolution ^ 2,
resolution = resolution,
responsiveness = .5,
cr_ratio = 1,
cost_per_distance = 1,
fleet_model = "open access")
,
"handline" = create_fleet(
list("bigeye" = Metier$new(
critter = fauna$bigeye,
price = 10,
sel_form = "logistic",
sel_start = 1,
sel_delta = .01,
catchability = 0,
p_explt = 1
)
),
base_effort = resolution ^ 2,
resolution = resolution,
fleet_model = "constant effort",
cost_per_unit_effort = 2
))
fleets <- tune_fleets(fauna, fleets, tune_type = "depletion")
```
We can now run our simulation and examine the resulting fleet dynamics
```{r}
sim <- simmar(fauna = fauna,
fleets = fleets,
years = years)
proc_sim <- process_marlin(sim)
plot_marlin(proc_sim)
proc_sim$fleets %>%
group_by(step, fleet) %>%
summarise(effort = sum(effort)) %>%
ggplot(aes(step * time_step, effort, color = fleet)) +
geom_line() +
scale_x_continuous(name = "Year")
```
## Open Access and MPAs
To see the effect of the fleet model choices, let's examine the trajectory of each fleet after the addition of an MPA. Under the default constant effort with reallocation dynamics of the model, when an MPA is put in place, the total effort in the fishery remains the same but is reallocated to from inside the MPA to the remaining fishable patches. Under the open access model, effort reacts to the MPA in accordance to the MPAs impacts on fishing profits.
As a result, when the MPA is put in place effort decreases rapidly, until profits increase some due to spillover from the MPA, at which time effort increases until a new open access equilibrium of zero profits with the MPAs is achieved.
```{r}
set.seed(42)
#specify some MPA locations
mpa_locations <- expand_grid(x = 1:resolution, y = 1:resolution) %>%
mutate(mpa = x > 4 & y < 6)
with_mpa <- simmar(fauna = fauna,
fleets = fleets,
years = years,
manager = list(mpas = list(locations = mpa_locations,
mpa_year = floor(years * .5))))
proc_mpa_sim <- process_marlin(with_mpa)
proc_mpa_sim$fleets %>%
group_by(step, fleet) %>%
summarise(effort = sum(effort)) %>%
ggplot(aes(step * time_step, effort, color = fleet)) +
geom_line() +
scale_x_continuous(name = "year")
```
## Quotas
We can also layer quotas onto the fleet model. Here, we will impose a total quota of 100 tons of bigeye caught across all fleets. Notice that quotas impose a *cap*, not a requirement, on catch. So, in the early days of the fishery when catches would have been high, the quota is in effect. However, in the later days of the fishery, the fleets have no incentive to catch up to the quota, and so catch less than the allowable amount.
```{r}
sim_quota <- simmar(fauna = fauna,
fleets = fleets,
years = years,
manager = list(quotas = list(bigeye = 10)))
proc_sim_quota <- process_marlin(sim_quota)
plot_marlin(proc_sim_quota, plot_var = "c", max_scale = FALSE)
proc_sim_quota$fleets %>%
group_by(step, fleet) %>%
summarise(catch = sum(catch)) %>%
ggplot(aes(step * time_step, catch, color = fleet)) +
geom_line()+
scale_x_continuous(name = "Year")
proc_sim_quota$fleets %>%
group_by(step, fleet) %>%
summarise(effort = sum(effort)) %>%
ggplot(aes(step * time_step, effort, color = fleet)) +
geom_line() +
scale_x_continuous(name = "Year")
```
## Effort Caps
Another management option is to set a maximum amount of effort per fleet. This could reflect regulation, or reality. For example, if the user wishes to think of effort in terms of "days fished per year" by a fixed number of vessels, clearly there are limits.
Users set this by ` manager = list(effort_cap = list(FLEET_NAME = EFFORT_CAP))`, where `FLEET_NAME` is filled in with the name of the fleet to apply a given total `EFFORT_CAP` to.
Note that effort caps only really apply when `fleet_model == "open access`; when `fleet_model == "constant effort"` effort it already capped. Under open access though, the effort cap ensures that while open access dynamics might **reduce** the total amount of effort, effort will never expand beyond the supplied cap for that fleet.
```{r}
sim_effort <- simmar(fauna = fauna,
fleets = fleets,
years = years,
manager = list(effort_cap = list(longline = 1.5 *fleets$longline$base_effort)))
proc_sim_effort <- process_marlin(sim_effort)
plot_marlin(proc_sim_effort, plot_var = "c", max_scale = FALSE)
proc_sim_effort$fleets %>%
group_by(step, fleet) %>%
summarise(catch = sum(catch)) %>%
ggplot(aes(step * time_step, catch, color = fleet)) +
geom_line()+
scale_x_continuous(name = "Year")
proc_sim_effort$fleets %>%
group_by(step, fleet) %>%
summarise(effort = sum(effort)) %>%
ggplot(aes(step * time_step, effort, color = fleet)) +
geom_line() +
scale_x_continuous(name = "Year")
```
<!-- ## Seasons -->
<!-- We can also impose closed or reduced fishing seasons that apply to one or more targeted species. This is specified by a vector containing values between 0 and 1 with length equal to the number of seasons in the simulation. When a season has a value of 1, that implies that fishing continues as normal in that season. When that value is 0, that means that the fishery is closed in that season. Setting intermediate values, like say 0.5, is akin to simulating a closed seasons with a 50% discard mortality rate -->
<!-- So one option would be to specify a discard mortality rate, and a discard rate, with the discard rate being potentially seasonal. -->
<!-- The problem is the need to separate out the accounting between how many fish actually die and how many the fleet is allowed to retain. Suppose you set a discard rate of 50%, and a discard mortality rate of 0%. That is equivalent to just cutting effort in half. -->
<!-- But, suppose you set a discard rate of 100% and a discard mortality rate of 100%. That would mean that the same amount of fish are dying, but you can't keep them. So that would be easy since again effort doesn't change, you'd just need a multiplier on converting dead fish to catch. -->
<!-- But, now suppose that discard rate is 100% and discard mortality is 50%. Now, you need to both reduce effort by 50%, but allow zero retention. -->
<!-- So, you'd need to adjust fishing mortality rate by a function of discard rate + discard mortality -->
<!-- That will get the correct amount of fish dead -->
<!-- Then you'd adjust the catch by just the discard rate -->
<!-- This gets pretty complicated pretty quickly though, since it means that you need to adjust the actual amount killed. So that would come in on a multiplier of the fishing mortality rate in the manner you have now, where say if you -->
<!-- ```{r} -->
<!-- sim <- simmar(fauna = fauna, -->
<!-- fleets = fleets, -->
<!-- years = years, -->
<!-- manager = list(seasonal_effort_mult = list(bigeye = c(1,2)))) -->
<!-- proc_sim <- process_marlin(sim) -->
<!-- plot_marlin(proc_sim, plot_var = "c") -->
<!-- proc_sim$fleets %>% -->
<!-- group_by(step, fleet) %>% -->
<!-- summarise(effort = sum(effort)) %>% -->
<!-- ggplot(aes(step * time_step, effort, color = fleet)) + -->
<!-- geom_line() + -->
<!-- scale_x_continuous(name = "Year") + -->
<!-- scale_y_continuous(limits = c(0, NA)) -->
<!-- ``` -->