aGrUM 2.3.2
a C++ library for (probabilistic) graphical models
variableselector.h
Go to the documentation of this file.
1/****************************************************************************
2 * This file is part of the aGrUM/pyAgrum library. *
3 * *
4 * Copyright (c) 2005-2025 by *
5 * - Pierre-Henri WUILLEMIN(_at_LIP6) *
6 * - Christophe GONZALES(_at_AMU) *
7 * *
8 * The aGrUM/pyAgrum library is free software; you can redistribute it *
9 * and/or modify it under the terms of either : *
10 * *
11 * - the GNU Lesser General Public License as published by *
12 * the Free Software Foundation, either version 3 of the License, *
13 * or (at your option) any later version, *
14 * - the MIT license (MIT), *
15 * - or both in dual license, as here. *
16 * *
17 * (see https://agrum.gitlab.io/articles/dual-licenses-lgplv3mit.html) *
18 * *
19 * This aGrUM/pyAgrum library is distributed in the hope that it will be *
20 * useful, but WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, *
21 * INCLUDING BUT NOT LIMITED TO THE WARRANTIES MERCHANTABILITY or FITNESS *
22 * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE *
23 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER *
24 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, *
25 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR *
26 * OTHER DEALINGS IN THE SOFTWARE. *
27 * *
28 * See LICENCES for more details. *
29 * *
30 * SPDX-FileCopyrightText: Copyright 2005-2025 *
31 * - Pierre-Henri WUILLEMIN(_at_LIP6) *
32 * - Christophe GONZALES(_at_AMU) *
33 * SPDX-License-Identifier: LGPL-3.0-or-later OR MIT *
34 * *
35 * Contact : info_at_agrum_dot_org *
36 * homepage : http://agrum.gitlab.io *
37 * gitlab : https://gitlab.com/agrumery/agrum *
38 * *
39 ****************************************************************************/
40
41
48
49// =========================================================================
50#ifndef GUM_VARIABLE_SELECTOR_H
51#define GUM_VARIABLE_SELECTOR_H
52// =========================================================================
54// =========================================================================
56
57// =========================================================================
58
59namespace gum {
60
70
72 public:
73 // ==========================================================================
75 // ==========================================================================
77
78 // ###################################################################
80 // ###################################################################
81 explicit VariableSelector(const gum::VariableSet& startingSet);
82
83 // ###################################################################
85 // ###################################################################
87
89
90 // ==========================================================================
92 // ==========================================================================
94
95 // ###################################################################
97 // ###################################################################
98 void updateScore(const DiscreteVariable* var, double score, double secondaryscore);
99 void downdateScore(const DiscreteVariable* var, double score, double secondaryscore);
100
101
102 // ###################################################################
104 // ###################################################################
105 const DiscreteVariable* select();
106
107 bool isEmpty() const { return _remainingVars_.empty(); }
108
109 void begin() { _rvi_ = _remainingVars_.beginSafe(); }
110
111 bool hasNext() const { return _rvi_ != _remainingVars_.endSafe(); }
112
113 void next() { ++_rvi_; }
114
115 const DiscreteVariable* current() const { return *_rvi_; }
116
117 private:
118 void _addVar_(const DiscreteVariable* var);
119 void _removeVar_(const DiscreteVariable* var);
120
124
127
131
134
137 };
138
139} // namespace gum
140
141#endif // GUM_VARIABLE_SELECTOR_H
Base class for discrete random variable.
The class for generic Hash Tables.
Definition hashTable.h:637
A MultiPriorityQueue is a heap in which each element has a mutable priority and duplicates are allowe...
Safe iterators for the Set class.
Definition set.h:601
HashTable< const DiscreteVariable *, double > _remainingVarsScore_
HashTable associating to each variable its score.
void _removeVar_(const DiscreteVariable *var)
The set of remaining vars to select among.
void updateScore(const DiscreteVariable *var, double score, double secondaryscore)
The set of remaining vars to select among.
void next()
The set of remaining vars to select among.
void downdateScore(const DiscreteVariable *var, double score, double secondaryscore)
The set of remaining vars to select among.
~VariableSelector()
Default destructor.
SetIteratorSafe< const DiscreteVariable * > _rvi_
The set of remaining vars to select among.
bool isEmpty() const
The set of remaining vars to select among.
VariableSelector(const gum::VariableSet &startingSet)
Default constructor.
gum::VariableSet _remainingVars_
The set of remaining vars to select among.
const DiscreteVariable * select()
Select the most relevant variable.
HashTable< const DiscreteVariable *, double > _remainingVarsOtherScore_
HashTable associating to each variable its 2nd score.
MultiPriorityQueue< double, double, std::greater< double > > _remainingScores_
Heap keeping best score on top for immediate access.
void begin()
The set of remaining vars to select among.
void _addVar_(const DiscreteVariable *var)
The set of remaining vars to select among.
const DiscreteVariable * current() const
The set of remaining vars to select among.
bool hasNext() const
The set of remaining vars to select among.
HashTable< double, gum::VariableSet * > _remainingVarsByScore_
HashTable associating to each score the set of variable having that score.
Base class for discrete random variable.
Priority queues in which the same element can appear several times.
gum is the global namespace for all aGrUM entities
Definition agrum.h:46
Set< const DiscreteVariable * > VariableSet