Tutoriel - Estimation d'une modèle larve/imago sur un bassin versant

Introduction

Il s'agit d'étudier les déplacements des larves et des imagos sur un bassin versant. Cette étude s'appuie sur des données d'abondance des larves. Le but de ce tutoriel est de modéliser ces déplacements par un modèle de réaction-diffusion hétérogène paramétré, puis d'ajuster le modèle. Dans un premier temps, l'étude portera sur des données simulées puis sera déclinée sur les données d'abondance.

La suite de cette page décrit comment mener cette étude dans MSE, d'une part via l'interface, d'autre part via un script python

Description de l'étude

Il s'agit d'une étude portant sur 2 espèces avec 1 paramètre :

gen1

import os
import mse
MY_OUTPUT_DIR=os.getenv("MSE_OUTPUT_DIR", "/home/usermse/BASSINVERSANT/")
mse.setStringParam(mse.MSE_KEY_OUTPUT_DIR,MY_OUTPUT_DIR)
mse.setIntParam(mse.MSE_KEY_MODEL_NBSPECIES,2)
mse.setIntParam(mse.MSE_KEY_MODEL_NBPARAMS,1)

 

Description de la zone d'étude

La géométrie du bassin versant est un polygone importé dans la bibliothèque géométrique de MSE par l'outils ImportPolygone.

La zone d'étude le bassin versant :

geo Bassin

La discrétisation obtenue avec un point tout les 50 mètres est un maillage de 6950 points:

maillage Bassin

 

mse.setStringParam(mse.MSE_KEY_GEOM_DIR,"/opt/MSE/trunk/GEODATA/BASSINVERSANT/")
mse.setRealParam(mse.MSE_KEY_GEOM_NPERLENGTH,0.02)
mse.setIntParam(mse.MSE_KEY_GEOM_SYM,0)
mse.setIntParam(mse.MSE_KEY_GEOM_REVEDGE,1)
mse.buildGeom()
mse.initGradEdp()
mse.initModel()
mse.buildDirectories()
os.system("cd "+OUTPUT_DIR+";/opt/freefem++/src/nw/FreeFem++-nw  "+OUTPUT_DIR+"/buildXY.edp")

Description du modèle de réaction diffusion

Le modèle étudié est le suivant :

model1pbassin

model1IHM

diff

ic

 

mse.setfxExp(0,"0.5*b-a")
mse.setdyfxExp(0,0,"-1")
mse.setdyfxExp(1,0,"0.500000000000000")
mse.setdPiFj(0,0,"0")

if (modelExp==1):
    mse.setfxExp(1,"-0.5*b+exp(p1*R)*a-b*b/100")
    mse.setdyfxExp(0,1,"exp(R*p1)")
    mse.setdyfxExp(1,1,"-b/50 - 0.5")
    mse.setdPiFj(0,1,"R*a*exp(R*p1)")
else:
    mse.setfxExp(1,"-0.5*b+p1*R*a-b*b/100")
    mse.setdyfxExp(0,1,"R*p1")
    mse.setdyfxExp(1,1,"-b/50 - 0.5")
    mse.setdPiFj(0,1,"R*a")
mse.buildModel()
mse.buildModelParams()
mse.buildWVarf()
mse.printTSOneStepW()
mse.setDiffusionxExp(0,0,"5")
mse.setdpiDiffusionxExp(0,0,0,"0")
mse.setDiffusionyExp(0,0,"5")
mse.setdpiDiffusionyExp(0,0,0,"0")
mse.setDiffusionxExp(1,0,"0")
mse.setdpiDiffusionxExp(0,1,0,"0")
mse.setDiffusionyExp(1,0,"0")
mse.setdpiDiffusionyExp(0,1,0,"0")
mse.buildDiffusion()
mse.setIntParam(mse.MSE_KEY_FORCE_INITIAL_STATE,1)
mse.setInitialState(0,0,"0")
mse.setdPICiFj(0,0,"0")
mse.setInitialState(0,1,"exp(-0.0001*(x-26308)*(x-26308)+(y-674160)*(y-674160)))")
mse.setdPICiFj(0,1,"0")
mse.printInitialState()

