.. include:: notations/notations.rst .. |NSE| replace:: :abbr:`NSE (Nash-Sutcliff Efficiency)` .. |KGE| replace:: :abbr:`KGE (Kling-Gupta Efficiency)` .. |KGE2012| replace:: :abbr:`KGE 2012 (Kling-Gupta Effiency 2012)` .. _optimization: ==================== Parameter estimation ==================== Bound-constrained optimisation ============================== |rameau| uses a modified version of the Rosenbrock method :cite:p:`1960:rosenbrock_automatic` 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 :math:`F` that is minimised is written as a weighted average: .. math:: F = \sum_{i=1}^n \frac{F_q^iP_q^i + F_h^iP_h^i}{P_q^i + P_h^i} with * :math:`F_q^i` the fitting criterion between observed and simulated river flows of the i\ :sup:`th` watershed. * :math:`P_q^i` the weight allocated to the fitting criterion :math:`F_q^i` * :math:`F_h^i` the fitting criterion between observed and simulated groundwater levels of the i:sup:`th` watershed. * :math:`P_h^i` the weight allocated to the fitting criterion :math:`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 :math:`Q_o`(in :math:`\mathrm{m^3.s^{-1}}`) with the simulated flow directly at model reservoir outlets (:math:`Q_w` in :math:`\mathrm{mm}`) and, possibly, with the river pumping time series. During an optimisation iteration run, once the calculation of |ql| is done, the following equation is solved through an iterative ridge regression procedure: .. math:: :label: eq:reg_rivflow Q_o = Aq_w + C_p^rQ_p + Q_m If no pumping data are provided, Equation :eq:`eq:reg_rivflow` is solved by linear regression. The result of the regression gives access to |A|, :math:`C_p^r` and |Qm|. To enable the estimation of these variables by regression, the user needs to set the key ``opti`` to true for theses parameters: .. code-block:: toml [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_gwlevel: Regression for groundwater level -------------------------------- Similarly, storage coefficient |S|, base level |Hb| and the pumping groundwater coefficient |Cpg| can be estimated using a similar ridge regression procedure: .. math:: :label: eq:reg_hground H = \frac{0.1}{S}H_g + C_p^gQ_p^g + H_b If no pumping data are provided, Equation :eq:`eq:reg_hground` 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: .. code-block:: toml [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 } See :ref:`groundwater_parameters` and :ref:`pumping_parameters` for more details on theses parameters. .. _optimization_settings: Optimisation settings ===================== Maximum iteration number ------------------------ The maximum number of iterations of the bound-constrained method. If set to zero, no parameter estimation is performed. .. code-block:: toml [optimization] maxit = 40 Starting and ending dates of optimisation ----------------------------------------- Parameters can be optimised only on a specific period. .. code-block:: toml [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 |KGE2012|, while for groundwater levels, the only criterion available is |NSE|. .. code-block:: toml [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". .. code-block:: toml [optimization] transformation = "no" Optimisation method ------------------- All watersheds can be optimised at once, independently or by Strahler order. .. code-block:: toml [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. .. code-block:: toml [optimization] selected_watersheds = [1, 2] Verbosity of output ------------------- Print informations about the iterative process. Default to false. .. code-block:: toml [optimization] verbose = false .. _optimization_parameters: 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. .. code-block:: toml [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. .. code-block:: toml [watershed.1] groundwater.obslim = [ 250.00000, 500.00000 ] river.obslim = [ 1.00000, 500.00000 ] 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. .. code-block:: toml [watershed.1] groundwater.storage.regression = false