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 namespace Gecode { namespace Int { namespace Branch {
00035
00036
00037 template<class View>
00038 forceinline
00039 MeritMin<View>::MeritMin
00040 (Space& home, const VarBranch<MeritMin<View>::Var>& vb)
00041 : MeritBase<View,int>(home,vb) {}
00042 template<class View>
00043 forceinline
00044 MeritMin<View>::MeritMin(Space& home, MeritMin& m)
00045 : MeritBase<View,int>(home,m) {}
00046 template<class View>
00047 forceinline int
00048 MeritMin<View>::operator ()(const Space&, View x, int) {
00049 return x.min();
00050 }
00051
00052
00053 template<class View>
00054 forceinline
00055 MeritMax<View>::MeritMax
00056 (Space& home, const VarBranch<MeritMax<View>::Var>& vb)
00057 : MeritBase<View,int>(home,vb) {}
00058 template<class View>
00059 forceinline
00060 MeritMax<View>::MeritMax(Space& home, MeritMax& m)
00061 : MeritBase<View,int>(home,m) {}
00062 template<class View>
00063 forceinline int
00064 MeritMax<View>::operator ()(const Space&, View x, int) {
00065 return x.max();
00066 }
00067
00068
00069 template<class View>
00070 forceinline
00071 MeritSize<View>::MeritSize
00072 (Space& home, const VarBranch<MeritSize<View>::Var>& vb)
00073 : MeritBase<View,unsigned int>(home,vb) {}
00074 template<class View>
00075 forceinline
00076 MeritSize<View>::MeritSize(Space& home, MeritSize& m)
00077 : MeritBase<View,unsigned int>(home,m) {}
00078 template<class View>
00079 forceinline unsigned int
00080 MeritSize<View>::operator ()(const Space&, View x, int) {
00081 return x.size();
00082 }
00083
00084
00085 template<class View>
00086 forceinline
00087 MeritDegreeSize<View>::MeritDegreeSize
00088 (Space& home, const VarBranch<MeritDegreeSize<View>::Var>& vb)
00089 : MeritBase<View,double>(home,vb) {}
00090 template<class View>
00091 forceinline
00092 MeritDegreeSize<View>::MeritDegreeSize(Space& home, MeritDegreeSize& m)
00093 : MeritBase<View,double>(home,m) {}
00094 template<class View>
00095 forceinline double
00096 MeritDegreeSize<View>::operator ()(const Space&, View x, int) {
00097 return static_cast<double>(x.degree()) / static_cast<double>(x.size());
00098 }
00099
00100
00101 template<class View>
00102 forceinline
00103 MeritAFCSize<View>::MeritAFCSize
00104 (Space& home, const VarBranch<MeritAFCSize<View>::Var>& vb)
00105 : MeritBase<View,double>(home,vb), afc(vb.afc()) {}
00106 template<class View>
00107 forceinline
00108 MeritAFCSize<View>::MeritAFCSize(Space& home, MeritAFCSize& m)
00109 : MeritBase<View,double>(home,m), afc(m.afc) {}
00110 template<class View>
00111 forceinline double
00112 MeritAFCSize<View>::operator ()(const Space&, View x, int) {
00113 return x.afc() / static_cast<double>(x.size());
00114 }
00115 template<class View>
00116 forceinline bool
00117 MeritAFCSize<View>::notice(void) const {
00118 return false;
00119 }
00120 template<class View>
00121 forceinline void
00122 MeritAFCSize<View>::dispose(Space&) {
00123
00124 afc.~AFC();
00125 }
00126
00127
00128 template<class View>
00129 forceinline
00130 MeritActionSize<View>::MeritActionSize
00131 (Space& home, const VarBranch<MeritActionSize<View>::Var>& vb)
00132 : MeritBase<View,double>(home,vb), action(vb.action()) {}
00133 template<class View>
00134 forceinline
00135 MeritActionSize<View>::MeritActionSize(Space& home, MeritActionSize& m)
00136 : MeritBase<View,double>(home,m), action(m.action) {}
00137 template<class View>
00138 forceinline double
00139 MeritActionSize<View>::operator ()(const Space&, View x, int i) {
00140 return action[i] / static_cast<double>(x.size());
00141 }
00142 template<class View>
00143 forceinline bool
00144 MeritActionSize<View>::notice(void) const {
00145 return true;
00146 }
00147 template<class View>
00148 forceinline void
00149 MeritActionSize<View>::dispose(Space&) {
00150 action.~Action();
00151 }
00152
00153
00154 template<class View>
00155 forceinline
00156 MeritCHBSize<View>::MeritCHBSize
00157 (Space& home, const VarBranch<MeritCHBSize<View>::Var>& vb)
00158 : MeritBase<View,double>(home,vb), chb(vb.chb()) {}
00159 template<class View>
00160 forceinline
00161 MeritCHBSize<View>::MeritCHBSize(Space& home, MeritCHBSize& m)
00162 : MeritBase<View,double>(home,m), chb(m.chb) {}
00163 template<class View>
00164 forceinline double
00165 MeritCHBSize<View>::operator ()(const Space&, View x, int i) {
00166 return chb[i] / static_cast<double>(x.size());
00167 }
00168 template<class View>
00169 forceinline bool
00170 MeritCHBSize<View>::notice(void) const {
00171 return true;
00172 }
00173 template<class View>
00174 forceinline void
00175 MeritCHBSize<View>::dispose(Space&) {
00176 chb.~CHB();
00177 }
00178
00179
00180 template<class View>
00181 forceinline
00182 MeritRegretMin<View>::MeritRegretMin
00183 (Space& home, const VarBranch<MeritRegretMin<View>::Var>& vb)
00184 : MeritBase<View,unsigned int>(home,vb) {}
00185 template<class View>
00186 forceinline
00187 MeritRegretMin<View>::MeritRegretMin(Space& home, MeritRegretMin& m)
00188 : MeritBase<View,unsigned int>(home,m) {}
00189 template<class View>
00190 forceinline unsigned int
00191 MeritRegretMin<View>::operator ()(const Space&, View x, int) {
00192 return x.regret_min();
00193 }
00194
00195
00196 template<class View>
00197 forceinline
00198 MeritRegretMax<View>::MeritRegretMax
00199 (Space& home, const VarBranch<MeritRegretMax<View>::Var>& vb)
00200 : MeritBase<View,unsigned int>(home,vb) {}
00201 template<class View>
00202 forceinline
00203 MeritRegretMax<View>::MeritRegretMax(Space& home, MeritRegretMax& m)
00204 : MeritBase<View,unsigned int>(home,m) {}
00205 template<class View>
00206 forceinline unsigned int
00207 MeritRegretMax<View>::operator ()(const Space&, View x, int) {
00208 return x.regret_max();
00209 }
00210
00211 }}}
00212
00213