Comme décrit dans 'import d'une covariable spacialisée', la covariable R est importée à partir d'un raster de la manière suivante:

mse.setStringParam(mse.MSE_KEY_DATA_RASTERDIR,"/opt/MSE/trunk/Tutorial/BASSINVERSANT/RASTER/")
mse.setStringParam(mse.MSE_KEY_DATA_ADDCOV,"R")
os.system("cd /home/usermse/BASSINVERSANT/;/opt/freefem++/src/nw/FreeFem++ /home/usermse/BASSINVERSANT//showHeterogenCov.edp")

R

 

 

Définition des paramètres du simulateur

La période de simulation est de 180 jours. Le pas de temps varie de 0.1 j à 6.4 j et est ajusté selon la tolérance prescrite :

sim

mse.setRealParam(mse.MSE_KEY_SIM_TEND,180.0)
mse.setRealParam(mse.MSE_KEY_SIM_MINSTEP,0.1)
mse.setIntParam(mse.MSE_KEY_SIM_MAXMULTSTEP,64)
mse.setRealParam(mse.MSE_KEY_SIM_NEWTON_CRIT,0.01)
mse.setRealParam(mse.MSE_KEY_SIM_ADAPTIV_REL_ERROR,0.02)
mse.setIntParam(mse.MSE_KEY_SIM_NEWTON_MIN_IT,1)
mse.setIntParam(mse.MSE_KEY_SIM_NEWTON_MAX_IT,10)
mse.setIntParam(mse.MSE_KEY_SIM_FORCE_POSITIV,1)
mse.buildTS()

 

Définition de la fonction objectif à minimiser

Cas de données simulées

La trajectoire de référence a été obtenue avec le paramètre p1=0.2. Il s'agit alors de minimiser l'intégrale de la différence quadratique entre la simulation et la référence pour les pas de temps spécifiés.

La fonction de coût associé au paramètre (p1) est:

mk

Avec uref la simulation de référence.

Cela se spécifie de la façon suivante dans l'interface :

d

mse.setIntParam(mse.MSE_KEY_CONTRAST_TYPE,5)
mse.buildContrast()

Cas des données d'abondance

à venir

Description du problème d'optimisation

Il s'agit d'un problème d'optimisation sous contraintes. Pour le résoudre, un algorithme de Quasi-Newton BFGS est couplé au simulateur. Il s'agit d'un algorithme itératif pour lequel le point de départ est précisé ainsi que les conditions de convergence :

optim

mse.initBfgsStruct()
mse.setBfgsLowerBound(0,-1)
mse.setBfgsUpperBound(0,0.3)
mse.setBfgsInitialState(0,0.15)
mse.setBfgsTol(1e-3)
mse.buildBfgs()

Résultat de l'optimisation

Cas des données simulées

Dans ce cas, 4 itérations suffisent pour converger vers un optimum local (p1=0.20001 au lieu de 0.2) qui correspond aux données simulées.

optim

L'animation suivante permet de visualiser la simulation pour le paramètre optimal.

larv imago
                            A gauche, la densité d'adultes                                         A droite, la densité de larves

 

Dans le cas du modèle à  2 paramètres présenté ci-dessous, l'optimisation converge en 19 itérations vers l'optimum. Les figures suivantes montrent le comportement de l'algorithme d'optimisation.

m2p

traj
                                                                    trajectoire (p1,p2) des itérations de l'algorithme d'optimisation
err2
                         Evolution du log(erreur) au cours des itérations de l'algorithme d'optimisation

 

Dans le cas du modèle à 4 paramètres présenté ci-dessous, l'optimisation converge. Les figures suivantes montrent le comportement de l'algorithme d'optimisation. Les paramètres (p1,p2,p3) convergent vers les valeurs attendues, alors que l'algorithme ne parvient pas ajuster la valeur du coefficient de diffusion p4. Ce comportement semble montrer que le modèle se comporte surtout comme un modèle de réaction et peu comme un modèle de diffusion.

bassin 4p

f