aGrUM 3.1.1
a C++ library for (probabilistic) graphical models
structuralConstraintForbiddenArcs_inl.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#pragma once
42
50#ifndef DOXYGEN_SHOULD_SKIP_THIS
51
52namespace gum::learning {
53
55 INLINE void StructuralConstraintForbiddenArcs::setGraphAlone(const DiGraph& graph) {}
56
59 return !_forbidden_arcs_.exists(Arc(x, y));
60 }
61
64 return true;
65 }
66
69 return !_forbidden_arcs_.exists(Arc(y, x));
70 }
71
73 INLINE bool
75 NodeId node2,
76 NodeId node3) const {
77 return !_forbidden_arcs_.exists(Arc(node2, node1))
78 && !_forbidden_arcs_.exists(Arc(node3, node1));
79 }
80
82 INLINE bool
84 NodeId node2,
85 NodeId node3) const {
86 return !_forbidden_arcs_.exists(Arc(node1, node2))
87 && !_forbidden_arcs_.exists(Arc(node3, node2));
88 }
89
91 INLINE bool
93 return checkArcAdditionAlone(change.node1(), change.node2());
94 }
95
97 INLINE bool
99 return checkArcDeletionAlone(change.node1(), change.node2());
100 }
101
103 INLINE bool
105 return checkArcReversalAlone(change.node1(), change.node2());
106 }
107
110 const ArcTriangleDeletion1& change) const {
111 return checkArcTriangleDeletion1Alone(change.node1(), change.node2(), change.node3());
112 }
113
116 const ArcTriangleDeletion2& change) const {
117 return checkArcTriangleDeletion2Alone(change.node1(), change.node2(), change.node3());
118 }
119
121
124
127
130
133
135 INLINE void
137
139 INLINE void
141
143
145 INLINE void StructuralConstraintForbiddenArcs::setArcs(const ArcSet& set) {
146 _forbidden_arcs_ = set;
147 }
148
150 INLINE void StructuralConstraintForbiddenArcs::addArc(const Arc& arc) {
151 _forbidden_arcs_.insert(arc);
152 }
153
155 INLINE void StructuralConstraintForbiddenArcs::eraseArc(const Arc& arc) {
156 _forbidden_arcs_.erase(arc);
157 }
158
160 INLINE const ArcSet& StructuralConstraintForbiddenArcs::arcs() const { return _forbidden_arcs_; }
161
162// include all the methods applicable to the whole class hierarchy
163# define GUM_CONSTRAINT_CLASS_NAME StructuralConstraintForbiddenArcs
165# undef GUM_CONSTRAINT_CLASS_NAME
166
167} // namespace gum::learning
168
169
170#endif /* DOXYGEN_SHOULD_SKIP_THIS */
The class for notifying learning algorithms of new arc additions.
The class for notifying learning algorithms of arc removals.
The class for notifying learning algorithms of arc reversals.
The graph change substituting a triangle node1->node2->node3 + node1->node3 into v-structure node2->n...
The graph change substituting a triangle node1->node2->node3 + node1->node3 into v-structure node1->n...
void setGraphAlone(const DiGraph &graph)
sets a new graph from which we will perform checkings
bool checkModificationAlone(const GraphChange &change) const
checks whether the constraints enable to perform a graph change
bool checkArcTriangleDeletion2Alone(NodeId node1, NodeId node2, NodeId node3) const
checks whether the constraints enable to apply an ArcTriangleDeletion2
ArcSet _forbidden_arcs_
the ForbiddenArcs on which we perform checks
void addArc(const Arc &arc)
assign a new forbidden arc
bool checkArcReversalAlone(NodeId x, NodeId y) const
checks whether the constraints enable to reverse arc (x,y)
const ArcSet & arcs() const
returns the set of mandatory arcs
bool checkArcTriangleDeletion1Alone(NodeId node1, NodeId node2, NodeId node3) const
checks whether the constraints enable to apply an ArcTriangleDeletion1
void modifyGraphAlone(const ArcAddition &change)
notify the constraint of a modification of the graph
bool checkArcDeletionAlone(NodeId x, NodeId y) const
checks whether the constraints enable to remove arc (x,y)
void eraseArc(const Arc &arc)
remove a forbidden arc
bool checkArcAdditionAlone(NodeId x, NodeId y) const
checks whether the constraints enable to add arc (x,y)
void setArcs(const ArcSet &set)
assign a set of forbidden arcs
Size NodeId
Type for node ids.
Set< Arc > ArcSet
Some typdefs and define for shortcuts ...
include the inlined functions if necessary
Definition CSVParser.h:55
the structural constraint for forbidding the creation of some arcs during structure learning