GHOST
Loading...
Searching...
No Matches
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-2025 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
37namespace ghost
38{
39 namespace global_constraints
40 {
41 /*
42 * Abstract class for Linear Equation constraints
43 */
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