-
Notifications
You must be signed in to change notification settings - Fork 1
Introduction to MixME
MixME is an R package that allows users to simulate the performance of management strategies, also known as management procedures, in the presence of 'real-world' mixed fisheries technical interactions. Following the Management Strategy Evaluation (MSE) paradigm, the 'real-world' state of the system, where fleets catch multiple stocks and compete for a share of the available harvest, is kept strictly separate from the observed system.
MixME is geared towards flexibility, allowing you to tailor all aspects of the management strategy, from specifying how stocks are observed with error, to provide custom functions for stock estimation and advice generation. However, you may also use the provided built-in routines to rapidly assemble an off-the-shelf management strategy.
MixME takes a standard input structure irrespective of whether we are setting up a single stock and fleet simulation or the most complex multi-stock and fleet mixed fisheries simulation. The objects required for MixME are:
- om: the Operating Model (OM) containing data and parameters governing stock and fleet dynamics.
- oem: the Observation Error Model (OEM) containing commercial catch and survey index deviances, timings of catch and index data availability, and survey catchabilities.
- ctrl_obj: the methods and arguments required to carry out each stage of the management procedure
- args: the arguments required to carry out the simulation
The FLQuant object is the basic data storage object used in MixME and is a six-dimensional array structured around spatial and temporal strata. The iteration dimension is used to store data and parameter uncertainty. Each iteration therefore represents a distinct trajectory resulting from existing uncertainties around stock status and plausible future variability in stock and fleet dynamics.
The operating model object (om) structure is as follows. For simplicity, only the data slots that are used in MixME simulations are listed:
-
om: a list containing stock and fleet data and parameters
-
stks: an object of class
FLBiolswith named elements-
'stock name': an object of class
FLBiolcontaining the data and parameters for a single stock-
n: a slot of class
FLQuantcontaining stock numbers at age -
m: a slot of class
FLQuantcontaining natural mortality at age -
wt: a slot of class
FLQuantcontaining individual mean weight at age -
mat: a slot of class
FLQuantcontaining proportion mature at age -
rec: a slot of class
predictModelcontaining the formula and parameters for a stock-recruit model
-
n: a slot of class
-
'stock name': an object of class
-
flts: an object of class
FLFisherieswith named elements-
'fleet name': an object of class
FLFisherycontaining the data and parameters for a single fleet/fishery and associated stock catches-
effort: a slot of class
FLQuantcontaining annual effort -
'stock name': an object of class
FLCatchcontaining that data and parameter for catches of a single stock-
landings.n: a slot of class
FLQuantcontaining the number of individuals landed at age -
landings.wt: a slot of class
FLQuantcontaining the individual mean weight at age of landed individuals -
discards.n: a slot of class
FLQuantcontaining the number of individuals discarded at age -
discards.wt: a slot of class
FLQuantcontaining the individual mean weight at age of discarded individuals -
catch.sel: a slot of class
FLQuantcontaining the catch selection at age -
catch.q: a slot of class
FLParcontaining catchability alpha and beta parameters -
quotashare: an attribute of class
FLQuantcontaining the proportional share of stock quota
-
landings.n: a slot of class
-
effort: a slot of class
-
'fleet name': an object of class
-
stks: an object of class
The observation error model object (oem) has the following structure:
-
oem: an object of class
FLoemwith slots observations, deviances, and args-
observations: a
listcontaining two elements-
stk: an object of class
FLStockswith named elements corresponding to observed stocks-
'stock name': an object of class
FLStockcontaining the observed data and parameters for a single stock
-
'stock name': an object of class
-
idx: a
listwith named elements-
'stock name': an object of class
FLIndiceswith named elements corresponding to survey indices
-
'stock name': an object of class
-
stk: an object of class
-
deviances: a
listcontaining two elements-
stk: a
listwith named elements corresponding to observed stocks-
'stock name': a 7-d
arraycontaining the age-specific stock deviances for each fleet
-
'stock name': a 7-d
-
idx: a
listwith named elements corresponding to observed stocks-
'stock name': an object of class
FLQuantswith named elements corresponding to survey indices-
'survey name': an object of class
FLQuantcontaining the age-specific stock deviances
-
'survey name': an object of class
-
'stock name': an object of class
-
stk: a
-
args: a
listcontaining arguments for the observation of commercial catches and scientific survey-
use_stk_oem: a
logicalvector with named elements. Should the structure and parameters of observed stocks be taken from inputted oem observation arguments? -
use_catch_residuals: a
logicalvector with named elements corresponding to observed stocks. Should observation error be applied to commercial catch? -
use_idx_residuals: a
logicalvector with named elements corresponding to observed stocks. Should observation error be applied survey indices? -
use_om_weights:
logical. Should annually updated stock weights be sourced from the operating model? -
catch_timing: a
listof named elements corresponding to observed stocks-
'stock name':
integer. Index of final data year relative to assessment year.
-
'stock name':
-
idx_timing: a
listof named elements corresponding to observed stocks-
'stock name':
integervector. Index of final data year for each survey index relative to assessment year.
-
'stock name':
-
use_stk_oem: a
-
observations: a
The methods and arguments for the management procedure (ctrl_obj) take the following structure:
-
ctrl_obj: an object of class
mpCtrlwith named elements corresponding to distinct management procedure modules-
est: an object of class
mseCtrlcontaining methods and arguments for the estimation of stock status -
phcr: an object of class
mseCtrlcontaining methods and arguments for the parameterisation of harvest control rules -
hcr: an object of class
mseCtrlcontaining methods and arguments for the implementation of harvest control rules -
isys: an object of class
mseCtrlcontaining methods and arguments for the implementation of advice -
fwd: an object of class
mseCtrlcontaining methods and arguments for the forward projection of stock and fleet dynamics
-
est: an object of class
These take the form of a list with the following named elements:
-
fy:
integer. The final simulation year -
y0:
integer. The first data year for any stock -
iy:
integer. The initial simulation year -
management_lag:
integer. The lag between the development and implementation of management advice -
frq:
integer. The duration of management advice -
popType:
integervector with named elements corresponding to stocks. Each element is an integer code for the type of population model for the stock. 0 = age-structured dynamics, 1 = biomass dynamics, 2 = fixed populations. Biomass dynamics are not yet implemented in MixME. -
parallel:
logical. Should parallel processing be used? -
nworkers:
integer. The number of clusters used in parallel processing -
frange:
listwith named elements corresponding to stocks. Each element is an integer vector containing the age ranges used to calculate mean fishing mortality -
adviceInit:
listwith named elements corresponding to stocks. Each element is a numeric vector containing the management advice for each iteration -
maxRetry:
integer. The number of times the effort optimisation module should retry identification of choke-stocks -
seed:
integer. The seed for random number generation -
verbose:
logical. Should simulation progress be printed?
The output of a MixME simulation is a list of:
- om: the updated OM object
- tracking: a tracking object
- ctrl_obj: the input management procedure arguments
- args: the input simulation arguments
The management procedure (ctrl_obj) and simulation (args) arguments are repeated from the input object. This ensures that the output object contains all the information needed to process, analyse and interpret simulation results without requiring the full input object.
The tracking object is generated at the beginning of each MixME simulation and stores several useful diagnostics and summaries to quickly evaluate the quality of simulation performance and interpret the dynamics of the system. The tracking object is a list:
-
'stock name': a
listwith named elements-
advice: 3-dimensional
array(advice,year,iter) containing the management advice (catch target) for the stock in each year and iteration -
sel_om:
FLQuantcontaining the Operating Model selection-at-age. This is weighted by the proportional contribution of each fleet, and can therefore vary over time as fleet activity patterns change. -
sel_est:
FLQuantcontaining the estimated selection-at-age. This is catch selection from an estimation model that feeds into the management procedure. -
stk:
FLQuanttracking:- F.om: Operating model mean fishing mortality.
- B.om: Operating model total biomass
- SB.om: Operating model spawning biomass
- C.om: Operating model total catch (by weight)
- L.om: Operating model landings (by weight)
- D.om: Operating model discards (by weight)
- C.obs: Observed total catch (by weight)
- L.obs: Observed landings (by weight)
- D.obs: Observed discards (by weight)
- conv.est: stock estimation model convergence. Note that this is NOT effort optimisation convergence.
- F.est: estimated mean fishing mortality
- B.est: estimated total biomass
- SB.est: estimated spawning biomass
- C.est: estimated total catch (by weight)
- L.est: estimated landings (by weight)
- D.est: estimated discards (by weight)
- hcr.adv: harvest control rule output (mean fishing mortality or catch)
-
advice: 3-dimensional
-
quota: a 4-dimensional
array(stk,flt,year,iter) containing the stock quota allocated to each fleet in each year and iteration. -
iterfail:
matrix(year,iter) tracking cases of management advice generation failure. -
optim: a 3-dimensional
array(metrics,year,iter) containing the objective value and convergence state for the effort optimisation routine in each year and iteration. -
message: a 3-dimensional
array(metrics,year,iter) containing the convergence message and an (optional) re-scale effort multiplier. -
uptake: a 4-dimensional
array(stk,flt,year,iter) containing the quota uptake by each fleet. The calculation is$quota - catch$ , so quota underutilisation has a$+ve$ value whereas overshoot is$-ve$ . -
overquota: a 4-dimensional
array(stk,flt,year,iter) containing the quota over-shoot by each fleet. -
choke: a 3-dimensional
array(flt,year,iter) containing anumericcode indicating the choke stock for each fleet in each year and iteration. The code refers to the position of the stock in ..., so if the second stock is the choke then the code is '2'.
Tutorials
- Conditioning a simple single-stock Operating Model
- Conditioning a simple mixed fishery Operating Model
- Exploring simulation outputs
- Management - Constant fishing mortality
- [Management - Empirical harvest control rule]
- [Management - Model-based harvest control rule]
User Manual
- Introduction to MixME
- MixME simulation loop
- [Operating model]
- Observation error model
- [Stock estimation module]
- [Harvest control rule module]
- [Advice implementation module]
- Forward projection module
Technical Manual
MixME Development