aGrUM 3.1.1
a C++ library for (probabilistic) graphical models
marginalTargetedInference.h
Go to the documentation of this file.
1/****************************************************************************
2 * This file is part of the aGrUM/pyAgrum library. *
3 * *
4 * Copyright (c) 2005-2026 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-2026 *
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
49
50#ifndef GUM_BAYES_NET_MARGINAL_TARGETED_INFERENCE_H
51#define GUM_BAYES_NET_MARGINAL_TARGETED_INFERENCE_H
52
53#include <string>
54
55#include <agrum/agrum.h>
56
58
59#include <string_view>
60
61namespace gum {
62
63
77 template < GUM_Numeric GUM_SCALAR >
78 class MarginalTargetedInference: public virtual BayesNetInference< GUM_SCALAR > {
79 public:
80 // ############################################################################
82 // ############################################################################
84
86
90
93
95
96
97 // ############################################################################
99 // ############################################################################
101
103
117 virtual const Tensor< GUM_SCALAR >& posterior(NodeId node);
118
120
135 virtual const Tensor< GUM_SCALAR >& posterior(std::string_view nodeName);
136
138
139 // ############################################################################
141 // ############################################################################
143
145 virtual void eraseAllTargets();
146
148 virtual void addAllTargets() final;
149
151
154 virtual void addTarget(NodeId target) final;
155
157
160 virtual void addTarget(std::string_view nodeName) final;
161
163
165 virtual void eraseTarget(NodeId target) final;
166
168
170 virtual void eraseTarget(std::string_view nodeName) final;
171
173 virtual bool isTarget(NodeId node) const final;
174
176 virtual bool isTarget(std::string_view nodeName) const final;
177
179 virtual Size nbrTargets() const noexcept final;
180
182 virtual const NodeSet& targets() const noexcept final;
183
185 virtual bool isInTargetMode() const noexcept final;
186
188
189 // ############################################################################
191 // ############################################################################
193
198 virtual GUM_SCALAR H(NodeId X) final;
199
204 virtual GUM_SCALAR H(std::string_view nodeName) final;
205
207
208
220 Tensor< GUM_SCALAR > evidenceImpact(NodeId target, const NodeSet& evs);
221
232 Tensor< GUM_SCALAR > evidenceImpact(std::string_view target,
233 const std::vector< std::string >& evs);
234
235 protected:
237
238 virtual void onMarginalTargetAdded_(const NodeId id) = 0;
239
241
242 virtual void onMarginalTargetErased_(const NodeId id) = 0;
243
245 virtual void onAllMarginalTargetsAdded_() = 0;
246
248 virtual void onAllMarginalTargetsErased_() = 0;
249
251 void onModelChanged_(const GraphicalModel* bn) override;
252
254
255 virtual const Tensor< GUM_SCALAR >& posterior_(NodeId id) = 0;
256
257 void setTargetedMode_();
258 bool isTargetedMode_() const;
259
260 private:
263
266
269 };
270
271
272} // namespace gum
273
275
276
277#endif // GUM_BAYES_NET_MARGINAL_TARGETED_INFERENCE_H
This file contains abstract class definitions for Bayesian networks inference classes.
BayesNetInference(const IBayesNet< GUM_SCALAR > *bn)
default constructor
Virtual base class for probabilistic graphical models.
Class representing the minimal interface for Bayesian network with no numerical data.
Definition IBayesNet.h:75
NodeSet _targets_
the set of marginal targets
void onModelChanged_(const GraphicalModel *bn) override
fired after a new Bayes net has been assigned to the engine
virtual const Tensor< GUM_SCALAR > & posterior(NodeId node)
Computes and returns the posterior of a node.
virtual void eraseTarget(NodeId target) final
removes an existing (marginal) target
virtual void onAllMarginalTargetsErased_()=0
fired before a all marginal targets are removed
void _setAllMarginalTargets_()
sets all the nodes of the Bayes net as targets
virtual const Tensor< GUM_SCALAR > & posterior_(NodeId id)=0
asks derived classes for the posterior of a given variable
virtual bool isTarget(NodeId node) const final
return true if variable is a (marginal) target
virtual void onMarginalTargetErased_(const NodeId id)=0
fired before a marginal target is removed
virtual GUM_SCALAR H(NodeId X) final
Entropy Compute Shanon's entropy of a node given the observation.
virtual void onAllMarginalTargetsAdded_()=0
fired after all the nodes of the BN are added as marginal targets
virtual bool isInTargetMode() const noexcept final
indicates whether the inference is in a target mode
bool _targeted_mode_
whether the actual targets are default
virtual Size nbrTargets() const noexcept final
returns the number of marginal targets
MarginalTargetedInference(const IBayesNet< GUM_SCALAR > *bn)
default constructor
virtual const NodeSet & targets() const noexcept final
returns the list of marginal targets
virtual void addTarget(NodeId target) final
Add a marginal target to the list of targets.
virtual void addAllTargets() final
adds all nodes as targets
virtual void eraseAllTargets()
Clear all previously defined targets.
virtual void onMarginalTargetAdded_(const NodeId id)=0
fired after a new marginal target is inserted
Tensor< GUM_SCALAR > evidenceImpact(NodeId target, const NodeSet &evs)
Create a gum::Tensor for P(target|evs) (for all instantiation of target and evs).
std::size_t Size
In aGrUM, hashed values are unsigned long int.
Definition types.h:74
Size NodeId
Type for node ids.
Set< NodeId > NodeSet
Some typdefs and define for shortcuts ...
Implementation of the generic class for the computation of (possibly incrementally) marginal posterio...
gum is the global namespace for all aGrUM entities
Definition agrum.h:46