53 #ifdef GECODE_HAS_SET_VARS
56 #ifdef GECODE_HAS_FLOAT_VARS
62 namespace Test {
namespace Branch {
66 return (w + (b-w)/2.0);
101 :
x(*this, n, 0, 1) {}
104 : Gecode::
Space(share,s) {
113 #ifdef GECODE_HAS_SET_VARS
121 :
x(*this, n, Gecode::IntSet::empty, d) {}
124 : Gecode::
Space(share,s) {
134 #ifdef GECODE_HAS_FLOAT_VARS
142 :
x(*this, n, d.
min(), d.
max()) {}
145 : Gecode::
Space(share,s) {
161 const char* int_var_branch_name[] = {
167 "INT_VAR_DEGREE_MIN",
168 "INT_VAR_DEGREE_MAX",
171 "INT_VAR_ACTIVITY_MIN",
172 "INT_VAR_ACTIVITY_MAX",
179 "INT_VAR_DEGREE_SIZE_MIN",
180 "INT_VAR_DEGREE_SIZE_MAX",
181 "INT_VAR_AFC_SIZE_MIN",
182 "INT_VAR_AFC_SIZE_MAX",
183 "INT_VAR_ACTIVITY_SIZE_MIN",
184 "INT_VAR_ACTIVITY_SIZE_MAX",
185 "INT_VAR_REGRET_MIN_MIN",
186 "INT_VAR_REGRET_MIN_MAX",
187 "INT_VAR_REGRET_MAX_MIN",
188 "INT_VAR_REGRET_MAX_MAX"
191 const int n_int_var_branch =
192 sizeof(int_var_branch_name)/
sizeof(
const char*);
202 const char* int_val_branch_name[] = {
220 const int n_int_val_branch =
221 sizeof(int_val_branch_name)/
sizeof(
const char*);
232 #ifdef GECODE_HAS_SET_VARS
239 const char* set_var_branch_name[] = {
245 "SET_VAR_DEGREE_MIN",
246 "SET_VAR_DEGREE_MAX",
249 "SET_VAR_ACTIVITY_MIN",
250 "SET_VAR_ACTIVITY_MAX",
257 "SET_VAR_DEGREE_SIZE_MIN",
258 "SET_VAR_DEGREE_SIZE_MAX",
259 "SET_VAR_AFC_SIZE_MIN",
260 "SET_VAR_AFC_SIZE_MAX",
261 "SET_VAR_ACTIVITY_SIZE_MIN",
262 "SET_VAR_ACTIVITY_SIZE_MAX"
265 const int n_set_var_branch =
266 sizeof(set_var_branch_name)/
sizeof(
const char*);
272 const char* set_val_branch_name[] = {
284 const int n_set_val_branch =
285 sizeof(set_val_branch_name)/
sizeof(
const char*);
294 #ifdef GECODE_HAS_FLOAT_VARS
301 const char* float_var_branch_name[] = {
305 "FLOAT_VAR_MERIT_MIN",
306 "FLOAT_VAR_MERIT_MAX",
307 "FLOAT_VAR_DEGREE_MIN",
308 "FLOAT_VAR_DEGREE_MAX",
311 "FLOAT_VAR_ACTIVITY_MIN",
312 "FLOAT_VAR_ACTIVITY_MAX",
317 "FLOAT_VAR_SIZE_MIN",
318 "FLOAT_VAR_SIZE_MAX",
319 "FLOAT_VAR_DEGREE_SIZE_MIN",
320 "FLOAT_VAR_DEGREE_SIZE_MAX",
321 "FLOAT_VAR_AFC_SIZE_MIN",
322 "FLOAT_VAR_AFC_SIZE_MAX",
323 "FLOAT_VAR_ACTIVITY_SIZE_MIN",
324 "FLOAT_VAR_ACTIVITY_SIZE_MAX"
327 const int n_float_var_branch =
328 sizeof(float_var_branch_name)/
sizeof(
const char*);
331 return static_cast<double>(x.
degree());
334 const char* float_val_branch_name[] = {
335 "FLOAT_VAL_SPLIT_MIN",
336 "FLOAT_VAL_SPLIT_MAX",
337 "FLOAT_VAL_SPLIT_RND",
341 const int n_float_val_branch =
342 sizeof(float_val_branch_name)/
sizeof(
const char*);
355 RunInfo(
const std::string& vara,
const std::string& varb,
356 const std::string& valname,
360 o <<
"(" <<
var <<
", " <<
val <<
", " <<
a_d <<
", " <<
c_d <<
")";
373 namespace Test {
namespace Branch {
376 template<
class TestSpace>
387 if (ex == NULL)
break;
390 if ((maxNbSol >= 0) && (maxNbSol == s))
break;
396 :
Base(
"Int::Branch::"+s), arity(a),
dom(d) {
405 using namespace Gecode;
408 map<int, vector<RunInfo> > results;
411 post(*root, root->x);
418 for (
int vara = 0; vara<n_int_var_branch; vara++) {
419 for (
int varb = 1; varb<n_int_var_branch; varb++) {
420 for (
int val = 0; val<n_int_val_branch; val++) {
433 case 8: ivb =
INT_VAL(&int_val);
break;
444 if ((vara == 0) && (val < 11)) {
516 branch(*c, c->
x, ivba, ivb);
break;
518 branch(*c, c->
x, ivbb, ivb);
break;
538 (
RunInfo(int_var_branch_name[vara],
539 int_var_branch_name[varb],
540 int_val_branch_name[val],
545 if (results.size() > 1)
550 std::cout <<
"FAILURE" << std::endl;
551 for (map<
int, vector<RunInfo> >::iterator it = results.begin();
552 it != results.end(); ++it) {
553 std::cout <<
"Number of solutions: " << it->first << std::endl;
554 for (
unsigned int i = 0;
i < it->second.
size(); ++
i)
555 std::cout << it->second[
i] <<
" ";
556 std::cout << std::endl;
560 return results.size() == 1;
573 using namespace Gecode;
576 map<int, vector<RunInfo> > results;
579 post(*root, root->x);
586 for (
int vara = 0; vara<n_int_var_branch; vara++) {
587 for (
int varb = 1; varb<n_int_var_branch; varb++) {
588 for (
int val = 0; val<n_int_val_branch; val++) {
602 case 8: ivb =
INT_VAL(&bool_val);
break;
613 if ((vara == 0) && (val < 11)) {
687 branch(*c, c->
x, ivba, ivb);
break;
689 branch(*c, c->
x, ivbb, ivb);
break;
709 (
RunInfo(int_var_branch_name[vara],
710 int_var_branch_name[varb],
711 int_val_branch_name[val],
716 if (results.size() > 1)
721 std::cout <<
"FAILURE" << std::endl;
722 for (map<
int, vector<RunInfo> >::iterator it = results.begin();
723 it != results.end(); ++it) {
724 std::cout <<
"Number of solutions: " << it->first << std::endl;
725 for (
unsigned int i = 0;
i < it->second.
size(); ++
i)
726 std::cout << it->second[
i] <<
" ";
727 std::cout << std::endl;
731 return results.size() == 1;
734 #ifdef GECODE_HAS_SET_VARS
745 using namespace Gecode;
748 map<int, vector<RunInfo> > results;
751 post(*root, root->x);
755 for (
int vara = 0; vara<n_set_var_branch; vara++) {
756 for (
int varb = 1; varb<n_set_var_branch; varb++) {
757 for (
int val = 0; val<n_set_val_branch; val++) {
770 case 8: svb =
SET_VAL(&set_val);
break;
839 branch(*c, c->
x, svba, svb);
break;
841 branch(*c, c->
x, svbb, svb);
break;
861 (
RunInfo(set_var_branch_name[vara],
862 set_var_branch_name[varb],
863 set_val_branch_name[val],
868 if (results.size() > 1)
873 std::cout <<
"FAILURE" << std::endl;
874 for (map<
int, vector<RunInfo> >::iterator it = results.begin();
875 it != results.end(); ++it) {
876 std::cout <<
"Number of solutions: " << it->first << std::endl;
877 for (
unsigned int i = 0;
i < it->second.
size(); ++
i)
878 std::cout << it->second[
i] <<
" ";
879 std::cout << std::endl;
883 return results.size() == 1;
887 #ifdef GECODE_HAS_FLOAT_VARS
889 :
Base(
"Float::Branch::"+s),
arity(a),
dom(d), nbSols(nbs) {
898 using namespace Gecode;
901 map<int, vector<RunInfo> > results;
904 post(*root, root->x);
908 for (
int vara = 0; vara<n_float_var_branch; vara++) {
909 for (
int varb = 1; varb<n_float_var_branch; varb++) {
910 for (
int val = 0; val<n_float_val_branch; val++) {
918 case 3: fvb =
FLOAT_VAL(&float_val);
break;
986 branch(*c, c->
x, fvba, fvb);
break;
988 branch(*c, c->
x, fvbb, fvb);
break;
1008 (
RunInfo(float_var_branch_name[vara],
1009 float_var_branch_name[varb],
1010 float_val_branch_name[val],
1015 if (results.size() > 1)
1020 std::cout <<
"FAILURE" << std::endl;
1021 for (map<
int, vector<RunInfo> >::iterator it = results.begin();
1022 it != results.end(); ++it) {
1023 std::cout <<
"Number of solutions: " << it->first << std::endl;
1024 for (
unsigned int i = 0;
i < it->second.
size(); ++
i)
1025 std::cout << it->second[
i] <<
" ";
1026 std::cout << std::endl;
1030 return results.size() == 1;