Skip to contents

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
## 
## $ref_points$rp_start_age
## [1] 1
## 
## $ref_points$rp_hyperallometry
## [1] 1
## 
## 
## $management
## $management$abc_tac_reduction
## [1] 1
## 
## $management$tac_land_reduction
## [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 by func (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 of func (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_5perc - the mp_f40 HCR but with a stability constraint of 5%
  • mp_25cap - the mp_f40 HCR but with a maximum harvest cap of 25,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 (see next section on “Defining a Reference Point Object”)
  • 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 \(\text{SSB} >= 100,000\)mt and a fishing mortality of 1% when \(\text{SSB} < 100,000\)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))
}

# The maximum fishing mortality rate in a threshold HCR is a function of the average age of the population relative to a reference average age. If the average age is above the reference average age, the maximum fishing mortality rate is not increased, but if the average age is below the reference average age, the maximum fishing mortality rate is reduced proportionately to how much lower the average age is relative to the reference average age.
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 <- ifelse(as_stat > 1, 1, as_stat) # if average age is above the reference average age, do not increase F

    x <- ssb/ref_pts$Bref
    f_max <- ref_pts$Fref*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 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 \(\text{SPR}=0.35\).
  • Fref - the fishing mortality rate that yields \(\text{SPR}=\text{spr_target}\)
  • Bref - the spawning biomass resulting from fishing at Fref
  • B0 - the spawning biomass resulting from fishing at F=0.0

The two biological reference points, Bref and B0 are calculated using the average recruitment across the entire simulation.

Two additional options can be specified in the mp$ref_pts object:

  • rp_start_age - the age at which individuals start contributing to the reference point calculations. By default, rp_start_age=1, such that all age classes contribute to the reference point calculation.
  • rp_hyperallometry - a hyperallometric scaling exponent that is applied to weight-at-age within the reference point calculation. This functionally converts reference points to be in terms of spawning output (egg production) as opposed to biomass, by approximating a non-isometric fecundity relationship (whereby \(\text{Fecundity} \propto \text{Weight}^{\beta}\)). By Default, rp_hyperallometry=1, inidcating an isometric relationship ebtween weight and fecundity.

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 \(\text{TAC} <= \text{ABC}\). Finally, landed catch is further constrained such that \(\text{Catch} <= \text{TAC}\), 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 \(\text{ABC} = \text{TAC} = \text{Catch}\). If set to a single value, the same multiplicative factor is applied in every year of the simulation.

Order of Operations for Management Module

The management module handles calculating reference points, applying the HCR function, calculating an ABC, and eventually outputting a catch level for the following years OM timestep, the exact order of operations is as follow:

  1. Calculate SPR based reference points (Fmax, Fref, Bref, B0) using the average recruitment across the entire simulation and the numbers-at-age in the current year of the simulation.
  2. Apply the HCR function to calculate a recommended fishing mortality rate or catch level for the following year of the simulation. This is F_\text{ABC}.
  3. If the HCR function outputs in fishing mortality units, calculate the corresponding catch level using the Baranov catch equation. This is \(\text{ABC}\).
  4. Apply stability constraints to the ABC if specified in the mp$hcr$extra_options list.
  5. Apply the abc_tac_reduction to calculate the \(\text{TAC}\) for the following year of the simulation.
  6. Apply harvest caps constraints to the TAC is specified in the mp$hcr$extra_options list.
  7. Apply the tac_land_reduction to calculate the level of realized landings for the following year of the simulation.

Survey and Assessment Frequency

The frequency with which scientific survey data is generated and made available to the estimation method is controllable through the mp$survey_frequency parameter. The frequency with which stock assessments are performed and used to update reference points and HCR recommendations is controllable through the mp$assessment_frequency parameter. Both parameters should be set to a single integer value, indicating the number of years between surveys and assessments, respectively. By default, both parameters are set to 1, such that surveys and assessments occur every year of the simulation.