Skip to content

Commit 7411488

Browse files
author
Christian Schulte
committed
Re-added branch filter functions (witha better implementation, though)
git-svn-id: svn+ssh://svn.gecode.org/srv/gecode/svn/gecode/trunk@15623 64335634-5103-0410-b293-fc3d331e086d
1 parent b177d52 commit 7411488

37 files changed

+17542
-16897
lines changed

Makefile.dep

Lines changed: 16656 additions & 16569 deletions
Large diffs are not rendered by default.

Makefile.in

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ KERNELHDR0 = \
205205
branch-var branch-val branch-tiebreak \
206206
brancher-view-sel brancher-merit \
207207
brancher-val-sel brancher-val-commit brancher-view brancher-view-val \
208-
brancher-val-sel-commit brancher-print \
208+
brancher-val-sel-commit brancher-print brancher-filter \
209209
allocators gpi \
210210
afc action chb rnd branch-traits \
211211
trace-traits trace-filter tracer trace-recorder trace trace-print \

changelog.in

Lines changed: 7 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,7 @@ Rank: major
272272
[DESCRIPTION]
273273
Variable implementations are not allowed to return a failed
274274
modification event directly (such as in return ME_INT_FAILED;),
275-
they need to cail the function fail() instead (such as in return
275+
they need to call the function fail() instead (such as in return
276276
fail(home);).
277277

278278
[ENTRY]
@@ -281,7 +281,7 @@ What: change
281281
Rank: major
282282
[DESCRIPTION]
283283
Activity for branching was not counted when propagation lead to a
284-
failed space, this is now done. The activity of a variable is now
284+
failed space, this is done now. The activity of a variable is now
285285
by default initialized to 1. That makes activity actually
286286
useful...
287287

@@ -311,59 +311,31 @@ What: changed
311311
Rank: major
312312
[DESCRIPTION]
313313
All branching functions (merit, value, commit, tie-breaking
314-
limit, print) can now be of std::function type.
314+
limit, filter, print) can now be of std::function type.
315315

316316
[ENTRY]
317317
Module: set
318318
What: changed
319319
Rank: major
320320
[DESCRIPTION]
321321
All branching functions (merit, value, commit, tie-breaking
322-
limit, print) can now be of std::function type.
322+
limit, filter, print) can now be of std::function type.
323323

324324
[ENTRY]
325325
Module: float
326326
What: changed
327327
Rank: major
328328
[DESCRIPTION]
329329
All branching functions (merit, value, commit, tie-breaking
330-
limit, print) can now be of std::function type.
330+
limit, filter, print) can now be of std::function type.
331331

332332
[ENTRY]
333333
Module: kernel
334334
What: changed
335335
Rank: major
336336
[DESCRIPTION]
337337
All branching functions (merit, value, commit, tie-breaking
338-
limit, print) can now be of std::function type.
339-
340-
[ENTRY]
341-
Module: int
342-
What: removed
343-
Rank: major
344-
[DESCRIPTION]
345-
Branching filter functions have been removed.
346-
347-
[ENTRY]
348-
Module: set
349-
What: removed
350-
Rank: major
351-
[DESCRIPTION]
352-
Branching filter functions have been removed.
353-
354-
[ENTRY]
355-
Module: float
356-
What: removed
357-
Rank: major
358-
[DESCRIPTION]
359-
Branching filter functions have been removed.
360-
361-
[ENTRY]
362-
Module: kernel
363-
What: removed
364-
Rank: major
365-
[DESCRIPTION]
366-
Branching filter functions have been removed.
338+
limit, filter, print) can now be of std::function type.
367339

368340
[ENTRY]
369341
Module: int
@@ -400,7 +372,7 @@ What: bug
400372
Rank: minor
401373
[DESCRIPTION]
402374
Add assertions to regular constraint definition to avoid posting with
403-
inavlid arguments.
375+
invalid arguments.
404376

405377
[ENTRY]
406378
Module: flatzinc

