Skip to content

Latest commit

 

History

History
173 lines (136 loc) · 8.72 KB

README.fr.md

File metadata and controls

173 lines (136 loc) · 8.72 KB

FMT (Forêt Modélisée dans le Temps)





Cette page ne donne qu'un aperçu du processus d'installation et des fonctionnalités de FMT. Pour plus détails, visitez note page de documentation pour FMT.

📑 Description

FMT (Forêt Modélisée dans le Temps) est une librairie de type logiciel libre pour l'aménagement forestier.

  • C'est une librairie C++ faite pour interpréter des modèles de planification forestière basés sur les fichiers Woodstock.
  • Elle peut être utilisé avec Python, Cran-R ou directement en C++.
  • Son approche générique de la planification forestière permet à l'utilisateur de manipuler des modèles de planification forestière et de générer des solutions.
  • Son objectif principal est d'amener les différents types de modèles de planification forestière sur une même librairie générique pour aider la communauté à développer de nouvelles approches pour résoudre les problèmes de planification forestière, et d'améliorer les approches déjà présentes depuis longtemps.

✨ Capacités

Modèle de planification spatialement référencé

FMT permet à l'utilisateur de générer et de résoudre des modèles spatialement référencé de TYPE III. L'outil peut être utilisé pour réaliser des analyses de sensibilité sur plusieurs paramètres du modèle de planification. L'outil peut aussi être utilisé pour analyser l'impact d'évènements stochastiques comme les épisodes de feux de forêt et de tordeuse des bourgeons de l'épinette en utilisant la replanification.

Modèle de planification spatialement explicite

FMT offre une plateforme sur laquelle construire des heuristiques pour solutionner des problèmes de planification forestière. FMT est l'outil parfait pour solutionner des problèmes spécifiques aux enjeux de l'utilisateur comme l'allocation de calendrier de chantier de récolte. Il permet aussi l'implémentation de processus de simulation. La librairie offre aussi des outils permettant la spatialisation de solution spatialement référencée et la génération de solution spatialement explicite.

FMT est très utile lorsqu'on doit implémenter des méta-heuristiques comme le Recuit Simulé, la recherche génétique ou la recherche tabou dans un contexte de planification forestière.

Si votre intrant principal est un modèle Woodstock, FMT est probablement un bon choix de plateforme pour développer de nouvelles approches d'optimisation ou de simulation de calendrier de récolte ou d’événements stochastiques.

💽 Installation

La manière la plus simple d'utiliser FMT est d'utiliser Cmake >= 3.15 pour génerer une librairie partagée pour R ou pour Python, ou bien directement en C++. Le script Cmake de ce repository permet de génerer FMT sous Windows en utilisant VS2017/2019 ou MINGW-64 sur MSYS2 ou CYGWIN.





📦 Dépendances

Requises :

Optionelles :

📖 Documentation

FMT possède une documentation écrite à la main, détaillée et avec des exercices; ainsi qu'une documentation générée par le biais de Doxygen. Les deux sont accessibles via la page web de documentation de FMT.





Si vous souhaitez compiler la documentation Doxygen par vous même, dans une invite de commande Powershell, allez dans le dossier FMT et utilisez :

 cd Documentation
 doxygen FMTdoxygenconfig

Pour remplir les commentaires dans les fichiers sources R (.R) et Python (.py), utilisez :

 cd Documentation
 python commentsPythonandR.py

Voici une présentation pour vous former à l'API FMT(R/Python) Formation_FMT_R_Python.pptx

👉 Exemples

L'exemple suivant lit un modèle, génère un modèle de programmation linéaire de planification forestière de type III et solutionne ce modèle.

  • En utilisant Python
from FMT import Models
from FMT import Parser

modelparser = Parser.FMTmodelparser()
models = modelparser.readproject("pathtoprimaryfile",["scenariox"])# Lit le scénario x depuis un fichier primaire (.pri)
optimizationmodel=Models.FMTlpmodel(models[0],Models.FMTsolverinterface.CLP)# Construit un modèle de programmation linéaire de type III depuis un FMTmodel

### Construit le graphe pendant 10 périodes
for period in range(0,10):
      print(optimizationmodel.buildperiod())

# Maintenant, on ajoute la fonction d'object au FMTlpmodel et toutes les contraintes
constraints = optimizationmodel.getconstraints()
objective = constraints.pop(0)
for constraint in constraints:
  print(optimizationmodel.setconstraint(constraint))
print(optimizationmodel.setobjective(objective))
# On fait une résolution initiale du modèle de planification forestière
optimizationmodel.initialsolve()
  • En utilisant R
library(FMT)
modelparser<-new(FMTmodelparser)
models<-modelparser$readproject("pathtoprimaryfile",c("scenariox"),TRUE,TRUE,TRUE)# Lit le scénario x depuis un fichier primaire (.pri)
optimizationmodel<-new(FMTlpmodel,models[[1]],FMTsolverinterface$CLP)# Construit un modèle de programmation linéaire de type III depuis un FMTmodel
emptyschedule<-new(FMTschedule)

### Construit le graphe pendant 10 périodes
for (period in 1:10)
 {
 print(optimizationmodel$buildperiod(emptyschedule,FALSE)$str())
 }
# Maintenant, on ajoute la fonction d'object au FMTlpmodel et toutes les contraintes
allmodelconstraints<-optimizationmodel$getconstraints()
modelobjective<-allmodelconstraints[[1]]
modelconstraints<-allmodelconstraints[2:length(allmodelconstraints)]
for (constraint in modelconstraints)
 {
 print(optimizationmodel$setconstraint(constraint)$str())
 }
print(optimizationmodel$setobjective(modelobjective)$str())
# On fait une résolution initiale du modèle de planification forestière
optimizationmodel$initialsolve()
  • En utilisant C++
#include <vector>
#include "FMTlpmodel.h"
#include "FMTmodelparser.h"

Parser::FMTmodelparser modelparser;
const std::vector<std::string>scenarios(1, "scenariox");
const std::vector<Models::FMTmodel> models = modelparser.readproject("pathtoprimaryfile", scenarios);
Models::FMTlpmodel optimizationmodel(models.at(0), Models::FMTsolverinterface::MOSEK);
for (size_t period = 0; period < 10; ++period)
  {
  optimizationmodel.buildperiod();
  }
std::vector<Core::FMTconstraint>constraints = optimizationmodel.getconstraints();
const Core::FMTconstraint objective = constraints.at(0);
constraints.erase(constraints.begin());
for (const Core::FMTconstraint& constraint : constraints)
  {
  optimizationmodel.setconstraint(constraint);
  }
optimizationmodel.setobjective(objective);
optimizationmodel.initialsolve();

🔑 License

FMT utilise la license LiLiQ-R 1.1.

License

📈 Coverage

GNU MSVC

💻 Build

GNU MSVC