tracer.cpp
Go to the documentation of this file.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 #include <iomanip>
00039 #include <gecode/set.hh>
00040
00041 namespace Gecode {
00042
00043 StdSetTracer::StdSetTracer(std::ostream& os0)
00044 : os(os0) {}
00045
00046 void
00047 StdSetTracer::init(const Space&, const SetTraceRecorder& t) {
00048 os << "trace<Set>::init(id:" << t.id();
00049 if (t.group().in())
00050 os << ",g:";t.group().id();
00051 os << ") slack: 100.00% (" << t.slack().initial() << " values)"
00052 << std::endl;
00053 }
00054
00055 void
00056 StdSetTracer::prune(const Space&, const SetTraceRecorder& t,
00057 const ViewTraceInfo& vti, int i, SetTraceDelta& d) {
00058 os << "trace<Set>::prune(id:" << t.id();
00059 if (t.group().in())
00060 os << ",g:";t.group().id();
00061 os << "): [" << i << "] = " << t[i] << " + {";
00062 {
00063 SetTraceDelta::Glb glb(d.glb());
00064 if (glb()) {
00065 os << glb.min() << ".." << glb.max();
00066 ++glb;
00067 while (glb()) {
00068 os << "," << glb.min() << ".." << glb.max();
00069 ++glb;
00070 }
00071 }
00072 }
00073 os << "} - {";
00074 {
00075 SetTraceDelta::Lub lub(d.lub());
00076 if (lub()) {
00077 os << lub.min() << ".." << lub.max();
00078 ++lub;
00079 while (lub()) {
00080 os << "," << lub.min() << ".." << lub.max();
00081 ++lub;
00082 }
00083 }
00084 }
00085 os << "} by " << vti << std::endl;
00086 }
00087
00088 void
00089 StdSetTracer::fix(const Space&, const SetTraceRecorder& t) {
00090 os << "trace<Set>::fix(id:" << t.id();
00091 if (t.group().in())
00092 os << ",g:";t.group().id();
00093 os << ") slack: ";
00094 double sl_i = static_cast<double>(t.slack().initial());
00095 double sl_p = static_cast<double>(t.slack().previous());
00096 double sl_c = static_cast<double>(t.slack().current());
00097 double p_c = 100.0 * (sl_c / sl_i);
00098 double p_d = 100.0 * (sl_p / sl_i) - p_c;
00099 os << std::showpoint << std::setprecision(4)
00100 << p_c << "% - "
00101 << std::showpoint << std::setprecision(4)
00102 << p_d << '%'
00103 << std::endl;
00104 }
00105
00106 void
00107 StdSetTracer::fail(const Space&, const SetTraceRecorder& t) {
00108 os << "trace<Set>::fail(id:" << t.id();
00109 if (t.group().in())
00110 os << ",g:";t.group().id();
00111 os << ") slack: ";
00112 double sl_i = static_cast<double>(t.slack().initial());
00113 double sl_p = static_cast<double>(t.slack().previous());
00114 double sl_c = static_cast<double>(t.slack().current());
00115 double p_c = 100.0 * (sl_c / sl_i);
00116 double p_d = 100.0 * (sl_p / sl_i) - p_c;
00117 os << std::showpoint << std::setprecision(4)
00118 << p_c << "% - "
00119 << std::showpoint << std::setprecision(4)
00120 << p_d << '%'
00121 << std::endl;
00122 }
00123
00124 void
00125 StdSetTracer::done(const Space&, const SetTraceRecorder& t) {
00126 os << "trace<Set>::done(id:" << t.id();
00127 if (t.group().in())
00128 os << ",g:";t.group().id();
00129 os << ") slack: 0%" << std::endl;
00130 }
00131
00132 StdSetTracer StdSetTracer::def;
00133
00134 }
00135
00136