20  Stock Complexes

In openMSE, every stock belongs to a stock complex. When each stock is managed independently, no complex configuration is needed (i.e., each stock is its own complex).

Multi-stock complexes are used when two or more stocks cannot be distinguished in the data: for example, males and females modelled as separate stocks, or two species landed together in a mixed fishery where catch cannot be attributed to either species individually. In these cases the stocks share a single combined data object and receive a single joint management action such as a total allowable catch that applies to the complex as a whole.

The key consequences of grouping stocks into a complex are:

20.1 The Complexes Slot

Complexes are defined via the Complexes slot of the OM object, which is a named list where each element is an integer vector of stock indices belonging to that complex:

# Two stocks in one complex
OM(
  Stock     = list(AlbacoreExStock, ButterfishExStock),
  Fleet     = AsympExFleet,
  Obs       = AgeStructuredObs,
  Complexes = list(StockComplex = 1:2)
)

Here both stocks (indices 1 and 2) are assigned to a single complex named "StockComplex". The Obs object is indexed by complex and fleet, so a single observation model applies to the aggregated data for the whole complex.

Complexes assigns every stock in the OM to exactly one complex. With four stocks, for example, valid configurations include four complexes of one stock each, one complex of four, or anything in between, such as two stocks combined into one complex with the other two left as their own independent complexes.

When Complexes is not specified, openMSE sets a default automatically:

  • If the OM contains a single stock, that stock forms its own complex.
  • If the OM has a single Data object for multiple stocks, all stocks are placed in one complex.
  • Otherwise, each stock is treated as its own independent complex.

The MultiStockOM example has two stocks, each its own complex:

Complexes(MultiStockOM) 
NULL
Complexes(Populate(MultiStockOM, silent = TRUE))
$`Example Albacore Stock`
[1] 1

$`Example Butterfish Stock`
[1] 2

ComplexOM has the same two stocks combined into a single complex:

Complexes(ComplexOM)
$StockComplex
[1] 1 2

20.2 Stock-Recruitment Linkages

By default each stock’s recruitment is driven by its own spawning production. The SPFrom slot of Stock@SRR can designate a different stock as the source of spawning output used to determine recruitment. The most common case is a sex-structured model where female spawning production drives recruitment for both sexes.

20.3 Reference Points

CalcMSY() finds the single apical \(F\) that maximises total yield across all stocks in the complex. Stock-level reference points (BMSY, SBMSY, etc.) are then evaluated at this complex-level \(F_\text{MSY}\), reflecting the reality that a single management action applies to all stocks simultaneously. See Chapter 22 for details.