35 template <
unsigned IDim>
39 return '_' + std::to_string(indexes[0] + 1) +
var_indexes<IDim - 1>(indexes + 1);
51 return '_' + std::to_string(indexes[0] + 1);
60 template <
unsigned IDim>
64 return base + var_indexes<IDim>(indexes);
81 std::vector<OptimizationVariable>& variables,
82 std::vector<double>& initials,
83 std::unordered_map<std::string, int>& positions):
84 _variables(variables),
85 _initials(initials), _positions(positions)
96 return std::visit(*
this, sym->get_base_variant());
104 template <
typename TType>
110 template <
unsigned IDim>
113 return std::visit(*
this, sym->get_value_variant());
117 template <
unsigned IDim>
123 template <
unsigned IDim>
126 for (
int i = 0; i < IDim; ++i) {
127 if (sym->shape(i) == 0) {
131 _positions[sym->m_name] = _variables.size();
132 size_t indexes[IDim];
133 for (
int i = 0; i < IDim; ++i) {
136 while (indexes[0] < sym->shape(0)) {
137 if (sym->lower()[indexes] == -std::numeric_limits<double>::infinity() || sym->upper()[indexes] == std::numeric_limits<double>::infinity()) {
138 throw MAiNGOException(
" Error: VariableLister -- Entry of variable " + sym->m_name +
" is unbounded");
141 if (sym->integral()) {
142 if (ceil(sym->lower()[indexes]) == 0 && floor(sym->upper()[indexes]) == 1) {
149 double lower = sym->lower()[indexes];
150 double upper = sym->upper()[indexes];
151 _variables.push_back(
155 var_name<IDim>(sym->m_name, indexes)));
156 double initial = sym->init()[indexes];
157 if (std::isnan(initial)) {
158 initial = 0.5 * (lower + upper);
160 _initials.push_back(initial);
161 for (
int i = IDim - 1; i >= 0; --i) {
162 if (++indexes[i] < sym->shape(i)) {
175 if (sym->lower() == -std::numeric_limits<double>::infinity() || sym->upper() == std::numeric_limits<double>::infinity()) {
176 throw MAiNGOException(
" Error: VariableLister -- Variable " + sym->m_name +
" is unbounded");
178 _positions[sym->m_name] = _variables.size();
180 if (sym->integral()) {
181 if (ceil(sym->lower()) == 0 && floor(sym->upper()) == 1) {
188 double lower = sym->lower();
189 double upper = sym->upper();
190 _variables.push_back(
195 double initial = sym->init();
196 if (std::isnan(initial)) {
197 initial = 0.5 * (lower + upper);
199 _initials.push_back(initial);
std::string var_indexes(size_t *indexes)
Function for serializing index sequences.
Definition: variableLister.h:37
void dispatch(base_symbol *sym)
Dispatch function.
Definition: variableLister.h:94
std::string var_indexes< 1 >(size_t *indexes)
Function for serializing index sequences.
Definition: variableLister.h:49
std::vector< OptimizationVariable > & _variables
Definition: variableLister.h:204
constexpr VT VT_INTEGER
Definition: MAiNGOmodel.h:83
void operator()(variable_symbol< real< IDim >> *sym)
Definition: variableLister.h:124
std::string var_name(std::string base, size_t *indexes)
Function for flattening indexed symbol names.
Definition: variableLister.h:62
std::unordered_map< std::string, int > & _positions
Definition: variableLister.h:206
Serializes a given symbol and lists it into a vector.
Definition: variableLister.h:71
void operator()(variable_symbol< real< 0 >> *sym)
Definition: variableLister.h:173
constexpr VT VT_CONTINUOUS
Definition: MAiNGOmodel.h:81
namespace holding all essentials of MAiNGO
Definition: aleModel.h:31
VariableLister(std::vector< OptimizationVariable > &variables, std::vector< double > &initials, std::unordered_map< std::string, int > &positions)
Constructor.
Definition: variableLister.h:80
void operator()(value_symbol< TType > *sym)
Definition: variableLister.h:105
babBase::OptimizationVariable OptimizationVariable
Definition: MAiNGOmodel.h:78
std::vector< double > & _initials
Definition: variableLister.h:205
VT
Enum for representing the Variable Type of an optimization variable as specified by the user.
Definition: babOptVar.h:40
void operator()(value_symbol< real< IDim >> *sym)
Definition: variableLister.h:111
This class defines the exceptions thrown by MAiNGO.
Definition: exceptions.h:39
constexpr VT VT_BINARY
Definition: MAiNGOmodel.h:82
babBase::Bounds Bounds
Definition: MAiNGOmodel.h:79
void operator()(parameter_symbol< real< IDim >> *sym)
Definition: variableLister.h:118