30 template <
unsigned IDim>
34 return '_' + std::to_string(indexes[0] + 1) +
var_indexes<IDim - 1>(indexes + 1);
46 return '_' + std::to_string(indexes[0] + 1);
55 template <
unsigned IDim>
59 return base + var_indexes<IDim>(indexes);
76 std::vector<OptimizationVariable>& variables,
77 std::vector<double>& initials,
78 std::unordered_map<std::string, int>& positions):
79 _variables(variables),
80 _initials(initials), _positions(positions)
92 return std::visit(*
this, sym->get_base_variant());
101 template <
typename TType>
107 template <
unsigned IDim>
110 return std::visit(*
this, sym->get_value_variant());
114 template <
unsigned IDim>
119 template <
unsigned IDim>
124 template <
unsigned IDim>
127 for (
int i = 0; i < IDim; ++i) {
128 if (sym->shape(i) == 0) {
132 _positions[sym->m_name] = _variables.size();
133 size_t indexes[IDim];
134 for (
int i = 0; i < IDim; ++i) {
137 while (indexes[0] < sym->shape(0)) {
138 if (sym->lower()[indexes] == -std::numeric_limits<double>::infinity() || sym->upper()[indexes] == std::numeric_limits<double>::infinity()) {
139 throw MAiNGOException(
" Error: VariableLister -- Entry of variable " + sym->m_name +
" is unbounded");
142 if (sym->integral()) {
143 if (ceil(sym->lower()[indexes]) == 0 && floor(sym->upper()[indexes]) == 1) {
150 double lower = sym->lower()[indexes];
151 double upper = sym->upper()[indexes];
152 _variables.push_back(
156 var_name<IDim>(sym->m_name, indexes)));
157 double initial = sym->init()[indexes];
158 if (std::isnan(initial)) {
159 initial = 0.5 * (lower + upper);
161 _initials.push_back(initial);
162 for (
int i = IDim - 1; i >= 0; --i) {
163 if (++indexes[i] < sym->shape(i)) {
176 if (sym->lower() == -std::numeric_limits<double>::infinity() || sym->upper() == std::numeric_limits<double>::infinity()) {
177 throw MAiNGOException(
" Error: VariableLister -- Variable " + sym->m_name +
" is unbounded");
179 _positions[sym->m_name] = _variables.size();
181 if (sym->integral()) {
182 if (ceil(sym->lower()) == 0 && floor(sym->upper()) == 1) {
189 double lower = sym->lower();
190 double upper = sym->upper();
191 _variables.push_back(
196 double initial = sym->init();
197 if (std::isnan(initial)) {
198 initial = 0.5 * (lower + upper);
200 _initials.push_back(initial);
std::string var_indexes(size_t *indexes)
Function for serializing index sequences.
Definition: variableLister.h:32
void dispatch(base_symbol *sym)
Dispatch function.
Definition: variableLister.h:89
std::string var_indexes< 1 >(size_t *indexes)
Function for serializing index sequences.
Definition: variableLister.h:44
std::vector< OptimizationVariable > & _variables
Definition: variableLister.h:205
constexpr VT VT_INTEGER
Definition: MAiNGOmodel.h:79
void operator()(variable_symbol< real< IDim >> *sym)
Definition: variableLister.h:125
std::string var_name(std::string base, size_t *indexes)
Function for flattening indexed symbol names.
Definition: variableLister.h:57
std::unordered_map< std::string, int > & _positions
Definition: variableLister.h:207
Serializes a given symbol and lists it into a vector.
Definition: variableLister.h:66
void operator()(variable_symbol< real< 0 >> *sym)
Definition: variableLister.h:174
constexpr VT VT_CONTINUOUS
Definition: MAiNGOmodel.h:77
namespace holding all essentials of MAiNGO
Definition: aleModel.h:25
VariableLister(std::vector< OptimizationVariable > &variables, std::vector< double > &initials, std::unordered_map< std::string, int > &positions)
Constructor.
Definition: variableLister.h:75
void operator()(value_symbol< TType > *sym)
Definition: variableLister.h:102
babBase::OptimizationVariable OptimizationVariable
Definition: MAiNGOmodel.h:74
std::vector< double > & _initials
Definition: variableLister.h:206
VT
Enum for representing the Variable Type of an optimization variable as specified by the user...
Definition: babOptVar.h:43
void operator()(value_symbol< real< IDim >> *sym)
Definition: variableLister.h:108
This class defines the exceptions thrown by MAiNGO.
Definition: MAiNGOException.h:35
constexpr VT VT_BINARY
Definition: MAiNGOmodel.h:78
void operator()(expression_symbol< real< IDim >> *sym)
Definition: variableLister.h:120
babBase::Bounds Bounds
Definition: MAiNGOmodel.h:75
void operator()(parameter_symbol< real< IDim >> *sym)
Definition: variableLister.h:115