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
)An FLCore::FLStock object representing the stock.
An FLasher::fwdControl object carrying the TAC recommendation to be adjusted.
A list of management-cycle dimensionality arguments supplied
automatically by mse::mp(). Must contain at least iy, ay, frq,
and management_lag.
Optional split-control input. Currently unused; reserved for
future support of multiple mse::mseCtrl objects within a single
isys step. Defaults to NULL.
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.
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.
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.
An FLCore::FLQuant used to record intermediate
values and decisions during MP evaluation, passed through and updated by
mse::mp().
A list with two elements:
ctrlThe input FLasher::fwdControl object with the
adjusted TAC stored in ctrl$value.
trackingThe updated tracking object, with borrowing.isys and
banking.isys metrics written for the assessment year ay.
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.
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]
} # }