aGrUM 2.3.2
a C++ library for (probabilistic) graphical models
marginalTargetedMRFInference.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
49
50#ifndef GUM_MARKOV_RANDOM_FIELD_MARGINAL_TARGETED_INFERENCE_H
51#define GUM_MARKOV_RANDOM_FIELD_MARGINAL_TARGETED_INFERENCE_H
52
53#include <string>
54
55#include <agrum/agrum.h>
56
58
59namespace gum {
60
61
75 template < typename GUM_SCALAR >
76 class MarginalTargetedMRFInference: public virtual MRFInference< GUM_SCALAR > {
77 public:
78 // ############################################################################
80 // ############################################################################
82
84
88
91
93
94
95 // ############################################################################
97 // ############################################################################
99
101
115 virtual const Tensor< GUM_SCALAR >& posterior(NodeId node);
116
118
133 virtual const Tensor< GUM_SCALAR >& posterior(const std::string& nodeName);
134
136
137
138 // ############################################################################
140 // ############################################################################
142
144 virtual void eraseAllTargets();
145
147 virtual void addAllTargets() final;
148
150
153 virtual void addTarget(NodeId target) final;
154
156
159 virtual void addTarget(const std::string& nodeName) final;
160
162
164 virtual void eraseTarget(NodeId target) final;
165
167
169 virtual void eraseTarget(const std::string& nodeName) final;
170
172 virtual bool isTarget(NodeId node) const final;
173
175 virtual bool isTarget(const std::string& nodeName) const final;
176
178 virtual Size nbrTargets() const noexcept final;
179
181 virtual const NodeSet& targets() const noexcept final;
182
184
185 // ############################################################################
187 // ############################################################################
189
194 virtual GUM_SCALAR H(NodeId X) final;
195
200 virtual GUM_SCALAR H(const std::string& nodeName) final;
201
203
204
216 Tensor< GUM_SCALAR > evidenceImpact(NodeId target, const NodeSet& evs);
217
228 Tensor< GUM_SCALAR > evidenceImpact(const std::string& target,
229 const std::vector< std::string >& evs);
230
231 protected:
233
234 virtual void onMarginalTargetAdded_(const NodeId id) = 0;
235
237
238 virtual void onMarginalTargetErased_(const NodeId id) = 0;
239
241 virtual void onAllMarginalTargetsAdded_() = 0;
242
244 virtual void onAllMarginalTargetsErased_() = 0;
245
247 virtual void onModelChanged_(const GraphicalModel* mn);
248
250
251 virtual const Tensor< GUM_SCALAR >& posterior_(NodeId id) = 0;
252
253 protected:
254 void setTargetedMode_();
255 bool isTargetedMode_() const;
256
257 private:
260
263
264
265 /*/// remove all the marginal posteriors computed
266 void _invalidatePosteriors_() noexcept;*/
267
270 };
271
272
273} // namespace gum
274
276
277
278#endif // GUM_MARKOV_RANDOM_FIELD_MARGINAL_TARGETED_INFERENCE_H
This file contains abstract class definitions for Markov random fields inference classes.
Virtual base class for probabilistic graphical models.
Class representing the minimal interface for Markov random field.
MRFInference(const IMarkovRandomField< GUM_SCALAR > *mn)
default constructor
void _setAllMarginalTargets_()
sets all the nodes of the Markov net as targets
virtual void onAllMarginalTargetsAdded_()=0
fired after all the nodes of the MRF are added as marginal targets
virtual void onMarginalTargetErased_(const NodeId id)=0
fired before a marginal target is removed
virtual bool isTarget(NodeId node) const final
return true if variable is a (marginal) target
bool _targeted_mode_
whether the actual targets are default
virtual void onAllMarginalTargetsErased_()=0
fired before a all marginal targets are removed
virtual const NodeSet & targets() const noexcept final
returns the list of marginal targets
NodeSet _targets_
the set of marginal targets
virtual void eraseTarget(NodeId target) final
removes an existing (marginal) target
Tensor< GUM_SCALAR > evidenceImpact(NodeId target, const NodeSet &evs)
Create a gum::Tensor for P(target|evs) (for all instanciation of target and evs).
virtual void addAllTargets() final
adds all nodes as targets
virtual void onModelChanged_(const GraphicalModel *mn)
fired after a new Markov net has been assigned to the engine
MarginalTargetedMRFInference(const IMarkovRandomField< GUM_SCALAR > *mn)
default constructor
virtual void addTarget(NodeId target) final
Add a marginal target to the list of targets.
virtual void onMarginalTargetAdded_(const NodeId id)=0
fired after a new marginal target is inserted
virtual const Tensor< GUM_SCALAR > & posterior_(NodeId id)=0
asks derived classes for the posterior of a given variable
virtual const Tensor< GUM_SCALAR > & posterior(NodeId node)
Computes and returns the posterior of a node.
virtual GUM_SCALAR H(NodeId X) final
Entropy Compute Shanon's entropy of a node given the observation.
virtual void eraseAllTargets()
Clear all previously defined targets.
virtual Size nbrTargets() const noexcept final
returns the number of marginal targets
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