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
00039
00040 namespace Gecode { namespace Set { namespace Branch {
00041
00042
00043 forceinline
00044 MeritMin::MeritMin(Space& home, const VarBranch<Var>& vb)
00045 : MeritBase<SetView,int>(home,vb) {}
00046 forceinline
00047 MeritMin::MeritMin(Space& home, MeritMin& m)
00048 : MeritBase<SetView,int>(home,m) {}
00049 forceinline int
00050 MeritMin::operator ()(const Space&, SetView x, int) {
00051 UnknownRanges<SetView> u(x);
00052 return u.min();
00053 }
00054
00055
00056 forceinline
00057 MeritMax::MeritMax(Space& home, const VarBranch<Var>& vb)
00058 : MeritBase<SetView,int>(home,vb) {}
00059 forceinline
00060 MeritMax::MeritMax(Space& home, MeritMax& m)
00061 : MeritBase<SetView,int>(home,m) {}
00062 forceinline int
00063 MeritMax::operator ()(const Space&, SetView x, int) {
00064 int max = Limits::max;
00065 for (UnknownRanges<SetView> u(x); u(); ++u)
00066 max = u.max();
00067 return max;
00068 }
00069
00070
00071 forceinline
00072 MeritSize::MeritSize(Space& home, const VarBranch<Var>& vb)
00073 : MeritBase<SetView,unsigned int>(home,vb) {}
00074 forceinline
00075 MeritSize::MeritSize(Space& home, MeritSize& m)
00076 : MeritBase<SetView,unsigned int>(home,m) {}
00077 forceinline unsigned int
00078 MeritSize::operator ()(const Space&, SetView x, int) {
00079 return x.unknownSize();
00080 }
00081
00082
00083 forceinline
00084 MeritDegreeSize::MeritDegreeSize(Space& home, const VarBranch<Var>& vb)
00085 : MeritBase<SetView,double>(home,vb) {}
00086 forceinline
00087 MeritDegreeSize::MeritDegreeSize(Space& home, MeritDegreeSize& m)
00088 : MeritBase<SetView,double>(home,m) {}
00089 forceinline double
00090 MeritDegreeSize::operator ()(const Space&, SetView x, int) {
00091 return static_cast<double>(x.unknownSize()) /
00092 static_cast<double>(x.degree());
00093 }
00094
00095
00096 forceinline
00097 MeritAFCSize::MeritAFCSize(Space& home, const VarBranch<Var>& vb)
00098 : MeritBase<SetView,double>(home,vb), afc(vb.afc()) {}
00099 forceinline
00100 MeritAFCSize::MeritAFCSize(Space& home, MeritAFCSize& m)
00101 : MeritBase<SetView,double>(home,m), afc(m.afc) {}
00102 forceinline double
00103 MeritAFCSize::operator ()(const Space&, SetView x, int) {
00104 return x.afc() / static_cast<double>(x.unknownSize());
00105 }
00106 forceinline bool
00107 MeritAFCSize::notice(void) const {
00108 return false;
00109 }
00110 forceinline void
00111 MeritAFCSize::dispose(Space&) {
00112
00113 afc.~AFC();
00114 }
00115
00116
00117 forceinline
00118 MeritActionSize::MeritActionSize(Space& home, const VarBranch<Var>& vb)
00119 : MeritBase<SetView,double>(home,vb), action(vb.action()) {}
00120 forceinline
00121 MeritActionSize::MeritActionSize(Space& home, MeritActionSize& m)
00122 : MeritBase<SetView,double>(home,m), action(m.action) {}
00123 forceinline double
00124 MeritActionSize::operator ()(const Space&, SetView x, int i) {
00125 return action[i] / static_cast<double>(x.unknownSize());
00126 }
00127 forceinline bool
00128 MeritActionSize::notice(void) const {
00129 return true;
00130 }
00131 forceinline void
00132 MeritActionSize::dispose(Space&) {
00133 action.~Action();
00134 }
00135
00136
00137
00138 forceinline
00139 MeritCHBSize::MeritCHBSize(Space& home, const VarBranch<Var>& vb)
00140 : MeritBase<SetView,double>(home,vb), chb(vb.chb()) {}
00141 forceinline
00142 MeritCHBSize::MeritCHBSize(Space& home, MeritCHBSize& m)
00143 : MeritBase<SetView,double>(home,m), chb(m.chb) {}
00144 forceinline double
00145 MeritCHBSize::operator ()(const Space&, SetView x, int i) {
00146 return chb[i] / static_cast<double>(x.unknownSize());
00147 }
00148 forceinline bool
00149 MeritCHBSize::notice(void) const {
00150 return true;
00151 }
00152 forceinline void
00153 MeritCHBSize::dispose(Space&) {
00154 chb.~CHB();
00155 }
00156
00157 }}}
00158
00159