Aller au contenu principal

Intermédiaire

Modeling Viability under Uncertainty

Soumis par admin_viabilityT le
Sous titre
An Illustration from Farming Systems
Type de document
Auteur(s)
Bates, Samuel; Angeon, Valérie; Désilles, Anna; Saint-Pierre, Patrick
Année de publication
2018
Thématique
Niveau de difficulté
Résumé

Uncertainty occupies a major place in the literature, both when it is being defined and when it is being measured. The mathematical viability framework provides useful concepts to go beyond the probabilistic views of uncertainty that are not able to capture all forms of uncertainty, particularly in the absence of statistical regularities. Bounded-set uncertainty can help to analyze changes in the evolutionary conditions that affect ecological and social systems with probabilistic or nonprobabilistic distributions. This paper introduces uncertainty into a viability model by associating stochastic and bounded-set uncertainty related to sales price as a driver of economic uncertainty. Based on an illustration of agroecosystems, the model identifies decision rules that guarantee viability. The larger the initial crop portfolio for sequential diversification is, the lower the costs to belong to the viability kernels will be, regardless of economic and environmental constraints. The diversification of farming systems transforms their complexity into an advantage against uncertainty, which opens up numerous viability trajectories.

Revue
Natural Resources Modeling
Volume
31: e12186

Modèles de viabilité appliqués à la gestion des ressources halieutiques

Date
15-03-2024
Lieu
Université de Bretagne Occidentale
Langue de la conférence
Niveau de difficulté
Description

Présentation d’un modèle de viabilité pour la régulation durable des pêcheries, en intégrant les contraintes biologiques et économiques.

Domaine
Intervenant(s)
Pr. Alain Lefort, Contenu à venir !

Julia

Soumis par admin_viabilityT le
Niveau de difficulté

Dans le cas où f {\displaystyle f}$\phi$ est un polynôme, l'ensemble de Julia rempli est le complémentaire du bassin d'attraction du point à l'infini; autrement dit, ce sont les points dont l'orbite est bornée. 

Étant donnés un nombres complexes, $u:=a+ib$, soit la fonction complexe $\phi(z)=z^2+c$ ou de manière équivalente, la fonction $\phi(x,y):=(x^2-y^2+a,2xy+b)$ avec $z=x+iy$, on considère la suite $(z_n)$ définie par la relation de récurrence : $z_{n+1}=\phi(z_n,u)$ avec $\phi(z)=z^2+c$,

Pour une valeur donnée de $u$, l'ensemble de Julia correspondant est la frontière de l'ensemble des valeurs initiales $z_0$ pour lesquelles la suite est bornée. 

D'après

Aubin, J.-P., Bayen, A., & Saint-Pierre, P. Viability Theory: New Directions. Springer. 2011.

Le sous-ensemble $K_u:=Viab_{\phi}(B(0,1))$ est le sous-ensemble de Julia rempli pour la function $\phi$ et sa frontière $J_u:=\partial K_u$ est l'ensemble de Julia.

L'Algorithme de Viabilité permet donc de calculer une approximation de ces ensembles de Julia.


Voici le noyau de viabilité approché obtenu en utilisant le logiciel VIABLAB : 

Pour calculer ce noyau de viabilité avec VIABLAB, utilisez les deux fichiers ci-dessous en suivant cette procédure :

Fichier de code

Lake eutrophication and riparian holdings

Soumis par admin_viabilityT le
Niveau de difficulté

Introduction 

The accumulation of nutrients (such as phosphorus or nitrogen) in the water of a lake can lead to a change of state that results in the proliferation of algae, the degradation of water quality and biodiversity, and possibly bacterial blooms: this is eutrophication. The problem of the lake and its riparian holdings is to determine whether it is possible to reconcile the practice of an activity which provides nutrients and the conservation of the lake in a desirable state (oligotrophic, as opposed to eutrophic).

This problem is described in detail in:

