Generated on for Gecode by doxygen 1.17.0
int.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.dev>
5 * Mikael Zayenz Lagerkvist <lagerkvist@gecode.dev>
6 *
7 * Copyright:
8 * Christian Schulte, 2005
9 * Mikael Zayenz Lagerkvist, 2006
10 *
11 * This file is part of Gecode, the generic constraint
12 * development environment:
13 * http://www.gecode.dev
14 *
15 * Permission is hereby granted, free of charge, to any person obtaining
16 * a copy of this software and associated documentation files (the
17 * "Software"), to deal in the Software without restriction, including
18 * without limitation the rights to use, copy, modify, merge, publish,
19 * distribute, sublicense, and/or sell copies of the Software, and to
20 * permit persons to whom the Software is furnished to do so, subject to
21 * the following conditions:
22 *
23 * The above copyright notice and this permission notice shall be
24 * included in all copies or substantial portions of the Software.
25 *
26 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
27 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
28 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
29 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
30 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
31 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
32 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
33 *
34 */
35
36namespace Test { namespace Int {
37
38 /*
39 * Assignments
40 *
41 */
42 inline
44 : n(n0), d(d0) {}
45 inline int
46 Assignment::size(void) const {
47 return n;
48 }
49 inline
51
52
53 inline
55 : Assignment(n,d),
56 dsv(new Gecode::IntSetValues[static_cast<unsigned int>(n)]) {
57 for (int i=n; i--; )
58 dsv[i].init(d);
59 }
60 inline bool
62 return dsv[0]();
63 }
64 inline int
66 assert((i>=0) && (i<n));
67 return dsv[i].val();
68 }
69 inline
71 delete [] dsv;
72 }
73
74
75 forceinline int
77 unsigned int skip = rand(d.size());
78 for (Gecode::IntSetRanges it(d); true; ++it) {
79 if (it.width() > skip)
80 return it.min() + static_cast<int>(skip);
81 skip -= it.width();
82 }
84 return 0;
85 }
86
87 inline
89 : Assignment(n,d), vals(new int[static_cast<size_t>(n)]), a(a0) {
90 for (int i=n; i--; )
91 vals[i] = randval(rand);
92 }
93
94 inline bool
96 return a>0;
97 }
98 inline int
100 assert((i>=0) && (i<n));
101 return vals[i];
102 }
103 inline
105 delete [] vals;
106 }
107
108 forceinline int
110 unsigned int skip = rand(d.size());
111 for (Gecode::IntSetRanges it(d); true; ++it) {
112 if (it.width() > skip)
113 return it.min() + static_cast<int>(skip);
114 skip -= it.width();
115 }
117 return 0;
118 }
119
120 inline
121 RandomMixAssignment::RandomMixAssignment(int n0, const Gecode::IntSet& d0, int n1, const Gecode::IntSet& d1, int a0,
123 : Assignment(n0+n1,d0),vals(new int[static_cast<size_t>(n0+n1)]),
124 a(a0),_n1(n1),_d1(d1) {
125 for (int i=n0; i--; )
126 vals[i] = randval(d, rand);
127 for (int i=n1; i--; )
128 vals[n0+i] = randval(_d1, rand);
129 }
130
131 inline bool
133 return a>0;
134 }
135
136 inline int
138 assert((i>=0) && (i<n));
139 return vals[i];
140 }
141
142 inline
146
147 /*
148 * Tests with integer constraints
149 *
150 */
151 forceinline bool
152 Test::eqv(void) const {
153 return reified && ((rms & (1 << Gecode::RM_EQV)) != 0);
154 }
155 forceinline bool
156 Test::imp(void) const {
157 return reified && ((rms & (1 << Gecode::RM_IMP)) != 0);
158 }
159 forceinline bool
160 Test::pmi(void) const {
161 return reified && ((rms & (1 << Gecode::RM_PMI)) != 0);
162 }
163 inline
164 Test::Test(const std::string& p, const std::string& s,
165 int a, const Gecode::IntSet& d, bool r,
167 : Base(p+s), arity(a), dom(d),
168 reified(r), rms((1 << Gecode::RM_EQV) |
169 (1 << Gecode::RM_IMP) |
170 (1 << Gecode::RM_PMI)),
171 ipl(i), contest(ipl == Gecode::IPL_DOM ? CTL_DOMAIN : CTL_NONE),
172 testsearch(true), testfix(true) {}
173
174 inline
175 Test::Test(const std::string& s,
176 int a, const Gecode::IntSet& d, bool r,
178 : Base("Int::"+s), arity(a), dom(d),
179 reified(r), rms((1 << Gecode::RM_EQV) |
180 (1 << Gecode::RM_IMP) |
181 (1 << Gecode::RM_PMI)),
182 ipl(i), contest(ipl == Gecode::IPL_DOM ? CTL_DOMAIN : CTL_NONE),
183 testsearch(true), testfix(true) {}
184
185 inline
186 Test::Test(const std::string& p, const std::string& s,
187 int a, int min, int max, bool r,
189 : Base(p+s), arity(a), dom(min,max),
190 reified(r), rms((1 << Gecode::RM_EQV) |
191 (1 << Gecode::RM_IMP) |
192 (1 << Gecode::RM_PMI)),
193 ipl(i), contest(ipl == Gecode::IPL_DOM ? CTL_DOMAIN : CTL_NONE),
194 testsearch(true), testfix(true) {}
195
196 inline
197 Test::Test(const std::string& s,
198 int a, int min, int max, bool r, Gecode::IntPropLevel i)
199 : Base("Int::"+s), arity(a), dom(min,max),
200 reified(r), rms((1 << Gecode::RM_EQV) |
201 (1 << Gecode::RM_IMP) |
202 (1 << Gecode::RM_PMI)),
203 ipl(i), contest(ipl == Gecode::IPL_DOM ? CTL_DOMAIN : CTL_NONE),
204 testsearch(true), testfix(true) {}
205
206 inline
207 std::string
209 using namespace Gecode;
210 std::stringstream s;
211 switch (vbd(ipl)) {
212 case IPL_VAL: s << "Val"; break;
213 case IPL_BND: s << "Bnd"; break;
214 case IPL_DOM: s << "Dom"; break;
215 default: s << "Def"; break;
216 }
217 if (ipl & IPL_BASIC) s << "+B";
218 if (ipl & IPL_ADVANCED) s << "+A";
219 return s.str();
220 }
221
222 inline
223 std::string
225 using namespace Gecode;
226 switch (irt) {
227 case IRT_LQ: return "Lq";
228 case IRT_LE: return "Le";
229 case IRT_GQ: return "Gq";
230 case IRT_GR: return "Gr";
231 case IRT_EQ: return "Eq";
232 case IRT_NQ: return "Nq";
233 default: ;
234 }
236 return "NONE";
237 }
238
239 inline std::string
241 using namespace Gecode;
242 switch (bot) {
243 case BOT_AND: return "And";
244 case BOT_OR: return "Or";
245 case BOT_IMP: return "Imp";
246 case BOT_EQV: return "Eqv";
247 case BOT_XOR: return "Xor";
248 default: GECODE_NEVER;
249 }
251 return "NONE";
252 }
253
254 inline std::string
255 Test::str(bool b) {
256 return Base::str(b);
257 }
258
259 inline std::string
260 Test::str(int i) {
261 return Base::str(i);
262 }
263
264 inline std::string
266 return Base::str(x);
267 }
268
269
270
271 template<class T>
272 inline bool
274 using namespace Gecode;
275 switch (r) {
276 case IRT_EQ: return x == y;
277 case IRT_NQ: return x != y;
278 case IRT_LQ: return x <= y;
279 case IRT_LE: return x < y;
280 case IRT_GR: return x > y;
281 case IRT_GQ: return x >= y;
282 default: ;
283 }
284 return false;
285 }
286
287
288
289 inline
291 : i(sizeof(ipls)/sizeof(Gecode::IntPropLevel)-1) {}
292 inline bool
294 return i>=0;
295 }
296 inline void
298 i--;
299 }
301 IntPropLevels::ipl(void) const {
302 return ipls[i];
303 }
304
305
306 inline
308 : i(sizeof(ipls)/sizeof(Gecode::IntPropLevel)-1) {}
309 inline bool
311 return i>=0;
312 }
313 inline void
315 i--;
316 }
319 return ipls[i];
320 }
321
322
323 inline
325 : i(sizeof(irts)/sizeof(Gecode::IntRelType)-1) {}
326 inline void
328 i = sizeof(irts)/sizeof(Gecode::IntRelType)-1;
329 }
330 inline bool
332 return i>=0;
333 }
334 inline void
336 i--;
337 }
338 inline Gecode::IntRelType
339 IntRelTypes::irt(void) const {
340 return irts[i];
341 }
342
343 inline
345 : i(sizeof(bots)/sizeof(Gecode::BoolOpType)-1) {}
346 inline bool
348 return i>=0;
349 }
350 inline void
352 i--;
353 }
354 inline Gecode::BoolOpType
355 BoolOpTypes::bot(void) const {
356 return bots[i];
357 }
358
359}}
360
361// STATISTICS: test-int
362
Passing integer arguments.
Definition int.hh:652
Range iterator for integer sets.
Definition int.hh:310
Integer sets.
Definition int.hh:178
Base(std::string s)
Create and register test with name s.
static std::string str(bool b)
Map bool to string.
Definition test.hpp:77
Gecode::IntSet d
Domain for each variable.
Definition int.hh:62
int n
Number of variables.
Definition int.hh:61
virtual ~Assignment(void)
Destructor.
Definition int.hpp:50
Assignment(int n0, const Gecode::IntSet &d0)
Initialize assignments for n0 variables and values d0.
Definition int.hpp:43
int size(void) const
Return number of variables.
Definition int.hpp:46
BoolOpTypes(void)
Initialize iterator.
Definition int.hpp:344
bool operator()(void) const
Test whether iterator is done.
Definition int.hpp:347
Gecode::BoolOpType bot(void) const
Return current operation type.
Definition int.hpp:355
void operator++(void)
Increment to next operation type.
Definition int.hpp:351
CpltAssignment(int n, const Gecode::IntSet &d)
Initialize assignments for n0 variables and values d0.
Definition int.hpp:54
virtual int operator[](int i) const
Return value for variable i.
Definition int.hpp:65
virtual ~CpltAssignment(void)
Destructor.
Definition int.hpp:70
Gecode::IntSetValues * dsv
Iterator for each variable.
Definition int.hh:81
virtual bool has_more(void) const
Test whether all assignments have been iterated.
Definition int.hpp:61
Gecode::IntPropLevel ipl(void) const
Return current level.
Definition int.hpp:318
bool operator()(void) const
Test whether iterator is done.
Definition int.hpp:310
IntPropBasicAdvanced(void)
Initialize iterator.
Definition int.hpp:307
void operator++(void)
Increment to next level.
Definition int.hpp:314
IntPropLevels(void)
Initialize iterator.
Definition int.hpp:290
Gecode::IntPropLevel ipl(void) const
Return current level.
Definition int.hpp:301
bool operator()(void) const
Test whether iterator is done.
Definition int.hpp:293
void operator++(void)
Increment to next level.
Definition int.hpp:297
void operator++(void)
Increment to next relation type.
Definition int.hpp:335
bool operator()(void) const
Test whether iterator is done.
Definition int.hpp:331
void reset(void)
Reset iterator.
Definition int.hpp:327
IntRelTypes(void)
Initialize iterator.
Definition int.hpp:324
Gecode::IntRelType irt(void) const
Return current relation type.
Definition int.hpp:339
virtual int operator[](int i) const
Return value for variable i.
Definition int.hpp:99
virtual ~RandomAssignment(void)
Destructor.
Definition int.hpp:104
int a
How many assignments still to be generated Generate new value according to domain.
Definition int.hh:99
int * vals
The current values for the variables.
Definition int.hh:98
RandomAssignment(int n, const Gecode::IntSet &d, int a0, Gecode::Support::RandomGenerator &rand)
Initialize for a assignments for n0 variables and values d0.
Definition int.hpp:88
int randval(Gecode::Support::RandomGenerator &rand)
Definition int.hpp:76
virtual bool has_more(void) const
Test whether all assignments have been iterated.
Definition int.hpp:95
int _n1
How many variables in the second set.
Definition int.hh:120
int randval(const Gecode::IntSet &d, Gecode::Support::RandomGenerator &rand)
Definition int.hpp:109
Gecode::IntSet _d1
Domain for second set of variables Generate new value according to domain d.
Definition int.hh:121
virtual int operator[](int i) const
Return value for variable i.
Definition int.hpp:137
virtual bool has_more(void) const
Test whether all assignments have been iterated.
Definition int.hpp:132
RandomMixAssignment(int n0, const Gecode::IntSet &d0, int n1, const Gecode::IntSet &d1, int a0, Gecode::Support::RandomGenerator &rand)
Initialize for a assignments for n0 variables and values d0.
Definition int.hpp:121
virtual ~RandomMixAssignment(void)
Destructor.
Definition int.hpp:143
int a
How many assignments still to be generated.
Definition int.hh:119
int * vals
The current values for the variables.
Definition int.hh:118
bool pmi(void) const
Test whether reverse implication as reification mode is supported.
Definition int.hpp:160
bool reified
Does the constraint also exist as reified constraint.
Definition int.hh:230
bool testsearch
Whether to perform search test.
Definition int.hh:238
static std::string str(bool b)
Map bool to string.
Definition int.hpp:255
bool testfix
Whether to perform fixpoint test.
Definition int.hh:240
int rms
Which reification modes are supported.
Definition int.hh:232
Test(const std::string &p, const std::string &s, int a, const Gecode::IntSet &d, bool r=false, Gecode::IntPropLevel i=Gecode::IPL_DEF)
Constructor.
Definition int.hpp:164
Gecode::IntPropLevel ipl
Propagation level.
Definition int.hh:234
bool eqv(void) const
Test whether equivalence as reification mode is supported.
Definition int.hpp:152
int arity
Number of variables.
Definition int.hh:226
static bool cmp(T x, Gecode::IntRelType r, T y)
Compare x and y with respect to r.
Definition int.hpp:273
Gecode::IntSet dom
Domain of variables.
Definition int.hh:228
bool imp(void) const
Test whether implication as reification mode is supported.
Definition int.hpp:156
ConTestLevel contest
Whether to test for certain consistency.
Definition int.hh:236
LinearCongruentialGenerator< 2147483647, 48271, 44488, 3399 > RandomGenerator
Default values for linear congruential generator.
Definition random.hpp:183
IntRelType
Relation types for integers.
Definition int.hh:959
BoolOpType
Operation types for Booleans.
Definition int.hh:984
IntPropLevel
Propagation levels for integer propagators.
Definition int.hh:1008
@ IRT_EQ
Equality ( ).
Definition int.hh:960
@ IRT_NQ
Disequality ( ).
Definition int.hh:961
@ IRT_GQ
Greater or equal ( ).
Definition int.hh:964
@ IRT_LE
Less ( ).
Definition int.hh:963
@ IRT_GR
Greater ( ).
Definition int.hh:965
@ IRT_LQ
Less or equal ( ).
Definition int.hh:962
@ RM_IMP
Implication for reification.
Definition int.hh:896
@ RM_PMI
Inverse implication for reification.
Definition int.hh:903
@ RM_EQV
Equivalence for reification (default).
Definition int.hh:889
@ BOT_OR
Disjunction.
Definition int.hh:986
@ BOT_EQV
Equivalence.
Definition int.hh:988
@ BOT_IMP
Implication.
Definition int.hh:987
@ BOT_XOR
Exclusive or.
Definition int.hh:989
@ BOT_AND
Conjunction.
Definition int.hh:985
@ IPL_BASIC
Use basic propagation algorithm.
Definition int.hh:1015
@ IPL_DOM
Domain propagation Options: basic versus advanced propagation.
Definition int.hh:1013
@ IPL_VAL
Value propagation.
Definition int.hh:1011
@ IPL_ADVANCED
Use advanced propagation algorithm.
Definition int.hh:1016
@ IPL_BND
Bounds propagation.
Definition int.hh:1012
Gecode toplevel namespace
IntPropLevel vbd(IntPropLevel ipl)
Extract value, bounds, or domain propagation from propagation level.
Definition ipl.hpp:37
Testing finite domain integers.
Definition int.hh:46
@ CTL_NONE
No consistency-test.
Definition int.hh:140
@ CTL_DOMAIN
Test for domain-consistency.
Definition int.hh:141
General test support.
Definition assign.hh:52
#define GECODE_NEVER
Assert that this command is never executed.
Definition macros.hpp:56