Viabilité et transition énergétique
Modélisation des politiques énergétiques respectant les contraintes de viabilité environnementale et économique.
Modélisation des politiques énergétiques respectant les contraintes de viabilité environnementale et économique.
Étude de modèles de viabilité appliqués à la régulation des populations et à la santé publique.
Présentation d’un modèle de viabilité pour la régulation durable des pêcheries, en intégrant les contraintes biologiques et économiques.
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.
Dans le cas où 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 :
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}
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$.
In 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.

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...
State variables
| Notation | Description | Number of points | Maximal value | Minimal value |
| $x_1$ | Cumulative cash flow (€) | 41 | 100 000 | 0 |
| $x_2$ | Restaurant attractivity coefficient (no unit) | 31 | 1 | 0 |
| $x_3$ | General Index for Soil Quality | 51 | 1 | 0 |
upper limit of $x_1$ can be relaxed.
Control variables
| Notation | Description | Number of points | Maximal value | Minimal value |
| $u_1$ | Choice of N-crops rotation | 126 | 126 | 1 |
| $u_2$ | Surface dedicated to market gardening (in ha) | 21 | 2 | 0.05 |
| $u_3$ | Price of a meal (in €) | 21 | 15 | 2 |
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.
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}
The time horizon (for trajectory computations) is 20 years.
Default parameters are used.
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
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⟩
Pour vérifier la version de cmake installée,
which cmakeSi ce n'est pas la bonne version, la désinstaller :
brew uninstall --force cmakeTelecharger 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 cmakedoit répondre
cmake-3.13.5-Darwin-x86_64.tarDécompresser l'archive :
tar -xvf cmake-3.13.5-Darwin-x86_64.tarDéplacer le dossier dans le dossier viablab :
mv cmake-3.13.5-Darwin-x86_64 ~/Desktop/viablab/cmakeVérifier la version de cmake installée :
~/Desktop/viablab/cmake/CMake.app/Contents/bin/cmake --versiondoit répondre :
cmake version 3.13.5Ajouter la commande cmake au PATH global pour l'utiliser plus facilement :
nano ~/.zshrcAjouter 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[To do] #### Suivez https://viability-theory.org/node/22/ pour cloner le dossier VIABLAB ####
cd ~/VIABLAB
rm -rf build
mkdir build cd build
cmake -G "Unix Makefiles" -D CMAKE_BUILD_TYPE=Debug ../sourceDes fichiers sont crées dans le dossier build.
Pour vérifier si g++ est installé, dans un terminal :
g++ --versionSi g++ n'est pas encore installé sur votre système :
sudo apt install g++Pour vérifier si cmake est installé et connaitre sa version, dans un terminal :
cmake --versionSi ce n'est pas la bonne version , supprimer les versions existantes de CMake, dans un terminal :
sudo apt remove --purge cmakeVérifier la version de votre Ubuntu, dans un terminal :
lsb_release -aSi votre version est 22.04, installer CMake 3.22.1 automatiquement :
sudo apt update
sudo apt install cmakeSi votre version n’est pas 22.04, installer les dépendances nécessaires :
sudo apt update
sudo apt install -y build-essential libssl-devTélécharger CMake 3.22.1 :
wget https://github.com/Kitware/CMake/releases/download/v3.22.1/cmake-3.22.1.tar.gzExtraire l'archive :
tar -zxvf cmake-3.22.1.tar.gz
cd cmake-3.22.1Construire et installer :
./bootstrap
make -j$(nproc) # Compiles using all available CPU cores
sudo make installVérifier la version de cmake, dans un terminal :
cmake --versionDoit afficher cmake version 3.22.1.
Pour vérifier la version de Boost installée:
grep "#define BOOST_LIB_VERSION" /usr/include/boost/version.hppSi Boost n'est pas encore installé:
sudo apt install libboost-all-devAvoir installé l'IDE Eclipse (facultatif)
sudo apt-get install -y eclipse-cdtsudo apt-get update
sudo apt install gitAller 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 :
ssh-keygenCliquer 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_branchDans le répertoire VIABLAB/, créer le répertoire build
mkdir buildSi pas de cmake, (pour vérifier taper cmake --version), il faut installer cmake :
brew install cmakecmake -S source/ - B build/
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.
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.
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.
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.
????cmake -G "MinGW Makefiles" ../sourcecmake -G"Eclipse CDT4 - MinGW Makefiles" -D CMAKE_BUILD_TYPE=Debug ../sourceAprè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
VIABLAB est une bibliothèque implémentant un ensemble d'algorithmes numériques de la théorie mathématique de la viabilité. Développée par Anna DESILLES en collaboration avec des chercheurs du LASTRE, sous la direction de Jean-Pierre Aubin, cette bibliothèque permet l'analyse de systèmes dynamiques contrôlés sous contraintes d'état.