Adjusts a TAC recommendation from an HCR by banking a proportion of any increase or borrowing against a future quota when a decrease is large, smoothing inter-annual TAC variability while respecting stock health conditions.

bank_borrow.is(
  stk,
  ctrl,
  args,
  split = NULL,
  rate = NULL,
  diff = 0.15,
  healthy = 1,
  tracking
)

Arguments

stk

An FLCore::FLStock object representing the stock.

ctrl

An FLasher::fwdControl object carrying the TAC recommendation to be adjusted.

args

A list of management-cycle dimensionality arguments supplied automatically by mse::mp(). Must contain at least iy, ay, frq, and management_lag.

split

Optional split-control input. Currently unused; reserved for future support of multiple mse::mseCtrl objects within a single isys step. Defaults to NULL.

rate

Numeric in \([0, 1]\). Proportion of the TAC to bank or borrow when the threshold condition is met. Must be supplied; there is no default.

diff

Numeric. Minimum relative change in TAC (compared to the previous HCR decision pre) required to trigger a banking or borrowing action. Defaults to 0.15, i.e. a 15% change.

healthy

Numeric. Minimum value of the rule.hcr tracking metric required for the stock to be considered healthy enough for banking or borrowing to be applied. Defaults to 1.

tracking

An FLCore::FLQuant used to record intermediate values and decisions during MP evaluation, passed through and updated by mse::mp().

Value

A list with two elements:

ctrl

The input FLasher::fwdControl object with the adjusted TAC stored in ctrl$value.

tracking

The updated tracking object, with borrowing.isys and banking.isys metrics written for the assessment year ay.

Details

In the initial year (ay == iy) the tracking metrics borrowing.isys and banking.isys are initialized to zero and the reference TAC (pre) is set to the realized catch in the year preceding the management lag.

In subsequent years pre is taken from the hcr tracking metric for the current year, and the TAC carried in ctrl is first corrected for any amount borrowed or banked in the previous cycle before new banking/borrowing is evaluated.

Banking and borrowing are triggered as follows:

  • Borrowing: if the (corrected) TAC falls more than diff below pre and the stock is healthy, rate * tac is added to the current TAC and recorded in borrowing.isys.

  • Banking: if the (corrected) TAC rises more than diff above pre and the stock is healthy, rate * tac is subtracted from the current TAC and recorded in banking.isys.

Only annual management cycles (frq == 1) are currently supported; a non-annual frq raises an error.

Author

Iago MOSQUEIRA iago.mosqueira@wur.nl

Examples

if (FALSE) { # \dontrun{
data(sol274)

# mpCtrl combining a hockey-stick HCR with 10% banking/borrowing
ctrl <- mpCtrl(
  est   = mseCtrl(method = perfect.sa),
  hcr   = mseCtrl(method = hockeystick.hcr,
            args = list(metric = "ssb", trigger = 42000,
                        output = "catch", target = 11000)),
  isys  = mseCtrl(method = bank_borrow.is,
            args = list(rate = 0.10, healthy = 2, diff = 0.05)))

run <- mp(om, control = ctrl, args = list(iy = 2021, fy = 2035))

plot(om, list(BaB = run))

# Inspect the TAC-setting steps from the tracking object
items <- c("year", "hcr", "banking.isys", "borrowing.isys", "isys", "fwd")
dcast(
  tracking(run)[metric %in% items[-1],
    .(data = mean(data)), by = .(year, metric)],
  year ~ metric, value.var = "data")[, ..items]
} # }