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) {
160 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
238 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
300 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*);
357 RunInfo(
const std::string& vara,
const std::string& varb,
358 const std::string& valname,
362 o <<
"(" <<
var <<
", " <<
val <<
", " <<
a_d <<
", " <<
c_d <<
")";
375 namespace Test {
namespace Branch {
378 template<
class TestSpace>
389 if (ex == NULL)
break;
392 if ((maxNbSol >= 0) && (maxNbSol == s))
break;
398 :
Base(
"Int::Branch::"+s), arity(a),
dom(d) {
407 using namespace Gecode;
410 map<int, vector<RunInfo> > results;
413 post(*root, root->x);
420 for (
int vara = 0; vara<n_int_var_branch; vara++) {
421 for (
int varb = 1; varb<n_int_var_branch; varb++) {
422 for (
int val = 0; val<n_int_val_branch; val++) {
435 case 8: ivb =
INT_VAL(&int_val);
break;
446 if ((vara == 0) && (val < 11)) {
518 branch(*c, c->
x, ivba, ivb);
break;
520 branch(*c, c->
x, ivbb, ivb);
break;
540 (
RunInfo(int_var_branch_name[vara],
541 int_var_branch_name[varb],
542 int_val_branch_name[val],
547 if (results.size() > 1)
552 std::cout <<
"FAILURE" << std::endl;
553 for (map<
int, vector<RunInfo> >::iterator it = results.begin();
554 it != results.end(); ++it) {
555 std::cout <<
"Number of solutions: " << it->first << std::endl;
556 for (
unsigned int i = 0;
i < it->second.
size(); ++
i)
557 std::cout << it->second[
i] <<
" ";
558 std::cout << std::endl;
562 return results.size() == 1;
575 using namespace Gecode;
578 map<int, vector<RunInfo> > results;
581 post(*root, root->x);
588 for (
int vara = 0; vara<n_int_var_branch; vara++) {
589 for (
int varb = 1; varb<n_int_var_branch; varb++) {
590 for (
int val = 0; val<n_int_val_branch; val++) {
604 case 8: ivb =
INT_VAL(&bool_val);
break;
615 if ((vara == 0) && (val < 11)) {
689 branch(*c, c->
x, ivba, ivb);
break;
691 branch(*c, c->
x, ivbb, ivb);
break;
711 (
RunInfo(int_var_branch_name[vara],
712 int_var_branch_name[varb],
713 int_val_branch_name[val],
718 if (results.size() > 1)
723 std::cout <<
"FAILURE" << std::endl;
724 for (map<
int, vector<RunInfo> >::iterator it = results.begin();
725 it != results.end(); ++it) {
726 std::cout <<
"Number of solutions: " << it->first << std::endl;
727 for (
unsigned int i = 0;
i < it->second.
size(); ++
i)
728 std::cout << it->second[
i] <<
" ";
729 std::cout << std::endl;
733 return results.size() == 1;
736 #ifdef GECODE_HAS_SET_VARS
747 using namespace Gecode;
750 map<int, vector<RunInfo> > results;
753 post(*root, root->x);
757 for (
int vara = 0; vara<n_set_var_branch; vara++) {
758 for (
int varb = 1; varb<n_set_var_branch; varb++) {
759 for (
int val = 0; val<n_set_val_branch; val++) {
772 case 8: svb =
SET_VAL(&set_val);
break;
778 for (
int i=0;
i<c->x.size();
i++)
841 branch(*c, c->x, svba, svb);
break;
843 branch(*c, c->x, svbb, svb);
break;
863 (
RunInfo(set_var_branch_name[vara],
864 set_var_branch_name[varb],
865 set_val_branch_name[val],
870 if (results.size() > 1)
875 std::cout <<
"FAILURE" << std::endl;
876 for (map<
int, vector<RunInfo> >::iterator it = results.begin();
877 it != results.end(); ++it) {
878 std::cout <<
"Number of solutions: " << it->first << std::endl;
879 for (
unsigned int i = 0;
i < it->second.
size(); ++
i)
880 std::cout << it->second[
i] <<
" ";
881 std::cout << std::endl;
885 return results.size() == 1;
889 #ifdef GECODE_HAS_FLOAT_VARS
891 :
Base(
"Float::Branch::"+s),
arity(a),
dom(d), nbSols(nbs) {
900 using namespace Gecode;
903 map<int, vector<RunInfo> > results;
906 post(*root, root->x);
910 for (
int vara = 0; vara<n_float_var_branch; vara++) {
911 for (
int varb = 1; varb<n_float_var_branch; varb++) {
912 for (
int val = 0; val<n_float_val_branch; val++) {
920 case 3: fvb =
FLOAT_VAL(&float_val);
break;
925 for (
int i=0;
i<c->x.size();
i++)
988 branch(*c, c->x, fvba, fvb);
break;
990 branch(*c, c->x, fvbb, fvb);
break;
1010 (
RunInfo(float_var_branch_name[vara],
1011 float_var_branch_name[varb],
1012 float_val_branch_name[val],
1017 if (results.size() > 1)
1022 std::cout <<
"FAILURE" << std::endl;
1023 for (map<
int, vector<RunInfo> >::iterator it = results.begin();
1024 it != results.end(); ++it) {
1025 std::cout <<
"Number of solutions: " << it->first << std::endl;
1026 for (
unsigned int i = 0;
i < it->second.
size(); ++
i)
1027 std::cout << it->second[
i] <<
" ";
1028 std::cout << std::endl;
1032 return results.size() == 1;