GHOST
Loading...
Searching...
No Matches
all_different.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#include <map>
34
35#include "../variable.hpp"
36#include "../constraint.hpp"
37
38namespace ghost
39{
40 namespace global_constraints
41 {
46 class AllDifferent : public Constraint
47 {
48 mutable std::map<int,int> _count;
49
50 double required_error( const std::vector<Variable*>& variables ) const override;
51
52 double optional_delta_error( const std::vector<Variable*>& variables,
53 const std::vector<int>& variable_indexes,
54 const std::vector<int>& candidate_values ) const override;
55
56 void conditional_update_data_structures( const std::vector<Variable*>& variables,
57 int variable_index,
58 int new_value ) override;
59
60 double binomial_with_2( int value ) const;
61
62 public:
68 AllDifferent( const std::vector<int>& variables_index );
69
74 AllDifferent( const std::vector<Variable>& variables );
75 };
76 }
77}
Definition constraint.hpp:63
Definition all_different.hpp:47
AllDifferent(const std::vector< Variable > &variables)
AllDifferent(const std::vector< int > &variables_index)
Definition auxiliary_data.hpp:38