rename ExtraMonitors to AppendMonitors
This commit is contained in:
@@ -1688,7 +1688,7 @@ void Solver::NewSearch(DecisionBuilder* const db,
|
||||
search->push_monitor(monitors[i]);
|
||||
}
|
||||
std::vector<SearchMonitor*> extras;
|
||||
db->ExtraMonitors(this, &extras);
|
||||
db->AppendMonitors(this, &extras);
|
||||
for (ConstIter<std::vector<SearchMonitor*> > 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<SearchMonitor*> extras;
|
||||
db->ExtraMonitors(this, &extras);
|
||||
db->AppendMonitors(this, &extras);
|
||||
for (ConstIter<std::vector<SearchMonitor*> > 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<SearchMonitor*>* const extras) {}
|
||||
|
||||
// ---------- Decision and DecisionVisitor ----------
|
||||
|
||||
void Decision::Accept(DecisionVisitor* const visitor) const {
|
||||
|
||||
@@ -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<SearchMonitor*>* 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<SearchMonitor*>* const extras);
|
||||
#endif
|
||||
|
||||
private:
|
||||
DISALLOW_COPY_AND_ASSIGN(DecisionBuilder);
|
||||
|
||||
@@ -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<SearchMonitor*>* const extras) {
|
||||
virtual void AppendMonitors(Solver* const solver,
|
||||
std::vector<SearchMonitor*>* 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<bool, Solver*>* call_heuristics)
|
||||
: call_heuristics_(call_heuristics) {}
|
||||
virtual ~RunHeuristic() {}
|
||||
explicit RunHeuristic(ResultCallback1<bool, Solver*>* 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<ResultCallback1<bool, Solver*> > call_heuristics_;
|
||||
|
||||
@@ -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<SearchMonitor*>* const monitors) {
|
||||
virtual void AppendMonitors(Solver* const solver,
|
||||
std::vector<SearchMonitor*>* const monitors) {
|
||||
for (ConstIter<std::vector<DecisionBuilder*> > it(builders_);
|
||||
!it.at_end();
|
||||
++it) {
|
||||
(*it)->ExtraMonitors(solver, monitors);
|
||||
(*it)->AppendMonitors(solver, monitors);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user