57 template < GUM_Numeric GUM_SCALAR >
68 template < GUM_Numeric GUM_SCALAR >
74 template < GUM_Numeric GUM_SCALAR >
86 template < GUM_Numeric GUM_SCALAR >
90 "No Bayes net has been assigned to the "
91 "inference algorithm");
93 const auto& dag = this->
BN().internalDag();
94 for (
const auto var: vars) {
102 template < GUM_Numeric GUM_SCALAR >
108 template < GUM_Numeric GUM_SCALAR >
119 template < GUM_Numeric GUM_SCALAR >
126 template < GUM_Numeric GUM_SCALAR >
131 "No Bayes net has been assigned to the "
132 "inference algorithm");
134 const auto& dag = this->
BN().internalDag();
135 for (
const auto node: joint_target) {
136 if (!dag.exists(node)) {
138 "at least one one in " << joint_target <<
" does not belong to the bn");
147 if (target.isStrictSupersetOf(joint_target))
return;
163 template < GUM_Numeric GUM_SCALAR >
168 "No Bayes net has been assigned to the "
169 "inference algorithm");
171 const auto& dag = this->
BN().internalDag();
172 for (
const auto node: joint_target) {
173 if (!dag.exists(node)) {
175 "at least one one in " << joint_target <<
" does not belong to the bn");
190 template < GUM_Numeric GUM_SCALAR >
196 template < GUM_Numeric GUM_SCALAR >
206 template < GUM_Numeric GUM_SCALAR >
207 const Tensor< GUM_SCALAR >&
211 bool found_exact_target =
false;
215 found_exact_target =
true;
238 template < GUM_Numeric GUM_SCALAR >
245 template < GUM_Numeric GUM_SCALAR >
246 const Tensor< GUM_SCALAR >&
251 template < GUM_Numeric GUM_SCALAR >
255 if (!(evs *
targets).empty()) {
257 "Targets (" <<
targets <<
") can not intersect evs (" << evs <<
").");
259 auto condset = this->
BN().minimalCondSet(
targets, evs);
265 Tensor< GUM_SCALAR > res;
266 for (
const auto& target:
targets) {
267 res.add(this->
BN().variable(target));
268 iTarget.
add(this->
BN().variable(target));
272 for (
const auto& n: condset) {
273 res.add(this->
BN().variable(n));
280 for (
const auto& n: condset)
293 template < GUM_Numeric GUM_SCALAR >
295 const std::vector< std::string >&
targets,
296 const std::vector< std::string >& evs) {
297 const auto& bn = this->
BN();
301 template < GUM_Numeric GUM_SCALAR >
303 const auto& bn = this->
BN();
307 "jointMutualInformation needs at least 2 variables (targets=" <<
targets <<
")");
318 for (
const auto nod:
targets) {
319 const auto& var = bn.variable(nod);
321 caracteristic.
add(*pv);
327 const GUM_SCALAR start = (siz % 2 == 0) ? GUM_SCALAR(-1.0) : GUM_SCALAR(1.0);
329 GUM_SCALAR res = GUM_SCALAR(0.0);
332 for (caracteristic.
inc(); !caracteristic.
end(); caracteristic.
inc()) {
335 for (
Idx i = 0; i < caracteristic.
nbrDim(); i++) {
336 if (caracteristic.
val(i) == 1) {
341 res += sign * po.sumIn(sov).entropy();
344 for (
Idx i = 0; i < caracteristic.
nbrDim(); i++) {
351 template < GUM_Numeric GUM_SCALAR >
353 const std::vector< std::string >&
targets) {
void _setBayesNetDuringConstruction_(const IBayesNet< GUM_SCALAR > *bn)
assigns a BN during the inference engine construction
virtual const IBayesNet< GUM_SCALAR > & BN() const final
Returns a constant reference over the IBayesNet referenced by this class.
virtual void chgEvidence(NodeId id, const Idx val) final
change the value of an already existing hard evidence
virtual bool isInferenceDone() const noexcept final
returns whether the inference object is in a InferenceDone state
virtual void setState_(const StateOfInference state) final
set the state of the inference engine and call the notification onStateChanged_ when necessary (i....
virtual void eraseAllEvidence() final
removes all the evidence entered into the network
virtual void makeInference() final
perform the heavy computations needed to compute the targets' posteriors
virtual void addEvidence(NodeId id, const Idx val) final
adds a new hard evidence on node id
Virtual base class for probabilistic graphical models.
Class representing the minimal interface for Bayesian network with no numerical data.
Class for assigning/browsing values to tuples of discrete variables.
bool end() const
Returns true if the Instantiation reached the end.
void inc()
Operator increment.
void incOut(const Instantiation &i)
Operator increment for the variables not in i.
void setFirstIn(const Instantiation &i)
Assign the first values in the Instantiation for the variables in i.
void add(const DiscreteVariable &v) final
Adds a new variable in the Instantiation.
void incIn(const Instantiation &i)
Operator increment for the variables in i.
Idx val(Idx i) const
Returns the current value of the variable at position i.
void setFirst()
Assign the first values to the tuple of the Instantiation.
void setFirstOut(const Instantiation &i)
Assign the first values in the Instantiation for the variables not in i.
const DiscreteVariable & variable(Idx i) const final
Returns the variable at position i in the tuple.
Idx nbrDim() const final
Returns the number of variables in the Instantiation.
Exception: at least one argument passed to a function is not what was expected.
const Tensor< GUM_SCALAR > & posterior(NodeId node) final
Computes and returns the posterior of a node.
~JointTargetedInference() override
destructor
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).
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
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 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 &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 eraseJointTarget(const NodeSet &joint_target) final
removes an existing joint target
GUM_SCALAR jointMutualInformation(const NodeSet &targets)
Mutual information between 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 bool isTarget(NodeId node) const final
return true if variable is a (marginal) target
MarginalTargetedInference(const IBayesNet< GUM_SCALAR > *bn)
default constructor
virtual const NodeSet & targets() const noexcept final
returns the list of marginal targets
virtual void eraseAllTargets()
Clear all previously defined targets.
Exception : a pointer or a reference on a nullptr (0) object.
Defines a discrete random variable over an integer interval.
void clear()
Removes all the elements, if any, from the set.
bool empty() const noexcept
Indicates whether the set is the empty set.
void insert(const Key &k)
Inserts a new element into the set.
bool isStrictSubsetOf(const Set< Key > &s) const
Exception : a looked-for element could not be found.
#define GUM_ERROR(type, msg)
std::size_t Size
In aGrUM, hashed values are unsigned long int.
Size Idx
Type for indexes.
Size NodeId
Type for node ids.
Set< NodeId > NodeSet
Some typdefs and define for shortcuts ...
This file contains the abstract inference class definition for computing (incrementally) joint poster...
gum is the global namespace for all aGrUM entities
Set< const DiscreteVariable * > VariableSet
Header of gumRangeVariable.