FMT 1.2.0
Forest management tools for forest planning
Loading...
Searching...
No Matches
FMTOptimizationParser.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
8#ifndef FMToptimizationparser_Hm_included
9#define FMToptimizationparser_Hm_included
10
11#include "FMTParser.h"
12#include <algorithm>
13#include <vector>
14#include <map>
15#include <string>
16#include <queue>
17#include "FMTutility.h"
18#include <boost/regex.hpp>
19#include <limits>
20
21
22namespace Core
23{
24 class FMTOutput;
25 class FMTConstraint;
26 class FMTTheme;
27 class FMTConstants;
28 class FMTPerBounds;
29 class FMTYields;
30}
31
32
33namespace Parser
34{
35 // DocString: FMToptimizationsection
40 {
44 format = 4,
45 none = 5
46 };
47
48 // DocString: FMTOptimizationParser
53 {
54 public:
55 // DocString: FMTOptimizationParser()
60 // DocString: FMTOptimizationParser(const FMTOptimizationParser&)
66 // DocString: FMTOptimizationParser::operator=
72 FMTOptimizationParser& operator = (const FMTOptimizationParser& rhs)=default;
73 // DocString: FMTOptimizationParser::read
85 std::vector<Core::FMTConstraint> read(const std::vector<Core::FMTTheme>& p_themes,
86 const std::vector<Core::FMTAction>& p_actions,
87 const Core::FMTConstants& p_constants,
88 const std::vector<Core::FMTOutput>& p_outputs,
89 const Core::FMTYields& p_yields,
90 std::vector<Core::FMTAction>& p_excluded,
91 const std::string& pm_location);
92 // DocString: FMTOptimizationParser::getConstraints
103 std::vector<Core::FMTConstraint> getConstraints(const std::string& pm_line,
104 const Core::FMTConstants& p_constants, const Core::FMTYields& p_yields,
105 const std::vector<Core::FMTOutput>& p_outputs,
106 const std::vector<Core::FMTTheme>& p_themes,
107 const std::vector<Core::FMTAction>& p_actions);
108 // DocString: FMTOptimizationParser::write
114 void write(const std::vector<Core::FMTConstraint>& p_constraints,
115 const std::string& pm_location) const;
116 // DocString: ~FMTOptimizationParser()
121 private:
122 const static boost::regex m_rxsections;
123 const static boost::regex m_rxobjectives;
124 const static boost::regex m_rxexclude;
125 const static boost::regex m_rxconstraints;
126 const static boost::regex m_rxequations;
127 const static boost::regex m_m_ENDing;
128 const static boost::regex m_rxoutput;
129 const static boost::regex m_rxpenalty;
130 const static boost::regex m_rxspecialoutput;
131 const static boost::regex m_rxspatial;
132 const static boost::regex m_rxspecialobjective;
133 const static boost::regex m_rxstartwithoperator;
134 //std::queue<std::string>m_ineach;
135 // DocString: FMTOptimizationParser::_getObjective
145 Core::FMTConstraint _getObjective(const std::string& pm_line,
146 const Core::FMTConstants& p_constants,
147 const Core::FMTYields& p_yields,
148 const std::vector<Core::FMTOutput>& p_outputs,
149 const std::vector<Core::FMTTheme>& p_themes);
150 // DocString: FMTOptimizationParser::_getSection
156 FMToptimizationsection _getSection(const std::string& line) const;
157 // DocString: FMTOptimizationParser::_setEnding
165 bool _setEnding(Core::FMTConstraint& constraint, std::string& line, const Core::FMTConstants& constants);
166 // DocString: FMTOptimizationParser::_resumeOutput
175 Core::FMTOutput _resumeOutput(const std::map<std::string, double>& nodes,
176 const std::vector<Core::FMTOutput>& outputs,
177 const std::vector<Core::FMTTheme>& themes,
178 const Core::FMTConstants& constants);
179 // DocString: FMTOptimizationParser::_getOptline
188 std::queue<FMTParser::FMTLineInfo>_getOptline(std::ifstream& stream, const std::vector<Core::FMTTheme>& themes,
189 const Core::FMTConstants& cons, const std::vector<Core::FMTOutput>& outputs);
190 // DocString: FMTOptimizationParser::_getEachLines
199 std::queue<std::string> _getEachLines(const std::string& line, const Core::FMTConstants& constants, const std::vector<Core::FMTOutput>& outputs, const std::vector<Core::FMTTheme>& themes) const;
200 // DocString: FMTOptimizationParser::_getEquation
210 std::map<std::string, double>_getEquation(const std::string& pm_line, const Core::FMTConstants& p_constants,
211 const Core::FMTYields& p_yields, const std::vector<Core::FMTOutput>& p_outputs,
212 size_t p_lhssize = std::numeric_limits<size_t>::max());
213 // DocString: FMTOptimizationParser::_getPeriodsBounds
221 std::vector<Core::FMTConstraint> _getPeriodsBounds(std::string periodstr, const Core::FMTConstraint& constraint, const Core::FMTConstants& constants) const;
222 // DocString: FMTOptimizationParser::_fillBounds
230 void _fillBounds(const std::string& operatorvalue, const double& rhs, double& lower, double& upper) const;
231 // DocString: FMTOptimizationParser::_getSpatialConstraint
244 Core::FMTConstraint _getSpatialConstraint(const Core::FMTConstraint& p_baseconstraint,
245 const boost::smatch& p_match, const std::string& pm_line,
246 const Core::FMTConstants& p_constants,
247 const Core::FMTYields& p_yields,
248 const std::vector<Core::FMTAction>& p_actions,
249 const std::vector<Core::FMTOutput>& p_outputs,
250 const std::vector<Core::FMTTheme>& p_themes);
251 // DocString: FMTOptimizationParser::_getReplicateChanges
257 std::vector<std::vector<double>>_getReplicateChanges(const std::string& replicateargument);
258 };
259}
260
261#endif
#define FMTEXPORT
Definition: FMTutility.h:125
Class holding the constants defined in the constants section of a model, used by the parsers.
Definition: FMTConstants.h:28
Representation of a line in the optimize section, an objective being considered a constraint.
Definition: FMTConstraint.h:52
Class letting the user formulate a constraint in the optimize section or collect data across the grap...
Definition: FMTOutput.h:37
FMTList containing multiple yield handlers as seen in the yield section, holding the information rela...
Definition: FMTYields.h:44
Parser reading and writing optimization sections into constraints and objectives.
Definition: FMTOptimizationParser.h:53
std::vector< Core::FMTConstraint > read(const std::vector< Core::FMTTheme > &p_themes, const std::vector< Core::FMTAction > &p_actions, const Core::FMTConstants &p_constants, const std::vector< Core::FMTOutput > &p_outputs, const Core::FMTYields &p_yields, std::vector< Core::FMTAction > &p_excluded, const std::string &pm_location)
Read an optimization file.
~FMTOptimizationParser()=default
Default destructor for FMTOptimizationParser.
FMTOptimizationParser()
Default constructor for FMTOptimizationParser.
std::vector< Core::FMTConstraint > getConstraints(const std::string &pm_line, const Core::FMTConstants &p_constants, const Core::FMTYields &p_yields, const std::vector< Core::FMTOutput > &p_outputs, const std::vector< Core::FMTTheme > &p_themes, const std::vector< Core::FMTAction > &p_actions)
Read a line and get the constraints.
void write(const std::vector< Core::FMTConstraint > &p_constraints, const std::string &pm_location) const
Write the constraints into an optimization file.
FMTOptimizationParser(const FMTOptimizationParser &rhs)=default
Copy constructor for FMTOptimizationParser.
Main parent class of all the parsers in FMT.
Definition: FMTParser.h:72
The Core namespace provides classes for simulating stands/strata growth/harvest through time.
Definition: FMTAction.h:34
Namespace handling all FMT's parsers. Everything related to I/O should be located in this namespace.
Definition: FMTActionParser.h:27
FMToptimizationsection
Enumerator of the sections of an optimization file.
Definition: FMTOptimizationParser.h:40
@ exclude
Definition: FMTOptimizationParser.h:42
@ constraints
Definition: FMTOptimizationParser.h:43
@ none
Definition: FMTOptimizationParser.h:45
@ format
Definition: FMTOptimizationParser.h:44
@ objective
Definition: FMTOptimizationParser.h:41