Skip to contents

Rescales each stock's catchability (its column of sys$Q, across all metiers) so that the open-access equilibrium reaches a target B/Bmsy per stock, while ms_tune() keeps the segment shares of days at sys$segments with total days held fixed (the overall effort level and the catchability scale are not separately identifiable).

Usage

ms_condition(
  sys,
  target,
  range = c(0.05, 1.5),
  cap = 1000,
  gamma = 1.5,
  outer = 4,
  inner = 12,
  tol = 0.02,
  damp = 0.8,
  years = 300,
  verbose = TRUE,
  recost = TRUE,
  ...
)

Arguments

sys

an ms_system (costs already roughly tuned, e.g. by ms_tune()).

target

named vector of target B/Bmsy (names = stock names or codes); NA or missing stocks are free.

range

lower and upper limits of the targets.

cap

fleet capacity (days) by segment.

gamma

profit preference.

outer, inner

number of outer (cost tuning) and inner (catchability) iterations.

tol

tolerance on |B/Bmsy - target| for the inner loop.

damp

damping exponent of the catchability update.

years

years to equilibrium.

verbose

print progress.

recost

if TRUE (default), each metier's daily cost keeps its ratio to the metier's unfished revenue rate as catchability changes, so a metier whose main stock gets a lower catchability does not keep a cost sized for the old one (which would leave it unfished).

...

passed to ms_simulate().

Value

The conditioned ms_system, with attribute conditioning: a data frame of targets and achieved B/Bmsy and F/Fmsy, and the catchability multipliers.

Details

In the discrete Schaefer model B/Bmsy = 2 - F/Fmsy (with F/Fmsy as h/hmsy, see ffmsy()), so each inner step multiplies a stock's catchability by ((2 - target) / current F/Fmsy)^damp. Stocks with an NA target are left free. Targets are clamped to range.