25 #ifndef GUM_SHAFER_SHENOY_INFERENCE_H 26 #define GUM_SHAFER_SHENOY_INFERENCE_H 41 template <
typename GUM_SCALAR >
42 INLINE
static Potential< GUM_SCALAR >*
49 template <
typename GUM_SCALAR >
64 template <
typename GUM_SCALAR >
78 bool use_binary_join_tree =
true);
209 const NodeSet& declared_target)
final;
233 Potential< GUM_SCALAR >* (*__combination_op)(
const Potential< GUM_SCALAR >&,
234 const Potential< GUM_SCALAR >&){
371 const Potential< GUM_SCALAR >&,
const Potential< GUM_SCALAR >&));
410 #ifndef GUM_NO_EXTERN_TEMPLATE_CLASS
NodeProperty< const Potential< GUM_SCALAR > *> __clique_ss_potential
the potentials stored into the cliques by Shafer-Shenoy
aGrUM's Potential is a multi-dimensional array with tensor operators.
void _onAllJointTargetsErased() final
fired before a all the joint targets are removed
void _onEvidenceChanged(const NodeId id, bool hasChangedSoftHard) final
fired after an evidence is changed, in particular when its status (soft/hard) changes ...
FindBarrenNodesType __barren_nodes_type
the type of barren nodes computation we wish
void __setProjectionFunction(Potential< GUM_SCALAR > *(*proj)(const Potential< GUM_SCALAR > &, const Set< const DiscreteVariable * > &))
sets the operator for performing the projections
NodeProperty< GUM_SCALAR > __constants
the constants resulting from the projections of CPTs defined over only hard evidence nodes remove th...
JunctionTree * __junctionTree
the junction tree to answer the last inference query
void __collectMessage(NodeId id, NodeId from)
actually perform the collect phase
void _onEvidenceErased(const NodeId id, bool isHardEvidence) final
fired before an evidence is removed
static INLINE Potential< GUM_SCALAR > * SSNewmultiPotential(const Potential< GUM_SCALAR > &t1, const Potential< GUM_SCALAR > &t2)
__PotentialSet __marginalizeOut(__PotentialSet pot_list, Set< const DiscreteVariable * > &del_vars, Set< const DiscreteVariable * > &kept_vars)
removes variables del_vars from a list of potentials and returns the resulting list ...
void _onMarginalTargetErased(const NodeId id) final
fired before a single target is removed
Safe iterators for the Set classDevelopers may consider using Set<x>::iterator_safe instead of SetIte...
void _onMarginalTargetAdded(const NodeId id) final
fired after a new single target is inserted
This file contains the abstract inference class definition for computing (incrementally) joint poster...
ArcProperty< bool > __messages_computed
indicates whether a message (from one clique to another) has been computed
Set< const Potential< GUM_SCALAR > *> __PotentialSet
void __setCombinationFunction(Potential< GUM_SCALAR > *(*comb)(const Potential< GUM_SCALAR > &, const Potential< GUM_SCALAR > &))
sets the operator for performing the combinations
const GUM_SCALAR __1_minus_epsilon
for comparisons with 1 - epsilon
Potential< GUM_SCALAR > * _unnormalizedJointPosterior(NodeId id) final
returns a fresh potential equal to P(argument,evidence)
void _onAllMarginalTargetsAdded() final
fired after all the nodes of the BN are added as single targets
NodeSet __roots
a clique node used as a root in each connected component of __JT
GUM_SCALAR evidenceProbability()
returns the probability of evidence
Class representing the minimal interface for Bayesian Network.
void _makeInference() final
called when the inference has to be performed effectively
gum is the global namespace for all aGrUM entities
This file contains the abstract class definition for computing the probability of evidence entered in...
HashTable< NodeSet, const Potential< GUM_SCALAR > *> __joint_target_posteriors
the set of set target posteriors computed during the last inference
void _updateOutdatedBNPotentials() final
prepares inference when the latter is in OutdatedBNPotentials state
UndiGraph __graph
the undigraph extracted from the BN and used to construct the join tree
void _onStateChanged() final
fired when the stage is changed
Representation of a setA Set is a structure that contains arbitrary elements.
ShaferShenoyInference(const IBayesNet< GUM_SCALAR > *BN, FindBarrenNodesType barren_type=FindBarrenNodesType::FIND_BARREN_NODES, bool use_binary_join_tree=true)
default constructor
NodeProperty< EvidenceChangeType > __evidence_changes
indicates which nodes of the BN have evidence that changed since the last inference ...
FindBarrenNodesType
type of algorithm to determine barren nodes
NodeProperty< const Potential< GUM_SCALAR > *> __node_to_soft_evidence
the soft evidence stored in the cliques per their assigned node in the BN
HashTable< NodeId, NodeId > __node_to_clique
for each node of __graph (~ in the Bayes net), associate an ID in the JT
NodeProperty< const Potential< GUM_SCALAR > *> __target_posteriors
the set of single posteriors computed during the last inference
NodeProperty< const Potential< GUM_SCALAR > *> __hard_ev_projected_CPTs
the CPTs that were projected due to hard evidence nodes
void _onJointTargetAdded(const NodeSet &set) final
fired after a new joint target is inserted
bool __isNewJTNeeded() const
check whether a new join tree is really needed for the next inference
void _updateOutdatedBNStructure() final
prepares inference when the latter is in OutdatedBNStructure state
void setTriangulation(const Triangulation &new_triangulation)
use a new triangulation algorithm
const Potential< GUM_SCALAR > & _jointPosterior(const NodeSet &set) final
returns the posterior of a declared target set
<agrum/BN/inference/jointTargetedInference.h>
void _onAllTargetsErased() final
fired before a all single and joint_targets are removed
virtual void _onBayesNetChanged(const IBayesNet< GUM_SCALAR > *bn) final
fired after a new Bayes net has been assigned to the engine
ShaferShenoyInference< GUM_SCALAR > & operator=(const ShaferShenoyInference< GUM_SCALAR > &)
avoid copy operators
bool __is_new_jt_needed
indicates whether a new join tree is needed for the next inference
static INLINE Potential< GUM_SCALAR > * SSNewprojPotential(const Potential< GUM_SCALAR > &t1, const Set< const DiscreteVariable * > &del_vars)
SetIteratorSafe< const Potential< GUM_SCALAR > *> __PotentialSetIterator
void setFindBarrenNodesType(FindBarrenNodesType type)
sets how we determine barren nodes
void _onJointTargetErased(const NodeSet &set) final
fired before a joint target is removed
HashTable< NodeSet, NodeId > __joint_target_to_clique
for each set target, assign a clique in the JT that contains it
~ShaferShenoyInference() final
destructor
ArcProperty< __PotentialSet > __created_potentials
the set of potentials created for the last inference messages
Triangulation * __triangulation
the triangulation class creating the junction tree used for inference
Potential< GUM_SCALAR > margSumOut(const Set< const DiscreteVariable * > &del_vars) const
Projection using sum as operation (and implementation-optimized operations)
void __createNewJT()
create a new junction tree as well as its related data structures
Detect barren nodes for inference in Bayesian networks.
<agrum/BN/inference/ShaferShenoyInference.h>
void __diffuseMessageInvalidations(NodeId from, NodeId to, NodeSet &cliques_invalidated)
invalidate all the messages sent from a given clique
__PotentialSet __removeBarrenVariables(__PotentialSet &pot_list, Set< const DiscreteVariable * > &del_vars)
JoinTree * __JT
the join (or junction) tree used to answer the last inference query
Class for computing default triangulations of graphs.
Base class for undirected graphs.
void __computeJoinTreeRoots()
compute a root for each connected component of __JT
void _onEvidenceAdded(const NodeId id, bool isHardEvidence) final
fired after a new evidence is inserted
<agrum/BN/inference/evidenceInference.h>
NodeSet __hard_ev_nodes
the hard evidence nodes which were projected in CPTs
bool __use_binary_join_tree
indicates whether we should transform junction trees into binary join trees
Implementation of Shafer-Shenoy's propagation for inference in Bayesian Networks. ...
NodeProperty< __PotentialSet > __clique_potentials
the list of all potentials stored in the cliques
const Potential< GUM_SCALAR > & _posterior(NodeId id) final
returns the posterior of a given variable
Interface for all the triangulation methods.
const JoinTree * joinTree()
returns the current join tree used
EvidenceChangeType
the possible types of evidence changes
void _onAllEvidenceErased(bool contains_hard_evidence) final
fired before all the evidence are erased
void __invalidateAllMessages()
invalidate all messages, posteriors and created potentials
virtual const IBayesNet< GUM_SCALAR > & BN() const final
Returns a constant reference over the IBayesNet referenced by this class.
void _onAllMarginalTargetsErased() final
fired before a all the single targets are removed
Size NodeId
Type for node ids.
void __produceMessage(NodeId from_id, NodeId to_id)
creates the message sent by clique from_id to clique to_id
ArcProperty< __PotentialSet > __separator_potentials
the list of all potentials stored in the separators after inferences
const JunctionTree * junctionTree()
returns the current junction tree