Generated on Tue Jan 28 2020 00:00:00 for Gecode by doxygen 1.8.17
var.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  * Last modified:
10  * $Date: 2017-03-08 11:58:56 +0100 (Wed, 08 Mar 2017) $ by $Author: schulte $
11  * $Revision: 15562 $
12  *
13  * This file is part of Gecode, the generic constraint
14  * development environment:
15  * http://www.gecode.org
16  *
17  * Permission is hereby granted, free of charge, to any person obtaining
18  * a copy of this software and associated documentation files (the
19  * "Software"), to deal in the Software without restriction, including
20  * without limitation the rights to use, copy, modify, merge, publish,
21  * distribute, sublicense, and/or sell copies of the Software, and to
22  * permit persons to whom the Software is furnished to do so, subject to
23  * the following conditions:
24  *
25  * The above copyright notice and this permission notice shall be
26  * included in all copies or substantial portions of the Software.
27  *
28  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
29  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
30  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
31  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
32  * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
33  * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
34  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
35  *
36  */
37 
38 namespace Gecode {
39 
42  : s(SEL_NONE) {}
43 
46  : VarBranch<IntVar>(t), s(s0) {}
47 
50  : VarBranch<IntVar>(r), s(SEL_RND) {}
51 
54  : VarBranch<IntVar>(d,t), s(s0) {}
55 
58  : VarBranch<IntVar>(a,t), s(s0) {}
59 
62  : VarBranch<IntVar>(a,t), s(s0) {}
63 
66  : VarBranch<IntVar>(c,t), s(s0) {}
67 
70  : VarBranch<IntVar>(mf,t), s(s0) {}
71 
73  IntVarBranch::select(void) const {
74  return s;
75  }
76 
77  forceinline void
79  switch (select()) {
80  case SEL_AFC_MIN: case SEL_AFC_MAX:
82  if (!_afc)
83  _afc = IntAFC(home,x,decay());
84  break;
85  case SEL_ACTION_MIN: case SEL_ACTION_MAX:
87  if (!_act)
88  _act = IntAction(home,x,decay());
89  break;
90  case SEL_CHB_MIN: case SEL_CHB_MAX:
92  if (!_chb)
93  _chb = IntCHB(home,x);
94  break;
95  default: ;
96  }
97  }
98 
99  inline IntVarBranch
100  INT_VAR_NONE(void) {
101  return IntVarBranch(IntVarBranch::SEL_NONE,nullptr);
102  }
103 
104  inline IntVarBranch
106  return IntVarBranch(r);
107  }
108 
109  inline IntVarBranch
112  }
113 
114  inline IntVarBranch
117  }
118 
119  inline IntVarBranch
122  }
123 
124  inline IntVarBranch
127  }
128 
129  inline IntVarBranch
132  }
133 
134  inline IntVarBranch
137  }
138 
139  inline IntVarBranch
142  }
143 
144  inline IntVarBranch
147  }
148 
149  inline IntVarBranch
152  }
153 
154  inline IntVarBranch
157  }
158 
159  inline IntVarBranch
162  }
163 
164  inline IntVarBranch
167  }
168 
169  inline IntVarBranch
172  }
173 
174  inline IntVarBranch
177  }
178 
179  inline IntVarBranch
182  }
183 
184  inline IntVarBranch
187  }
188 
189  inline IntVarBranch
192  }
193 
194  inline IntVarBranch
197  }
198 
199  inline IntVarBranch
202  }
203 
204  inline IntVarBranch
207  }
208 
209  inline IntVarBranch
212  }
213 
214  inline IntVarBranch
217  }
218 
219  inline IntVarBranch
222  }
223 
224  inline IntVarBranch
227  }
228 
229  inline IntVarBranch
232  }
233 
234  inline IntVarBranch
237  }
238 
239  inline IntVarBranch
242  }
243 
244  inline IntVarBranch
247  }
248 
249  inline IntVarBranch
252  }
253 
254  inline IntVarBranch
257  }
258 
259  inline IntVarBranch
262  }
263 
264  inline IntVarBranch
267  }
268 
269  inline IntVarBranch
272  }
273 
274  inline IntVarBranch
277  }
278 
279  inline IntVarBranch
282  }
283 
284  inline IntVarBranch
287  }
288 
289  inline IntVarBranch
292  }
293 
294  inline IntVarBranch
297  }
298 
299  inline IntVarBranch
302  }
303 
304  inline IntVarBranch
307  }
308 
309 
310 
313  : s(SEL_NONE) {}
314 
317  : VarBranch<BoolVar>(t), s(s0) {}
318 
321  : VarBranch<BoolVar>(r), s(SEL_RND) {}
322 
325  : VarBranch<BoolVar>(d,t), s(s0) {}
326 
329  : VarBranch<BoolVar>(a,t), s(s0) {}
330 
333  : VarBranch<BoolVar>(a,t), s(s0) {}
334 
337  : VarBranch<BoolVar>(c,t), s(s0) {}
338 
341  : VarBranch<BoolVar>(mf,t), s(s0) {}
342 
344  BoolVarBranch::select(void) const {
345  return s;
346  }
347 
348  forceinline void
350  switch (select()) {
351  case SEL_AFC_MIN: case SEL_AFC_MAX:
352  if (!_afc)
353  _afc = BoolAFC(home,x,decay());
354  break;
355  case SEL_ACTION_MIN: case SEL_ACTION_MAX:
356  if (!_act)
357  _act = BoolAction(home,x,decay());
358  break;
359  case SEL_CHB_MIN: case SEL_CHB_MAX:
360  if (!_chb)
361  _chb = BoolCHB(home,x);
362  break;
363  default: ;
364  }
365  }
366 
367  inline BoolVarBranch
369  return BoolVarBranch(BoolVarBranch::SEL_NONE,nullptr);
370  }
371 
372  inline BoolVarBranch
374  return BoolVarBranch(r);
375  }
376 
377  inline BoolVarBranch
380  }
381 
382  inline BoolVarBranch
385  }
386 
387  inline BoolVarBranch
390  }
391 
392  inline BoolVarBranch
395  }
396 
397  inline BoolVarBranch
400  }
401 
402  inline BoolVarBranch
405  }
406 
407  inline BoolVarBranch
410  }
411 
412  inline BoolVarBranch
415  }
416 
417  inline BoolVarBranch
420  }
421 
422  inline BoolVarBranch
425  }
426 
427  inline BoolVarBranch
430  }
431 
432  inline BoolVarBranch
435  }
436 
437  inline BoolVarBranch
440  }
441 
442  inline BoolVarBranch
445  }
446 
447  inline BoolVarBranch
450  }
451 
452  inline BoolVarBranch
455  }
456 
457 }
458 
459 // STATISTICS: int-branch
IntVarBranch INT_VAR_SIZE_MAX(BranchTbl tbl)
Select variable with largest domain size.
Definition: var.hpp:215
IntVarBranch INT_VAR_ACTION_MAX(double d, BranchTbl tbl)
Select variable with highest action with decay factor d.
Definition: var.hpp:160
@ SEL_CHB_SIZE_MIN
With smallest CHB Q-score divided by domain size.
Definition: int.hh:4247
Post propagator for SetVar x
Definition: set.hh:784
#define forceinline
Definition: config.hpp:173
IntVarBranch INT_VAR_DEGREE_SIZE_MIN(BranchTbl tbl)
Select variable with smallest degree divided by domain size.
Definition: var.hpp:220
IntVarBranch INT_VAR_RND(Rnd r)
Select random variable (uniform distribution, for tie breaking)
Definition: var.hpp:105
@ SEL_CHB_MAX
With highest CHB Q-score.
Definition: int.hh:4234
@ SEL_ACTION_MAX
With highest action.
Definition: int.hh:4318
@ SEL_SIZE_MAX
With largest domain size.
Definition: int.hh:4240
IntVarBranch INT_VAR_NONE(void)
Select first unassigned variable.
Definition: var.hpp:100
@ SEL_MERIT_MIN
With least merit.
Definition: int.hh:4225
double decay(void) const
Return decay factor.
Definition: branch-var.hpp:184
Select select(void) const
Return selection strategy.
Definition: var.hpp:73
IntVarBranch INT_VAR_MIN_MIN(BranchTbl tbl)
Select variable with smallest min.
Definition: var.hpp:190
Passing integer variables.
Definition: int.hh:639
IntVarBranch INT_VAR_REGRET_MIN_MIN(BranchTbl tbl)
Select variable with smallest min-regret.
Definition: var.hpp:290
IntVarBranch INT_VAR_CHB_MIN(IntCHB c, BranchTbl tbl)
Select variable with lowest CHB Q-score.
Definition: var.hpp:170
Recording actions for Boolean variables.
Definition: int.hh:4056
@ SEL_CHB_SIZE_MAX
With largest CHB Q-score divided by domain size.
Definition: int.hh:4248
IntVarBranch INT_VAR_REGRET_MAX_MIN(BranchTbl tbl)
Select variable with smallest max-regret.
Definition: var.hpp:300
IntVarBranch(void)
Initialize with strategy SEL_NONE.
Definition: var.hpp:41
@ SEL_ACTION_MAX
With highest action.
Definition: int.hh:4232
IntVarBranch INT_VAR_MAX_MIN(BranchTbl tbl)
Select variable with smallest max.
Definition: var.hpp:200
@ SEL_DEGREE_MAX
With largest degree.
Definition: int.hh:4228
NodeType t
Type of node.
Definition: bool-expr.cpp:234
Action _act
Action information.
Definition: branch-var.hpp:73
BoolVarBranch BOOL_VAR_ACTION_MAX(double d, BranchTbl tbl)
Select variable with highest action with decay factor d.
Definition: var.hpp:428
@ SEL_AFC_MIN
With smallest accumulated failure count.
Definition: int.hh:4229
@ SEL_REGRET_MAX_MIN
With smallest max-regret.
Definition: int.hh:4266
BoolVarBranch BOOL_VAR_MERIT_MAX(BoolBranchMerit bm, BranchTbl tbl)
Select variable with highest merit according to branch merit function bm.
Definition: var.hpp:383
Which integer variable to select for branching.
Definition: int.hh:4219
@ SEL_AFC_MIN
With smallest accumulated failure count.
Definition: int.hh:4315
Recording AFC information for integer variables.
Definition: int.hh:3943
@ SEL_MAX_MAX
With largest max.
Definition: int.hh:4238
@ SEL_AFC_MAX
With largest accumulated failure count.
Definition: int.hh:4316
@ SEL_DEGREE_MIN
With smallest degree.
Definition: int.hh:4227
@ SEL_MAX_MIN
With smallest max.
Definition: int.hh:4237
Select s
Which variable to select.
Definition: int.hh:4276
IntVarBranch INT_VAR_CHB_SIZE_MAX(IntCHB c, BranchTbl tbl)
Select variable with largest CHB Q-score divided by domain size.
Definition: var.hpp:280
std::function< double(const Space &home, BoolVar x, int i)> BoolBranchMerit
Branch merit function type for Boolean variables.
Definition: int.hh:3876
@ SEL_ACTION_MIN
With lowest action.
Definition: int.hh:4317
BoolVarBranch BOOL_VAR_MERIT_MIN(BoolBranchMerit bm, BranchTbl tbl)
Select variable with least merit according to branch merit function bm.
Definition: var.hpp:378
Recording CHB for integer variables.
Definition: int.hh:4107
Variable branching information.
Definition: branch-var.hpp:59
Gecode toplevel namespace
double tbl(const Gecode::Space &, double w, double b)
Test function for tie-break limit function.
Definition: branch.cpp:65
@ SEL_AFC_MAX
With largest accumulated failure count.
Definition: int.hh:4230
std::function< double(const Space &home, IntVar x, int i)> IntBranchMerit
Branch merit function type for integer variables.
Definition: int.hh:3865
Select s
Which variable to select.
Definition: int.hh:4324
CHB _chb
CHB information.
Definition: branch-var.hpp:75
Recording AFC information for Boolean variables.
Definition: int.hh:3974
@ SEL_CHB_MAX
With highest CHB.
Definition: int.hh:4320
Which Boolean variable to select for branching.
Definition: int.hh:4305
Passing Boolean variables.
Definition: int.hh:693
IntVarBranch INT_VAR_MIN_MAX(BranchTbl tbl)
Select variable with largest min.
Definition: var.hpp:195
Home class for posting propagators
Definition: core.hpp:922
struct Gecode::@579::NNF::@61::@63 a
For atomic nodes.
IntVarBranch INT_VAR_AFC_SIZE_MIN(double d, BranchTbl tbl)
Select variable with smallest accumulated failure count divided by domain size with decay factor d.
Definition: var.hpp:230
IntVarBranch INT_VAR_MERIT_MIN(IntBranchMerit bm, BranchTbl tbl)
Select variable with least merit according to branch merit function bm.
Definition: var.hpp:110
BoolVarBranch BOOL_VAR_DEGREE_MAX(BranchTbl tbl)
Select variable with largest degree.
Definition: var.hpp:393
IntVarBranch INT_VAR_REGRET_MIN_MAX(BranchTbl tbl)
Select variable with largest min-regret.
Definition: var.hpp:295
@ SEL_REGRET_MIN_MAX
With largest min-regret.
Definition: int.hh:4260
Post propagator for SetVar SetOpType SetVar SetRelType r
Definition: set.hh:784
Boolean integer variables.
Definition: int.hh:494
@ SEL_REGRET_MAX_MAX
With largest max-regret.
Definition: int.hh:4272
IntVarBranch INT_VAR_CHB_SIZE_MIN(IntCHB c, BranchTbl tbl)
Select variable with smallest CHB Q-score divided by domain size.
Definition: var.hpp:270
IntVarBranch INT_VAR_DEGREE_MAX(BranchTbl tbl)
Select variable with largest degree.
Definition: var.hpp:125
Random number generator.
Definition: rnd.hpp:46
Integer variables.
Definition: int.hh:353
@ SEL_AFC_SIZE_MIN
With smallest accumulated failure count divided by domain size.
Definition: int.hh:4243
@ SEL_DEGREE_SIZE_MIN
With smallest degree divided by domain size.
Definition: int.hh:4241
@ SEL_AFC_SIZE_MAX
With largest accumulated failure count divided by domain size.
Definition: int.hh:4244
IntVarBranch INT_VAR_DEGREE_SIZE_MAX(BranchTbl tbl)
Select variable with largest degree divided by domain size.
Definition: var.hpp:225
BoolVarBranch BOOL_VAR_AFC_MIN(double d, BranchTbl tbl)
Select variable with smallest accumulated failure count with decay factor d.
Definition: var.hpp:398
@ SEL_NONE
First unassigned.
Definition: int.hh:4223
Select select(void) const
Return selection strategy.
Definition: var.hpp:344
Select
Which variable selection.
Definition: int.hh:4308
@ SEL_DEGREE_MIN
With smallest degree.
Definition: int.hh:4313
Select
Which variable selection.
Definition: int.hh:4222
@ SEL_MERIT_MAX
With highest merit.
Definition: int.hh:4312
BoolVarBranch BOOL_VAR_AFC_MAX(double d, BranchTbl tbl)
Select variable with largest accumulated failure count with decay factor d.
Definition: var.hpp:408
Recording actions for integer variables.
Definition: int.hh:4011
IntVarBranch INT_VAR_ACTION_SIZE_MIN(double d, BranchTbl tbl)
Select variable with smallest action divided by domain size with decay factor d.
Definition: var.hpp:250
void expand(Home home, const IntVarArgs &x)
Expand AFC, action, and CHB.
Definition: var.hpp:78
AFC _afc
AFC information.
Definition: branch-var.hpp:71
@ SEL_MERIT_MAX
With highest merit.
Definition: int.hh:4226
@ SEL_MERIT_MIN
With least merit.
Definition: int.hh:4311
IntVarBranch INT_VAR_SIZE_MIN(BranchTbl tbl)
Select variable with smallest domain size.
Definition: var.hpp:210
BoolVarBranch BOOL_VAR_CHB_MIN(BoolCHB c, BranchTbl tbl)
Select variable with lowest CHB Q-score.
Definition: var.hpp:438
Recording CHB for Boolean variables.
Definition: int.hh:4151
void expand(Home home, const BoolVarArgs &x)
Expand decay factor into AFC or action.
Definition: var.hpp:349
@ SEL_CHB_MIN
With lowest CHB.
Definition: int.hh:4319
@ SEL_MIN_MIN
With smallest min.
Definition: int.hh:4235
Gecode::IntSet d(v, 7)
IntVarBranch INT_VAR_CHB_MAX(IntCHB c, BranchTbl tbl)
Select variable with largest CHB Q-score.
Definition: var.hpp:180
IntVarBranch INT_VAR_MAX_MAX(BranchTbl tbl)
Select variable with largest max.
Definition: var.hpp:205
@ SEL_ACTION_MIN
With lowest action.
Definition: int.hh:4231
@ SEL_ACTION_SIZE_MAX
With largest action divided by domain size.
Definition: int.hh:4246
IntVarBranch INT_VAR_AFC_MIN(double d, BranchTbl tbl)
Select variable with smallest accumulated failure count with decay factor d.
Definition: var.hpp:130
IntVarBranch INT_VAR_DEGREE_MIN(BranchTbl tbl)
Select variable with smallest degree.
Definition: var.hpp:120
BoolVarBranch BOOL_VAR_ACTION_MIN(double d, BranchTbl tbl)
Select variable with lowest action with decay factor d.
Definition: var.hpp:418
@ SEL_DEGREE_SIZE_MAX
With largest degree divided by domain size.
Definition: int.hh:4242
BoolVarBranch BOOL_VAR_CHB_MAX(BoolCHB c, BranchTbl tbl)
Select variable with largest CHB Q-score.
Definition: var.hpp:448
IntVarBranch INT_VAR_ACTION_SIZE_MAX(double d, BranchTbl tbl)
Select variable with largest action divided by domain size with decay factor d.
Definition: var.hpp:260
std::function< double(const Space &home, double w, double b)> BranchTbl
Tie-break limit function.
Definition: branch-var.hpp:52
IntVarBranch INT_VAR_AFC_SIZE_MAX(double d, BranchTbl tbl)
Select variable with largest accumulated failure count divided by domain size with decay factor d.
Definition: var.hpp:240
Gecode::FloatVal c(-8, 8)
BoolVarBranch BOOL_VAR_DEGREE_MIN(BranchTbl tbl)
Select variable with smallest degree.
Definition: var.hpp:388
@ SEL_ACTION_SIZE_MIN
With smallest action divided by domain size.
Definition: int.hh:4245
@ SEL_NONE
First unassigned.
Definition: int.hh:4309
@ SEL_SIZE_MIN
With smallest domain size.
Definition: int.hh:4239
BoolVarBranch(void)
Initialize with strategy SEL_NONE.
Definition: var.hpp:312
IntVarBranch INT_VAR_MERIT_MAX(IntBranchMerit bm, BranchTbl tbl)
Select variable with highest merit according to branch merit function bm.
Definition: var.hpp:115
IntVarBranch INT_VAR_REGRET_MAX_MAX(BranchTbl tbl)
Select variable with largest max-regret.
Definition: var.hpp:305
BoolVarBranch BOOL_VAR_NONE(void)
Select first unassigned variable.
Definition: var.hpp:368
@ SEL_CHB_MIN
With lowest CHB Q-score.
Definition: int.hh:4233
BoolVarBranch BOOL_VAR_RND(Rnd r)
Select random variable (uniform distribution, for tie breaking)
Definition: var.hpp:373
@ SEL_MIN_MAX
With largest min.
Definition: int.hh:4236
IntVarBranch INT_VAR_AFC_MAX(double d, BranchTbl tbl)
Select variable with largest accumulated failure count with decay factor d.
Definition: var.hpp:140
IntVarBranch INT_VAR_ACTION_MIN(double d, BranchTbl tbl)
Select variable with lowest action with decay factor d.
Definition: var.hpp:150
@ SEL_REGRET_MIN_MIN
With smallest min-regret.
Definition: int.hh:4254
@ SEL_DEGREE_MAX
With largest degree.
Definition: int.hh:4314