S. Martin. The cost of restoration as a way of defining resilience: a viability approach applied to a model of lake eutrophication. Ecol. Soc.   http://www.ecologyandsociety.org/vol9/iss2/art8

Nutrients inputs $L$ must be above a minimal threshold $L_{min}$, to take into account the needs of the holdings' activities; And the concentration of total Phosphorus $P$ must remain  below a threshold  $P_{max}$, to keep the lake in an oligotrophic state. These desirable states form the constraints set $K=[L_{min}, +\infty[ \times [0,P_{max}]$.

The evolution of the concentration of total phosphorus in the lake is modeled by a pseudo-sygmoid:

$$\frac {dP} {dt}=-bP(t)+L(t)+r\frac {P(t)^{q}} {m^{q} + P(t)^{q}} \qquad$$

It is assumed that the evolution of phosphorus inputs can be controlled (by decontamination units, the establishment of wetlands, changes in agricultural or industrial practices, etc.), and we model these controls by a single quantity $u\in U=[u_min,u_max]$. The dynamics of the inputs are modeled by:

$$\frac {dL} {dt}=u \in [- u_{min}, u_{max}] \qquad$$

The viabillity problem is then defined by:

\begin{equation} \label{eq:systemlac}
(P)\left\{
\begin{array}{l}
\frac{dL}{dt}=u\in U=\left[ u_{min},u_{max}\right] \\
\frac{dP}{dt}=-b P(t) + L(t) +r\frac{P(t)^{q}}{m^{q} + P(t)^{q}} \\
\left(L(t),P(t)\right) \in K=[L_{min}, +\infty[ \times [0,P_{max}]
\end{array}
\right.
\end{equation}
 

Exemple 1

The viabillity kernel can be obtained by calculating an integral curve (see page 22 in https://arxiv.org/pdf/2107.02684 ). Next figure shows the result for the following parameters:  $b=1,95$ an$^{-1}$ ; $q=1,9$ ; $m=19,44\  \mu gl^{-1}$; $r=72,22\  \mu gl^{-1}$ an$^{-1}$; $L_{min}=1,25\  \mu gl^{-1}$ ; $P_{max}=17,39\  \mu gl^{-1}$ ;   $|u_{min}|=u_{max}=3,15$.

 


 

Noyau de viabilité du problème du lac et des exploitations riverainesIn light blue the viabillity kernel. The dotted marine line shows the equilibrium curve of the system.


An approximation can be calculated directly with viability kernel calculation software such as ViabLab.

File .json (to be placed in the following repertory: VIABLAB/INPUT): Lac_params.json

File .h (to be placed in the following repertory: VIABLAB/source/data : data_Lac.h

These files correspond to the parameters: $b=0.8$ year$^{-1}$ ; $q=8$ ; $m=1\  \mu gl^{-1}$; $r=1\  \mu gl^{-1}$ year$^{-1}$; $L_{min}=0.1\  \mu gl^{-1}$ ; $P_{max}=1.4\  \mu gl^{-1}$ ;   $|u_{min}|=u_{max}=0.09$.

 

Le contrôle est discrétisé sur 3 valeurs étant donné les spécificités du problème.

La discrétisation est faite sur 5000 points / axe. L'approximation calculée par ViabLab est montrée sur la figure suivante. En rouge les seuils des contraintes. On voit que l'approximation du noyau est bien faite par l'extérieur.

Interaction model of a farmer and a restaurant

Soumis par admin_viabilityT le
Photo
Niveau de difficulté

This system describes a farm and a restaurant belonging to a same project. Consequently, they function in full cooperation.

Description of the system : 

de Lapparent, A., Martin, S. & Sabatier, R. Using System Modularity to Simplify Viability Studies: An Application to a Farm-Restaurant Interaction. Environ Model Assess (2024). https://doi.org/10.1007/s10666-024-10014-w

The object computed is a viability kernel. The model is discrete in states, controls and time.

The computation takes a moment (4088s on my computer), be patient...

 

Model

States and controls

State variables

NotationDescriptionNumber of pointsMaximal valueMinimal value
$x_1$Cumulative cash flow (€)41100 0000
$x_2$Restaurant attractivity coefficient (no unit)3110
$x_3$General Index for Soil Quality5110

upper limit of $x_1$ can be relaxed.


Control variables

NotationDescriptionNumber of pointsMaximal valueMinimal value
$u_1$Choice of N-crops rotation1261261
$u_2$Surface dedicated to market gardening (in ha)2120.05
$u_3$Price of a meal (in €)21152

Dynamics

Overall dynamics are:

\begin{equation}
   \mathcal{S}_U
   \begin{cases}
   x_{1}^{t+1} = x_{1}^t + G(x_{2}^t,u_{3}^t,R(x_3^t,u_1^t,u_2^t)) - E(u_{1}^t,u_{2}^t)\\
   x_{2}^{t+1} = \alpha(x_{2}^t,u_{3}^t,R(x_3^t,u_1^t,u_2^t))\\
   x_{3}^{t+1} = \Phi (x_{3}^t ,u_{1}^t,u_{2}^t) \\
   \end{cases}
\end{equation}

 

with the following functions:

Notation

Description

$R(x_3,u_1,u_2)$Agricultural production
$G(x_2,u_3,R(x_3,u_1,u_2))$Restaurant economic outcome
$\alpha(x_2,u_3,R(x_3,u_1,u_2))$Transition function for the restaurant attractivity
$\Phi(x_3,u_1,u_2)$Transition function for the GISQ
$E(u_1,u_2)$Cost of agricultural production

Some dynamics require to use grid parameters. Consequently, a function has been implemented into the source file to get these values.

 

Constraints

There are two cconstraints in this system: the global system has to be profitable and a minimal soil quality has to be preserved in order to address sustainability concerns. These constraints take the form of thresholds on the cumulative cash flow ($x_{1} \geq x_{1min}$) and on soil quality ($x_3 \geq x_{3min}$), respectively. In other words, $(x_1^t,x_2^t,x_3^t)$ must remain in $K$ for all $t\in \mathbb{N}$ with : 
\begin{equation}
K:=\{(x_1,x_2,x_3)\in \mathbb{R}^+\times [0;1]^2 \; |\; x_1\geq x_{1min} \text{ and }x_3\geq x_{3min}\}.
\label{K}
\end{equation}

 

 

Implementation parameters

Time horizon

The time horizon (for trajectory computations) is 20 years.


Algorithm parameters

Default parameters are used.


System parameters

We used the parameters for a low-hypotheses computation.

   "SYSTEM_PARAMETERS": {
       "DYNAMICS_TYPE": 2,
       "DYN_BOUND": 1,
       "DYN_BOUND_COMPUTE_METHOD": 2,
       "IS_TIMESTEP_GLOBAL": 0,
       "LIPSCHITZ_CONSTANT": 1,
       "LIPSCHITZ_CONSTANT_COMPUTE_METHOD": 2,
       "TIME_DISCRETIZATION_SCHEME": 4
   }

 

Viability kernel computed using ViabLab

Systèmes transhumant multi-espèce en Mongolie

Soumis par rsabatier le
schéma
Domaine
Niveau de difficulté

Ce modèle représente l’effet du pâturage de troupeaux plurispécifiques sur la ressource alimentaire ainsi que ces effets sur le revenu et la capacité d’autosubsistance des éleveurs. Du fait de la nature très extensive des troupeaux considérés, seul un contrôle correspondant à l’abattage des animaux permet de réguler le troupeau (pas de gestion de la reproduction ni d’affouragement).

Ces systèmes pastoraux ont la particularité d’être soumis à des aléas bioclimatiques extrêmes nommés Dzuds qui seront au centre de la démarche de modélisation que nous entreprendrons.

Les Dzuds correspondent à des épisodes de mortalité massive et soudaine dans les troupeaux intervenant généralement en fin d’hiver lorsque le chargement est trop important par rapport à la ressource fourragère et que les conditions climatiques sont particulièrement rudes. Ce phénomène binaire dépend donc à la fois des pratiques des éleveurs et des conditions climatiques puisque c’est bien la combinaison des deux facteurs qui entraine son déclenchement.
Le modèle que nous avons développé lie la dynamique de troupeaux de 5 espèces d’herbivores (bovins, ovins, caprins, équins et chameaux) à la dynamique de la ressource fourragère et pose le Dzud comme mécanisme central dans la dynamique du système.

 

Sur le plan méthodologique, ce cas d'application à permis d'évaluer sur un même cas d’étude les trois propriétés de robustesse, adaptabilité et résilience.

Sur le plan appliqué, le travail que nous avons mené sur le temps long sur ce cas d’étude nous a permis de comprendre finement la dynamique du système. Nous avons ainsi pu distinguer deux régimes de fonctionnement viables du système : des troupeaux à petits effectifs permettant d’éviter le déclenchement des Dzuds en préservant la ressource ou des troupeaux à très grands effectifs permettant d’encaisser les Dzuds lorsque ceux-ci se produisent.

Le modèle détaillé peut être retrouvé dans l'article suivant:
Rodolphe Sabatier, Frédéric Joly, Bernard Hubert. Assessing both ecological and engineering resilience of a steppe agroecosystem using the viability theory. Agricultural Systems, Elsevier Masson, 2017, 157, pp.146-156. ⟨10.1016/j.agsy.2017.07.009⟩. ⟨hal-02627849⟩

Installation de ViabLab en clonant un dépôt Git

Soumis par admin_viabilityT le
Description

Comment installer ViabLab à partir du dépôt sur GitHub 

Présentation formation

Sous MacOS :

Prérequis : 

  • Installer g++ [todo]
  • Installer cmake-3.13.5 

Pour vérifier la version de cmake installée,

which cmake

Si ce n'est pas la bonne version, la désinstaller : 

brew uninstall --force cmake

Telecharger cmake-3.13.5-Darwin-x86_64.tar.gz sur https://github.com/Kitware/CMake/releases/tag/v3.13.5 

Verifier la version de cmake tékéchargée, dans le répertoire tékéchargements 

ls ~/Downloads | grep cmake

doit répondre

cmake-3.13.5-Darwin-x86_64.tar

 Décompresser l'archive :

 tar -xvf cmake-3.13.5-Darwin-x86_64.tar

  Déplacer le dossier dans le dossier viablab :

 mv cmake-3.13.5-Darwin-x86_64 ~/Desktop/viablab/cmake

 Vérifier la version de cmake installée :

 ~/Desktop/viablab/cmake/CMake.app/Contents/bin/cmake --version

 doit répondre : 

cmake version 3.13.5

 Ajouter la commande cmake au PATH global pour l'utiliser plus facilement : 

nano ~/.zshrc

Ajouter la ligne suivante à la fin du fichier :
export PATH="$HOME/Desktop/viablab/cmake/cmake-3.13.5-Darwin-x86_64/CMake.app/Contents/bin:$PATH"
 Sauvegarder et quitter (appuyez sur Ctrl + X, puis Y, et enfin Entrée). 
 Appliquez les modifications :

 source ~/.zshrc
  • Installer les libriries boost [todo]

Installation de ViabLab :

[To do] #### Suivez https://viability-theory.org/node/22/ pour cloner le dossier VIABLAB  ####

  • Vérifier que le dossier VIABLAB/build est vide :
cd ~/VIABLAB 
rm -rf build
mkdir build
  • Remplacer le fichier CMakeLists.txt dans VIABLAB/source par celui-ci CMakeLists.txt
    Dans le nouveau fichier CMakeLists.txt, remplacer le contenu sous  ## Substitute the text within the parentheses with your ... path  lignes 8, 15, 27 et 53 par vos propres chemins d'accès.
  • Générer le projet avec CMake depuis le dossier build 
 cd build 
 cmake -G "Unix Makefiles" -D CMAKE_BUILD_TYPE=Debug ../source

   Des fichiers sont crées dans le dossier build.

 

Sous LINUX :

Prérequis : 

  • Avoir installé g++ :   

 Pour vérifier si g++ est installé, dans un terminal : 

g++ --version

Si g++ n'est pas encore installé sur votre système :        

sudo apt install g++
  • Avoir installé cmake version 3.22.1 : 

Pour vérifier si cmake est installé et connaitre sa version, dans un terminal :

cmake --version

Si ce n'est pas la bonne version , supprimer les versions existantes de CMake, dans un terminal :

sudo apt remove --purge cmake

Vérifier la version de votre Ubuntu, dans un terminal : 

lsb_release -a

 Si votre version est 22.04, installer CMake 3.22.1 automatiquement :

    sudo apt update
    sudo apt install cmake

Si votre version n’est pas 22.04, installer les dépendances nécessaires :
 

    sudo apt update
    sudo apt install -y build-essential libssl-dev

 Télécharger CMake 3.22.1 :

       wget https://github.com/Kitware/CMake/releases/download/v3.22.1/cmake-3.22.1.tar.gz

  Extraire l'archive :

    tar -zxvf cmake-3.22.1.tar.gz
    cd cmake-3.22.1

    Construire et installer :

    ./bootstrap
    make -j$(nproc)      # Compiles using all available CPU cores
    sudo make install

Vérifier la version de cmake, dans un terminal :

cmake --version

Doit afficher  cmake version 3.22.1.

  • Avoir installé les Libraries Boost (ce sont des librairies C/C++ complémentaires, open source dont VIABLAB est dépendant):

   Pour vérifier la version de Boost installée:

 grep "#define BOOST_LIB_VERSION" /usr/include/boost/version.hpp

Si Boost n'est pas encore installé:        

sudo apt install libboost-all-dev
  • Avoir installé l'IDE Eclipse (facultatif)

    sudo apt-get install -y eclipse-cdt

Prérequis :

  • Créer le dossier qui contiendra le programme et les résultats dev-cpp, créer deux sous dossier /libs et /ViablabGit, et dans /ViablabGit, un dossier /VIABLAB
  • git : pour l'installer, taper dans un terminal :
sudo apt-get update
sudo apt install git

A partir du dépôt forgemia (pour les membres d'Inrae) :

Aller sur la page : https://github.com/lastre-viab/VIABLAB

Se connecter

Aller sur votre profil - Edit Profile - SSH Keys

Si le champ "Your SSH Keys" est vide : 

  • Générer une clé, dans un terminal, tapez 
ssh-keygen
  • Quand on demande un répertoire, on peut laisser vide, un répertoire est créé automatiquement
  • Entrer une phrase à mémoriser
  • Dans le répertoire créé, deux fichiers sont créés, copier le contenu du fichier .pub

Cliquer sur "Add new key"

Coller dans le champ "Your SSH Keys" 

Cliquer sur "Add key".

Dans un terminal, 

git clone git@forgemia.inra.fr:lisc/VIABLAB.git <nom du dossier (sinon sera copié dans le dossier courant>

Choisir la branche que l'on souhaite utiliser (celle de Matéu est my_branch) avec 

git checkout my_branch

Dans le répertoire VIABLAB/, créer le répertoire build 

mkdir build

Si pas de cmake,  (pour vérifier taper cmake --version), il faut installer cmake :

brew install cmake

MAIS il semble y avoir un problème de version, la commande précédente a installé une version 4..... il semblerait qu'il faille utiliser une version au plus 3....

cmake -S source/ - B build/

 

Sous WINDOWS :

Prérequis :

  • Avoir créé le dossier qui contiendra le programme et les résultats dev-cpp, créer deux sous dossier /libs et /ViablabGit, et dans /ViablabGit, un dossier /VIABLAB
  • Avoir installé git-for-Windows : 

Aller à l'adresse https://git-scm.com/downloads/win 

Cliquer sur: Click here to download

Exécuter le fichier téléchargé et choisir toutes les options par defaut.

  • Avoir installé MinGW, une distribution de compilateurs C/C++ GNU pour Windows :   

 A l'adresse https://sourceforge.net/projects/mingw/files/latest/download , téléchargez l'application MinGW Installation Manager.

Ouvrir cette application 

Dans le panneau gauche, développer All packages => MinGW, sélectionner MinGW Base System. Sélectionner dans la liste des packages tous les packages dont le nom contient « pthread », choisir Mark For Installation. Faire de même pour les packages gcc, omp, g++, libstd, mingw s’ils ne sont pas sélectionnés.

Une fois les packages sélectionnés, dans le menu Installation, cliquer sur Apply changes et attendre la fin d’installation.

Ajouter l’emplacement de l’installation MinGW dans la variable PATh du système :

Dans paramètres/settings du système, on cherche environmental/environnement et on clique dans «edit environment variables for your account »

Aller dans Path, edit, new et on copie colle : C:\MinGW\bin

Eteindre et redémarrer l'ordinateur.
 

  • Avoir installé cmake version 3.31.7:

Pour vérifier si cmake est installé et connaitre sa version, dans un terminal :

??

Si ce n'est pas la bonne version , supprimer les versions existantes de CMake, dans un terminal :

??

 Aller à l'adresse https://github.com/Kitware/CMake/releases/download/v3.31.7/cmake-3.31.7-windows-x86_64.msi pour télécharger le Windows x64 installer.

Vérifier la version de cmake, dans un terminal :

????

Doit afficher  cmake version 3.31.7.

  • Avor installé boost, les Libraries Boost sont nécessaires, ce sont des librairies C/C++ complémentaires, open source dont VIABLAB est dépendant.
  • Avoir installé Eclipse Environnement de développement intégré) (facultatif) :  

Aller à l'adresse  https://www.eclipse.org/downloads/packages/release/kepler/sr2/eclipse-ide-cc-developers

Cliquer sur download, à nouveau sur download.

Une fois téléchargé, cliquer sur l’installeur et chosir  Eclipse IDE for C/C++ developers

On ‘’launch’’ par la suite (première exécution pour voir que tout fonctionne)

On ‘’launch’’ de nouveau.

Installation de Viablab :

  • A l'adresse, https://github.com/lastre-viab/VIABLAB/releases/tag/v3.0
  • Télécharger InstallerViabLabGui_Win.exe
  • Pour rendre le fichier exécutable
??
  • Pour exécuter l'installeur
??
  • Next - Next - Next - Install - Finish
  • Puis ouvrir un PowerShell, se placer à l’aide de la commande cd dans le répertoire build : ~/ViabLabGui/bin/VIABLAB/build  
  • puis, pour une utilisation sans l'IDE Eclipse :
cmake -G "MinGW Makefiles" ../source
  • ou, pour une utilisation avec Eclipse :
cmake -G"Eclipse CDT4 - MinGW Makefiles" -D CMAKE_BUILD_TYPE=Debug ../source

Après l’exécution de cmake le projet est prêt pour être importé dans Eclipse : le répertoire build ( vide au début) contient les données générées par cmake.

Dans Eclipse, aller dans le menu File => Import et sélectionner l’option Existing Projects into Workspace

Cliquer sur Next

Ensuite dans le fenêtre suivante sélectionner le répertoire build

Cliquer sur Finish

Après l’import on voit l’arborescence du projet dans le panneau gauche