Skip to contents

Finds the effort caps that maximise total yield (or revenue, or profit) at equilibrium subject to every constrained stock staying at or above Bpa: B_i / Bmsy_i >= Bpa for all i in species.

Usage

ms_optimise(
  sys,
  objective = "yield",
  levers = names(sys$segments),
  fixed = NULL,
  ratio = rep(1/sys$G, sys$G),
  upper = 3000,
  Bpa = 0.5,
  species = sys$species,
  min_share = 0,
  n = NULL,
  zoom = 5,
  years = 150,
  ...
)

Arguments

sys

an ms_system.

objective

what is maximised: "yield" (total catch), "revenue", "profit", or the catch of one or more stocks given by code or name (e.g. "ANC" to maximise the anchovy catch), always subject to the safeguard for the stocks in species.

levers

segments whose caps are optimised, or "total" for one global cap split in proportion ratio across all segments

fixed

named caps for segments not in levers (e.g. the free agent: mixed = 40)

ratio

split of the global cap when levers = "total"

upper

upper bound of each cap

Bpa

safeguard relative to Bmsy.

species

names of the stocks under the safeguard (default all)

min_share

viability floor: every segment's cap must be at least this share of the total cap (e.g. 0.2). Applies to caps by segment only (with levers = "total" the split is fixed by ratio).

n, zoom

grid points per dimension and number of zoom steps.

years

years to equilibrium.

...

passed to ms_simulate() (gamma, behaviour, phi, open, ...)

Value

list: caps, summary row, B/Bmsy, F/Fmsy and catch by stock, the value of the objective, effort by segment and metier, the binding stock(s), and the search history

Details

The search is a vectorised zooming grid in log1p(effort) space: a grid of n^d candidates is run in one call, the best feasible one is kept, and the box shrinks around it. This is robust to the kinks and small cycles of a behavioural fleet, which defeat gradient-based optimisers.