libDAI
Classes | Public Attributes | Private Attributes | Related Functions | List of all members
dai::JTree Class Reference

Exact inference algorithm using junction tree. More...

#include <dai/jtree.h>

Inheritance diagram for dai::JTree:
dai::DAIAlg< GRM > dai::InfAlg dai::TreeEP

Classes

struct  Properties
 Parameters for JTree. More...
 

Public Member Functions

Constructors/destructors
 JTree ()
 Default constructor. More...
 
 JTree (const FactorGraph &fg, const PropertySet &opts, bool automatic=true)
 Construct from FactorGraph fg and PropertySet opts. More...
 
General InfAlg interface
virtual JTreeclone () const
 Returns a pointer to a new, cloned copy of *this (i.e., virtual copy constructor) More...
 
virtual JTreeconstruct (const FactorGraph &fg, const PropertySet &opts) const
 Returns a pointer to a newly constructed inference algorithm. More...
 
virtual std::string name () const
 Returns the name of the algorithm. More...
 
virtual Factor belief (const VarSet &vs) const
 Returns the (approximate) marginal probability distribution of a set of variables. More...
 
virtual std::vector< Factorbeliefs () const
 Returns all beliefs (approximate marginal probability distributions) calculated by the algorithm. More...
 
virtual Real logZ () const
 Returns the logarithm of the (approximated) partition sum (normalizing constant of the factor graph). More...
 
std::vector< size_t > findMaximum () const
 
virtual void init ()
 Initializes all data structures of the approximate inference algorithm. More...
 
virtual void init (const VarSet &)
 Initializes all data structures corresponding to some set of variables. More...
 
virtual Real run ()
 Runs the approximate inference algorithm. More...
 
virtual Real maxDiff () const
 Returns maximum difference between single variable beliefs in the last iteration. More...
 
virtual size_t Iterations () const
 Returns number of iterations done (one iteration passes over the complete factorgraph). More...
 
virtual void setProperties (const PropertySet &opts)
 Set parameters of this inference algorithm. More...
 
virtual PropertySet getProperties () const
 Returns parameters of this inference algorithm converted into a PropertySet. More...
 
virtual std::string printProperties () const
 Returns parameters of this inference algorithm formatted as a string in the format "[key1=val1,key2=val2,...,keyn=valn]". More...
 
Additional interface specific for JTree
void construct (const FactorGraph &fg, const std::vector< VarSet > &cl, bool verify=false)
 Constructs a junction tree based on the cliques cl (corresponding to some elimination sequence). More...
 
void GenerateJT (const FactorGraph &fg, const std::vector< VarSet > &cl)
 Constructs a junction tree based on the cliques cl (corresponding to some elimination sequence). More...
 
const Factormessage (size_t alpha, size_t _beta) const
 Returns constant reference to the message from outer region alpha to its _beta 'th neighboring inner region. More...
 
Factormessage (size_t alpha, size_t _beta)
 Returns reference to the message from outer region alpha to its _beta 'th neighboring inner region. More...
 
void runHUGIN ()
 Runs junction tree algorithm using HUGIN (message-free) updates. More...
 
void runShaferShenoy ()
 Runs junction tree algorithm using Shafer-Shenoy updates. More...
 
size_t findEfficientTree (const VarSet &vs, RootedTree &Tree, size_t PreviousRoot=(size_t)-1) const
 Finds an efficient subtree for calculating the marginal of the variables in vs. More...
 
Factor calcMarginal (const VarSet &vs)
 Calculates the marginal of a set of variables (using cutset conditioning, if necessary) More...
 
- Public Member Functions inherited from dai::DAIAlg< GRM >
 DAIAlg ()
 Default constructor. More...
 
 DAIAlg (const GRM &grm)
 Construct from GRM. More...
 
FactorGraphfg ()
 Returns reference to underlying FactorGraph. More...
 
const FactorGraphfg () const
 Returns constant reference to underlying FactorGraph. More...
 
void clamp (size_t i, size_t x, bool backup=false)
 Clamp variable with index i to value x (i.e. multiply with a Kronecker delta $\delta_{x_i, x}$) More...
 
void makeCavity (size_t i, bool backup=false)
 Sets all factors interacting with variable with index i to one. More...
 
void makeRegionCavity (std::vector< size_t > facInds, bool backup)
 Sets all factors indicated by facInds to one. More...
 
void backupFactor (size_t I)
 Make a backup copy of factor I. More...
 
void backupFactors (const VarSet &vs)
 Make backup copies of all factors involving the variables in vs. More...
 
void restoreFactor (size_t I)
 Restore factor I from its backup copy. More...
 
void restoreFactors (const VarSet &vs)
 Restore the factors involving the variables in vs from their backup copies. More...
 
void restoreFactors ()
 Restore all factors from their backup copies. More...
 
- Public Member Functions inherited from dai::InfAlg
virtual ~InfAlg ()
 Virtual destructor (needed because this class contains virtual functions) More...
 
virtual std::string identify () const
 Identifies itself for logging purposes. More...
 
