aGrUM 3.1.1
a C++ library for (probabilistic) graphical models
jointTargetedInference.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_JOINT_TARGETED_INFERENCE_H
51#define GUM_BAYES_NET_JOINT_TARGETED_INFERENCE_H
52
53
54#include <agrum/agrum.h>
55
57
58#include <string_view>
59
60namespace gum {
61
62
77 template < GUM_Numeric GUM_SCALAR >
79 public:
80 // ############################################################################
82 // ############################################################################
84
86
89
91 ~JointTargetedInference() override;
92
94
95
96 // ############################################################################
98 // ############################################################################
100
102
116 virtual const Tensor< GUM_SCALAR >& jointPosterior(const NodeSet& nodes) final;
117
119
133 const Tensor< GUM_SCALAR >& posterior(NodeId node) final;
134
136
150 const Tensor< GUM_SCALAR >& posterior(std::string_view nodeName) final;
152
153
154 // ############################################################################
156 // ############################################################################
158
160
166 void eraseAllTargets() override;
167
169 virtual void eraseAllJointTargets() final;
170
172 virtual void eraseAllMarginalTargets() final;
173
176
179 virtual void addJointTarget(const NodeSet& joint_target) final;
180
182
184 virtual void eraseJointTarget(const NodeSet& joint_target) final;
185
187 virtual bool isJointTarget(const NodeSet& vars) const final;
188
190 virtual const Set< NodeSet >& jointTargets() const noexcept final;
191
193 virtual Size nbrJointTargets() const noexcept final;
195
207 Tensor< GUM_SCALAR > evidenceJointImpact(const NodeSet& targets, const NodeSet& evs);
208
220 Tensor< GUM_SCALAR > evidenceJointImpact(const std::vector< std::string >& targets,
221 const std::vector< std::string >& evs);
222
223 // ############################################################################
225 // ############################################################################
227
235 GUM_SCALAR I(NodeId X, NodeId Y);
243 GUM_SCALAR I(std::string_view Xname, std::string_view Yname);
244
252 GUM_SCALAR VI(NodeId X, NodeId Y);
253
261 GUM_SCALAR VI(std::string_view Xname, std::string_view Yname);
262
267 GUM_SCALAR jointMutualInformation(const NodeSet& targets);
268
273 GUM_SCALAR jointMutualInformation(const std::vector< std::string >& targets);
274
276
277
278 protected:
280 void onModelChanged_(const GraphicalModel* bn) override;
281
283
284 virtual void onJointTargetAdded_(const NodeSet& set) = 0;
285
287
288 virtual void onJointTargetErased_(const NodeSet& set) = 0;
289
291 virtual void onAllTargetsErased_() = 0;
292
294 virtual void onAllJointTargetsErased_() = 0;
295
296
298
300 virtual const Tensor< GUM_SCALAR >& jointPosterior_(const NodeSet& set) = 0;
301
309 virtual const Tensor< GUM_SCALAR >& jointPosterior_(const NodeSet& wanted_target,
310 const NodeSet& declared_target) = 0;
311
316 virtual Tensor< GUM_SCALAR >* unnormalizedJointPosterior_(const NodeSet& set) = 0;
317
319 virtual Tensor< GUM_SCALAR >* unnormalizedJointPosterior_(NodeId id) = 0;
320
321
322 private:
325 };
326
327
328} // namespace gum
329
331
332
333#endif // GUM_BAYES_NET_JOINT_TARGETED_INFERENCE_H
Virtual base class for probabilistic graphical models.
Class representing the minimal interface for Bayesian network with no numerical data.
Definition IBayesNet.h:75
GUM_SCALAR VI(std::string_view Xname, std::string_view Yname)
Variation of information between X and Y.
const Tensor< GUM_SCALAR > & posterior(NodeId node) final
Computes and returns the posterior of a node.
GUM_SCALAR I(NodeId X, NodeId Y)
Mutual information between X and Y.
Tensor< GUM_SCALAR > evidenceJointImpact(const NodeSet &targets, const NodeSet &evs)
Create a gum::Tensor for P(joint targets|evs) (for all instantiation of targets and evs).
GUM_SCALAR VI(NodeId X, NodeId Y)
Variation of information between X and Y.
virtual Size nbrJointTargets() const noexcept final
returns the number of joint targets
virtual void onAllJointTargetsErased_()=0
fired before a all the joint targets are removed
virtual Tensor< GUM_SCALAR > * unnormalizedJointPosterior_(NodeId id)=0
returns a fresh tensor equal to P(argument,evidence)
Set< NodeSet > _joint_targets_
the set of joint targets
virtual void eraseAllMarginalTargets() final
Clear all the previously defined marginal targets.
virtual void onJointTargetErased_(const NodeSet &set)=0
fired before a joint target is removed
virtual bool isJointTarget(const NodeSet &vars) const final
return true if target is a joint target.
virtual void addJointTarget(const NodeSet &joint_target) final
Add a set of nodes as a new joint target. As a collateral effect, every node is added as a marginal t...
virtual void onJointTargetAdded_(const NodeSet &set)=0
fired after a new joint target is inserted
JointTargetedInference(const IBayesNet< GUM_SCALAR > *bn)
default constructor
virtual Tensor< GUM_SCALAR > * unnormalizedJointPosterior_(const NodeSet &set)=0
returns a fresh unnormalized joint posterior of a given set of variables
virtual const Tensor< GUM_SCALAR > & jointPosterior_(const NodeSet &set)=0
asks derived classes for the joint posterior of a declared target set
virtual void eraseAllJointTargets() final
Clear all previously defined joint targets.
virtual const Set< NodeSet > & jointTargets() const noexcept final
returns the list of joint targets
void eraseAllTargets() override
Clear all previously defined targets (marginal and joint targets).
virtual const Tensor< GUM_SCALAR > & jointPosterior_(const NodeSet &wanted_target, const NodeSet &declared_target)=0
asks derived classes for the joint posterior of a set of variables not declared as a joint target
GUM_SCALAR I(std::string_view Xname, std::string_view Yname)
Mutual information between X and Y.
virtual const Tensor< GUM_SCALAR > & jointPosterior(const NodeSet &nodes) final
Compute the joint posterior of a set of nodes.
void onModelChanged_(const GraphicalModel *bn) override
fired after a new Bayes net has been assigned to the engine
virtual void onAllTargetsErased_()=0
fired before a all the marginal and joint targets are removed
virtual void eraseJointTarget(const NodeSet &joint_target) final
removes an existing joint target
GUM_SCALAR jointMutualInformation(const NodeSet &targets)
Mutual information between targets.
MarginalTargetedInference(const IBayesNet< GUM_SCALAR > *bn)
default constructor
virtual const NodeSet & targets() const noexcept final
returns the list of marginal targets
Representation of a set.
Definition set.h:129
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 non pure virtual methods of class JointTargetedInference.
This file contains the abstract inference class definition for computing (incrementally) marginal pos...
gum is the global namespace for all aGrUM entities
Definition agrum.h:46