main page
modules
namespaces
classes
files
Gecode home
Generated on Thu Jan 16 2025 00:00:00 for Gecode by
doxygen
1.14.0
gecode
kernel
branch
tiebreak.hpp
Go to the documentation of this file.
1
/* -*- mode: C++; c-basic-offset: 2; indent-tabs-mode: nil -*- */
2
/*
3
* Main authors:
4
* Christian Schulte <schulte@gecode.org>
5
*
6
* Copyright:
7
* Christian Schulte, 2012
8
*
9
* This file is part of Gecode, the generic constraint
10
* development environment:
11
* http://www.gecode.org
12
*
13
* Permission is hereby granted, free of charge, to any person obtaining
14
* a copy of this software and associated documentation files (the
15
* "Software"), to deal in the Software without restriction, including
16
* without limitation the rights to use, copy, modify, merge, publish,
17
* distribute, sublicense, and/or sell copies of the Software, and to
18
* permit persons to whom the Software is furnished to do so, subject to
19
* the following conditions:
20
*
21
* The above copyright notice and this permission notice shall be
22
* included in all copies or substantial portions of the Software.
23
*
24
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
25
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
26
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
27
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
28
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
29
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
30
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
31
*
32
*/
33
34
namespace
Gecode
{
35
37
template
<
class
VarBranch>
38
class
TieBreak
{
39
public
:
41
VarBranch
a
,
b
,
c
,
d
;
43
TieBreak
(
VarBranch
a0 =
VarBranch
(),
44
VarBranch
b0 =
VarBranch
(),
45
VarBranch
c0 =
VarBranch
(),
46
VarBranch
d0 =
VarBranch
());
47
};
48
55
56
template
<
class
VarBranch>
57
TieBreak<VarBranch>
58
tiebreak
(
VarBranch
a,
VarBranch
b);
60
template
<
class
VarBranch>
61
TieBreak<VarBranch>
62
tiebreak
(
VarBranch
a,
VarBranch
b,
VarBranch
c);
64
template
<
class
VarBranch>
65
TieBreak<VarBranch>
66
tiebreak
(
VarBranch
a,
VarBranch
b,
VarBranch
c,
VarBranch
d);
68
69
70
template
<
class
VarBranch>
71
forceinline
72
TieBreak<VarBranch>::TieBreak
(
VarBranch
a0,
73
VarBranch
b0,
74
VarBranch
c0,
75
VarBranch
d0)
76
:
a
(a0),
b
(b0),
c
(c0),
d
(d0) {}
77
78
template
<
class
VarBranch>
79
TieBreak<VarBranch>
80
tiebreak
(
VarBranch
a,
VarBranch
b) {
81
TieBreak<VarBranch>
ab(a,b);
82
return
ab;
83
}
84
85
template
<
class
VarBranch>
86
TieBreak<VarBranch>
87
tiebreak
(
VarBranch
a,
VarBranch
b,
VarBranch
c) {
88
TieBreak<VarBranch>
abc(a,b,c);
89
return
abc;
90
}
91
92
template
<
class
VarBranch>
93
TieBreak<VarBranch>
94
tiebreak
(
VarBranch
a,
VarBranch
b,
VarBranch
c,
VarBranch
d) {
95
TieBreak<VarBranch>
abcd(a,b,c,d);
96
return
abcd;
97
}
98
99
}
100
101
// STATISTICS: kernel-branch
Gecode::TieBreak
Combine variable selection criteria for tie-breaking.
Definition
tiebreak.hpp:38
Gecode::TieBreak::TieBreak
TieBreak(VarBranch a0=VarBranch(), VarBranch b0=VarBranch(), VarBranch c0=VarBranch(), VarBranch d0=VarBranch())
Initialize with variable selection criteria.
Definition
tiebreak.hpp:72
Gecode::TieBreak::b
VarBranch b
Definition
tiebreak.hpp:41
Gecode::TieBreak::a
VarBranch a
Branching criteria to try in order.
Definition
tiebreak.hpp:41
Gecode::TieBreak::c
VarBranch c
Definition
tiebreak.hpp:41
Gecode::TieBreak::d
VarBranch d
Definition
tiebreak.hpp:41
Gecode::VarBranch
Variable branching information.
Definition
var.hpp:55
Gecode
Gecode toplevel namespace
Gecode::tiebreak
TieBreak< VarBranch > tiebreak(VarBranch a, VarBranch b)
Combine variable selection criteria a and b for tie-breaking.
Definition
tiebreak.hpp:80
forceinline
#define forceinline
Definition
config.hpp:194