The plain bisection algorithm (Burden & Douglas, 1985) is employed here to find the value of a given forecast target quantity (e.g. fbar) for which a selected value of a performance statistic is obtained over a chosen period.

bisect(
  stock,
  sr,
  deviances = rec(stock) %=% 1,
  metrics,
  refpts,
  statistic,
  years,
  pyears = years,
  tune,
  prob,
  tol = 0.01,
  maxit = 15,
  verbose = TRUE
)

References

Burden, Richard L.; Faires, J. Douglas (1985), "2.1 The Bisection Algorithm", Numerical Analysis (3rd ed.), PWS Publishers, ISBN 0-87150-857-5

Examples

data(ple4)
stock <- propagate(stf(ple4, end=2118), 100)
srr <- predictModel(model=rec~a*ssb*exp(-b*ssb), params=FLPar(a=5.20, b=1.65e-6))
# GENERATE SRR deviances
devs <- ar1rlnorm(rho=0.4, 2018:2118, iters=100, meanlog=0, sdlog=0.5)
# DEFINE Fp05 statistic
statistic <- list(FP05=list(~yearMeans((SB/SBlim) < 1), name="P.05",
  desc="ICES P.05"))
# CALL bisect over 100 years, Fp.05 calculated over last 50.
fp05fwd <- bisect(stock, sr=srr, deviances=devs, metrics=list(SB=ssb), 
refpts=FLPar(SBlim=150000), statistic=statistic, years=2018:2118,
pyears=2069:2118, tune=list(fbar=c(0.1, 1)), prob=0.05)
#> [1] fbar: 0.1 - prob: 0  - diff:  -0.05 
#> [2] fbar: 1 - prob: 1  - diff:  0.95 
#> [3] fbar: 0.55 - prob: 0.998  - diff:  0.948 
#> [4] fbar: 0.325 - prob: 0  - diff:  -0.05 
#> [5] fbar: 0.4375 - prob: 0.1284  - diff:  0.0784 
#> [6] fbar: 0.38125 - prob: 2e-04  - diff:  -0.0498 
#> [7] fbar: 0.409375 - prob: 0.0118  - diff:  -0.0382 
#> [8] fbar: 0.4234375 - prob: 0.0398  - diff:  -0.0102 
#> [9] fbar: 0.43046875 - prob: 0.0694  - diff:  0.0194 
#> [10] fbar: 0.426953125 - prob: 0.0528  - diff:  0.0028