examples/crossword.cpp

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -153,55 +153,55 @@ class Crossword : public Script {
153153
// Branch by assigning words
154154
branch(*this, allwords,
155155
INT_VAR_AFC_SIZE_MAX(opt.decay()), INT_VAL_SPLIT_MIN(),
156-
&printwords);
156+
nullptr, &printwords);
157157
break;
158158
case BRANCH_LETTERS_AFC:
159159
// Branch by assigning letters
160160
branch(*this, letters,
161161
INT_VAR_AFC_SIZE_MAX(opt.decay()), INT_VAL_MIN(),
162-
&printletters);
162+
nullptr, &printletters);
163163
break;
164164
case BRANCH_LETTERS_AFC_ALL:
165165
// Branch by assigning letters (try all letters)
166166
branch(*this, letters,
167167
INT_VAR_AFC_SIZE_MAX(opt.decay()), INT_VALUES_MIN(),
168-
&printletters);
168+
nullptr, &printletters);
169169
break;
170170
case BRANCH_WORDS_ACTION:
171171
// Branch by assigning words
172172
branch(*this, allwords,
173173
INT_VAR_ACTION_SIZE_MAX(opt.decay()), INT_VAL_SPLIT_MIN(),
174-
&printwords);
174+
nullptr, &printwords);
175175
break;
176176
case BRANCH_LETTERS_ACTION:
177177
// Branch by assigning letters
178178
branch(*this, letters,
179179
INT_VAR_ACTION_SIZE_MAX(opt.decay()), INT_VAL_MIN(),
180-
&printletters);
180+
nullptr, &printletters);
181181
break;
182182
case BRANCH_LETTERS_ACTION_ALL:
183183
// Branch by assigning letters (try all letters)
184184
branch(*this, letters,
185185
INT_VAR_ACTION_SIZE_MAX(opt.decay()), INT_VALUES_MIN(),
186-
&printletters);
186+
nullptr, &printletters);
187187
break;
188188
case BRANCH_WORDS_CHB:
189189
// Branch by assigning words
190190
branch(*this, allwords,
191191
INT_VAR_CHB_SIZE_MAX(), INT_VAL_SPLIT_MIN(),
192-
&printwords);
192+
nullptr, &printwords);
193193
break;
194194
case BRANCH_LETTERS_CHB:
195195
// Branch by assigning letters
196196
branch(*this, letters,
197197
INT_VAR_CHB_SIZE_MAX(), INT_VAL_MIN(),
198-
&printletters);
198+
nullptr, &printletters);
199199
break;
200200
case BRANCH_LETTERS_CHB_ALL:
201201
// Branch by assigning letters (try all letters)
202202
branch(*this, letters,
203203
INT_VAR_CHB_SIZE_MAX(), INT_VALUES_MIN(),
204-
&printletters);
204+
nullptr, &printletters);
205205
break;
206206
}
207207
}

