Infrared
Loading...
Searching...
No Matches
cluster.hpp
1#ifndef INFRARED_CLUSTER_HPP
2#define INFRARED_CLUSTER_HPP
3
4/*
5 * InfraRed --- A generic engine for Boltzmann sampling over constraint networks
6 * (C) Sebastian Will, 2018
7 *
8 * This file is part of the InfraRed source code.
9 *
10 * InfraRed provides a generic framework for tree decomposition-based
11 * Boltzmann sampling over constraint networks
12 */
13
21#include <vector>
22#include <algorithm>
23
24#include "functions.hpp"
25
26namespace ired {
39 template<class FunValue=double>
40 class Cluster {
41 public:
42 using var_idx_t = int;
46
51 }
52
58 explicit
59 Cluster(const std::vector<var_idx_t> &vars)
60 : vars_(vars) {
61 }
62
64
70 const std::vector<var_idx_t> &
71 vars() const {return vars_;}
72
76 bool
77 empty() const {
78 return vars_.empty();
79 }
80
86 const auto &
87 constraints() const {
88 return constrs_;
89 }
90
96 const auto &
97 functions() const {return funs_;}
98
102 void
104 constrs_.push_back(c);
105 }
106
110 void
112 funs_.push_back(f);
113 }
114
125 auto
126 sep_vars(const Cluster &parent) const {
127 auto sepvars = std::vector<var_idx_t>();
128 const auto &pvars = parent.vars();
129 for ( auto &var : vars_ ) {
130 if (std::find(pvars.begin(), pvars.end(),var)
131 != pvars.end()) {
132 sepvars.push_back(var);
133 }
134 }
135 return sepvars;
136 }
137
147 auto
148 diff_vars(const Cluster &parent) const {
149 auto diffvars = std::vector<var_idx_t>();
150 const auto &pvars = parent.vars();
151 for ( auto &var : vars_ ) {
152 if (std::find(pvars.begin(), pvars.end(),var)
153 == pvars.end()) {
154 diffvars.push_back(var);
155 }
156 }
157 return diffvars;
158 }
159
160 private:
161 std::vector<var_idx_t> vars_;
162 std::vector<const constraint_t *> constrs_;
163 std::vector<const function_t *> funs_;
164 }; // end class Cluster
165}
166
167#endif
A (partial) assignment of variables to values.
Definition assignment.hpp:76
Cluster (or bag) in the cluster tree.
Definition cluster.hpp:40
void add_constraint(const constraint_t *c)
Assign constraint to this cluster.
Definition cluster.hpp:103
Cluster(const std::vector< var_idx_t > &vars)
constructor with variables
Definition cluster.hpp:59
void add_function(const function_t *f)
Assign function to this cluster.
Definition cluster.hpp:111
const auto & constraints() const
Get constraints.
Definition cluster.hpp:87
auto sep_vars(const Cluster &parent) const
Calculate separator variables.
Definition cluster.hpp:126
int var_idx_t
Definition cluster.hpp:42
const auto & functions() const
Get functions.
Definition cluster.hpp:97
const std::vector< var_idx_t > & vars() const
Get variables.
Definition cluster.hpp:71
~Cluster()
Definition cluster.hpp:63
bool empty() const
Check whether cluster is empty.
Definition cluster.hpp:77
auto diff_vars(const Cluster &parent) const
Calculate difference variables.
Definition cluster.hpp:148
Cluster()
empty constructor
Definition cluster.hpp:50
Definition assignment.hpp:29
Function< bool > Constraint
A constraint is simply a boolean-valued function.
Definition functions.hpp:406