Fishery stock assessment and management strategy simulation library for MoonBit
moonbit-fish-stock/
├── lib/
│ ├── types/ core records, errors, validation, series operations
│ ├── math/ statistics, linear algebra, optimization, PRNG
│ ├── cpue/ CPUE standardization and abundance-index helpers
│ ├── surplus/ surplus-production models and diagnostics
│ ├── age_structured/ recruitment, VPA, age transitions, SSB, yield
│ ├── environment/ environmental covariates and climate dynamics
│ ├── bootstrap/ residual resampling and uncertainty summaries
│ ├── indicators/ reference points and Kobe status trajectories
│ ├── management/ HCR and TAC recommendations
│ ├── mse/ operating model and closed-loop simulations
│ ├── quality/ non-mutating input-quality diagnostics
│ ├── indices/ weighted annual survey-index summaries
│ ├── projection/ multi-year age-structured projections
│ ├── performance/ scenario metrics and ranking
│ ├── benchmarking/ deterministic cross-package benchmark workload
│ └── report/ terminal charts and Markdown reports
└── cmd/
├── main/ end-to-end assessment demonstration
└── benchmark/ reproducible benchmark entry pointgit clone https://github.com/lfbnntr/moonbit-fish-stock.git
cd moonbit-fish-stock
# Type-check every supported backend and run all tests.
moon check --target all
moon test --target all
# Run the end-to-end assessment example.
moon run cmd/main
# Run the deterministic cross-package benchmark.
moon run cmd/benchmarkmoon check --deny-warn
moon test --deny-warn
moon fmt --check
moon infoimport {
"lfbnntr/moonbit-fish-stock/lib/types"
"lfbnntr/moonbit-fish-stock/lib/quality"
"lfbnntr/moonbit-fish-stock/lib/indices"
"lfbnntr/moonbit-fish-stock/lib/projection"
"lfbnntr/moonbit-fish-stock/lib/age_structured"
}
fn assess(series : @types.StockSeries) raise @types.ErrorType {
let quality = @quality.inspect_stock_series(
series,
@quality.QualityConfig::strict(),
)
@quality.require_quality(quality)
let index = @indices.aggregate_cpue_indices(series, 1.96)
println("annual index years=" + index.length().to_string())
let ages = @age_structured.AgeStructureConfig::new(
3, 0.2, [1.0, 2.0, 3.0], [0.0, 0.5, 1.0], [0.0, 0.5, 1.0],
)
let path = @projection.project_age_structure(
[100.0, 80.0, 50.0],
@projection.AgeProjectionConfig::new(2025, 10, 0.1, 0.01, true),
ages,
)
let summary = @projection.summarize_projection(path)
println("projection depletion=" + summary.depletion.to_string())
}moon test lib/quality --deny-warn
moon test lib/indices --deny-warn
moon test lib/projection --deny-warn
moon test lib/performance --deny-warnFishery stock assessment and management strategy simulation library for MoonBit