Annual Schaefer growth on start-of-year biomass; catches removed
monthly (Baranov-type, C = B (1 - exp(-F))). Each month every segment
allocates its effort among metiers by expected profit computed from
the biomass it perceives (info: "current" = true current biomass,
"lagged" = last year's realised CPUE by metier).
Usage
ms_simulate(
sys,
caps,
years = 100,
gamma = 1.5,
behaviour = c("dynamic", "fixed"),
info = c("current", "lagged"),
phi = 0.5,
open = 1,
hcr = NULL,
hcr_lag = 2,
B_init = NULL,
E_init = NULL,
capacity = NULL,
cost_seg = NULL,
proc_cv = 0,
rho = 0,
proc_r_power = 1,
proc_rho_sp = 0,
proc_sd = NULL,
proc_dep = c("none", "jabba", "power"),
proc_dep_pars = c(a = 0.128, c = 0.223, d = 1.326),
proc_dep_power = 0,
proc_dep_ref = 0.5,
proc_sd_max = 1,
proc_center = c("mean", "median"),
impl_cv = 0,
impl_bias = 0,
effort_cv = 0,
effort_rho = 0,
seed = NULL,
crn = NULL,
keep = c("final", "all"),
avg_years = 10,
F_cap = sys$F_cap %||% Inf,
F_cap_p = NULL
)Arguments
- sys
an
ms_system.- caps
n x G matrix of annual effort caps by segment
- years
number of years.
- gamma
preference exponent (0 = profit-blind)
- behaviour
"dynamic" (reallocate every month) or "fixed" (shares frozen at the unfished allocation: the classical shared-q model)
- info
expected value from the current biomass or last year's catch rates.
- phi
entry/exit rate of each segment: E_t+1 = min(cap, E_t * exp(phi * margin_g)), margin_g = segment profit / segment revenue; 0 = effort always at the cap
- open
métier access, 0-1 (the open share of each métier's ground or season): a vector of length M (all months), a 12 x M matrix (by month, e.g. a seasonal closure), or a function of the year returning either.
- hcr
optional function(state) -> n x G multiplier on caps
- hcr_lag
years between the data a rule sees and the year its advice applies (default 2: data of year y - 2, assessed in y - 1, advice for y). Before the projection the data years are taken to be the initial state.
- B_init
initial biomass (n x S, or one value per stock); default
sys$dep_init * K(the system's starting depletion, 1 if not set)- E_init
initial effort by segment (vector of length G or n x G; default the caps)
- capacity
fleet days by segment (registered vessels x days); default the caps. With vessel heterogeneity (sys$vessel_cv > 0) and phi > 0, the days used move towards capacity x the share of vessels that break even (lognormal vessel efficiency, mean 1), and the active vessels' mean efficiency is the mean of that upper tail. phi is then the annual adjustment rate (0-1).
- cost_seg
daily cost by segment (length G or n x G), overrides sys$cost_seg
- proc_cv
process error CV at the median r (JABBA form: the whole process equation is multiplied by exp(eta), eta ~ N(-sigma^2/2, sigma^2))
- rho
AR(1) autocorrelation of the process error in time
- proc_r_power
the process CV of species i is proc_cv * (r_i / median r)^power: more productive species are more variable (0 = same CV for all)
- proc_rho_sp
correlation of the process error across species (shared environment)
- proc_sd
log-scale process SD by species (length S), overrides proc_cv and proc_r_power; e.g. proc_sd_from_r(sys$r) (0.05 for sharks, 0.4 for anchovy)
- proc_dep
depletion-dependent process error: "jabba" = JABBA proc.dyn (jabba2jags.R): sd_t = sd_i * relsig(B/Bmsy), relsig(x) = raw(x) / raw(1), raw(x) = a + (1 - a) / (1 + (x / c)^d), empirical ICES a = 0.128, c = 0.223, d = 1.326 (
proc_dep_pars); relsig = 1 at Bmsy, ~1.5 at 0.5 Bmsy, -> 4.3 at 0. "power": see proc_dep_power. Capped at proc_sd_max.- proc_dep_pars
parameters a, c, d of the JABBA
proc.dynfunction.- proc_dep_power, proc_dep_ref, proc_sd_max
power form (proc_dep = "power"): sd_i,t = sd_i * ((B_i,t / K_i) / proc_dep_ref)^(-proc_dep_power), capped at proc_sd_max; sd_i applies at B/K = proc_dep_ref (Bmsy). proc_dep_power > 0: stocks become more volatile at low abundance; < 0: less volatile
- proc_center
"mean": exp(sd eps - sd^2/2) (mean-unbiased, the median drifts down as sd grows: stochastic depensation); "median": exp(sd eps), as in JABBA's dlnorm(Pmean, iPV) process equation
- impl_cv, impl_bias
implementation error on the effort caps by segment: realised cap = cap * exp(bias + N(-s^2/2, s^2)), s from impl_cv
- effort_cv, effort_rho
effort/catchability noise by segment, in every run (regulated or not): an annual lognormal multiplier on effective effort (weather, fuel, markets, catchability), AR(1) effort_rho, mean 1. Unlike the implementation error it acts when no cap binds.
- seed
random seed.
- crn
common random numbers: rows i and i + crn share the same process (and rule) error draws, e.g. crn = nsim when the rows are nsim simulations repeated for each of several control settings
- keep
"final" (equilibrium summaries) or "all" (trajectories)
- avg_years
years kept when
keep = "final".- F_cap
cap on each stock's realised F, in units of Fmsy (scalar or one per stock; default
sys$F_cap, elseInf). F/Fmsy is measured as the harvest-rate ratio h/hmsy (seeffmsy()); the cap on h is converted to instantaneous F and applied monthly as one twelfth. Extra effort on a capped stock catches nothing more, so its catch per day falls (economic extinction: the stock is left to rare by-catch). In Schaefer equilibrium B/Bmsy = 2 - F/Fmsy, so a cap below 2 sets a floor:F_cap = 1.95keeps every stock at or above 0.05 Bmsy.- F_cap_p
shape of the cap:
Inf= hard cap, min(F, F_cap); a finite p = smooth cap, (F^-p + F_cap^-p)^(-1/p), which approaches F_cap without a kink (p = 8 lowers F by about 1.5% at 1.5 Fmsy when F_cap = 1.95). DefaultNULL: hard without process error (equilibrium and tuning), p = 8 with process error (stochastic runs).