GHOST
linear_equation.hpp
Go to the documentation of this file.
1 /*
2  * GHOST (General meta-Heuristic Optimization Solving Tool) is a C++ framework
3  * designed to help developers to model and implement optimization problem
4  * solving. It contains a meta-heuristic solver aiming to solve any kind of
5  * combinatorial and optimization real-time problems represented by a CSP/COP/EF-CSP/EF-COP.
6  *
7  * First developed to solve game-related optimization problems, GHOST can be used for
8  * any kind of applications where solving combinatorial and optimization problems. In
9  * particular, it had been designed to be able to solve not-too-complex problem instances
10  * within some milliseconds, making it very suitable for highly reactive or embedded systems.
11  * Please visit https://github.com/richoux/GHOST for further information.
12  *
13  * Copyright (C) 2014-2023 Florian Richoux
14  *
15  * This file is part of GHOST.
16  * GHOST is free software: you can redistribute it and/or
17  * modify it under the terms of the GNU General Public License as published
18  * by the Free Software Foundation, either version 3 of the License, or
19  * (at your option) any later version.
20 
21  * GHOST is distributed in the hope that it will be useful,
22  * but WITHOUT ANY WARRANTY; without even the implied warranty of
23  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
24  * GNU General Public License for more details.
25 
26  * You should have received a copy of the GNU General Public License
27  * along with GHOST. If not, see http://www.gnu.org/licenses/.
28  */
29 
30 #pragma once
31 
32 #include <vector>
33 
34 #include "../variable.hpp"
35 #include "../constraint.hpp"
36 
37 namespace ghost
38 {
39  namespace global_constraints
40  {
41  /*
42  * Abstract class for Linear Equation constraints
43  */
44  class LinearEquation : public Constraint
45  {
46  std::vector<double> _coefficients;
47  mutable double _current_sum;
48 
49  protected:
50  double rhs;
51 
52  /*
53  * Constructor with a vector of variable IDs. This vector is internally used by ghost::Constraint
54  * to know what variables from the global variable vector it is handling.
55  * \param variables_index a const reference to a vector of IDs of variables composing the constraint.
56  * \param rhs the right-hand side real number of the equation.
57  * \param coefficients the vector of real numbers coefficients for each variable of the equation.
58  */
59  LinearEquation( const std::vector<int>& variables_index, double rhs, const std::vector<double>& coefficients );
60 
61  /*
62  * Constructor with a vector of variable.
63  * \param variables a const reference to a vector of variables composing the constraint.
64  * \param rhs the right-hand side real number of the equation.
65  * \param coefficients the vector of real numbers coefficients for each variable of the equation.
66  */
67  LinearEquation( const std::vector<Variable>& variables, double rhs, const std::vector<double>& coefficients );
68 
69  virtual double compute_error( double sum ) const = 0;
70 
71  double required_error( const std::vector<Variable*>& variables ) const override;
72 
73  double optional_delta_error( const std::vector<Variable*>& variables,
74  const std::vector<int>& variable_indexes,
75  const std::vector<int>& candidate_values ) const override;
76 
77  void conditional_update_data_structures( const std::vector<Variable*>& variables, int variable_id, int new_value ) override;
78 
79  };
80  }
81 }
Definition: constraint.hpp:63
Definition: linear_equation.hpp:45
double optional_delta_error(const std::vector< Variable * > &variables, const std::vector< int > &variable_indexes, const std::vector< int > &candidate_values) const override
LinearEquation(const std::vector< Variable > &variables, double rhs, const std::vector< double > &coefficients)
double rhs
Definition: linear_equation.hpp:50
void conditional_update_data_structures(const std::vector< Variable * > &variables, int variable_id, int new_value) override
virtual double compute_error(double sum) const =0
double required_error(const std::vector< Variable * > &variables) const override
LinearEquation(const std::vector< int > &variables_index, double rhs, const std::vector< double > &coefficients)
Definition: auxiliary_data.hpp:38