00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038 namespace Gecode {
00039
00040 forceinline
00041 FloatVarBranch::FloatVarBranch(void)
00042 : VarBranch(NULL), s(SEL_NONE) {}
00043
00044 forceinline
00045 FloatVarBranch::FloatVarBranch(Select s0, BranchTbl t)
00046 : VarBranch(t), s(s0) {}
00047
00048 forceinline
00049 FloatVarBranch::FloatVarBranch(Rnd r)
00050 : VarBranch(r), s(SEL_RND) {}
00051
00052 forceinline
00053 FloatVarBranch::FloatVarBranch(Select s0, double d, BranchTbl t)
00054 : VarBranch(d,t), s(s0) {}
00055
00056 forceinline
00057 FloatVarBranch::FloatVarBranch(Select s0, AFC a, BranchTbl t)
00058 : VarBranch(a,t), s(s0) {}
00059
00060 forceinline
00061 FloatVarBranch::FloatVarBranch(Select s0, Activity a, BranchTbl t)
00062 : VarBranch(a,t), s(s0) {}
00063
00064 forceinline
00065 FloatVarBranch::FloatVarBranch(Select s0, VoidFunction mf, BranchTbl t)
00066 : VarBranch(mf,t), s(s0) {}
00067
00068 forceinline FloatVarBranch::Select
00069 FloatVarBranch::select(void) const {
00070 return s;
00071 }
00072
00073 forceinline void
00074 FloatVarBranch::expand(Home home, const FloatVarArgs& x) {
00075 switch (select()) {
00076 case SEL_AFC_MIN: case SEL_AFC_MAX:
00077 case SEL_AFC_SIZE_MIN: case SEL_AFC_SIZE_MAX:
00078 if (!_afc.initialized())
00079 _afc = FloatAFC(home,x,decay());
00080 break;
00081 case SEL_ACTIVITY_MIN: case SEL_ACTIVITY_MAX:
00082 case SEL_ACTIVITY_SIZE_MIN: case SEL_ACTIVITY_SIZE_MAX:
00083 if (!_act.initialized())
00084 _act = FloatActivity(home,x,decay());
00085 break;
00086 default: ;
00087 }
00088 }
00089
00090
00091 inline FloatVarBranch
00092 FLOAT_VAR_NONE(void) {
00093 return FloatVarBranch(FloatVarBranch::SEL_NONE,NULL);
00094 }
00095
00096 inline FloatVarBranch
00097 FLOAT_VAR_MERIT_MIN(FloatBranchMerit bm, BranchTbl tbl) {
00098 return FloatVarBranch(FloatVarBranch::SEL_MERIT_MIN,
00099 function_cast<VoidFunction>(bm),tbl);
00100 }
00101
00102 inline FloatVarBranch
00103 FLOAT_VAR_MERIT_MAX(FloatBranchMerit bm, BranchTbl tbl) {
00104 return FloatVarBranch(FloatVarBranch::SEL_MERIT_MAX,
00105 function_cast<VoidFunction>(bm),tbl);
00106 }
00107
00108 inline FloatVarBranch
00109 FLOAT_VAR_RND(Rnd r) {
00110 return FloatVarBranch(r);
00111 }
00112
00113 inline FloatVarBranch
00114 FLOAT_VAR_DEGREE_MIN(BranchTbl tbl) {
00115 return FloatVarBranch(FloatVarBranch::SEL_DEGREE_MIN,tbl);
00116 }
00117
00118 inline FloatVarBranch
00119 FLOAT_VAR_DEGREE_MAX(BranchTbl tbl) {
00120 return FloatVarBranch(FloatVarBranch::SEL_DEGREE_MAX,tbl);
00121 }
00122
00123 inline FloatVarBranch
00124 FLOAT_VAR_AFC_MIN(double d, BranchTbl tbl) {
00125 return FloatVarBranch(FloatVarBranch::SEL_AFC_MIN,d,tbl);
00126 }
00127
00128 inline FloatVarBranch
00129 FLOAT_VAR_AFC_MIN(FloatAFC a, BranchTbl tbl) {
00130 return FloatVarBranch(FloatVarBranch::SEL_AFC_MIN,a,tbl);
00131 }
00132
00133 inline FloatVarBranch
00134 FLOAT_VAR_AFC_MAX(double d, BranchTbl tbl) {
00135 return FloatVarBranch(FloatVarBranch::SEL_AFC_MAX,d,tbl);
00136 }
00137
00138 inline FloatVarBranch
00139 FLOAT_VAR_AFC_MAX(FloatAFC a, BranchTbl tbl) {
00140 return FloatVarBranch(FloatVarBranch::SEL_AFC_MAX,a,tbl);
00141 }
00142
00143 inline FloatVarBranch
00144 FLOAT_VAR_ACTIVITY_MIN(double d, BranchTbl tbl) {
00145 return FloatVarBranch(FloatVarBranch::SEL_ACTIVITY_MIN,d,tbl);
00146 }
00147
00148 inline FloatVarBranch
00149 FLOAT_VAR_ACTIVITY_MIN(FloatActivity a, BranchTbl tbl) {
00150 return FloatVarBranch(FloatVarBranch::SEL_ACTIVITY_MIN,a,tbl);
00151 }
00152
00153 inline FloatVarBranch
00154 FLOAT_VAR_ACTIVITY_MAX(double d, BranchTbl tbl) {
00155 return FloatVarBranch(FloatVarBranch::SEL_ACTIVITY_MAX,d,tbl);
00156 }
00157
00158 inline FloatVarBranch
00159 FLOAT_VAR_ACTIVITY_MAX(FloatActivity a, BranchTbl tbl) {
00160 return FloatVarBranch(FloatVarBranch::SEL_ACTIVITY_MAX,a,tbl);
00161 }
00162
00163 inline FloatVarBranch
00164 FLOAT_VAR_MIN_MIN(BranchTbl tbl) {
00165 return FloatVarBranch(FloatVarBranch::SEL_MIN_MIN,tbl);
00166 }
00167
00168 inline FloatVarBranch
00169 FLOAT_VAR_MIN_MAX(BranchTbl tbl) {
00170 return FloatVarBranch(FloatVarBranch::SEL_MIN_MAX,tbl);
00171 }
00172
00173 inline FloatVarBranch
00174 FLOAT_VAR_MAX_MIN(BranchTbl tbl) {
00175 return FloatVarBranch(FloatVarBranch::SEL_MAX_MIN,tbl);
00176 }
00177
00178 inline FloatVarBranch
00179 FLOAT_VAR_MAX_MAX(BranchTbl tbl) {
00180 return FloatVarBranch(FloatVarBranch::SEL_MAX_MAX,tbl);
00181 }
00182
00183 inline FloatVarBranch
00184 FLOAT_VAR_SIZE_MIN(BranchTbl tbl) {
00185 return FloatVarBranch(FloatVarBranch::SEL_SIZE_MIN,tbl);
00186 }
00187
00188 inline FloatVarBranch
00189 FLOAT_VAR_SIZE_MAX(BranchTbl tbl) {
00190 return FloatVarBranch(FloatVarBranch::SEL_SIZE_MAX,tbl);
00191 }
00192
00193 inline FloatVarBranch
00194 FLOAT_VAR_DEGREE_SIZE_MIN(BranchTbl tbl) {
00195 return FloatVarBranch(FloatVarBranch::SEL_DEGREE_SIZE_MIN,tbl);
00196 }
00197
00198 inline FloatVarBranch
00199 FLOAT_VAR_DEGREE_SIZE_MAX(BranchTbl tbl) {
00200 return FloatVarBranch(FloatVarBranch::SEL_DEGREE_SIZE_MAX,tbl);
00201 }
00202
00203 inline FloatVarBranch
00204 FLOAT_VAR_AFC_SIZE_MIN(double d, BranchTbl tbl) {
00205 return FloatVarBranch(FloatVarBranch::SEL_AFC_SIZE_MIN,d,tbl);
00206 }
00207
00208 inline FloatVarBranch
00209 FLOAT_VAR_AFC_SIZE_MIN(FloatAFC a, BranchTbl tbl) {
00210 return FloatVarBranch(FloatVarBranch::SEL_AFC_SIZE_MIN,a,tbl);
00211 }
00212
00213 inline FloatVarBranch
00214 FLOAT_VAR_AFC_SIZE_MAX(double d, BranchTbl tbl) {
00215 return FloatVarBranch(FloatVarBranch::SEL_AFC_SIZE_MAX,d,tbl);
00216 }
00217
00218 inline FloatVarBranch
00219 FLOAT_VAR_AFC_SIZE_MAX(FloatAFC a, BranchTbl tbl) {
00220 return FloatVarBranch(FloatVarBranch::SEL_AFC_SIZE_MAX,a,tbl);
00221 }
00222
00223 inline FloatVarBranch
00224 FLOAT_VAR_ACTIVITY_SIZE_MIN(double d, BranchTbl tbl) {
00225 return FloatVarBranch(FloatVarBranch::SEL_ACTIVITY_SIZE_MIN,d,tbl);
00226 }
00227
00228 inline FloatVarBranch
00229 FLOAT_VAR_ACTIVITY_SIZE_MIN(FloatActivity a, BranchTbl tbl) {
00230 return FloatVarBranch(FloatVarBranch::SEL_ACTIVITY_SIZE_MIN,a,tbl);
00231 }
00232
00233 inline FloatVarBranch
00234 FLOAT_VAR_ACTIVITY_SIZE_MAX(double d, BranchTbl tbl) {
00235 return FloatVarBranch(FloatVarBranch::SEL_ACTIVITY_SIZE_MAX,d,tbl);
00236 }
00237
00238 inline FloatVarBranch
00239 FLOAT_VAR_ACTIVITY_SIZE_MAX(FloatActivity a, BranchTbl tbl) {
00240 return FloatVarBranch(FloatVarBranch::SEL_ACTIVITY_SIZE_MAX,a,tbl);
00241 }
00242
00243 }
00244
00245