virtual Factor belief (const Var &v) const
 Returns the (approximate) marginal probability distribution of a variable. More...
 
virtual Factor beliefV (size_t i) const
 Returns the (approximate) marginal probability distribution of the variable with index i. More...
 
virtual Factor beliefF (size_t I) const
 Returns the (approximate) marginal probability distribution of the variables on which factor I depends. More...
 
virtual void setMaxIter (size_t)
 Sets maximum number of iterations (one iteration passes over the complete factorgraph). More...
 

Public Attributes

RootedTree RTree
 The junction tree (stored as a rooted tree) More...
 
std::vector< FactorQa
 Outer region beliefs. More...
 
std::vector< FactorQb
 Inner region beliefs. More...
 
struct dai::JTree::Properties props
 

Private Attributes

std::vector< std::vector< Factor > > _mes
 Stores the messages. More...
 
Real _logZ
 Stores the logarithm of the partition sum. More...
 

Related Functions

(Note that these are not member functions.)

std::pair< size_t, BigIntboundTreewidth (const FactorGraph &fg, greedyVariableElimination::eliminationCostFunction fn, size_t maxStates=0)
 Calculates upper bound to the treewidth of a FactorGraph, using the specified heuristic. More...
 

Detailed Description

Exact inference algorithm using junction tree.

The junction tree algorithm uses message passing on a junction tree to calculate exact marginal probability distributions ("beliefs") for specified cliques (outer regions) and separators (intersections of pairs of cliques).

There are two variants, the sum-product algorithm (corresponding to finite temperature) and the max-product algorithm (corresponding to zero temperature).

Examples:
example.cpp.

Constructor & Destructor Documentation

dai::JTree::JTree ( )
inline

Default constructor.

dai::JTree::JTree ( const FactorGraph fg,
const PropertySet opts,
bool  automatic = true 
)

Construct from FactorGraph fg and PropertySet opts.

Parameters
fgfactor graph
optsParameters
See also
Properties
Parameters
automaticif true, construct the junction tree automatically, using the heuristic in opts['heuristic'].

Member Function Documentation

virtual JTree* dai::JTree::clone ( ) const
inlinevirtual

Returns a pointer to a new, cloned copy of *this (i.e., virtual copy constructor)

Implements dai::InfAlg.

Reimplemented in dai::TreeEP.

virtual JTree* dai::JTree::construct ( const FactorGraph fg,
const PropertySet opts 
) const
inlinevirtual

Returns a pointer to a newly constructed inference algorithm.

Parameters
fgFactor graph on which to perform the inference algorithm;
optsParameters passed to constructor of inference algorithm;

Implements dai::InfAlg.

Reimplemented in dai::TreeEP.

virtual std::string dai::JTree::name ( ) const
inlinevirtual

Returns the name of the algorithm.

Implements dai::InfAlg.

Reimplemented in dai::TreeEP.

Factor dai::JTree::belief ( const VarSet vs) const
virtual

Returns the (approximate) marginal probability distribution of a set of variables.

Note
Before this method is called, run() should have been called.
Exceptions
NOT_IMPLEMENTEDif not implemented/supported.
BELIEF_NOT_AVAILABLEif the requested belief cannot be calculated with this algorithm.

Implements dai::InfAlg.

Examples:
example.cpp.
vector< Factor > dai::JTree::beliefs ( ) const
virtual

Returns all beliefs (approximate marginal probability distributions) calculated by the algorithm.

Note
Before this method is called, run() should have been called.

Implements dai::InfAlg.

Real dai::JTree::logZ ( ) const
virtual

Returns the logarithm of the (approximated) partition sum (normalizing constant of the factor graph).

Note
Before this method is called, run() should have been called.
Exceptions
NOT_IMPLEMENTEDif not implemented/supported

Implements dai::InfAlg.

Reimplemented in dai::TreeEP.

Examples:
example.cpp.
std::vector< size_t > dai::JTree::findMaximum ( ) const
virtual
Precondition
Assumes that run() has been called and that props.inference == MAXPROD

Reimplemented from dai::InfAlg.

Examples:
example.cpp.
virtual void dai::JTree::init ( )
inlinevirtual

Initializes all data structures of the approximate inference algorithm.

Note
This method should be called at least once before run() is called.

Implements dai::InfAlg.

Reimplemented in dai::TreeEP.

Examples:
example.cpp.
virtual void dai::JTree::init ( const VarSet vs)
inlinevirtual

Initializes all data structures corresponding to some set of variables.

This method can be used to do a partial initialization after a part of the factor graph has changed. Instead of initializing all data structures, it only initializes those involving the variables in vs.

Exceptions
NOT_IMPLEMENTEDif not implemented/supported

Implements dai::InfAlg.

Reimplemented in dai::TreeEP.

Real dai::JTree::run ( )
virtual

Runs the approximate inference algorithm.

Note
Before run() is called the first time, init() should have been called.

Implements dai::InfAlg.

Reimplemented in dai::TreeEP.

