FMT

An open source forest management library that makes forest planning easier.
https://github.com/bureau-du-forestier-en-chef/fmt

Category: Biosphere
Sub Category: Forest Observation and Management

Keywords

fmt forest-management forest-planning forestry optimization python-library r-package simulation

Last synced: about 10 hours ago
JSON representation

Repository metadata

Forest Management Tool a C++ library for forest planning.

README.fr.md

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


Owner metadata


GitHub Events

Total
Last Year

Committers metadata

Last synced: 4 days ago

Total Commits: 1,059
Total Committers: 14
Avg Commits per committer: 75.643
Development Distribution Score (DDS): 0.373

Commits in past year: 161
Committers in past year: 5
Avg Commits per committer in past year: 32.2
Development Distribution Score (DDS) in past year: 0.509

Name Email Commits
Guillaume Cyr G****r@f****a 664
Bruno Forest B****t@f****a 237
Marc-Alexandre Martel m****l@g****m 56
Forest F****3@f****a 28
Landry-G g****y@l****a 25
Rémy Huot r****1@u****a 11
Tommy Bouchard 1****3 11
U-INTRANET\CYRGU3 C****3@M****V 10
Clement Hardy 4****t 6
Cyr C****3@f****a 6
admlocal a****l@2****V 2
U-INTRANET\FORBR3 F****3@2****V 1
admlocal a****l@2****V 1
admlocal a****l@2****V 1

Committer domains:


Issue and Pull Request metadata

Last synced: 1 day ago

Total issues: 278
Total pull requests: 3
Average time to close issues: 22 days
Average time to close pull requests: 2 days
Total issue authors: 7
Total pull request authors: 2
Average comments per issue: 0.5
Average comments per pull request: 0.67
Merged pull request: 2
Bot issues: 0
Bot pull requests: 0

Past year issues: 16
Past year pull requests: 2
Past year average time to close issues: about 2 months
Past year average time to close pull requests: 2 days
Past year issue authors: 4
Past year pull request authors: 1
Past year average comments per issue: 0.94
Past year average comments per pull request: 0.5
Past year merged pull request: 1
Past year bot issues: 0
Past year bot pull requests: 0

More stats: https://issues.ecosyste.ms/repositories/lookup?url=https://github.com/bureau-du-forestier-en-chef/fmt

Top Issue Authors

  • gcyr (152)
  • BrunoForest (90)
  • JFCarle (16)
  • Klemet (11)
  • Landry-G (4)
  • martel21324 (4)
  • peret2 (1)

Top Pull Request Authors

  • martel21324 (2)
  • Klemet (1)

Top Issue Labels

  • enhancement (142)
  • bug (89)
  • BFECopt (50)
  • documentation (34)
  • Interface (30)
  • Machine Learning (12)
  • Replanification (11)
  • Carbone (10)
  • Debug facilities (8)
  • Diffusion (6)
  • Excel (6)
  • validation (5)
  • wontfix (3)
  • priority:low (3)
  • CC (2)
  • NeedTommyPower (2)
  • priority:high (2)
  • priority:normal (1)

Top Pull Request Labels


Dependencies

Templates/Rpackage/FMT/DESCRIPTION cran
  • Rcpp >= 1.0.4 imports

Score: 7.182352111885262