From 5f79785cbc1775af85bcb5fce994ab178fc7b2d2 Mon Sep 17 00:00:00 2001
From: Delaigue Olivier <olivier.delaigue@irstea.priv>
Date: Tue, 23 Oct 2018 15:06:12 +0200
Subject: [PATCH] v1.1.2.17 CLEAN: syntaxe revision of vignette param_optim
---
DESCRIPTION | 2 +-
NEWS.rmd | 2 +-
vignettes/V02.1_param_optim.Rmd | 53 +++++++++++++++++----------------
3 files changed, 30 insertions(+), 27 deletions(-)
diff --git a/DESCRIPTION b/DESCRIPTION
index aa2b39ca..df670acc 100644
--- a/DESCRIPTION
+++ b/DESCRIPTION
@@ -1,7 +1,7 @@
Package: airGR
Type: Package
Title: Suite of GR Hydrological Models for Precipitation-Runoff Modelling
-Version: 1.1.2.16
+Version: 1.1.2.17
Date: 2018-10-23
Authors@R: c(
person("Laurent", "Coron", role = c("aut", "trl"), comment = c(ORCID = "0000-0002-1503-6204")),
diff --git a/NEWS.rmd b/NEWS.rmd
index 6b619ad8..57069879 100644
--- a/NEWS.rmd
+++ b/NEWS.rmd
@@ -13,7 +13,7 @@ output:
-### 1.1.2.16 Release Notes (2018-10-23)
+### 1.1.2.17 Release Notes (2018-10-23)
diff --git a/vignettes/V02.1_param_optim.Rmd b/vignettes/V02.1_param_optim.Rmd
index 8ee08c30..272420b7 100644
--- a/vignettes/V02.1_param_optim.Rmd
+++ b/vignettes/V02.1_param_optim.Rmd
@@ -17,7 +17,7 @@ library(hydroPSO)
library(Rmalschains)
# source("airGR.R")
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
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 .
-```{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)
-```
+<!-- ```{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) -->
+<!-- ``` -->
+
```{r, echo=TRUE, eval=FALSE}
example("Calibration_Michel")
```
@@ -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.
-```{r, warning=FALSE, results='hide'}
-OptimGR4J <- function(Param_Optim) {
+```{r, warning=FALSE, results='hide', eval=FALSE}
+OptimGR4J <- function(ParamOptim) {
## Transformation of the parameter set to real space
- Param_Optim_Vre <- airGR::TransfoParam_GR4J(ParamIn = Param_Optim,
- Direction = "TR")
+ RawParamOptim <- airGR::TransfoParam_GR4J(ParamIn = ParamOptim,
+ Direction = "TR")
## Simulation given a parameter set
OutputsModel <- airGR::RunModel_GR4J(InputsModel = InputsModel,
RunOptions = RunOptions,
- Param = Param_Optim_Vre)
+ Param = RawParamOptim)
## Computation of the value of the performance criteria
OutputsCrit <- airGR::ErrorCrit_RMSE(InputsCrit = InputsCrit,
OutputsModel = OutputsModel,
@@ -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:
-```{r, warning=FALSE, results='hide'}
+```{r, warning=FALSE, results='hide', eval=FALSE}
lowerGR4J <- rep(-9.99, times = 4)
upperGR4J <- rep(+9.99, times = 4)
```
@@ -100,19 +101,19 @@ optPORT_ <- function(x) {
lower = lowerGR4J, upper = upperGR4J,
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:
-```{r, warning=FALSE, results='hide'}
-list_par <- t(sapply(list_opt, function(x) x$par))
-list_obj <- sapply(list_opt, function(x) x$objective)
-df_port <- data.frame(list_par, RMSE = list_obj)
+```{r, warning=FALSE, results='hide', eval=FALSE}
+parPORT <- t(sapply(listOptPORT, function(x) x$par))
+objPORT <- sapply(listOptPORT, function(x) x$objective)
+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.
```{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.
@@ -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.
+```{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}
-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))
-
+parGLOB
```
<!-- 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. -->
--
GitLab