Examples:
example.cpp.
virtual Real dai::JTree::maxDiff ( ) const
inlinevirtual

Returns maximum difference between single variable beliefs in the last iteration.

Exceptions
NOT_IMPLEMENTEDif not implemented/supported

Reimplemented from dai::InfAlg.

Reimplemented in dai::TreeEP.

virtual size_t dai::JTree::Iterations ( ) const
inlinevirtual

Returns number of iterations done (one iteration passes over the complete factorgraph).

Exceptions
NOT_IMPLEMENTEDif not implemented/supported

Reimplemented from dai::InfAlg.

Reimplemented in dai::TreeEP.

void dai::JTree::setProperties ( const PropertySet opts)
virtual

Set parameters of this inference algorithm.

The parameters are set according to the PropertySet opts. The values can be stored either as std::string or as the type of the corresponding MF::props member.

Implements dai::InfAlg.

Reimplemented in dai::TreeEP.

PropertySet dai::JTree::getProperties ( ) const
virtual

Returns parameters of this inference algorithm converted into a PropertySet.

Implements dai::InfAlg.

Reimplemented in dai::TreeEP.

string dai::JTree::printProperties ( ) const
virtual

Returns parameters of this inference algorithm formatted as a string in the format "[key1=val1,key2=val2,...,keyn=valn]".

Implements dai::InfAlg.

Reimplemented in dai::TreeEP.

void dai::JTree::construct ( const FactorGraph fg,
const std::vector< VarSet > &  cl,
bool  verify = false 
)

Constructs a junction tree based on the cliques cl (corresponding to some elimination sequence).

First, constructs a weighted graph, where the nodes are the elements of cl, and each edge is weighted with the cardinality of the intersection of the state spaces of the nodes. Then, a maximal spanning tree for this weighted graph is calculated. Subsequently, a corresponding region graph is built:

  • the outer regions correspond with the cliques and have counting number 1;
  • the inner regions correspond with the seperators, i.e., the intersections of two cliques that are neighbors in the spanning tree, and have counting number -1 (except empty ones, which have counting number 0);
  • inner and outer regions are connected by an edge if the inner region is a seperator for the outer region. Finally, Beliefs are constructed. If verify == true, checks whether each factor is subsumed by a clique.
void dai::JTree::GenerateJT ( const FactorGraph fg,
const std::vector< VarSet > &  cl 
)

Constructs a junction tree based on the cliques cl (corresponding to some elimination sequence).

Invokes construct() and then constructs messages.

See also
construct()
const Factor& dai::JTree::message ( size_t  alpha,
size_t  _beta 
) const
inline

Returns constant reference to the message from outer region alpha to its _beta 'th neighboring inner region.

Factor& dai::JTree::message ( size_t  alpha,
size_t  _beta 
)
inline

Returns reference to the message from outer region alpha to its _beta 'th neighboring inner region.

void dai::JTree::runHUGIN ( )

Runs junction tree algorithm using HUGIN (message-free) updates.

Note
The initial messages may be arbitrary; actually they are not used at all.
void dai::JTree::runShaferShenoy ( )

Runs junction tree algorithm using Shafer-Shenoy updates.

Note
The initial messages may be arbitrary.
size_t dai::JTree::findEfficientTree ( const VarSet vs,
RootedTree Tree,
size_t  PreviousRoot = (size_t)-1 
) const

Finds an efficient subtree for calculating the marginal of the variables in vs.

First, the current junction tree is reordered such that it gets as root the clique that has maximal state space overlap with vs. Then, the minimal subtree (starting from the root) is identified that contains all the variables in vs and also the outer region with index PreviousRoot (if specified). Finally, the current junction tree is reordered such that this minimal subtree comes before the other edges, and the size of the minimal subtree is returned.

Factor dai::JTree::calcMarginal ( const VarSet vs)

Calculates the marginal of a set of variables (using cutset conditioning, if necessary)

Precondition
assumes that run() has been called already

Friends And Related Function Documentation

std::pair< size_t, BigInt > boundTreewidth ( const FactorGraph fg,
greedyVariableElimination::eliminationCostFunction  fn,
size_t  maxStates = 0 
)
related

Calculates upper bound to the treewidth of a FactorGraph, using the specified heuristic.

Parameters
fgthe factor graph for which the treewidth should be bounded
fnthe heuristic cost function used for greedy variable elimination
maxStatesmaximum total number of states in outer regions of junction tree (0 means no limit)
Exceptions
OUT_OF_MEMORYif the total number of states becomes larger than maxStates
Returns
a pair (number of variables in largest clique, number of states in largest clique)

Member Data Documentation

std::vector<std::vector<Factor> > dai::JTree::_mes
private

Stores the messages.

Real dai::JTree::_logZ
private

Stores the logarithm of the partition sum.

RootedTree dai::JTree::RTree

The junction tree (stored as a rooted tree)

std::vector<Factor> dai::JTree::Qa

Outer region beliefs.

std::vector<Factor> dai::JTree::Qb

Inner region beliefs.


The documentation for this class was generated from the following files: