Skip to contents

Computes the revenue standing available to each fleet in each patch: the intersection of biomass at age, the fleet's vulnerability at age, and price. Used by allocate_effort when a fleet's spatial_allocation is "fishable_revenue".

Usage

calc_fishable_revenue(b_p_a, fauna, fleets)

Arguments

b_p_a

Named list of biomass-at-age matrices (patches x ages), one per species, named to match fauna. In simmar this is the b_p_a stored for the previous step, which is the biomass the current step is about to fish.

fauna

Named list of fauna objects (e.g. from create_critter).

fleets

Named list of fleet objects (e.g. from create_fleet), each with a metiers list.

Value

Numeric matrix, patches x fleets, with fleet names as column names.

Details

For fleet \(f\) and patch \(p\), summing over species \(s\) and ages \(a\): $$FR_{p,f} = \sum_s price_{s,f} \sum_a B_{p,a,s} \, v_{p,a,s,f}$$ where \(B\) is biomass at age and \(v\) is the metier's vul_p_a (spatial catchability times selectivity at age).

Why this exists

Every other spatial-allocation objective is a function of realised fishing: go_fish computes what a fleet got given the effort it actually deployed, so the signal reaching allocate_effort at step \(t\) necessarily describes step \(t-1\). When habitat changes on a timescale close to the time step – seasonal migration, say – the fleet is then always responding to where fish were rather than where they are, and no value of responsiveness fixes it, because the lag is structural rather than a matter of step size.

Fishable revenue takes no effort argument. That is the entire point: because it does not depend on how effort is distributed, it can be evaluated against the biomass a step is about to fish rather than the one it just fished, with no circularity and no fixed point to solve. It is also cheaper than the realised objectives, since it needs no Baranov solve.

It is additionally defined where effort is zero, unlike the per-unit-effort objectives (rpue, cpue, ppue), which are NA there. A fleet allocating on fishable revenue therefore sees unfished patches honestly, rather than having to fish somewhere to learn anything about it.

What it gives up

  • No crowding. The objective is standing stock, not return per unit effort, so within a step there is nothing to stop effort piling into the best patch. Depletion still pushes back, but only from the next step onward – delayed negative feedback, which can oscillate. Consider memory_halflife > 0 to damp it.

  • No costs. Cost depends on effort, so profit-side variants (ppue, profit) have no fishable-revenue analogue.

  • No fleet interaction within a step. Two fleets on the same stock do not see each other's effort; they feel each other only through next step's depleted biomass.

  • Not an ideal free distribution. rpue and the marginal rules relax toward equalised returns. This one relaxes toward effort tracking standing stock, which is a different equilibrium – "fish where the fish are" rather than "fish where the next unit of effort pays the same everywhere". Neither is wrong; they are different fleets.