Parameter estimation

Bound-constrained optimisation

Rameau uses a modified version of the Rosenbrock method [Rosenbrock, 1960] to optimise physical parameter values by confronting simulated hydrological variables with observations. The Rosenbrock method is a bound-constrained iterative numerical method used to find the minimum of an objective function in a multidimensional space. In Rameau, the global objective function \(F\) that is minimised is written as a weighted average:

\[F = \sum_{i=1}^n \frac{F_q^iP_q^i + F_h^iP_h^i}{P_q^i + P_h^i}\]

with

  • \(F_q^i\) the fitting criterion between observed and simulated river flows of the ith watershed.

  • \(P_q^i\) the weight allocated to the fitting criterion \(F_q^i\)

  • \(F_h^i\) the fitting criterion between observed and simulated groundwater levels of the i:sup:th watershed.

  • \(P_h^i\) the weight allocated to the fitting criterion \(F_h^i\)

Regression

Some parameters are estimated through linear or multiple regression depending on the parameter optimisation settings.

Regression for riverflow

During an optimisation procedure, one can estimate at most three parameters using a regression procedure: the drainage area, the minimum river flow, and the pumping river coefficient. This procedure is a ridge regression solved using a Cholesky decomposition and a k-fold cross validation.

The regression procedure tries to explain the relationship between the observed river flow time series \(Q_o`(in :math:\)mathrm{m^3.s^{-1}}`) with the simulated flow directly at model reservoir outlets (\(Q_w\) in \(\mathrm{mm}\)) and, possibly, with the river pumping time series.

During an optimisation iteration run, once the calculation of \(q_l\) is done, the following equation is solved through an iterative ridge regression procedure:

(1)\[Q_o = Aq_w + C_p^rQ_p + Q_m\]

If no pumping data are provided, Equation (1) is solved by linear regression. The result of the regression gives access to \(A\), \(C_p^r\) and \(Q_m\). To enable the estimation of these variables by regression, the user needs to set the key opti to true for theses parameters:

[watershed.1]
river.area = { value = 100.0, opti = true }
river.minimum_riverflow = { value = 0.00000, opti = true }
pumping.river.coefficient = { value = 1.00000, opti = true }

If \(A\) is determined by regression, the correction factor for the drainage area is automatically set to zero and not optimised in the model.

Regression for groundwater level

Similarly, storage coefficient \(S\), base level \(H_b\) and the pumping groundwater coefficient \(C_p^g\) can be estimated using a similar ridge regression procedure:

(2)\[H = \frac{10}{S}H_g + C_p^hQ_p^g + H_b\]

If no pumping data are provided, Equation (2) is solved by linear regression.

To enable the estimation of these variables by regression, the user needs to set the key opti to true for theses parameters:

[watershed.1]
groundwater.base_level = { value = 100.0, opti = true }
groundwater.storage.coefficient = { value = 100.0, lower = 0.10000, upper = 80.00000, opti = true, sameas = 0 }
pumping.groundwater.coefficient = { value = 1.00000, opti = true }

Optimisation settings

Maximum iteration number

The maximum number of iterations of the bound-constrained method. If set to zero, no parameter estimation is performed.

[optimization]
maxit = 40

Starting and ending dates of optimisation

Parameters can be optimised only on a specific period.

[optimization]
starting_date = 2000-01-01 00:00:00.000
ending_date = 2010-12-31 00:00:00.000

River flow objective function

Possible criteria for river flows are NSE, KGE and KGE 2012, while for groundwater levels, the only criterion available is NSE.

[optimization]
river_objective_function = "nse"

River flow transformation

River flows can be transformed before computing the criterion. The available transformations are “no”, “square root”, “inverse”, “log” and “fifth root”.

Default value is “no”.

[optimization]
transformation = "no"

Optimisation method

All watersheds can be optimised at once, independently or by Strahler order.

[optimization]
method = "all" # "independent" or "strahler"

Selected watersheds for optimisation

Specific watersheds can be selected for the optimisation. If omitted, the default behaviour is to optimise all the watersheds at once.

[optimization]
selected_watersheds = [1, 2]

Verbosity of output

Print informations about the iterative process.

Default to false.

[optimization]
verbose = false

Watershed optimisation parameters

Weights

Weights allocated to the terms of the objective function are assigned per watershed and per type of variable. If river weights are equal to 0, observed river flows will not be used for estimating parameters. If groundwater weights are equal to 0, observed groundwater levels will be ignored. Default value for river weights is 1 and default value for groundwater weight is 0.

[watershed.1]
river.weight = 1
groundwater.weight = 0.5
[watershed.2]
river.weight = 2
groundwater.weight = 1

Bounded observation values

Observations can be bounded in order to focus on a specific range of observed values during the optimisation procedure. Default value both for groundwater and river is [0.0, 0.0], i.e. no bounds.

[watershed.1]
groundwater.obslim = [ 250.00000, 500.00000 ]
river.obslim = [ 1.00000, 500.00000 ]

Observed groundwater reservoir

Groundwater reservoir number corresponding to the observed groundwater level time series. Default value is 1 (first groundwater reservoir corresponding to an unconfined aquifer).

[watershed.1]
groundwater.observed_reservoir = 1

Storage coefficient estimation method

If true, storage coefficient is estimated by regression. Otherwise, it will be estimated through the bound-constrained iterative method.

Default value is false.

[watershed.1]
groundwater.storage.regression = false