aGrUM 3.1.1
a C++ library for (probabilistic) graphical models
DAGmodel.h
Go to the documentation of this file.
1/****************************************************************************
2 * This file is part of the aGrUM/pyAgrum library. *
3 * *
4 * Copyright (c) 2005-2026 by *
5 * - Pierre-Henri WUILLEMIN(_at_LIP6) *
6 * - Christophe GONZALES(_at_AMU) *
7 * *
8 * The aGrUM/pyAgrum library is free software; you can redistribute it *
9 * and/or modify it under the terms of either : *
10 * *
11 * - the GNU Lesser General Public License as published by *
12 * the Free Software Foundation, either version 3 of the License, *
13 * or (at your option) any later version, *
14 * - the MIT license (MIT), *
15 * - or both in dual license, as here. *
16 * *
17 * (see https://agrum.gitlab.io/articles/dual-licenses-lgplv3mit.html) *
18 * *
19 * This aGrUM/pyAgrum library is distributed in the hope that it will be *
20 * useful, but WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, *
21 * INCLUDING BUT NOT LIMITED TO THE WARRANTIES MERCHANTABILITY or FITNESS *
22 * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE *
23 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER *
24 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, *
25 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR *
26 * OTHER DEALINGS IN THE SOFTWARE. *
27 * *
28 * See LICENCES for more details. *
29 * *
30 * SPDX-FileCopyrightText: Copyright 2005-2026 *
31 * - Pierre-Henri WUILLEMIN(_at_LIP6) *
32 * - Christophe GONZALES(_at_AMU) *
33 * SPDX-License-Identifier: LGPL-3.0-or-later OR MIT *
34 * *
35 * Contact : info_at_agrum_dot_org *
36 * homepage : http://agrum.gitlab.io *
37 * gitlab : https://gitlab.com/agrumery/agrum *
38 * *
39 ****************************************************************************/
40
41
49#ifndef GUM_DAGMODEL_H
50#define GUM_DAGMODEL_H
51
52#include <agrum/agrum.h>
53
55
56namespace gum {
57
65 public:
68
72 DAGmodel();
73
77 ~DAGmodel() override;
78
82 DAGmodel(const DAGmodel& source);
83
87 DAGmodel(DAGmodel&& source) noexcept;
88
90
93
98 [[nodiscard]] DAG dag() const;
99
103 Size size() const final;
104
108 Size sizeArcs() const;
109
110 const NodeGraphPart& nodes() const final;
111
115 bool exists(NodeId node) const final;
116 bool exists(std::string_view name) const final;
117
119
122 const ArcSet& arcs() const;
123
125
131 bool existsArc(const NodeId tail, const NodeId head) const;
132 bool existsArc(std::string_view nametail, std::string_view namehead) const;
133
135
140 const NodeSet& parents(const NodeId id) const;
141 const NodeSet& parents(std::string_view name) const;
142
144 NodeSet parents(const NodeSet& ids) const;
145 NodeSet parents(const std::vector< std::string >& names) const;
146
148
152 NodeSet family(const NodeId id) const final;
153 NodeSet family(std::string_view name) const final;
154
156
161 const NodeSet& children(const NodeId id) const;
162 const NodeSet& children(std::string_view name) const;
163
165 NodeSet children(const NodeSet& ids) const;
166 NodeSet children(const std::vector< std::string >& names) const;
167
169
175 NodeSet descendants(const NodeId id) const;
176 NodeSet descendants(std::string_view name) const;
177
179
185 NodeSet ancestors(const NodeId id) const;
186 NodeSet ancestors(std::string_view name) const;
188
191
199 UndiGraph moralizedAncestralGraph(const std::vector< std::string >& nodenames) const;
200
203 bool isIndependent(NodeId X, NodeId Y, const NodeSet& Z) const final;
204
207 bool isIndependent(const NodeSet& X, const NodeSet& Y, const NodeSet& Z) const final;
208
209 bool isIndependent(std::string_view Xname,
210 std::string_view Yname,
211 const std::vector< std::string >& Znames) const;
212
213 bool isIndependent(const std::vector< std::string >& Xnames,
214 const std::vector< std::string >& Ynames,
215 const std::vector< std::string >& Znames) const;
216
220 UndiGraph moralGraph() const;
221
228
233
236 bool hasSameStructure(const DAGmodel& other) const;
237
238 /***
239 * @return the minimal subset of soids that conditions the target
240 *
241 * i.e. P(target| soids)=P(target|@return)
242 */
243 NodeSet minimalCondSet(NodeId target, const NodeSet& soids) const;
244
245
246 /***
247 * @return the minimal subset of soids that conditions the targets
248 *
249 * i.e. P(targets| soids)=P(targets|@return)
250 */
251 NodeSet minimalCondSet(const NodeSet& targets, const NodeSet& soids) const;
252
253
254 /***
255 * @return the minimal subset of soids that conditions the target
256 *
257 * i.e. P(target| soids)=P(target|@return)
258 */
259 NodeSet minimalCondSet(std::string_view target, const std::vector< std::string >& soids) const;
260
261
262 /***
263 * @return the minimal subset of soids that conditions the targets
264 *
265 * i.e. P(targets| soids)=P(targets|@return)
266 */
267 NodeSet minimalCondSet(const std::vector< std::string >& targets,
268 const std::vector< std::string >& soids) const;
269
270
274 const DAG& internalDag() const;
275
276 protected:
280 DAGmodel& operator=(const DAGmodel& source);
281 DAGmodel& operator=(DAGmodel&& source) noexcept;
282
285 };
286} // namespace gum
287
288#ifndef GUM_NO_INLINE
290#endif /* GUM_NO_INLINE */
291
292#endif /* GUM_DAGMODEL_H */
Interface-like class encapsulating basic functionalities for a DAGModel.
Base class for dag.
Definition DAG.h:121
NodeProperty< NodeId > connectedComponents() const
Returns the weakly connected components of the underlying DAG. Each node maps to the id of its compon...
NodeSet family(const NodeId id) const final
returns the parents of a node and the node
DAG dag_
The DAG of this Directed Graphical Model.
Definition DAGmodel.h:284
DAGmodel()
Default constructor.
Definition DAGmodel.cpp:49
const ArcSet & arcs() const
return true if the arc tail->head exists in the DAGmodel
Size size() const final
Returns the number of variables in this Directed Graphical Model.
Size sizeArcs() const
Returns the number of arcs in this Directed Graphical Model.
Sequence< NodeId > topologicalOrder() const
The topological order stays the same as long as no variable or arcs are added or erased src the topol...
NodeSet minimalCondSet(NodeId target, const NodeSet &soids) const
bool existsArc(const NodeId tail, const NodeId head) const
return true if the arc tail->head exists in the DAGmodel
DAG dag() const
Returns a named copy of the internal DAG: each node id is assigned the name of the corresponding vari...
bool hasSameStructure(const DAGmodel &other) const
Definition DAGmodel.cpp:87
UndiGraph moralizedAncestralGraph(const NodeSet &nodes) const
build a UndiGraph by moralizing the Ancestral Graph of a set of Nodes
const NodeSet & children(const NodeId id) const
returns the set of nodes with arc outgoing from a given node
DAGmodel & operator=(const DAGmodel &source)
Private copy operator.
Definition DAGmodel.cpp:62
~DAGmodel() override
Destructor.
Definition DAGmodel.cpp:60
bool exists(NodeId node) const final
Return true if this node exists in this graphical model.
const NodeSet & parents(const NodeId id) const
returns the set of nodes with arc ingoing to a given node
UndiGraph moralGraph() const
The node's id are coherent with the variables and nodes of the topology.
Definition DAGmodel.cpp:81
bool isIndependent(NodeId X, NodeId Y, const NodeSet &Z) const final
check if node X and node Y are independent given nodes Z
NodeSet descendants(const NodeId id) const
returns the set of nodes with directed path outgoing from a given node
const NodeGraphPart & nodes() const final
Returns a named copy of the internal DAG: each node id is assigned the name of the corresponding vari...
NodeSet ancestors(const NodeId id) const
returns the set of nodes with directed path ingoing to a given node
const DAG & internalDag() const
Returns a const reference to the internal (unnamed) DAG. O(1), no copy. Use for stable references or ...
std::vector< NodeId > ids(const std::vector< std::string > &names) const
transform a vector of names into a vector of nodeId
std::vector< std::string > names(const std::vector< NodeId > &ids) const
transform a vector of NodeId in a vector of names
Class for node sets in graph.
Base class for undirected graphs.
Definition undiGraph.h:130
Base class for graphical models over discrete variables.
std::size_t Size
In aGrUM, hashed values are unsigned long int.
Definition types.h:74
Size NodeId
Type for node ids.
Set< Arc > ArcSet
Some typdefs and define for shortcuts ...
HashTable< NodeId, VAL > NodeProperty
Property on graph elements.
Set< NodeId > NodeSet
Some typdefs and define for shortcuts ...
gum is the global namespace for all aGrUM entities
Definition agrum.h:46