Commit 5f79785c authored by Delaigue Olivier's avatar Delaigue Olivier
Browse files

v1.1.2.17 CLEAN: syntaxe revision of vignette param_optim

Showing with 30 additions and 27 deletions
+30 -27
Package: airGR Package: airGR
Type: Package Type: Package
Title: Suite of GR Hydrological Models for Precipitation-Runoff Modelling Title: Suite of GR Hydrological Models for Precipitation-Runoff Modelling
Version: 1.1.2.16 Version: 1.1.2.17
Date: 2018-10-23 Date: 2018-10-23
Authors@R: c( Authors@R: c(
person("Laurent", "Coron", role = c("aut", "trl"), comment = c(ORCID = "0000-0002-1503-6204")), person("Laurent", "Coron", role = c("aut", "trl"), comment = c(ORCID = "0000-0002-1503-6204")),
......
...@@ -13,7 +13,7 @@ output: ...@@ -13,7 +13,7 @@ output:
### 1.1.2.16 Release Notes (2018-10-23) ### 1.1.2.17 Release Notes (2018-10-23)
......
...@@ -17,7 +17,7 @@ library(hydroPSO) ...@@ -17,7 +17,7 @@ library(hydroPSO)
library(Rmalschains) library(Rmalschains)
# source("airGR.R") # source("airGR.R")
set.seed(321) set.seed(321)
load(system.file("vignettes_data/Vignette_Param.rda", package = "airGR")) load(system.file("vignettesData/vignetteParamOptim.rda", package = "airGR"))
``` ```
...@@ -33,9 +33,10 @@ In this vignette, we use the **GR4J** model to illustrate the different optimiza ...@@ -33,9 +33,10 @@ In this vignette, we use the **GR4J** model to illustrate the different optimiza
In particular, we assume that the R global environment contains input climate data, observed discharge and functions from the [Get Started](V01_get_started.html) vignette, as shown below. In particular, we assume that the R global environment contains input climate data, observed discharge and functions from the [Get Started](V01_get_started.html) vignette, as shown below.
Please note that the calibration period is defined in the `CreateRunOptions()` function . Please note that the calibration period is defined in the `CreateRunOptions()` function .
```{r, warning=FALSE, fig.keep='none', results='hide', fig.height=10, fig.width=10, eval=TRUE, echo=FALSE, message=FALSE} <!-- ```{r, warning=FALSE, fig.keep='none', results='hide', fig.height=10, fig.width=10, eval=TRUE, echo=FALSE, message=FALSE} -->
example("Calibration_Michel", echo = FALSE, ask = FALSE) <!-- example("Calibration_Michel", echo = FALSE, ask = FALSE) -->
``` <!-- ``` -->
```{r, echo=TRUE, eval=FALSE} ```{r, echo=TRUE, eval=FALSE}
example("Calibration_Michel") example("Calibration_Michel")
``` ```
...@@ -54,15 +55,15 @@ Here we choose to minimize the root mean square error. ...@@ -54,15 +55,15 @@ Here we choose to minimize the root mean square error.
The change of the repository from the "real" parameter space to a "transformed" space ensures homogeneity of displacement in the different dimensions of the parameter space during the step-by-step procedure of the calibration algorithm of the model. The change of the repository from the "real" parameter space to a "transformed" space ensures homogeneity of displacement in the different dimensions of the parameter space during the step-by-step procedure of the calibration algorithm of the model.
```{r, warning=FALSE, results='hide'} ```{r, warning=FALSE, results='hide', eval=FALSE}
OptimGR4J <- function(Param_Optim) { OptimGR4J <- function(ParamOptim) {
## Transformation of the parameter set to real space ## Transformation of the parameter set to real space
Param_Optim_Vre <- airGR::TransfoParam_GR4J(ParamIn = Param_Optim, RawParamOptim <- airGR::TransfoParam_GR4J(ParamIn = ParamOptim,
Direction = "TR") Direction = "TR")
## Simulation given a parameter set ## Simulation given a parameter set
OutputsModel <- airGR::RunModel_GR4J(InputsModel = InputsModel, OutputsModel <- airGR::RunModel_GR4J(InputsModel = InputsModel,
RunOptions = RunOptions, RunOptions = RunOptions,
Param = Param_Optim_Vre) Param = RawParamOptim)
## Computation of the value of the performance criteria ## Computation of the value of the performance criteria
OutputsCrit <- airGR::ErrorCrit_RMSE(InputsCrit = InputsCrit, OutputsCrit <- airGR::ErrorCrit_RMSE(InputsCrit = InputsCrit,
OutputsModel = OutputsModel, OutputsModel = OutputsModel,
...@@ -73,7 +74,7 @@ OptimGR4J <- function(Param_Optim) { ...@@ -73,7 +74,7 @@ OptimGR4J <- function(Param_Optim) {
In addition, we need to define the lower and upper bounds of the four **GR4J** parameters in the transformed parameter space: In addition, we need to define the lower and upper bounds of the four **GR4J** parameters in the transformed parameter space:
```{r, warning=FALSE, results='hide'} ```{r, warning=FALSE, results='hide', eval=FALSE}
lowerGR4J <- rep(-9.99, times = 4) lowerGR4J <- rep(-9.99, times = 4)
upperGR4J <- rep(+9.99, times = 4) upperGR4J <- rep(+9.99, times = 4)
``` ```
...@@ -100,19 +101,19 @@ optPORT_ <- function(x) { ...@@ -100,19 +101,19 @@ optPORT_ <- function(x) {
lower = lowerGR4J, upper = upperGR4J, lower = lowerGR4J, upper = upperGR4J,
control = list(trace = 1)) control = list(trace = 1))
} }
list_opt <- apply(startGR4J, 1, optPORT_) listOptPORT <- apply(startGR4J, MARGIN = 1, FUN = optPORT_)
``` ```
We can then extract the best parameter sets and the value of the performance criteria: We can then extract the best parameter sets and the value of the performance criteria:
```{r, warning=FALSE, results='hide'} ```{r, warning=FALSE, results='hide', eval=FALSE}
list_par <- t(sapply(list_opt, function(x) x$par)) parPORT <- t(sapply(listOptPORT, function(x) x$par))
list_obj <- sapply(list_opt, function(x) x$objective) objPORT <- sapply(listOptPORT, function(x) x$objective)
df_port <- data.frame(list_par, RMSE = list_obj) parPORT <- data.frame(parPORT, RMSE = objPORT)
``` ```
As can be seen below, the optimum performance criterion values (column *objective*) can differ from the global optimum value in many cases, resulting in various parameter sets. As can be seen below, the optimum performance criterion values (column *objective*) can differ from the global optimum value in many cases, resulting in various parameter sets.
```{r, warning=FALSE} ```{r, warning=FALSE}
summary(df_port) summary(parPORT)
``` ```
The existence of several local minima illustrates the importance of defining an appropriate starting point or of using a multi-start strategy or a global optimization strategy. The existence of several local minima illustrates the importance of defining an appropriate starting point or of using a multi-start strategy or a global optimization strategy.
...@@ -153,16 +154,18 @@ optMALS <- Rmalschains::malschains(fn = OptimGR4J, ...@@ -153,16 +154,18 @@ optMALS <- Rmalschains::malschains(fn = OptimGR4J,
As it can be seen in the table below, the four additional optimization strategies tested lead to very close optima. As it can be seen in the table below, the four additional optimization strategies tested lead to very close optima.
```{r, warning=FALSE, echo=FALSE, eval=FALSE}
parGLOB <- data.frame(Algo = c("airGR", "PORT", "DE", "PSO", "MA-LS"),
round(rbind(
OutputsCalib$ParamFinalR ,
airGR::TransfoParam_GR4J(ParamIn = optPORT$par , Direction = "TR"),
airGR::TransfoParam_GR4J(ParamIn = as.numeric(optDE$optim$bestmem), Direction = "TR"),
airGR::TransfoParam_GR4J(ParamIn = as.numeric(optPSO$par) , Direction = "TR"),
airGR::TransfoParam_GR4J(ParamIn = optMALS$sol , Direction = "TR")),
digits = 3))
```
```{r, warning=FALSE, echo=FALSE} ```{r, warning=FALSE, echo=FALSE}
data.frame(Algo = c("airGR", "PORT", "DE", "PSO", "MA-LS"), parGLOB
round(rbind(
OutputsCalib$ParamFinalR ,
airGR::TransfoParam_GR4J(ParamIn = optPORT$par , Direction = "TR"),
airGR::TransfoParam_GR4J(ParamIn = as.numeric(optDE$optim$bestmem), Direction = "TR"),
airGR::TransfoParam_GR4J(ParamIn = as.numeric(optPSO$par) , Direction = "TR"),
airGR::TransfoParam_GR4J(ParamIn = optMALS$sol , Direction = "TR")),
digits = 3))
``` ```
<!-- This is an expected result because the response surface for quadratic performance criteria of the **GR4J** model is generally sufficiently well defined in the transformed parameter space to allow using a local optimization strategy instead of a more time consuming global optimization strategy. --> <!-- This is an expected result because the response surface for quadratic performance criteria of the **GR4J** model is generally sufficiently well defined in the transformed parameter space to allow using a local optimization strategy instead of a more time consuming global optimization strategy. -->
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment