aGrUM 3.1.1
a C++ library for (probabilistic) graphical models
structuralConstraintSliceOrder.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
58#ifndef GUM_LEARNING_STRUCTURAL_CONSTRAINT_SLICE_ORDER_H
59#define GUM_LEARNING_STRUCTURAL_CONSTRAINT_SLICE_ORDER_H
60
61#include <agrum/agrum.h>
62
64
65namespace gum {
66
67 namespace learning {
68
87 protected virtual StructuralConstraintSetStatic< StructuralConstraintDiGraph > {
88 public:
89 // ##########################################################################
91 // ##########################################################################
93
96
98
100
103
106
109
112
114
115 // ##########################################################################
117 // ##########################################################################
119
122
125
127
128 // ##########################################################################
130 // ##########################################################################
132
135
138
140 void addNode(NodeId node, NodeId slice);
141
145
148
150
156 void modifyGraphAlone(const ArcAddition& change);
157
159
161 void modifyGraphAlone(const ArcDeletion& change);
162
164
170 void modifyGraphAlone(const ArcReversal& change);
171
173
177
179
183
185
191 void modifyGraphAlone(const GraphChange& change);
192
194
207 bool isAlwaysInvalidAlone(const GraphChange& change) const;
208
210
214
216
218
220
223
225
228 bool checkArcTriangleDeletion1Alone(NodeId node1, NodeId node2, NodeId node3) const;
229
231
234 bool checkArcTriangleDeletion2Alone(NodeId node1, NodeId node2, NodeId node3) const;
235
236
238
241 bool checkModificationAlone(const ArcAddition& change) const;
242
244
245 bool checkModificationAlone(const ArcDeletion& change) const;
246
248
250 bool checkModificationAlone(const ArcReversal& change) const;
251
253
257
259
263
265
271 bool checkModificationAlone(const GraphChange& change) const;
272
274
275#ifndef DOXYGEN_SHOULD_SKIP_THIS
276// include the set of methods that enable the structural constraint to
277// be standalone, i.e., that it needs not be included into a
278// StructuralConstraintSetStatic to be used by learning algorithms
279# define GUM_CONSTRAINT_CLASS_NAME StructuralConstraintSliceOrder
281# undef GUM_CONSTRAINT_CLASS_NAME
282#endif // DOXYGEN_SHOULD_SKIP_THIS
283
284 protected:
287 };
288
289 } /* namespace learning */
290
291} /* namespace gum */
292
294#ifndef GUM_NO_INLINE
296#endif /* GUM_NO_INLINE */
297
298#endif /* GUM_LEARNING_STRUCTURAL_CONSTRAINT_SLICE_ORDER_H */
Base class for all oriented graphs.
Definition diGraph.h:132
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...
bool checkArcTriangleDeletion2Alone(NodeId node1, NodeId node2, NodeId node3) const
checks whether the constraints enable to apply an ArcTriangleDeletion2
bool checkModificationAlone(const ArcReversal &change) const
checks whether the constraints enable to reverse an arc
void modifyGraphAlone(const ArcDeletion &change)
notify the constraint of a modification of the graph
bool checkModificationAlone(const ArcDeletion &change) const
checks whether the constraints enable to remove an arc
NodeProperty< NodeId > _SliceOrder_order_
slices to which belong the nodes
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 setDefaultSlice(NodeId slice)
assign a given slice to all the nodes specified in the partial order
bool checkModificationAlone(const ArcAddition &change) const
checks whether the constraints enable to add an arc
void modifyGraphAlone(const ArcTriangleDeletion2 &change)
notify the constraint of a modification of the graph
bool checkModificationAlone(const ArcTriangleDeletion2 &change) const
checks whether the constraints enable to apply an ArcTriangleDeletion2
void modifyGraphAlone(const ArcReversal &change)
notify the constraint of a modification of the graph
void setGraphAlone(const DiGraph &graph)
sets a new graph from which we will perform checkings
bool checkArcAdditionAlone(NodeId x, NodeId y) const
checks whether the constraints enable to add arc (x,y)
bool isAlwaysInvalidAlone(const GraphChange &change) const
indicates whether a change will always violate the constraint
const NodeProperty< NodeId > & sliceOrder() const
returns the current slice order
StructuralConstraintSliceOrder & operator=(const StructuralConstraintSliceOrder &from)
copy operator
bool checkModificationAlone(const ArcTriangleDeletion1 &change) const
checks whether the constraints enable to apply an ArcTriangleDeletion1
bool checkArcTriangleDeletion1Alone(NodeId node1, NodeId node2, NodeId node3) const
checks whether the constraints enable to apply an ArcTriangleDeletion1
void setSliceOrder(const NodeProperty< NodeId > &slice)
sets the time slices of all the nodes in the property
void modifyGraphAlone(const GraphChange &change)
notify the constraint of a modification of the graph
bool checkArcReversalAlone(NodeId x, NodeId y) const
checks whether the constraints enable to reverse arc (x,y)
void modifyGraphAlone(const ArcTriangleDeletion1 &change)
notify the constraint of a modification of the graph
void addNode(NodeId node, NodeId slice)
adds a new node in the slice order
Size NodeId
Type for node ids.
HashTable< NodeId, VAL > NodeProperty
Property on graph elements.
include the inlined functions if necessary
Definition CSVParser.h:55
gum is the global namespace for all aGrUM entities
Definition agrum.h:46
the base class for structural constraints used by learning algorithms that learn a directed graph str...
the structural constraint imposing a partial order over nodes