15 #ifndef __defined_libdai_clustergraph_h
16 #define __defined_libdai_clustergraph_h
67 size_t nrVars()
const {
return _vars.size(); }
70 const std::vector<Var>&
vars()
const {
return _vars; }
92 return find( _vars.begin(), _vars.end(), n ) - _vars.begin();
97 return find( _clusters.begin(), _clusters.end(), cl ) - _clusters.begin();
104 result |= _clusters[I];
110 return Delta( i ) / _vars[i];
114 bool adj(
size_t i1,
size_t i2 )
const {
119 if( find( _G.
nb2(I).begin(), _G.
nb2(I).end(), i2 ) != _G.
nb2(I).end() ) {
129 const VarSet & clI = _clusters[I];
134 if( (J != I) && (clI << _clusters[J]) ) {
153 if( index == _clusters.size() ) {
154 _clusters.push_back( cl );
156 std::vector<size_t> nbs;
159 nbs.push_back( iter );
160 if( iter == _vars.size() ) {
162 _vars.push_back( *n );
165 _G.
addNode2( nbs.begin(), nbs.end(), nbs.size() );
172 for(
size_t I = 0; I < _G.
nrNodes2(); ) {
174 _clusters.erase( _clusters.begin() + I );
185 while( _G.
nb1(i).size() ) {
186 _clusters.erase( _clusters.begin() + _G.
nb1(i)[0] );
215 std::stringstream ss;
230 template<
class EliminationChoice>
239 std::set<size_t> varindices;
240 for(
size_t i = 0; i < _vars.size(); ++i )
241 varindices.insert( i );
245 while( !varindices.empty() ) {
246 size_t i = f( cl, varindices );
251 if( totalStates > (
BigInt)maxStates )
252 DAI_THROW(OUT_OF_MEMORY);
254 varindices.erase( i );
304 size_t operator()(
const ClusterGraph &cl,
const std::set<size_t>& remainingVars );
friend std::ostream & operator<<(std::ostream &os, const ClusterGraph &cl)
Writes a ClusterGraph to an output stream.
Definition: clustergraph.h:208
bool isMaximal(size_t I) const
Returns true if cluster I is not contained in a larger cluster.
Definition: clustergraph.h:127
iterator end()
Returns iterator that points beyond the last element.
Definition: smallset.h:198
const std::vector< VarSet > & clusters() const
Returns a constant reference to the clusters.
Definition: clustergraph.h:82
BigInt nrStates() const
Calculates the number of states of this VarSet, which is simply the number of possible joint states o...
Definition: varset.h:130
size_t eliminationCost_WeightedMinFill(const ClusterGraph &cl, size_t i)
Calculates cost of eliminating the i 'th variable from cluster graph cl according to the "WeightedMin...
Definition: clustergraph.cpp:122
const std::vector< Var > & vars() const
Returns a constant reference to the variables.
Definition: clustergraph.h:70
size_t addNode2()
Adds a node of type 2 without neighbors and returns the index of the added node.
Definition: bipgraph.h:152
ClusterGraph & eraseSubsuming(size_t i)
Erases all clusters that contain the i 'th variable.
Definition: clustergraph.h:183
ClusterGraph()
Default constructor.
Definition: clustergraph.h:49
BipartiteGraph _G
Stores the neighborhood structure.
Definition: clustergraph.h:37
const Neighbor & nb1(size_t i1, size_t _i2) const
Returns constant reference to the _i2 'th neighbor of node i1 of type 1.
Definition: bipgraph.h:87
Represents a factor graph.
Definition: factorgraph.h:65
iterator begin()
Returns iterator that points to the first element.
Definition: smallset.h:193
Defines the VarSet class, which represents a set of random variables.
size_t eliminationCost_MinNeighbors(const ClusterGraph &cl, size_t i)
Calculates cost of eliminating the i 'th variable from cluster graph cl according to the "MinNeighbor...
Definition: clustergraph.cpp:89
const BipartiteGraph & bipGraph() const
Returns a constant reference to the graph structure.
Definition: clustergraph.h:64
size_t i
Counter.
Definition: clustergraph.h:271
Represents the neighborhood structure of nodes in an undirected, bipartite graph. ...
Definition: bipgraph.h:45
const Var & var(size_t i) const
Returns a constant reference to the i'th variable.
Definition: clustergraph.h:73
sequentialVariableElimination(const std::vector< Var > s)
Construct from vector of variables.
Definition: clustergraph.h:275
size_t nrNodes2() const
Returns number of nodes of type 2.
Definition: bipgraph.h:224
size_t(* eliminationCostFunction)(const ClusterGraph &, size_t)
Type of cost functions to be used for greedy variable elimination.
Definition: clustergraph.h:289
size_t addNode1()
Adds a node of type 1 without neighbors and returns the index of the added node.
Definition: bipgraph.h:149
mpz_class BigInt
Arbitrary precision integer number.
Definition: util.h:101
size_t insert(const VarSet &cl)
Inserts a cluster (if it does not already exist) and creates new variables, if necessary.
Definition: clustergraph.h:151
Helper object for dai::ClusterGraph::VarElim()
Definition: clustergraph.h:286
ClusterGraph & eraseNonMaximal()
Erases all clusters that are not maximal.
Definition: clustergraph.h:171
VarSet elimVar(size_t i)
Eliminates variable with index i, without deleting the variable itself.
Definition: clustergraph.h:195
std::vector< Var >::const_iterator const_iterator
Constant iterator over the elements.
Definition: smallset.h:182
std::string toString() const
Formats a ClusterGraph as a string.
Definition: clustergraph.h:214
const VarSet & cluster(size_t I) const
Returns a constant reference to the I'th cluster.
Definition: clustergraph.h:85
const Neighbor & nb2(size_t i2, size_t _i1) const
Returns constant reference to the _i1 'th neighbor of node i2 of type 2.
Definition: bipgraph.h:100
A ClusterGraph is a hypergraph with variables as nodes, and "clusters" (sets of variables) as hypered...
Definition: clustergraph.h:34
Represents a set of variables.
Definition: varset.h:94
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 clust...
Definition: clustergraph.h:114
#define bforeach
An alias to the BOOST_FOREACH macro from the boost::bforeach library.
Definition: util.h:48
Helper object for dai::ClusterGraph::VarElim()
Definition: clustergraph.h:266
void eraseNode2(size_t n2)
Removes node n2 of type 2 and all incident edges; indices of other nodes are changed accordingly...
Definition: bipgraph.cpp:63
size_t eliminationCost_MinWeight(const ClusterGraph &cl, size_t i)
Calculates cost of eliminating the i 'th variable from cluster graph cl according to the "MinWeight" ...
Definition: clustergraph.cpp:94
size_t eliminationCost_MinFill(const ClusterGraph &cl, size_t i)
Calculates cost of eliminating the i 'th variable from cluster graph cl according to the "MinFill" cr...
Definition: clustergraph.cpp:105
size_t findVar(const Var &n) const
Returns the index of variable n.
Definition: clustergraph.h:91
size_t operator()(const ClusterGraph &cl, const std::set< size_t > &remainingVars)
Returns the best variable from remainingVars to eliminate in the cluster graph cl by greedily minimiz...
Definition: clustergraph.cpp:75
size_t nrClusters() const
Returns number of clusters.
Definition: clustergraph.h:79
Describes the neighbor relationship of two nodes in a graph.
Definition: graph.h:73
Represents a discrete random variable.
Definition: var.h:37
Namespace for libDAI.
Definition: alldai.cpp:16
size_t findCluster(const VarSet &cl) const
Returns the index of a cluster cl.
Definition: clustergraph.h:96
Defines the FactorGraph class, which represents factor graphs (e.g., Bayesian networks or Markov rand...
eliminationCostFunction heuristic
Pointer to the cost function used.
Definition: clustergraph.h:293
ClusterGraph VarElim(EliminationChoice f, size_t maxStates=0) const
Performs Variable Elimination, keeping track of the interactions that are created along the way...
Definition: clustergraph.h:231
#define DAI_ASSERT(condition)
Assertion mechanism, similar to the standard assert() macro. It is always active, even if NDEBUG is d...
Definition: exceptions.h:60
#define DAI_DEBASSERT(x)
Assertion mechanism similar to DAI_ASSERT which is only active if DAI_DEBUG is defined.
Definition: exceptions.h:65
size_t operator()(const ClusterGraph &cl, const std::set< size_t > &)
Returns next variable in sequence.
Definition: clustergraph.cpp:70
Defines the BipartiteGraph class, which represents a bipartite graph.
std::vector< Var > _vars
Stores the variables corresponding to the nodes.
Definition: clustergraph.h:40
VarSet delta(size_t i) const
Returns union of clusters that contain the i 'th (except this variable itself)
Definition: clustergraph.h:109
VarSet Delta(size_t i) const
Returns union of clusters that contain the i 'th variable.
Definition: clustergraph.h:101
greedyVariableElimination(eliminationCostFunction h)
Construct from cost function.
Definition: clustergraph.h:299
std::vector< Var > seq
The variable elimination sequence.
Definition: clustergraph.h:269
size_t nrVars() const
Returns number of variables.
Definition: clustergraph.h:67
std::vector< VarSet > _clusters
Stores the clusters corresponding to the hyperedges.
Definition: clustergraph.h:43