libDAI
Private Attributes | List of all members
dai::ClusterGraph Class Reference

A ClusterGraph is a hypergraph with variables as nodes, and "clusters" (sets of variables) as hyperedges. More...

#include <dai/clustergraph.h>

Public Member Functions

Constructors and destructors
 ClusterGraph ()
 Default constructor. More...
 
 ClusterGraph (const std::vector< VarSet > &cls)
 Construct from vector of VarSet 's. More...
 
 ClusterGraph (const FactorGraph &fg, bool onlyMaximal)
 Construct from a factor graph. More...
 
Queries
const BipartiteGraphbipGraph () const
 Returns a constant reference to the graph structure. More...
 
size_t nrVars () const
 Returns number of variables. More...
 
const std::vector< Var > & vars () const
 Returns a constant reference to the variables. More...
 
const Varvar (size_t i) const
 Returns a constant reference to the i'th variable. More...
 
size_t nrClusters () const
 Returns number of clusters. More...
 
const std::vector< VarSet > & clusters () const
 Returns a constant reference to the clusters. More...
 
const VarSetcluster (size_t I) const
 Returns a constant reference to the I'th cluster. More...
 
size_t findVar (const Var &n) const
 Returns the index of variable n. More...
 
size_t findCluster (const VarSet &cl) const
 Returns the index of a cluster cl. More...
 
VarSet Delta (size_t i) const
 Returns union of clusters that contain the i 'th variable. More...
 
VarSet delta (size_t i) const
 Returns union of clusters that contain the i 'th (except this variable itself) More...
 
bool adj (size_t i1, size_t i2) const
 Returns true if variables with indices i1 and i2 are adjacent, i.e., both contained in the same cluster. More...
 
bool isMaximal (size_t I) const
 Returns true if cluster I is not contained in a larger cluster. More...
 
Operations
size_t insert (const VarSet &cl)
 Inserts a cluster (if it does not already exist) and creates new variables, if necessary. More...
 
ClusterGrapheraseNonMaximal ()
 Erases all clusters that are not maximal. More...
 
ClusterGrapheraseSubsuming (size_t i)
 Erases all clusters that contain the i 'th variable. More...
 
VarSet elimVar (size_t i)
 Eliminates variable with index i, without deleting the variable itself. More...
 
Variable elimination
template<class EliminationChoice >
ClusterGraph VarElim (EliminationChoice f, size_t maxStates=0) const
 Performs Variable Elimination, keeping track of the interactions that are created along the way. More...
 

Private Attributes

BipartiteGraph _G
 Stores the neighborhood structure. More...
 
std::vector< Var_vars
 Stores the variables corresponding to the nodes. More...
 
std::vector< VarSet_clusters
 Stores the clusters corresponding to the hyperedges. More...
 

Input/Ouput

std::string toString () const
 Formats a ClusterGraph as a string. More...
 
std::ostream & operator<< (std::ostream &os, const ClusterGraph &cl)
 Writes a ClusterGraph to an output stream. More...
 

Detailed Description

A ClusterGraph is a hypergraph with variables as nodes, and "clusters" (sets of variables) as hyperedges.

It is implemented as a bipartite graph with variable (Var) nodes and cluster (VarSet) nodes. One may think of a ClusterGraph as a FactorGraph without the actual factor values.

Todo:
Remove the _vars and _clusters variables and use only the graph and a contextual factor graph.

Constructor & Destructor Documentation

dai::ClusterGraph::ClusterGraph ( )
inline

Default constructor.

dai::ClusterGraph::ClusterGraph ( const std::vector< VarSet > &  cls)

Construct from vector of VarSet 's.

dai::ClusterGraph::ClusterGraph ( const FactorGraph fg,
bool  onlyMaximal 
)

Construct from a factor graph.

Creates cluster graph which has factors in fg as clusters if onlyMaximal == false, and only the maximal factors in fg if onlyMaximal == true.

Member Function Documentation

const BipartiteGraph& dai::ClusterGraph::bipGraph ( ) const
inline

Returns a constant reference to the graph structure.

size_t dai::ClusterGraph::nrVars ( ) const
inline

Returns number of variables.

const std::vector<Var>& dai::ClusterGraph::vars ( ) const
inline

Returns a constant reference to the variables.

const Var& dai::ClusterGraph::var ( size_t  i) const
inline

Returns a constant reference to the i'th variable.

size_t dai::ClusterGraph::nrClusters ( ) const
inline

Returns number of clusters.

const std::vector<VarSet>& dai::ClusterGraph::clusters ( ) const
inline

Returns a constant reference to the clusters.

const VarSet& dai::ClusterGraph::cluster ( size_t  I) const
inline

Returns a constant reference to the I'th cluster.

size_t dai::ClusterGraph::findVar ( const Var n) const
inline

Returns the index of variable n.

size_t dai::ClusterGraph::findCluster ( const VarSet cl) const
inline

Returns the index of a cluster cl.

VarSet dai::ClusterGraph::Delta ( size_t  i) const
inline

Returns union of clusters that contain the i 'th variable.

VarSet dai::ClusterGraph::delta ( size_t  i) const
inline

Returns union of clusters that contain the i 'th (except this variable itself)

bool dai::ClusterGraph::adj ( size_t  i1,
size_t  i2 
) const
inline

Returns true if variables with indices i1 and i2 are adjacent, i.e., both contained in the same cluster.

bool dai::ClusterGraph::isMaximal ( size_t  I) const
inline

Returns true if cluster I is not contained in a larger cluster.

size_t dai::ClusterGraph::insert ( const VarSet cl)
inline

Inserts a cluster (if it does not already exist) and creates new variables, if necessary.

Note
This function could be better optimized if the index of one variable in cl would be known. If one could assume _vars to be ordered, a binary search could be used instead of a linear one.
ClusterGraph& dai::ClusterGraph::eraseNonMaximal ( )
inline

Erases all clusters that are not maximal.

ClusterGraph& dai::ClusterGraph::eraseSubsuming ( size_t  i)
inline

Erases all clusters that contain the i 'th variable.

VarSet dai::ClusterGraph::elimVar ( size_t  i)
inline

Eliminates variable with index i, without deleting the variable itself.

Note
This function can be better optimized
std::string dai::ClusterGraph::toString ( ) const
inline

Formats a ClusterGraph as a string.

template<class EliminationChoice >
ClusterGraph dai::ClusterGraph::VarElim ( EliminationChoice  f,
size_t  maxStates = 0 
) const
inline

Performs Variable Elimination, keeping track of the interactions that are created along the way.

Template Parameters
EliminationChoiceshould support "size_t operator()( const ClusterGraph &cl, const std::set<size_t> &remainingVars )"
Parameters
ffunction object which returns the next variable index to eliminate; for example, a dai::greedyVariableElimination object.
maxStatesmaximum total number of states of all clusters in the output cluster graph (0 means no limit).
Exceptions
OUT_OF_MEMORYif total number of states becomes larger than maxStates
Returns
A set of elimination "cliques".

Friends And Related Function Documentation

std::ostream& operator<< ( std::ostream &  os,
const ClusterGraph cl 
)
friend

Writes a ClusterGraph to an output stream.

Member Data Documentation

BipartiteGraph dai::ClusterGraph::_G
private

Stores the neighborhood structure.

std::vector<Var> dai::ClusterGraph::_vars
private

Stores the variables corresponding to the nodes.

std::vector<VarSet> dai::ClusterGraph::_clusters
private

Stores the clusters corresponding to the hyperedges.


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