Skip to content

Initialisation Reconstructed Populations

Ricardo Oliveros Ramos edited this page Jun 11, 2026 · 1 revision

4.1. Purpose and general principle

The reconstructed population-level initialisation initialisation method was developed to provide a practical way to initialise OSMOSE without requiring the user to prepare an explicit school-by-school restart file. Instead of specifying the full state of every school directly, the user provides a set of observational inputs and biological parameters from which OSMOSE reconstructs a plausible initial population structure for each focal species. This reconstructed structure is then translated into the population.initialization.* parameters, which are the actual inputs consumed by the simulation engine at runtime.

Conceptually, the method separates the problem of initialisation into two stages. In the first stage, a single-species approximation is fitted to the information available for each focal species, using biomass, catch, catch-at-length, growth, reproduction, and mortality-related inputs. In the second stage, the fitted population structure is converted into an aggregated initial-condition description at species level, including total biomass, biomass distribution among classes, class boundaries, ages, trophic levels, and the number of schools used to represent each class. OSMOSE then uses these parameters to instantiate individual schools at the beginning of the simulation.

This approach was originally developed in a data-rich context, in which biomass, yield, and catch-at-length information were generally available for all focal species. Over time, the implementation was extended to cope with more data-poor situations, for example when only an approximate biomass guess is available or when catch-at-length information is missing. As a result, the current OSMOSE 4.4 implementation combines a clear central idea with a number of practical extensions introduced to increase flexibility. It is therefore important to document both the conceptual structure of the method and the exact behaviour of the current implementation.

At a high level, the workflow can be summarised as follows:

{#fig:population-level_initialisatio fig-align="center"}

4.2. Two-layer structure of the method

A central feature of this method is that it operates through two distinct configuration layers. This distinction is conceptually simple, but in practice it has often been a source of confusion for users, because both layers are expressed through OSMOSE parameters.

4.2.1. The data layer

The first layer is the data layer. It contains the observational inputs and auxiliary parameters used to reconstruct an initial population structure for each focal species. In practice, this includes quantities such as observed biomass, yield, catch-at-length, an optional biomass guess, and a small number of specific additional inputs such as egg-stage duration and biomass cutoff size. These data-layer parameters do not define the initial schools directly. Rather, they provide the information needed for the estimation procedure that generates the actual initialisation block.

4.2.2. The initialisation layer

The second layer is the initialisation layer. This is the actual parameter block used by OSMOSE to create the starting state of the simulation. It consists of the population.initialization.* parameters, which describe, for each focal species, the total initial biomass, the relative biomass allocated among classes, the class boundaries in size, the representative ages, the assigned trophic levels, and the number of schools to be created in each class.

4.2.3. Why the distinction matters

The distinction matters because the data-layer configuration is not itself the initial condition. It is only an auxiliary specification used to estimate or reconstruct the initial condition. In other words, the user may provide biomass files, catch-at-length files, yield series, selectivity assumptions, and related parameters, but these are not read directly by the core OSMOSE simulator (Java) when the schools are created. What the simulator reads are the population.initialization.* parameters generated from that information.

This separation is especially important when documenting workflows and debugging configurations. If a user is working with the population-level initialisation, there are therefore two separate questions to answer:

  1. Is the data layer properly configured so that OSMOSE can reconstruct a plausible initial population?
  2. Once reconstructed, are the generated population.initialization.* parameters consistent and meaningful?

Any technical description of this method must keep these two questions distinct.

4.3. Activation and position within the initialisation module

The population-level initialisation method is activated through the flag

population.initialization.relativebiomass.enabled = TRUE

When this flag is enabled, OSMOSE uses the population-level initialisation route rather than relying on the legacy seeding method or on a direct school-level initialisation. In this workflow, the purpose of the preliminary R code is to construct a parameterised initial state, while the Java code uses that parameter block to instantiate the actual schools.

Within the broader initialisation module, this method occupies an intermediate position between the two extremes. On one side, the school-level initialisation route is highly explicit, because the complete school-level state is provided directly by the user, normally from a netCDF restart file. On the other side, the seeding initialisation route is highly indirect, because the model is allowed to generate the initial population dynamically during a preliminary period. The reconstructed population-level method occupies a more practical middle ground: it reconstructs a detailed initial population structure from species-level information, but expresses the result in a compact parameterised form.

For OSMOSE 4.4, this is the most suitable default workflow for most practical applications. It avoids the need for a hand-built restart file, while remaining more explicit and controllable than the seeding-based route. At the same time, it should be recognised that the current implementation reflects the historical evolution of the module and includes additional patches introduced after the original data-rich design.

4.4. Inputs required in the data layer

The data layer is designed to provide the information needed to reconstruct the initial state of each focal species. Some of these inputs are specific to the initialisation procedure itself, while many others are borrowed from the regular OSMOSE parameterisation. In particular, most biological parameters used by the method—such as growth, length–weight, maturity, fecundity, lifespan, and sex ratio—are not unique to the initialisation module. They are generally already defined as part of the standard species parameterisation and therefore do not need to be specified again specifically for initialisation. The data layer mainly adds the observational inputs and a small number of additional settings needed to interpret them.

4.4.1. Biomass information

The method can use observed biomass information through parameters such as:

observed.biomass.file.spX
observed.biomass.ndtPerYear.spX
observed.biomass.cutoff.size.spX

The biomass file provides a time series of biomass estimates for the species. The associated ndtPerYear parameter specifies the temporal resolution of that file. The parameter observed.biomass.cutoff.size.spX is used to mimic the observation process by excluding the biomass of schools below a specified size threshold when comparing the reconstructed population to the observed biomass index.

When no suitable biomass time series is available, or when a simpler configuration is needed, the method can also use an approximate biomass value supplied through:

observed.biomass.guess.spX

In the current implementation, this biomass guess takes precedence over the biomass file when both are present. This behaviour reflects the practical extensions that were added to the original data-rich method in order to support more data-poor contexts.

4.4.2. Fishery information

The initialisation method also uses fishery information, especially to reconstruct fishing mortality and selectivity. The two principal inputs are yield and catch-at-length.

Yield is provided through:

fisheries.yield.file.spX
fisheries.yield.ndtPerYear.spX

This file is treated as the landings or yield series for the species. In the intended workflow, it is supplied even for non-exploited species, in which case the corresponding series should contain zeros rather than missing values.

Catch-at-length, when available, is supplied through:

fisheries.catchatlength.file.spX
fisheries.catchatlength.ndtPerYear.spX

This information is especially valuable because it allows the method to infer an empirical size selectivity pattern, rather than relying only on an assumed selectivity function. In the original data-rich applications of the method, catch-at-length was generally available and played an important role in reconstructing the initial demographic structure.

4.4.3. Biological parameters used indirectly

In addition to the observational data just described, the method depends on a broad set of biological parameters. Most of them belong to the regular OSMOSE species parameterisation and are therefore typically already available in a properly configured model. The user normally does not need to duplicate these values in a separate initialisation file. The initialisation procedure simply reuses them.

These reused parameters include, among others:

  • growth parameters such as species.k, species.linf, species.t0, species.egg.size, and species.vonbertalanffy.threshold.age;
  • length–weight parameters such as species.length2weight.condition.factor and species.length2weight.allometric.power;
  • maturity parameters such as species.maturity.size, species.maturity.l50, or species.maturity.age;
  • fecundity and reproductive timing information used through the regular reproduction configuration;
  • lifespan and sex ratio, used in the internal mortality calculation.

The main biological parameter that is more directly tied to the initialisation workflow itself is:

species.egg.stage.duration.spX

This parameter is used in the mortality calculation associated with the reconstruction procedure. In practice, it is usually specified in the data-layer configuration because it has a direct role in estimating the early-life mortality schedule used during initialisation.

4.4.4. Selectivity parameters

When catch-at-length is unavailable, the method needs a parametric description of selectivity. In that case, the data layer must provide selectivity settings through parameters such as:

fisheries.selectivity.type.spX
fisheries.selectivity.l50.spX
fisheries.selectivity.l75.spX

and, depending on the selectivity type, potentially additional parameters such as l25, l0, l1, plateau, breaks, or values, as used in OSMOSE fisheries configuration.

The selectivity type controls the functional form used to represent the fishing pattern by size. Supported forms in the current implementation include knife-edge, logistic, normal, log-normal, several double-normal variants, and a non-parametric option. When empirical catch-at-length information is available, selectivity can instead be inferred from those data, which is generally preferable.

4.4.5. Data-rich versus data-poor use

The original design of this method assumed a data-rich context in which biomass, yield, and catch-at-length were normally available for each focal species. Later applications revealed that this assumption was too restrictive, and the module was progressively extended to allow reduced-input configurations. For example, a species may be initialised using a biomass guess rather than a full biomass time series, or using an assumed selectivity curve when catch-at-length is unavailable.

These extensions greatly improve the practical usability of the method, but they also mean that the current OSMOSE 4.4 implementation includes several branches that correspond to different data situations. The population-level workflow should therefore be understood as a family of closely related procedures built around a common core rather than as a single algorithm.

4.5. Internal reconstruction of the initial population

Once the data layer has been specified, the method reconstructs an initial population structure for each focal species using a single-species approximation. This reconstruction is not meant to reproduce the full multispecies OSMOSE dynamics during initialisation. Rather, it is intended to produce a plausible demographic and biomass structure that can serve as a coherent starting point for the full simulation.

4.5.1. Population discretisation

The internal reconstruction is performed over a discretised age structure defined according to the temporal resolution of the simulation. Ages are represented from the beginning of life to the model lifespan, using age bins based on the model time step. The corresponding sizes are then obtained from the configured growth curve. This results in a species-specific discretisation of the initial population over age and size classes.

The reconstructed quantities are therefore not school-level quantities. At this stage, the population is represented as a structured distribution over age and size, from which the final aggregated initialisation parameters will later be generated.

4.5.2. Growth model

The method uses the internal growth function VB() to derive length-at-age. In the initialisation module, the growth calculation relies on the cubic early-life formulation used in the code, which connects smoothly to the von Bertalanffy growth curve at older ages. This choice avoids unrealistic behaviour near age zero and provides a continuous way to derive the size structure required by the initialisation procedure.

4.5.3. Weight-at-length relationship

Length is converted to weight using the species-specific length–weight relationship already defined in the regular OSMOSE parameterisation. This conversion is required both to derive biomass from abundance and to relate the reconstructed population structure to the observed biomass and yield data supplied in the data layer.

4.5.4. Recruitment and fecundity structure

The method uses the configured fecundity and reproductive timing information to determine the within-year distribution of recruitment. In practice, relative fecundity over the annual cycle is used to define the seasonal pattern of recruitment entering the reconstructed population. This preserves consistency between the initialisation procedure and the life-history assumptions adopted in the OSMOSE simulation itself.

4.5.5. Natural mortality

A distinctive feature of the method is that natural mortality is not simply taken as a fixed constant by species. Instead, the initialisation module computes an internal mortality schedule based on life-history information (Caddy 1997). Conceptually, this calculation uses mean lifetime fecundity, lifespan, sex ratio, and egg-stage duration to derive a decreasing mortality schedule over life. That schedule is then mapped onto the age discretisation used in the reconstruction.

This approach is meant to produce a plausible demographic decline with age while remaining consistent with the reproductive capacity of the species. In practical terms, it is one of the key mechanisms linking the biological parameterisation of the species to the shape of the reconstructed initial population.

4.5.6. Fishing mortality and selectivity

Fishing mortality is incorporated into the reconstruction using the available yield information together with either empirical or assumed selectivity.

When catch-at-length is available, the method rebins the observed catch-at-length data to the internal size discretisation and uses the resulting pattern to infer how fishing is distributed across sizes. This allows the reconstruction to reflect the observed size composition of catches.

When catch-at-length is unavailable, the method falls back on the selectivity function specified by the user. In that case, the shape of the fishing pattern is determined by the assumed selectivity curve rather than by empirical size composition data.

4.5.7. Biomass fitting target

Observed biomass is not compared to the entire reconstructed population indiscriminately. Instead, the method excludes classes below the configured biomass cutoff size when computing the biomass target to be matched. This reflects the fact that observed biomass indices often represent only the portion of the population effectively sampled by the observation process, for example because of survey selectivity or minimum detectable size.

As a result, the reconstructed total population biomass may be larger than the biomass directly comparable to the observed index.

4.5.8. Yield fitting target

Yield information is used jointly with biomass information to constrain the reconstruction. In effect, the method seeks an internally coherent combination of recruitment, fishing intensity, and population structure such that the reconstructed biomass and yield are compatible with the supplied observations or guesses. This joint use of biomass and yield is one of the key reasons why the method can provide a more informative initialisation than an approach based on biomass alone.

4.5.9. Species absent from the initial state

The implementation also allows for the case in which a species should effectively start absent from the simulation. If the biomass guess is zero, the method returns a degenerate initial state with zero biomass, zero catch, and zero recruitment, rather than forcing a non-zero starting population. This behaviour is useful for configurations in which a species is declared as focal but is not present initially.

4.6. Estimation procedure and reconstructed outputs

The reconstruction procedure can be understood as a fitting problem in which a simplified age-structured population model is adjusted so that its biomass and yield are compatible with the information supplied in the data layer.

4.6.1. Initial approximation

When catch-at-length is available, the procedure first builds an initial approximation of the population structure by simulating survival and catch over the discretised age classes using the observed catch-at-length pattern. This provides a first estimate of the initial size and age structure, seasonal fishing pattern, recruitment level, and selectivity.

When such information is unavailable, the method instead relies more heavily on the biomass guess and on the configured selectivity assumptions to construct an initial approximation.

4.6.2. Joint fitting of recruitment and fishing level

The main free quantities adjusted by the method are, in essence, the recruitment level and the overall fishing intensity. These are fitted so that the reconstructed biomass and yield are jointly compatible with the supplied targets. The implementation uses optimisation to adjust these quantities and to reconcile the two data streams as well as possible under the model assumptions.

In practice, this means that the method is not simply extrapolating a biomass structure from growth and mortality alone. It is estimating a population state consistent with both the abundance of fish in the system and the removals implied by fishing.

4.6.3. Reconstructed internal outputs

Before translation into population.initialization.*, the procedure reconstructs several internal outputs for each focal species, including:

  • the population abundance distribution over age/size classes;
  • the biomass distribution over classes;
  • the expected yield distribution over the annual cycle;
  • the inferred selectivity pattern;
  • the seasonal fishing pattern;
  • an estimate of annual recruitment.

These outputs are internal to the reconstruction step, but they are essential because they determine the parameter block ultimately passed to the Java initialisation code.

4.6.4. Estimation of larval mortality

Larval mortality is inferred by comparing the egg production implied by the reconstructed adult population and fecundity schedule to the recruitment level required by the reconstructed initial population. This provides an internally consistent estimate of early-life mortality under the assumptions of the method.

The implementation includes checks intended to identify clearly implausible results, for example when the estimated larval mortality is too low relative to what would be expected from the fecundity settings. Such cases should be treated as a warning that the underlying biological parameterisation may require revision.

4.7. Translation to population.initialization.*

Once the internal reconstruction has been completed, its results are translated into the population.initialization.* block used by OSMOSE at runtime. This step is crucial because it defines the exact meaning of the parameters that the Java code will later consume.

4.7.1. population.initialization.biomass.spX

This parameter gives the total initial biomass of species spX, expressed in tonnes. It defines the total amount of biomass to be allocated among the initial classes for that species in all the model domain.

4.7.2. population.initialization.relativebiomass.spX

This parameter gives the relative biomass distribution among the initial size-classes. The values should sum to one, up to numerical rounding. Together with the total biomass parameter, it determines how much biomass is placed in each size-class at initialisation.

4.7.3. population.initialization.size.spX

This parameter requires special attention. It is not a vector of representative class sizes. It is a vector of class boundaries. A vector of length $N + 1$ defines $N$ initial size classes through consecutive lower and upper bounds.

For example, if the vector contains values $L_0, L_1, \dots, L_N$, then class 1 is defined by $[L_0, L_1]$, class 2 by $[L_1, L_2]$, and so on. This is important because the Java code later draws school lengths uniformly within each class interval.

4.7.4. population.initialization.age.spX

This parameter gives the representative age associated with each class, expressed in years. Its length must match the number of classes defined by the size intervals.

4.7.5. population.initialization.tl.spX

This parameter gives the initial trophic level assigned to each class. In the current population-level implementation, the generated values are simple class-level trophic-level assignments rather than the result of a full food-web calculation during initialisation. The main purpose of this vector is to provide the simulator with an initial trophic-level state consistent with the chosen parameterisation.

4.7.6. population.initialization.nschool.spX

This parameter gives the number of schools that will be created in each class. It is therefore the bridge between the class-level biomass description and the school-based representation actually used by OSMOSE.

4.7.7. Additional larval mortality-related parameter

In addition to the core initialisation block, the current implementation also generates a larval mortality estimate. If a larval mortality parameter is not defined in the configuration (usually before calibration), then the initialisation will create it as

mortality.additional.larva.rate.spX

or as

initialization.additional.larva.rate.spX

if the parameter already exists, to avoid duplication.

In practice, users should be aware that the generated initialisation block may therefore include a larval mortality-related parameter whose name depends on the current configuration state.

4.7.8. Internal allocation rule for school numbers

The number of schools per class is not assigned arbitrarily. In the current implementation, it is derived from the reconstructed biomass distribution in such a way that classes containing more biomass receive more schools, subject to lower and upper bounds linked to the species-level total number of schools. This preserves a loose correspondence between demographic importance and school representation while ensuring that even classes with low biomass can still be represented.

4.8. How Java instantiates the schools from these parameters

After the population.initialization.* block has been generated, the Java initialisation code uses it to create the actual schools that define the starting state of the simulation, following these steps:

  1. Reading and checking the parameter vectors: The Java code first reads the parameter vectors for total biomass, relative biomass, size boundaries, trophic levels, ages, and school numbers. It checks that the lengths of the class-level vectors are consistent. In particular, the number of values supplied for trophic level, relative biomass, age, and number of schools must match the number of classes implied by the size-boundary vector.

  2. Interpreting the size vector: The size vector is interpreted as a set of class limits. The code builds one class from each adjacent pair of values. This confirms that population.initialization.size.spX must be documented as class boundaries rather than class centres.

  3. Converting age to model time steps: Ages are read in years from population.initialization.age.spX, then converted internally to the model’s discrete time-step units. This ensures consistency with the school age representation used elsewhere in OSMOSE.

  4. Splitting biomass among classes and schools: For each species, the total initial biomass is multiplied by the class-specific relative biomass proportion. The resulting class biomass is then divided among the number of schools specified for that class. Each school created within the class therefore receives an equal share of the class biomass.

  5. Random draw of school length within class limits: Within each class, the length of each school is drawn at random between the lower and upper boundaries of the class. The only special case is the egg stage: when the age is zero in time-step units, the school length is forced to the species egg size rather than randomly drawn. This means that the population-level method does not generate all schools in a class with identical lengths. Instead, it produces a simple within-class variability by random allocation within the class interval.

  6. Conversion to weight and abundance: Once school length has been drawn, individual weight is computed from the species length–weight relationship, except for eggs, for which egg weight is used. School abundance is then derived from the biomass allocated to the school divided by individual weight. Since biomass is expressed in tonnes and weight in grams, the code performs the corresponding unit conversion internally.

  7. Creation of school objects: The resulting species identity, abundance, length, weight, and age are used to create the actual School objects that populate the simulation at time zero. At this stage, the abstract initial-condition block has been fully converted into the school-based representation required by OSMOSE.

If the corresponding model options are enabled, the initialisation code also handles genotype instantiation and bioenergetics-related maturation information. These are not specific to the population-level method itself, but they affect the attributes assigned to newly created schools and should therefore be recognised as part of the runtime behaviour of the initialisation process.

4.9. Interpretation, assumptions, and limitations

The reconstructed population-level method should be understood as a pragmatic reconstruction procedure rather than as an exact historical reconstitution of the school-level state of the ecosystem.

The method aims to reconstruct a plausible initial biomass and demographic structure for each focal species. It does not attempt to recover the exact identity, location, size, and trophic state of every school that might have existed in the real system at the start of the simulation.

A central limitation is that the reconstruction is performed species by species. Multispecies interactions are not solved explicitly during the estimation stage. They only come into play once the full OSMOSE simulation starts from the generated initial state. This is an important simplification, but it is also one of the reasons why the method remains practical.

Compared with a full restart-based initialisation, trophic level and space are treated more simply. In the population-level workflow, trophic level is assigned at class level and space is not reconstructed through an explicit school-level state file. The method is therefore primarily designed to reconstruct biomass and demographic structure rather than the full initial spatial arrangement of schools.

The quality of the reconstructed initial state depends strongly on the consistency and plausibility of the biological parameters used by the method. Growth, maturity, fecundity, lifespan, sex ratio, and length–weight settings all influence the inferred mortality schedule and the resulting demographic structure. Implausible or inconsistent species parameterisation can therefore propagate directly into the initial condition. This warning also apply to the quality and consistency of the data used to reconstruct the population, as implausible or inconsistent data will propagate directly into the initial condition.

Finally, the current OSMOSE 4.4 implementation reflects the historical accumulation of practical patches introduced to broaden the applicability of the method. This does not invalidate the approach, but it does mean that some aspects of the configuration structure are less transparent than they could be in a more systematically redesigned module. For this reason, the method should be carefully documented as currently implemented, while recognising that a future recoding is likely to simplify its structure.

4.10. Practical guidance for users

From a user perspective, the reconstructed population-level method is most effective when approached as a reconstruction workflow with a clearly defined purpose: to generate a coherent population.initialization.* block from the best available information for each focal species.

4.10.1. Recommended minimum setup in data-rich situations

In a data-rich application, the recommended setup is to provide, for each focal species:

  • an observed biomass series and its temporal resolution;
  • a biomass cutoff size;
  • a yield series and its temporal resolution;
  • a catch-at-length file and its temporal resolution;
  • the regular species biological parameterisation needed by OSMOSE, including growth, length–weight, maturity, fecundity, lifespan, and sex ratio;
  • egg-stage duration.

This is the configuration for which the method was originally designed and generally provides the strongest basis for reconstructing the initial state.

4.10.2. Reduced setups for data-poor situations

When data are poorer, the method can still be used with reduced input. For example:

  • a biomass guess may be used instead of a full biomass series;
  • a parametric selectivity function may be used instead of catch-at-length;
  • non-exploited species may still be supplied with a yield series containing zeros.

These reduced configurations are useful, but they also imply that a larger part of the reconstruction depends on assumed rather than directly observed information.

4.10.3. Parameters users should verify carefully

Before running the initialisation, users should verify in particular:

  • that the temporal resolutions of biomass, yield, and catch-at-length files are correctly specified;
  • that the biomass cutoff size is consistent with the observation process represented by the biomass index;
  • that growth and maturity parameters are biologically compatible;
  • that the selectivity assumptions are plausible when catch-at-length is unavailable;
  • that population.initialization.size.spX is understood as a vector of class boundaries;
  • that the generated vectors in the population.initialization.* block have consistent lengths.

4.10.4. Suggested outputs to inspect after generation

After generating the initialisation block, it is advisable to inspect:

  • the reconstructed biomass and yield against the supplied targets;
  • the resulting size and age structure for biological plausibility;
  • the estimated larval mortality values;
  • the generated population.initialization.* parameters themselves, especially the biomass distribution, size boundaries, ages, and number of schools.

These checks are particularly important in reduced-data configurations, where the reconstruction necessarily relies more heavily on assumptions.

In summary, the reconstructed population-level initialisation method provides a practical and conceptually coherent way to initialise OSMOSE from species-level information. Its main strength is that it bridges the gap between full school-level restart files and highly indirect seeding-based approaches.

Clone this wiki locally