FMT 1.2.0
Forest management tools for forest planning
Loading...
Searching...
No Matches
FMTSpatialGraphs.h
Go to the documentation of this file.
1/*
2Copyright (c) 2019 Gouvernement du Québec
3
4SPDX-License-Identifier: LiLiQ-R-1.1
5License-Filename: LICENSES/EN/LiLiQ-R11unicode.txt
6*/
7#ifndef FMTSPATIALGRAPHS_H
8#define FMTSPATIALGRAPHS_H
9
10
11#include <map>
12//#include <boost/container/flat_map.hpp>
13#include <vector>
14#include <string>
15#include <memory>
16#include <unordered_map>
17#include <boost/unordered_map.hpp>
18#include "FMTObject.h"
19#include "FMTGraphInfo.h"
20#include "FMTMask.h"
21#include "FMTSolutionTracker.h"
22
23namespace Graph
24{
25 class FMTLineGraph;
26}
27
28namespace Models
29{
30 class FMTModel;
31}
32
33namespace Core
34{
35 class FMTConstraint;
36 class FMTOutputNode;
37 class FMTSchedule;
38 class FMTOutput;
39 class FMTSchedule;
40}
41
42
43namespace Spatial
44 {
45 class FMTVirtualLineGraph;
46 // DocString: FMTSpatialGraphs
52 {
53 public:
56 // DocString: FMTSpatialGraphs()
60 FMTSpatialGraphs() = default;
61 // DocString: FMTSpatialGraphs(const FMTSpatialGraphs&)
66 FMTSpatialGraphs(const FMTSpatialGraphs& p_rhs)=default;
67 // DocString: FMTSpatialGraphs::operator=
73 // DocString: FMTSpatialGraphs(const Models::FMTModel&,double)
79 FMTSpatialGraphs(const Models::FMTModel& p_model, double p_CellSize);
80 // DocString: FMTSpatialGraphs::getConstraintsValue
87 double getConstraintsValue(size_t NonSpatialConstraintId,
88 const FMTSolutionTracker& p_solution) const;
89 // DocString: FMTSpatialGraphs::getVirtualGraph
96 // DocString: FMTSpatialGraphs::setVirtualGraph
103 // DocString: FMTSpatialGraphs::getBaseSolution
109 // DocString: FMTSpatialGraphs::getIterator
117 const Graph::FMTLineGraph& p_Graph,
118 size_t p_family) const;
119 // DocString: FMTSpatialGraphs::setIterator
127 const Graph::FMTLineGraph& p_Graph,
128 size_t p_family);
129 // DocString: FMTSpatialGraphs::setNaturalGrowthIterator
136 // DocString: FMTSpatialGraphs::getModel
142 // DocString: FMTSpatialGraphs::getOutput
151 std::map<std::string, double> getOutput(
152 const FMTSolutionTracker& p_Solution,
153 const Core::FMTOutput& p_output,
154 int p_period, Core::FMToutputlevel level) const;
155 // DocString: FMTSpatialGraphs::setModel
160 void setModel(const Models::FMTModel& p_model);
161 // DocString: FMTSpatialGraphs::addToSolution
169 size_t p_family,
170 const_iterator p_iterator);
171 // DocString: FMTSpatialGraphs::removeToSolution
179 size_t p_family,
180 const_iterator p_iterator);
181 // DocString: FMTSpatialGraphs::isNotNull
188 bool isNotNull(size_t p_family,
189 const_iterator p_iterator) const;
190 // DocString: FMTSpatialGraphs::getSchedules
197 std::vector<Core::FMTSchedule> getSchedules(const FMTSolutionTracker& p_Solution,
198 bool WithLock = false) const;
199 // DocString: FMTSpatialGraphs::getBaseIterator
205 const_iterator getBaseIterator(size_t p_family) const;
206 // DocString: FMTSpatialGraphs::getLastPeriodIterator
214 size_t p_family,
215 const_iterator p_iterator) const;
216 // DocString: FMTSpatialGraphs::swap
221 void swap(FMTSpatialGraphs& p_Other);
222 // DocString: FMTSpatialGraphs::getNumberOfCategories
228 size_t getNumberOfCategories(int p_themeId) const;
229 // DocString: FMTSpatialGraphs::getCategoryOf
236 size_t getCategoryOf(int p_themeId, size_t p_family) const;
237 // DocString: FMTSpatialGraphs::deleteNonCompleteGraphs
242 // DocString: FMTSpatialGraphs::enableSolutionTracker
248 private:
249 using iterator = std::map<Graph::FMTLineGraph,
250 FMTGraphInfo>::iterator;
251 using family_iterator = std::vector<std::map<Graph::FMTLineGraph, FMTGraphInfo>>::iterator;
252 std::vector<std::map<Graph::FMTLineGraph, FMTGraphInfo>>m_AllGraphs;
253 size_t m_LastGraphId;
254 std::vector<std::vector<size_t>>m_Constraints;
255 boost::unordered_map<Core::FMTMask, size_t>m_GraphsMasks;
256 FMTSolutionTracker m_BaseSolution;
257 std::vector<size_t>m_ConstraintsId;
258 Models::FMTModel const * m_Model;
259 // Run-scoped deduplication pool for graph constraint values (replaces the former
260 // process-wide boost::flyweight static factory). Keyed by value-vector hash, holding
261 // weak_ptr so distinct vectors are shared while alive and released with the graphs.
262 std::unordered_map<std::size_t, std::vector<std::weak_ptr<const FMTGraphValues>>> m_ValuesPool;
263 // DocString: FMTSpatialGraphs::_internValues
269 std::shared_ptr<const FMTGraphValues> _internValues(const std::vector<double>& p_Values);
270 // DocString: FMTSpatialGraphs::_buildConstraintsLocator
275 void _buildConstraintsLocator(const Models::FMTModel& p_model);
276 // DocString: FMTSpatialGraphs::_buildGraphs
283 std::vector<size_t> _buildGraphs(const Models::FMTModel& p_model, double p_CellSize);
284 // DocString: FMTSpatialGraphs::_buildConstraintsValues(family_iterator,family_iterator)
290 void _buildConstraintsValues(
291 family_iterator FirstGraphFamily,
292 family_iterator GraphFamilyEnd);
293 // DocString: FMTSpatialGraphs::_buildConstraintsValues(iterator,size_t)
299 void _buildConstraintsValues(
300 iterator p_Graph,
301 size_t p_family);
302 // DocString: FMTSpatialGraphs::_fillValuesFromLastPeriod
311 size_t _fillValuesFromLastPeriod(
312 size_t p_family,
313 FMTSpatialGraphs::iterator p_Graph,
314 size_t p_ConstraintId,
315 std::vector<double>& p_constraintValues) const;
316 // DocString: FMTSpatialGraphs::_getUseFullBits
322 static Core::FMTMask _getUseFullBits(const Models::FMTModel& p_model);
323 // DocString: FMTSpatialGraphs::_getFamily
329 size_t _getFamily(const Graph::FMTLineGraph& p_Graph) const;
330 // DocString: FMTSpatialGraphs::_getNonSpatialId
336 size_t _getNonSpatialId(size_t p_Constraint) const;
337 // DocString: FMTSpatialGraphs::_fillConstraintResults
345 void _fillConstraintResults(size_t p_Constraint,
346 const FMTGraphInfo& p_GraphInfo,
347 std::vector<double>& p_results,
348 const FMTSolutionTracker& p_solution) const;
349 // DocString: FMTSpatialGraphs::_getGraphCells
356 double _getGraphCells(const FMTSolutionTracker& p_solution, const FMTGraphInfo& p_GraphInfo) const;
357 // DocString: FMTSpatialGraphs::_getMaxGraphLength
362 size_t _getMaxGraphLength() const;
363 // DocString: FMTSpatialGraphs::_getMinGraphLength
368 size_t _getMinGraphLength() const;
369 // DocString: FMTSpatialGraphs::_removeGraphsShorterThan
374 void _removeGraphsShorterThan(size_t p_GraphSize);
375 // DocString: FMTSpatialGraphs::_getNaturalGrowthIterator
381 const_iterator _getNaturalGrowthIterator(size_t p_family) const;
382 // DocString: FMTSpatialGraphs::_getConstraintsValueFromSolution
389 std::vector<double> _getConstraintsValueFromSolution(size_t p_ConstraintId,
390 const FMTSolutionTracker& p_solution) const;
391 // DocString: FMTSpatialGraphs::_getConstraintsValueFromTracker
398 std::vector<double> _getConstraintsValueFromTracker(size_t p_ConstraintId,
399 const FMTSolutionTracker& p_solution) const;
400 // DocString: FMTSpatialGraphs::_getConstraintsValues
406 std::vector<std::vector<double>> _getConstraintsValues(const FMTSolutionTracker& p_solution) const;
407 // DocString: FMTSpatialGraphs::_buildTacker
412 void _buildTacker(const std::vector<size_t>& p_solution);
413 };
414}
415
416
417#endif
Core class holding, as a boost dynamic bitset, which theme attributes are part of a mask.
Definition: FMTMask.h:96
Base class of multiple FMT classes holding a shared exception handler pointer and logger.
Definition: FMTObject.h:49
Class letting the user formulate a constraint in the optimize section or collect data across the grap...
Definition: FMTOutput.h:37
Simple graph where each action generates a single new vertex (0-—0-—0-—0), used with FMTLayer to simu...
Definition: FMTLineGraph.h:27
Base class for the different models in FMT.
Definition: FMTModel.h:62
Information about a spatial line graph: its id and the interned constraint values shared across ident...
Definition: FMTGraphInfo.h:22
Track the constraint values of a spatial solution as line graphs are added to or removed from the sol...
Definition: FMTSolutionTracker.h:36
Container of the line graphs of a spatially explicit model, organized by constraint family,...
Definition: FMTSpatialGraphs.h:52
void swap(FMTSpatialGraphs &p_Other)
Swap this FMTSpatialGraphs with another one.
const Models::FMTModel & getModel() const
Return the model of the spatial graphs.
void deleteNonCompleteGraphs()
Delete the graphs that are not complete.
FMTSpatialGraphs()=default
Default constructor for FMTSpatialGraphs.
size_t getCategoryOf(int p_themeId, size_t p_family) const
Return the category of a theme for a constraint family.
double getConstraintsValue(size_t NonSpatialConstraintId, const FMTSolutionTracker &p_solution) const
Return the value of a non spatial constraint for a solution.
const_iterator setIterator(const Graph::FMTLineGraph &p_Graph, size_t p_family)
Add a graph to a constraint family and return its iterator.
void addToSolution(FMTSolutionTracker &p_solution, size_t p_family, const_iterator p_iterator)
Add a graph to a solution for a constraint family.
void removeToSolution(FMTSolutionTracker &p_solution, size_t p_family, const_iterator p_iterator)
Remove a graph from a solution for a constraint family.
const_iterator setNaturalGrowthIterator(size_t p_family)
Add the natural growth graph to a constraint family and return its iterator.
FMTSolutionTracker getBaseSolution() const
Return the base solution tracker.
const_iterator getIterator(const Graph::FMTLineGraph &p_Graph, size_t p_family) const
Return the iterator of a graph in a constraint family.
bool isNotNull(size_t p_family, const_iterator p_iterator) const
Return true if a graph iterator of a constraint family is not null.
FMTSpatialGraphs & operator=(const FMTSpatialGraphs &)=default
Default copy assignment operator for FMTSpatialGraphs.
std::vector< Core::FMTSchedule > getSchedules(const FMTSolutionTracker &p_Solution, bool WithLock=false) const
Return the schedules of a spatial solution.
size_t getNumberOfCategories(int p_themeId) const
Return the number of categories of a theme.
FMTVirtualLineGraph setVirtualGraph(const Graph::FMTLineGraph &p_LineGraph)
Set and return the virtual line graph of a line graph.
FMTVirtualLineGraph getVirtualGraph(const Graph::FMTLineGraph &p_LineGraph)
Return the virtual line graph of a line graph.
void enableSolutionTracker(FMTSolutionTracker &p_tracker) const
Enable the tracking of the constraint values on a solution tracker.
FMTSpatialGraphs(const FMTSpatialGraphs &p_rhs)=default
Default copy constructor for FMTSpatialGraphs.
const_iterator getBaseIterator(size_t p_family) const
Return the base graph iterator of a constraint family.
std::map< Graph::FMTLineGraph, FMTGraphInfo >::const_iterator const_iterator
Definition: FMTSpatialGraphs.h:55
void setModel(const Models::FMTModel &p_model)
Set the model of the spatial graphs.
FMTSpatialGraphs(const Models::FMTModel &p_model, double p_CellSize)
Construct a FMTSpatialGraphs from a model and a cell size, building all the line graphs.
const_iterator getLastPeriodIterator(size_t p_family, const_iterator p_iterator) const
Return the last period graph iterator of a graph in a constraint family.
std::map< std::string, double > getOutput(const FMTSolutionTracker &p_Solution, const Core::FMTOutput &p_output, int p_period, Core::FMToutputlevel level) const
Return the output value of a solution for a period.
Lightweight handle to a line graph stored in a FMTSpatialGraphs, forwarding output and solution opera...
Definition: FMTVirtualLineGraph.h:46
The Core namespace provides classes for simulating stands/strata growth/harvest through time.
Definition: FMTAction.h:34
FMToutputlevel
Enumerator describing the level of detail of an output (standard, total only, development).
Definition: FMTutility.h:22
Definition: FMTAreaParser.h:35
Namespace containing all enumerator and classes used to construct or manipulate the different type of...
Definition: FMTAreaParser.h:54
Definition: FMTAreaParser.h:40