Home / Science / Ecology and organisms / Fisheries science / Yield per recruit and MSY calculatorTool #341

Yield per recruit and MSY calculator: Beverton-Holt F0.1 and Fmax, Schaefer and Fox surplus production models fitted to catch and CPUE

Work out Beverton-Holt yield per recruit against fishing mortality and age at first capture, with the reference points F0.1 and Fmax. Then get MSY, BMSY and FMSY from the Schaefer or Fox surplus production model, from your own r and K or fitted to a series of catches and CPUE.

Keep it one tap away for everyday use.

Bookmark Yield per recruit and MSY calculator?

Press Ctrl + D now. Your browser opens its own bookmark box, where you choose the name and folder.

  1. Parameters
  2. Yield/R
  3. F0.1, Fmax
  4. MSY
Nothing is uploadedWorks offline once open

Yield per recruit (Beverton-Holt)

K, t₀ and W∞ are von Bertalanffy growth parameters, with weight growing as the cube of length. Recruits enter at age tr, are first caught at tc (knife-edge selection) and are all gone by tλ. Yield per recruit comes out in the unit of W∞ (for example grams per recruit). The defaults are made up.

Surplus production and MSY

Download

What it does

Two classic ways to ask “how hard should this stock be fished?”.

Yield per recruit (Beverton-Holt). Follow one batch of recruits through life: each year some die naturally (rate M), some are caught (rate F, from the age at first capture tc), and the survivors grow along a von Bertalanffy curve. Fish too lightly and most die of natural causes; fish too hard and they are caught before they have grown. The tool works out the total weight caught per recruit with Beverton and Holt’s formula and gives:

  • Fmax, the fishing mortality that gives the most yield per recruit;
  • F0.1, the fishing mortality where the curve’s slope has fallen to 10 % of its slope at the origin. It gives almost as much yield as Fmax for much less fishing, and is a common precautionary target;
  • yield per recruit against F for your tc and one year either side, and against tc at the current F, with the best age at first capture.

Surplus production (Schaefer and Fox). A stock of biomass B grows by a surplus that is zero when the stock is empty and when it is at its carrying capacity K, and largest in between. Catching exactly that surplus each year is sustainable; the largest such catch is the maximum sustainable yield (MSY), taken at biomass BMSY with harvest rate FMSY.

  • Schaefer: surplus = rB(1 − B/K); MSY = rK/4, BMSY = K/2, FMSY = r/2.
  • Fox (Gompertz form): surplus = rB ln(K/B); MSY = rK/e, BMSY = K/e (37 % of K), FMSY = r.

Give r and K yourself, or fit them to a series of yearly catches and a CPUE index: the tool runs the biomass forward from the first year, B(t+1) = B(t) + surplus − catch, and finds the r, K and catchability q (CPUE = q × B) that best match the CPUE on a log scale.

How to use it

  1. Yield per recruit: type M, the growth parameters K, t₀ and W∞, the ages at recruitment, first capture and the maximum age (blank for none), and the current F. Yield per recruit comes out in W∞‘s unit.
  2. Surplus production: choose Schaefer or Fox, then either type r and K, or paste one row per year of year, catch and CPUE (leave CPUE blank in years without it). If the stock was already fished before the first year, set the first-year biomass below 1 × K.

Worked example (made-up values)

With M = 0.3, K = 0.25, t₀ = −0.5, W∞ = 2,500 g, tr = 1, tc = 3 and tλ = 15, F0.1 = 0.332 (260.4 g per recruit) and Fmax = 1.07 (297.4 g per recruit). The current F of 0.5 is 1.51 × F0.1 and gives 283.4 g per recruit; at that F the best age at first capture would be about 3.2 years.

The made-up 20-year series of catches (rising to 1,250 t, then falling to 550 t) and CPUE fitted by the Schaefer model gives r = 0.338 and K = 11,503 t, so MSY = 973 t, BMSY = 5,752 t and FMSY = 0.169. Biomass at the start of 2025 is 8,666 t, 1.51 × BMSY, and the 2024 harvest rate of 0.065 is 0.38 × FMSY. The Fox model on the same data gives MSY 1,163 t at a lower BMSY of 4,580 t.

Tips

  • Yield per recruit ignores recruitment: fishing at Fmax can shrink spawning stock so much that recruits fall. That is why F0.1 is preferred.
  • Surplus production fits need contrast: a CPUE series that falls as catches rise and recovers as they fall. A flat CPUE with steady catches cannot tell r from K.
  • r and K are strongly correlated in fits; MSY is usually better determined than either.

FAQs

Are there confidence intervals for the fitted MSY? Not here. Fits like these are usually given intervals by bootstrapping, which this tool does not do.

Which model should I use? Schaefer puts BMSY at half of K, Fox at 37 %. Compare their fits and treat the difference as part of the uncertainty.

Is my data uploaded? No. Everything runs in your browser.

Where the numbers come from

  • Yield per recruit: R. J. H. Beverton and S. J. Holt (1957), On the Dynamics of Exploited Fish Populations; F0.1: J. A. Gulland and L. K. Boerema (1973). Surplus production: M. B. Schaefer (1954); W. W. Fox (1970), in the Gompertz form rB ln(K/B); observation-error fitting as in M. Hilborn and C. J. Walters (1992), Quantitative Fisheries Stock Assessment, and M. Haddon, Modelling and Quantitative Methods in Fisheries. Method only; no stock data copied.
  • Checked in the tests against SciPy: yield per recruit by numerical integration of the cohort (scipy.integrate.quad), Fmax and F0.1 by scipy.optimize, and the Schaefer and Fox fits by scipy.optimize.minimize on the same likelihood. All example values are made up.

Standard scientific values, such as constants, atomic weights and melting points, are facts found in every textbook; we name where ours were checked. If you are an author or publisher and want a value, a credit or a table changed or removed, tell us and we will act quickly.

Last updated 2026-11-09.

Related tools

Trend and anomaly analyser #138 Paste or open a time series (yearly, monthly or any steps) and test for a trend with Mann-Kendall, the Hamed-Rao autocorrelation correction or the seasonal test, get Sen's slope with its confidence interval, a Pettitt change point and anomalies from a baseline period. Binding curve fitter #114 Paste ligand concentrations with total and non-specific binding, or a titration signal, and fit one site, one site with non-specific binding, two sites, Hill or tight binding with ligand depletion. Get Kd, Bmax and the Hill coefficient with errors, a model comparison by AICc, the Scatchard plot and an IC50 to Ki converter. Sample size and power calculator #32 How many subjects, samples or survey responses do you need? Sample size for comparing two means, paired data, two proportions, or a survey's margin of error, with power curves. Matches R and G*Power. CPUE trend calculator #339 Work out catch per unit effort (CPUE) from catch and effort records: nominal CPUE by year, a standardised index from a log-linear model with year plus factors such as vessel, area or gear, 95 % intervals, factor effects and the yearly trend, with a chart. Paste records or open a CSV or Excel file. Von Bertalanffy growth fitter #340 Fit the von Bertalanffy growth curve to fish length-at-age data by nonlinear least squares. Get L∞, K and t₀ with standard errors and 95 % intervals, the growth performance index φ', a Ford-Walford plot and charts. Paste ages and lengths or open a CSV or Excel file. 1D Schrödinger solver #923 Choose a textbook potential, type a formula or draw your own, and get the lowest energy levels and wavefunctions of the one-dimensional Schrödinger equation by the matrix (finite-difference) method, with the exact levels alongside for the box, harmonic oscillator, finite well, Morse, linear and Pöschl–Teller potentials.