49 class AdaptiveSearchErrorProjection;
50 class CulpritSearchErrorProjection;
65 template<
typename ModelBuilderType>
friend class Solver;
67 friend class algorithms::AdaptiveSearchErrorProjection;
68 friend class algorithms::CulpritSearchErrorProjection;
70 std::vector<Variable*> _variables;
71 std::vector<int> _variables_index;
72 std::map<int,int> _variables_position;
74 double _current_error;
77 mutable bool _is_optional_delta_error_defined;
79 struct nanException : std::exception
81 std::vector<Variable*> ptr_variables;
82 std::vector<Variable> variables;
85 nanException(
const std::vector<Variable*>& ptr_variables ) : ptr_variables(ptr_variables)
87 message =
"Constraint required_error returned a NaN value on variables (";
88 for(
int i = 0; i < static_cast<int>( ptr_variables.size() ) - 1; ++i )
89 message += std::to_string( ptr_variables[i]->get_value() ) +
", ";
90 message += std::to_string( ptr_variables[
static_cast<int>( ptr_variables.size() ) - 1 ]->get_value() ) +
")\n";
93 nanException(
const std::vector<Variable>& variables ) : variables(variables)
95 message =
"Constraint optional_delta_error returned a NaN value on variables (";
96 for(
int i = 0; i < static_cast<int>( variables.size() ) - 1; ++i )
97 message += std::to_string( variables[i].get_value() ) +
", ";
98 message += std::to_string( variables[
static_cast<int>( variables.size() ) - 1 ].get_value() ) +
")\n";
101 const char* what() const noexcept {
return message.c_str(); }
104 struct negativeException : std::exception
106 std::vector<Variable*> ptr_variables;
107 std::vector<Variable> variables;
110 negativeException(
const std::vector<Variable*>& ptr_variables ) : ptr_variables(ptr_variables)
112 message =
"Constraint required_error returned a negative value on variables (";
113 for(
int i = 0; i < static_cast<int>( ptr_variables.size() ) - 1; ++i )
114 message += std::to_string( ptr_variables[i]->get_value() ) +
", ";
115 message += std::to_string( ptr_variables[
static_cast<int>( ptr_variables.size() ) - 1 ]->get_value() ) +
")\n";
118 const char* what() const noexcept {
return message.c_str(); }
121 struct deltaErrorNotDefinedException : std::exception
125 deltaErrorNotDefinedException()
127 message =
"Constraint::optional_delta_error() has not been user-defined.\n";
129 const char* what() const noexcept {
return message.c_str(); }
132 struct variableOutOfTheScope : std::exception
136 variableOutOfTheScope(
int var_id,
int ctr_id )
138 message =
"Variable* ID " + std::to_string( var_id ) +
" is not in the scope of Constraint ID " + std::to_string( ctr_id ) +
".\n";
140 const char* what() const noexcept {
return message.c_str(); }
143 inline bool is_optional_delta_error_defined() {
return _is_optional_delta_error_defined; }
146 double error()
const;
151 double delta_error(
const std::vector<int>& variables_index,
const std::vector<int>& candidate_values )
const;
155 double simulate_delta(
const std::vector<int>& variables_index,
const std::vector<int>& candidate_values );
158 inline std::vector<int> get_variable_ids()
const {
return _variables_index; }
202 virtual double required_error(
const std::vector<Variable*>& variables )
const = 0;
241 virtual double optional_delta_error(
const std::vector<Variable*>& variables,
const std::vector<int>& indexes,
const std::vector<int>& candidate_values )
const;
268 inline int get_id()
const {
return _id; }
308 return os <<
"Constraint type: " <<
typeid(c).name()
320 double required_error(
const std::vector<Variable*>& variables )
const
325 double optional_delta_error(
const std::vector<Variable*>& variables,
const std::vector<int>& indexes,
const std::vector<int>& candidate_values )
const
Definition: constraint.hpp:63
Constraint & operator=(const Constraint &other)=delete
Copy assignment operator disabled.
Constraint(const Constraint &other)=default
Default copy contructor.
int get_id() const
Inline method to get the unique id of the Constraint object.
Definition: constraint.hpp:268
friend class SearchUnit
Definition: constraint.hpp:64
Constraint & operator=(Constraint &&other)=delete
Move assignment operator disabled.
bool has_variable(int var_id) const
friend std::ostream & operator<<(std::ostream &os, const Constraint &c)
To have a nicer stream of Constraint.
Definition: constraint.hpp:306
Constraint(const std::vector< int > &variables_index)
virtual void conditional_update_data_structures(const std::vector< Variable * > &variables, int index, int new_value)
virtual double optional_delta_error(const std::vector< Variable * > &variables, const std::vector< int > &indexes, const std::vector< int > &candidate_values) const
double get_current_error() const
Definition: constraint.hpp:265
virtual double required_error(const std::vector< Variable * > &variables) const =0
Constraint(const std::vector< Variable > &variables)
virtual ~Constraint()=default
Default virtual destructor.
Constraint(Constraint &&other)=default
Default move contructor.
Definition: model_builder.hpp:63
Definition: constraint.hpp:319
PureOptimization(const std::vector< Variable > &variables)
Definition: constraint.hpp:331
Definition: solver.hpp:110
Definition: auxiliary_data.hpp:38