Skip to content

Commit 4db23df

Browse files
committed
[CP-SAT] missing std includes; fix bug in work sharing
1 parent 7fee341 commit 4db23df

File tree

8 files changed

+29
-15
lines changed

8 files changed

+29
-15
lines changed

ortools/sat/cp_model_solver_helpers.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include <memory>
1919
#include <string>
2020
#include <tuple>
21+
#include <utility>
2122
#include <vector>
2223

2324
#include "absl/flags/declare.h"

ortools/sat/cuts.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,12 @@
1818

1919
#include <algorithm>
2020
#include <array>
21+
#include <cmath>
22+
#include <cstdlib>
2123
#include <functional>
2224
#include <limits>
2325
#include <string>
26+
#include <tuple>
2427
#include <utility>
2528
#include <vector>
2629

ortools/sat/disjunctive.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
#include <algorithm>
1818
#include <functional>
1919
#include <memory>
20+
#include <string>
21+
#include <utility>
2022
#include <vector>
2123

2224
#include "absl/types/span.h"

ortools/sat/precedences.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include <cstdint>
1919
#include <deque>
2020
#include <functional>
21+
#include <memory>
2122
#include <utility>
2223
#include <vector>
2324

ortools/sat/util.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include <cstdint>
2020
#include <deque>
2121
#include <limits>
22+
#include <memory>
2223
#include <string>
2324
#include <type_traits>
2425
#include <utility>

ortools/sat/work_assignment.cc

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,8 @@ std::optional<ProtoLiteral> ProtoLiteral::EncodeLiteral(
159159
return result;
160160
}
161161

162+
ProtoTrail::ProtoTrail() { target_phase_.reserve(kMaxPhaseSize); }
163+
162164
void ProtoTrail::PushLevel(const ProtoLiteral& decision,
163165
IntegerValue objective_lb, int node_id) {
164166
CHECK_GT(node_id, 0);
@@ -791,8 +793,8 @@ bool SharedTreeWorker::SyncWithSharedTree() {
791793
if (ShouldReplaceSubtree()) {
792794
++num_trees_;
793795
VLOG(2) << parameters_->name() << " acquiring tree #" << num_trees_
794-
<< " after " << num_restarts_ - tree_assignment_restart_
795-
<< " restarts prev depth: " << assigned_tree_.MaxLevel()
796+
<< " after " << restart_policy_->NumRestarts() << " restarts"
797+
<< " prev depth: " << assigned_tree_.MaxLevel()
796798
<< " target: " << assigned_tree_lbds_.WindowAverage()
797799
<< " lbd: " << restart_policy_->LbdAverageSinceReset();
798800
if (parameters_->shared_tree_worker_enable_phase_sharing() &&
@@ -804,11 +806,10 @@ bool SharedTreeWorker::SyncWithSharedTree() {
804806
// workers.
805807
auto encoded = ProtoLiteral::EncodeLiteral(lit, mapping_);
806808
if (!encoded.has_value()) continue;
807-
assigned_tree_.SetPhase(*encoded);
809+
if (!assigned_tree_.AddPhase(*encoded)) break;
808810
}
809811
}
810812
manager_->ReplaceTree(assigned_tree_);
811-
tree_assignment_restart_ = num_restarts_;
812813
assigned_tree_lbds_.Add(restart_policy_->LbdAverageSinceReset());
813814
restart_policy_->Reset();
814815
if (parameters_->shared_tree_worker_enable_phase_sharing()) {
@@ -854,9 +855,8 @@ SatSolver::Status SharedTreeWorker::Search(
854855
return sat_solver_->UnsatStatus();
855856
}
856857
if (heuristics_->restart_policies[heuristics_->policy_index]()) {
857-
++num_restarts_;
858-
heuristics_->policy_index =
859-
num_restarts_ % heuristics_->decision_policies.size();
858+
heuristics_->policy_index = restart_policy_->NumRestarts() %
859+
heuristics_->decision_policies.size();
860860
sat_solver_->Backtrack(0);
861861
}
862862
if (!SyncWithLocalTrail()) return sat_solver_->UnsatStatus();

ortools/sat/work_assignment.h

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,8 @@ class ProtoLiteral {
102102
// implications may be propagated.
103103
class ProtoTrail {
104104
public:
105+
ProtoTrail();
106+
105107
// Adds a new assigned level to the trail.
106108
void PushLevel(const ProtoLiteral& decision, IntegerValue objective_lb,
107109
int node_id);
@@ -147,18 +149,25 @@ class ProtoTrail {
147149

148150
const std::vector<ProtoLiteral>& TargetPhase() const { return target_phase_; }
149151
void ClearTargetPhase() { target_phase_.clear(); }
150-
void SetPhase(const ProtoLiteral& lit) {
151-
if (implication_level_.contains(lit)) return;
152-
target_phase_.push_back(lit);
152+
// Appends a literal to the target phase, returns false if the phase is full.
153+
bool AddPhase(const ProtoLiteral& lit) {
154+
if (target_phase_.size() >= kMaxPhaseSize) return false;
155+
if (!implication_level_.contains(lit)) {
156+
target_phase_.push_back(lit);
157+
}
158+
return true;
153159
}
154160
void SetTargetPhase(absl::Span<const ProtoLiteral> phase) {
155161
ClearTargetPhase();
156162
for (const ProtoLiteral& lit : phase) {
157-
SetPhase(lit);
163+
if (!AddPhase(lit)) break;
158164
}
159165
}
160166

161167
private:
168+
// 256 ProtoLiterals take up 4KiB
169+
static constexpr int kMaxPhaseSize = 256;
170+
162171
std::vector<ProtoLiteral>& MutableImplications(int level) {
163172
return implications_[level - 1];
164173
}
@@ -335,14 +344,11 @@ class SharedTreeWorker {
335344
LevelZeroCallbackHelper* level_zero_callbacks_;
336345
RevIntRepository* reversible_int_repository_;
337346

338-
int64_t num_restarts_ = 0;
339347
int64_t num_trees_ = 0;
340348

341349
ProtoTrail assigned_tree_;
342350
std::vector<Literal> assigned_tree_literals_;
343351
std::vector<std::vector<Literal>> assigned_tree_implications_;
344-
// How many restarts had happened when the current tree was assigned?
345-
int64_t tree_assignment_restart_ = -1;
346352

347353
// True if the last decision may split the assigned tree and has not yet been
348354
// proposed to the SharedTreeManager.

ortools/sat/work_assignment_test.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -562,7 +562,7 @@ TEST(SharedTreeManagerTest, TrailSharing) {
562562
trail1.AddImplication(1, ProtoLiteral(1, 1));
563563
trail1.AddImplication(1, ProtoLiteral(1, 3));
564564
shared_tree_manager->SyncTree(trail1);
565-
trail1.SetPhase(ProtoLiteral(2, 1));
565+
trail1.AddPhase(ProtoLiteral(2, 1));
566566
shared_tree_manager->ReplaceTree(trail1);
567567
shared_tree_manager->ReplaceTree(trail2);
568568

0 commit comments

Comments
 (0)