From 054b7dc58b98e5790db7a4b6b3f4596587a122df Mon Sep 17 00:00:00 2001 From: "lperron@google.com" Date: Wed, 29 Jun 2011 09:46:25 +0000 Subject: [PATCH] rename ExtraMonitors to AppendMonitors --- constraint_solver/constraint_solver.cc | 13 ++++++-- constraint_solver/constraint_solver.h | 12 ++++++-- constraint_solver/default_search.cc | 42 +++++++++++++++----------- constraint_solver/search.cc | 6 ++-- 4 files changed, 48 insertions(+), 25 deletions(-) diff --git a/constraint_solver/constraint_solver.cc b/constraint_solver/constraint_solver.cc index e503b31852..0eeb9a95ca 100644 --- a/constraint_solver/constraint_solver.cc +++ b/constraint_solver/constraint_solver.cc @@ -1688,7 +1688,7 @@ void Solver::NewSearch(DecisionBuilder* const db, search->push_monitor(monitors[i]); } std::vector extras; - db->ExtraMonitors(this, &extras); + db->AppendMonitors(this, &extras); for (ConstIter > it(extras); !it.at_end(); ++it) { search->push_monitor(*it); } @@ -2140,7 +2140,7 @@ bool Solver::NestedSolve(DecisionBuilder* const db, new_search.push_monitor(monitors[i]); } std::vector extras; - db->ExtraMonitors(this, &extras); + db->AppendMonitors(this, &extras); for (ConstIter > it(extras); !it.at_end(); ++it) { new_search.push_monitor(*it); } @@ -2225,6 +2225,15 @@ void PropagationBaseObject::set_name(const string& name) { solver_->SetName(this, name); } +// ---------- Decision Builder ---------- + +string DecisionBuilder::DebugString() const { + return "DecisionBuilder"; +} + +void DecisionBuilder::AppendMonitors(Solver* const solver, + std::vector* const extras) {} + // ---------- Decision and DecisionVisitor ---------- void Decision::Accept(DecisionVisitor* const visitor) const { diff --git a/constraint_solver/constraint_solver.h b/constraint_solver/constraint_solver.h index 097b857ce7..3dfeaca7ef 100644 --- a/constraint_solver/constraint_solver.h +++ b/constraint_solver/constraint_solver.h @@ -2452,9 +2452,15 @@ class DecisionBuilder : public BaseObject { // returns NULL, this means that the decision builder has finished // its work. virtual Decision* Next(Solver* const s) = 0; - virtual string DebugString() const { return "DecisionBuilder"; } - virtual void ExtraMonitors(Solver* const solver, - std::vector* const extras) {} + virtual string DebugString() const; +#if !defined(SWIG) + // This method will be called at the start of the search. It asks + // the decision builder if it wants to append search monitors to the + // list of active monitors for this search. Please note there are no + // checks at this point for duplication. + virtual void AppendMonitors(Solver* const solver, + std::vector* const extras); +#endif private: DISALLOW_COPY_AND_ASSIGN(DecisionBuilder); diff --git a/constraint_solver/default_search.cc b/constraint_solver/default_search.cc index 26709dbd1a..36d0632d20 100644 --- a/constraint_solver/default_search.cc +++ b/constraint_solver/default_search.cc @@ -554,6 +554,9 @@ const double ImpactRecorder::kInitFailureImpact = 2.0; // Default phase decision builder. class ImpactDecisionBuilder : public DecisionBuilder { public: + static const int kUninitializedVarIndex = -1; + static const uint64 kUninitializedFailStamp = 0; + ImpactDecisionBuilder(Solver* const solver, const IntVar* const* vars, int size, @@ -562,8 +565,8 @@ class ImpactDecisionBuilder : public DecisionBuilder { size_(size), parameters_(parameters), init_done_(false), - fail_stamp_(0), - current_var_index_(-1), + fail_stamp_(kUninitializedFailStamp), + current_var_index_(kUninitializedVarIndex), current_value_(0), heuristic_limit_(NULL), random_(parameters_.random_seed), @@ -604,11 +607,12 @@ class ImpactDecisionBuilder : public DecisionBuilder { } } - if (current_var_index_ == -1 && fail_stamp_ != 0) { + if (current_var_index_ == kUninitializedVarIndex && + fail_stamp_ != kUninitializedFailStamp) { // After solution or after heuristics. impact_recorder_.RecordLogSearchSpace(); } else { - if (fail_stamp_ != 0) { + if (fail_stamp_ != kUninitializedFailStamp) { if (solver->fail_stamp() == fail_stamp_) { impact_recorder_.UpdateAfterAssignment(current_var_index_, current_value_); @@ -622,10 +626,10 @@ class ImpactDecisionBuilder : public DecisionBuilder { ++heuristic_branch_count_; if (heuristic_branch_count_ % parameters_.heuristic_period == 0) { - current_var_index_ = -1; + current_var_index_ = kUninitializedVarIndex; return &runner_; } - current_var_index_ = -1; + current_var_index_ = kUninitializedVarIndex; current_value_ = 0; if (FindVarValue(¤t_var_index_, ¤t_value_)) { return solver->MakeAssignVariableValue(vars_[current_var_index_], @@ -635,8 +639,10 @@ class ImpactDecisionBuilder : public DecisionBuilder { } } - virtual void ExtraMonitors(Solver* const solver, - std::vector* const extras) { + virtual void AppendMonitors(Solver* const solver, + std::vector* const extras) { + CHECK_NOTNULL(solver); + CHECK_NOTNULL(extras); extras->push_back(solver->RevAlloc(new Monitor(solver, this))); } @@ -650,6 +656,7 @@ class ImpactDecisionBuilder : public DecisionBuilder { virtual ~Monitor() {} virtual void RefuteDecision(Decision* const d) { + CHECK_NOTNULL(d); Solver* const s = solver(); if (db_->CheckRestart(s)) { RestartCurrentSearch(); @@ -689,18 +696,19 @@ class ImpactDecisionBuilder : public DecisionBuilder { class RunHeuristic : public Decision { public: - explicit RunHeuristic( - ResultCallback1* call_heuristics) - : call_heuristics_(call_heuristics) {} - virtual ~RunHeuristic() {} + explicit RunHeuristic(ResultCallback1* call_heuristics) + : call_heuristics_(call_heuristics) { + CHECK_NOTNULL(call_heuristics); + } + virtual ~RunHeuristic() {} - virtual void Apply(Solver* const solver) { - if (!call_heuristics_->Run(solver)) { - solver->Fail(); - } + virtual void Apply(Solver* const solver) { + if (!call_heuristics_->Run(solver)) { + solver->Fail(); } + } - virtual void Refute(Solver* const solver) {} + virtual void Refute(Solver* const solver) {} private: scoped_ptr > call_heuristics_; diff --git a/constraint_solver/search.cc b/constraint_solver/search.cc index 77040dd71e..2f8b16e5af 100644 --- a/constraint_solver/search.cc +++ b/constraint_solver/search.cc @@ -361,12 +361,12 @@ class ComposeDecisionBuilder : public DecisionBuilder { virtual Decision* Next(Solver* const s); virtual string DebugString() const; void add(DecisionBuilder* const db); - virtual void ExtraMonitors(Solver* const solver, - std::vector* const monitors) { + virtual void AppendMonitors(Solver* const solver, + std::vector* const monitors) { for (ConstIter > it(builders_); !it.at_end(); ++it) { - (*it)->ExtraMonitors(solver, monitors); + (*it)->AppendMonitors(solver, monitors); } }