28 #ifndef GUM_SIMPLICIAL_SET_H 29 #define GUM_SIMPLICIAL_SET_H 34 #include <agrum/agrum.h> 36 #include <agrum/tools/core/priorityQueue.h> 37 #include <agrum/tools/graphs/cliqueGraph.h> 39 #define GUM_QUASI_RATIO 0.99
40 #define GUM_WEIGHT_THRESHOLD 0.0
104 explicit SimplicialSet(UndiGraph* graph,
105 const NodeProperty<
double >* log_domain_sizes,
106 NodeProperty<
double >* log_weights,
149 SimplicialSet(
const SimplicialSet& simplicial_from,
151 const NodeProperty<
double >* log_domain_sizes,
152 NodeProperty<
double >* log_weights,
153 bool avoid_check =
false);
156 SimplicialSet(SimplicialSet&& from);
171 void makeClique(
const NodeId id);
179 void eraseClique(
const NodeId id);
186 void eraseNode(
const NodeId id);
192 void eraseEdge(
const Edge& edge);
201 void addEdge(NodeId first, NodeId second);
207 bool isSimplicial(
const NodeId id);
212 bool hasSimplicialNode();
215 bool hasAlmostSimplicialNode();
218 bool hasQuasiSimplicialNode();
223 NodeId bestSimplicialNode();
228 const PriorityQueue< NodeId,
double >& allSimplicialNodes();
231 NodeId bestAlmostSimplicialNode();
236 const PriorityQueue< NodeId,
double >& allAlmostSimplicialNodes();
239 NodeId bestQuasiSimplicialNode();
244 const PriorityQueue< NodeId,
double >& allQuasiSimplicialNodes();
251 void setFillIns(
bool on_off);
254 const EdgeSet& fillIns()
const;
283 void setGraph(UndiGraph* graph,
284 const NodeProperty<
double >* log_domain_sizes,
285 NodeProperty<
double >* log_weights,
293 void replaceLogWeights(NodeProperty<
double >* old_weigths,
294 NodeProperty<
double >* new_weights);
304 NodeProperty<
double >* log_weights__;
307 const NodeProperty<
double >* log_domain_sizes__;
310 PriorityQueue< NodeId,
double > simplicial_nodes__;
313 PriorityQueue< NodeId,
double > almost_simplicial_nodes__;
316 PriorityQueue< NodeId,
double > quasi_simplicial_nodes__;
320 enum class Belong__ :
char 327 NodeProperty< Belong__ > containing_list__;
331 EdgeProperty< Size > nb_triangles__;
334 NodeProperty< Size > nb_adjacent_neighbours__;
344 double log_tree_width__;
349 double quasi_ratio__;
353 double log_threshold__;
356 NodeSet changed_status__;
360 bool we_want_fill_ins__{
false};
363 EdgeSet fill_ins_list__;
368 void updateList__(
const NodeId id);
371 void updateAllNodes__();
387 SimplicialSet& operator=(
const SimplicialSet&);
394 SimplicialSet(
const SimplicialSet&);
399 #ifndef GUM_NO_INLINE 400 # include <agrum/tools/graphs/algorithms/simplicialSet_inl.h> #define GUM_WEIGHT_THRESHOLD