Defining a Management Procedure
04_management_procedure.Rmd
A management procedure (MP) object is required to define aspects of the management regime being applied to the population. Nominally, this includes defining: (1) a harvest control rule (HCR), (2) a method for calculating reference points, (3) whether/how to reduce allowable catch from the HCR recommended catch levels, and (4) the frequency with which surveys and stock assessments occur. The MP object has been designed based on the existing management practices for Alaska sablefish under the jurisdiction of the North Pacific Fisheries Management Council.
To define an MP object, five elements are required:
-
hcr
- a harvest control rule definition -
ref_points
- a method and level of reference point -
management
- aspects of the management regime such as ABC-TAC reductions and realized TAC attainment -
survey_frequency
- a frequency with which to simulate survey data -
assessment_frequency
- a frequency with which to perform a stock assessment
A default MP object is available through the
setup_mp_option()
function, though no default HCR is
available.
mp <- setup_mp_options()
mp
## $hcr
## $hcr$func
## NULL
##
## $hcr$extra_pars
## [1] NA
##
## $hcr$extra_options
## $hcr$extra_options$max_stability
## [1] NA
##
## $hcr$extra_options$harvest_cap
## [1] NA
##
##
## $hcr$units
## NULL
##
##
## $ref_points
## $ref_points$spr_target
## [1] 0.4
##
##
## $management
## $management$abc_tac_reduction
## [1] 1
##
## $management$tac_land_reduciton
## [1] 1
##
##
## $survey_frequency
## [1] 1
##
## $assessment_frequency
## [1] 1
Defining a Harvest Control Rule
The harvest control rule (HCR) defines the maximum catch that can be taken from the population in the following annual timestep. HCRs can range from as simple as constant catch rules (where the same catch is taken every year) to complex threshold functions that scale allowable catch based on stock status relative to one or more reference points.
An HCR is defined as a complex list object with four parameters:
-
func
- an R function that defines the functional form of the HCR -
extra_pars
- a named list of additional parameter values required byfunc
(see section on “Custom Harvest Control Rule Functions”) -
extra_options
- a named list of additional HCR options (currently only stability constraints and harvest caps are supported) -
units
- output units offunc
(either “F” if the HCR is defined in fishing mortality units or “TAC” if defined in catch units)
The below example defines the NPFMC Tier 3 Groundfish HCR that is used to manage sablefish in Alaska:
tier3 <- function(ref_pts, naa, dem_params, avgrec, cutoff_age=1){
nages <- afscOM::get_model_dimensions(dem_params$sel)$nages
a <- cutoff_age-1
ssb <- apply(naa[,a:nages,1,]*dem_params$waa[,a:nages,1,,drop=FALSE]*dem_params$mat[,a:nages,1,,drop=FALSE], 1, sum)
return(
npfmc_tier3_F(ssb, ref_pts$Bref, ref_pts$Fref)
)
}
hcr_obj <- list(
# R function defining HCR
func = tier3,
# No extra parameters required
extra_pars = NA,
# No stability constraints or harvest caps
extra_options = list(
max_stability = NA,
harvest_cap = NA
),
# `func` outputs in fishing mortality units
units = "F"
)
The max_stability
option allows for constraining the
maximum allowable annual change in catch recommendations by the HCR.
Values should be in the range 0-1. This constraint is always applied to
the recommended catch even if the HCR function output is in fishing
mortality units.
The harvest_cap
option allows for constraining the
allowable catch to a maximum value, even if the catch recommendation
from the HCR is higher. Values are interpreted in units of 1000s mt.
Existing Harvest Control Rule Functions
Several MP/HCR objects are provided with the
SablefishMSE
package:
-
mp_f40
- a threshold HCR using F40/B40 reference points. This is the current HCR used to managed sablefish in Alaska. -
mp_f50
- a threshold HCR using F50/B50 reference points. -
mp_5perc
- themp_f40
HCR but with a stability constraint of 5% -
mp_15cap
- themp_f40
HCR but with a maximum harvest cap of 15,000mt.
Custom Harvest Control Rule Functions
Custom HCR functions can be easily developed and used within the MSE simulation loop. All HCR functions must accept, at minimum, the same four function arguments:
-
ref_pts
- a list object containing computed values of reference points -
naa
- an array of numbers-at-age (will be dimension[1, nages, nsexes, nregions]
) -
dem_params
- a list of demographic parameters (will be dimension[1, nages, nsexes, nregion, nfleets]
) -
avgrec
- average recruitment across the simulation
All four of these arguments must be accepted by any custom HCR
function, even if they are not used. Additional arguments can also be
accepted, and their values specified in the hcr$extra_pars
list (the four arguments listed above DO NOT need to be
specified in the extra_pars
list, as they will be passed to
the HCR function automatically within the MSE simulation loop). Note
that custom HCR functions CAN NOT make use of internal
state variables from the MSE except for numbers-at-age.
Below is an example of a custom HCR that recommends a fishing mortality of 10% when mt and a fishing mortality of 1% when mt.
# the four required function arguemnts are present
step_hcr <- function(ref_pts, naa, dem_params, avgrec){
# Calculate ssb as naa*waa*mat (female only) in units of 1,000s tons
ssb <- apply(naa[,,1,]*dem_params$waa[,,1,,drop=FALSE]*dem_params$mat[,,1,,drop=FALSE], 1, sum)
return(ifelse(ssb > 100, 0.10, 0.01))
}
hcr <- list(
func = step_hcr, # the HCR function to evaluate
extra_pars = NA, # no extra parameters needed
extra_options = list(
max_stability = NA, # no stability constraints
harvest_cap = NA # no harvest caps
),
units = "F"
)
mp <- setup_mp_options()
mp$hcr <- hcr
Another example of a custom HCR function that accepts additional arguments:
average_age <- function(naa, ages){
return(weighted.mean(ages, naa))
}
avgage_threshold_f <- function(ref_pts, naa, dem_params, ref_naa, ages){
# Calculate ssb as naa*waa*mat (female only) in units of 1,000s tons
ssb <- apply(naa[,,1,]*dem_params$waa[,,1,,drop=FALSE]*dem_params$mat[,,1,,drop=FALSE], 1, sum)
as_stat <- average_age(naa, ages)/average_age(ref_naa, ages)
as_scalar <- threshold_f(as_stat, f_min=0, f_max=1, lrp=0, urp=1)
x <- ssb/ref_pts$B40
f_max <- ref_pts$F40*as_scalar
f_min <- 0
lrp <- 0
urp <- 1
if(x >= urp) F <- f_max # if stock status >= 1
if(x > lrp && x < urp) F <- f_max * ((x-lrp)/(urp-lrp)) # if stock status > alpha & stock status < 1
if(x <= lrp) F <- f_min
return(f)
}
hcr <- list(
# the HCR function to evaluate
func = avgage_threshold_f,
# values of additional arguments required by the "avgage_threshold_f" function
extra_pars = list(
ref_naa = c(100, 75, 50, 25, 10),
ages = 1:5
),
extra_options = list(
max_stability = NA
harvest_cap = NA
),
units = "F"
)
mp <- setup_mp_options()
mp$hcr <- hcr
Defining a Management Object
SablefishMSE
applies HCR functions at the level of
Acceptable Biological Catch (ABC), consistent with how the North Pacific
Fisheries Management Council utilizes HCRs to manage groundfish
fisheries in Alaska. Total Allowable Catch (TAC), the management
quantity that constrains the maximum catch that can be removed the
population annually, is subsequently constrained such that
.
Finally, landed catch is further constrained such that
,
to reflect that the entire TAC is not taken in every year.
The amount by which the ABC is reduced to yield a TAC, and the amount
by which the TAC is reduced to yield an annual catch, are customizable
through the mp$management
object.
-
mp$management$abc_tac_reduction
- a multiplicative factor reflecting what proportion of the ABC to set the TAC too. -
mp$management$tac_land_reduction
- multiplicative factor reflecting what proportion of the TAC to set annual landings too. This is otherwise known as “attainment”.
Both the abc_tac_reduction
and
tac_land_reduction
parameters are, by default, set to 1,
such that the
.
If set to a single value, the same multiplicative factor is applied in
every year of the simulation.
Defining a Reference Point Object
SablefishMSE
calculates annual reference points using
spawning potential ratio (SPR) methods. A target SPR level can be set by
the mp$ref_pts$spr_target
parameter. The parameter can be
either a single value, or a vector of two values. If two values are
supplied, the first value corresponds to the fishing mortality reference
point and the second value corresponds to the biological reference
point.
The MSE simulation loop reference point function,
calculate_ref_points
, computes and returns 4 values:
-
Fmax
- a maximum permissible fishing mortality rate corresponding to the fishing mortality that yields . -
Fref
- the fishing mortality rate that yields -
Bref
- the spawning biomass resulting from fishing atFref
-
B0
- the spawning biomass resulting from fishing atF=0.0
The two biological reference points, Bref
and
B0
are calculated using the average recruitment across the
entire simulation.