gecode/flatzinc/flatzinc.cpp

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1094,6 +1094,7 @@ namespace Gecode { namespace FlatZinc {
10941094
branch(bg(*this), va,
10951095
ann2ivarsel(args->a[1],rnd,decay),
10961096
ann2ivalsel(args->a[2],r0,r1,rnd),
1097+
nullptr,
10971098
&varValPrint<IntVar>);
10981099
branchInfo.add(bg,r0,r1,names);
10991100
}
@@ -1113,7 +1114,7 @@ namespace Gecode { namespace FlatZinc {
11131114
va[k++] = iv[vars->a[i]->getIntVar()];
11141115
iv_searched[vars->a[i]->getIntVar()] = true;
11151116
}
1116-
assign(*this, va, ann2asnivalsel(args->a[1],rnd),
1117+
assign(*this, va, ann2asnivalsel(args->a[1],rnd), nullptr,
11171118
&varValPrint<IntVar>);
11181119
} else if (flatAnn[i]->isCall("bool_search")) {
11191120
AST::Call *call = flatAnn[i]->getCall("bool_search");
@@ -1140,6 +1141,7 @@ namespace Gecode { namespace FlatZinc {
11401141
branch(bg(*this), va,
11411142
ann2bvarsel(args->a[1],rnd,decay),
11421143
ann2bvalsel(args->a[2],r0,r1,rnd),
1144+
nullptr,
11431145
&varValPrint<BoolVar>);
11441146
branchInfo.add(bg,r0,r1,names);
11451147
}
@@ -1181,6 +1183,7 @@ namespace Gecode { namespace FlatZinc {
11811183
branch(bg(*this), va,
11821184
ann2svarsel(args->a[1],rnd,decay),
11831185
ann2svalsel(args->a[2],r0,r1,rnd),
1186+
nullptr,
11841187
&varValPrint<SetVar>);
11851188
branchInfo.add(bg,r0,r1,names);
11861189
}
@@ -1244,6 +1247,7 @@ namespace Gecode { namespace FlatZinc {
12441247
branch(bg(*this), va,
12451248
ann2fvarsel(args->a[2],rnd,decay),
12461249
ann2fvalsel(args->a[3],r0,r1),
1250+
nullptr,
12471251
&varValPrintF);
12481252
branchInfo.add(bg,r0,r1,names);
12491253
}
@@ -1329,13 +1333,13 @@ namespace Gecode { namespace FlatZinc {
13291333

13301334
if (iv_sol.size() > 0) {
13311335
BrancherGroup bg;
1332-
branch(bg(*this), iv_sol, def_int_varsel, def_int_valsel,
1336+
branch(bg(*this), iv_sol, def_int_varsel, def_int_valsel, nullptr,
13331337
&varValPrint<IntVar>);
13341338
branchInfo.add(bg,def_int_rel_left,def_int_rel_right,iv_sol_names);
13351339
}
13361340
if (bv_sol.size() > 0) {
13371341
BrancherGroup bg;
1338-
branch(bg(*this), bv_sol, def_bool_varsel, def_bool_valsel,
1342+
branch(bg(*this), bv_sol, def_bool_varsel, def_bool_valsel, nullptr,
13391343
&varValPrint<BoolVar>);
13401344
branchInfo.add(bg,def_bool_rel_left,def_bool_rel_right,bv_sol_names);
13411345
}
@@ -1374,7 +1378,7 @@ namespace Gecode { namespace FlatZinc {
13741378

13751379
if (fv_sol.size() > 0) {
13761380
BrancherGroup bg;
1377-
branch(bg(*this), fv_sol, def_float_varsel, def_float_valsel,
1381+
branch(bg(*this), fv_sol, def_float_varsel, def_float_valsel, nullptr,
13781382
&varValPrintF);
13791383
branchInfo.add(bg,def_float_rel_left,def_float_rel_right,fv_sol_names);
13801384
}
@@ -1414,7 +1418,7 @@ namespace Gecode { namespace FlatZinc {
14141418

14151419
if (sv_sol.size() > 0) {
14161420
BrancherGroup bg;
1417-
branch(bg(*this), sv_sol, def_set_varsel, def_set_valsel,
1421+
branch(bg(*this), sv_sol, def_set_varsel, def_set_valsel, nullptr,
14181422
&varValPrint<SetVar>);
14191423
branchInfo.add(bg,def_set_rel_left,def_set_rel_right,sv_sol_names);
14201424

@@ -1437,14 +1441,16 @@ namespace Gecode { namespace FlatZinc {
14371441
std::vector<std::string> names(1);
14381442
names[0] = p.intVarName(_optVar);
14391443
BrancherGroup bg;
1440-
branch(bg(*this), iv[_optVar], INT_VAL_MIN(), &varValPrint<IntVar>);
1444+
branch(bg(*this), iv[_optVar], INT_VAL_MIN(),
1445+
&varValPrint<IntVar>);
14411446
branchInfo.add(bg,"=","!=",names);
14421447
} else {
14431448
#ifdef GECODE_HAS_FLOAT_VARS
14441449
std::vector<std::string> names(1);
14451450
names[0] = p.floatVarName(_optVar);
14461451
BrancherGroup bg;
1447-
branch(bg(*this), fv[_optVar], FLOAT_VAL_SPLIT_MIN(), &varValPrintF);
1452+
branch(bg(*this), fv[_optVar], FLOAT_VAL_SPLIT_MIN(),
1453+
&varValPrintF);
14481454
branchInfo.add(bg,"<=",">",names);
14491455
#endif
14501456
}
@@ -1453,14 +1459,16 @@ namespace Gecode { namespace FlatZinc {
14531459
std::vector<std::string> names(1);
14541460
names[0] = p.intVarName(_optVar);
14551461
BrancherGroup bg;
1456-
branch(bg(*this), iv[_optVar], INT_VAL_MAX(), &varValPrint<IntVar>);
1462+
branch(bg(*this), iv[_optVar], INT_VAL_MAX(),
1463+
&varValPrint<IntVar>);
14571464
branchInfo.add(bg,"=","!=",names);
14581465
} else {
14591466
#ifdef GECODE_HAS_FLOAT_VARS
14601467
std::vector<std::string> names(1);
14611468
names[0] = p.floatVarName(_optVar);
14621469
BrancherGroup bg;
1463-
branch(bg(*this), fv[_optVar], FLOAT_VAL_SPLIT_MAX(), &varValPrintF);
1470+
branch(bg(*this), fv[_optVar], FLOAT_VAL_SPLIT_MAX(),
1471+
&varValPrintF);
14641472
branchInfo.add(bg,"<=",">",names);
14651473
#endif
14661474
}
@@ -1480,28 +1488,28 @@ namespace Gecode { namespace FlatZinc {
14801488
} else {
14811489
{
14821490
BrancherGroup bg;
1483-
branch(bg(*this),iv_aux,def_int_varsel,def_int_valsel,
1491+
branch(bg(*this),iv_aux,def_int_varsel,def_int_valsel, nullptr,
14841492
&varValPrint<IntVar>);
14851493
branchInfo.add(bg,def_int_rel_left,def_int_rel_right,iv_tmp_names);
14861494
}
14871495
{
14881496
BrancherGroup bg;
1489-
branch(bg(*this),bv_aux,def_bool_varsel,def_bool_valsel,
1497+
branch(bg(*this),bv_aux,def_bool_varsel,def_bool_valsel, nullptr,
14901498
&varValPrint<BoolVar>);
14911499
branchInfo.add(bg,def_bool_rel_left,def_bool_rel_right,bv_tmp_names);
14921500
}
14931501
#ifdef GECODE_HAS_SET_VARS
14941502
{
14951503
BrancherGroup bg;
1496-
branch(bg(*this),sv_aux,def_set_varsel,def_set_valsel,
1504+
branch(bg(*this),sv_aux,def_set_varsel,def_set_valsel, nullptr,
14971505
&varValPrint<SetVar>);
14981506
branchInfo.add(bg,def_set_rel_left,def_set_rel_right,sv_tmp_names);
14991507
}
15001508
#endif
15011509
#ifdef GECODE_HAS_FLOAT_VARS
15021510
{
15031511
BrancherGroup bg;
1504-
branch(bg(*this),fv_aux,def_float_varsel,def_float_valsel,
1512+
branch(bg(*this),fv_aux,def_float_varsel,def_float_valsel, nullptr,
15051513
&varValPrintF);
15061514
branchInfo.add(bg,def_float_rel_left,def_float_rel_right,fv_tmp_names);
15071515
}

gecode/float.hh

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1371,6 +1371,17 @@ namespace Gecode {
13711371
* \ingroup TaskModelFloat
13721372
*/
13731373

1374+
/**
1375+
* \brief Branch filter function type for float variables
1376+
*
1377+
* The variable \a x is considered for selection and \a i refers to the
1378+
* variable's position in the original array passed to the brancher.
1379+
*
1380+
* \ingroup TaskModelFloatBranch
1381+
*/
1382+
typedef std::function<bool(const Space& home, FloatVar x, int i)>
1383+
FloatBranchFilter;
1384+
13741385
/**
13751386
* \brief Branch merit function type for float variables
13761387
*
@@ -1848,6 +1859,7 @@ namespace Gecode {
18481859
GECODE_FLOAT_EXPORT void
18491860
branch(Home home, const FloatVarArgs& x,
18501861
FloatVarBranch vars, FloatValBranch vals,
1862+
FloatBranchFilter bf=nullptr,
18511863
FloatVarValPrint vvp=nullptr);
18521864
/**
18531865
* \brief Branch over \a x with tie-breaking variable selection \a vars and value selection \a vals
@@ -1857,6 +1869,7 @@ namespace Gecode {
18571869
GECODE_FLOAT_EXPORT void
18581870
branch(Home home, const FloatVarArgs& x,
18591871
TieBreak<FloatVarBranch> vars, FloatValBranch vals,
1872+
FloatBranchFilter bf=nullptr,
18601873
FloatVarValPrint vvp=nullptr);
18611874
/**
18621875
* \brief Branch over \a x with value selection \a vals
@@ -1874,6 +1887,7 @@ namespace Gecode {
18741887
*/
18751888
GECODE_FLOAT_EXPORT void
18761889
assign(Home home, const FloatVarArgs& x, FloatAssign vals,
1890+
FloatBranchFilter bf=nullptr,
18771891
FloatVarValPrint vvp=nullptr);
18781892
/**
18791893
* \brief Assign \a x with value selection \a vals

0 commit comments

Comments
 (0)