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