14 #ifndef OR_TOOLS_SAT_DIFFN_H_
15 #define OR_TOOLS_SAT_DIFFN_H_
20 #include "absl/container/flat_hash_set.h"
21 #include "absl/types/span.h"
52 void Register(
int fast_priority,
int slow_priority);
55 bool PropagateTwoBoxes();
56 bool FindBoxesThatMustOverlapAHorizontalLineAndPropagate(
68 std::vector<IndexedInterval> indexed_intervals_;
69 std::vector<std::vector<int>> events_overlapping_boxes_;
71 absl::flat_hash_set<absl::Span<int>> reduced_overlapping_boxes_;
72 std::vector<absl::Span<int>> boxes_to_propagate_;
73 std::vector<absl::Span<int>> disjoint_boxes_;
99 const std::vector<IntervalVariable>& x,
100 const std::vector<IntervalVariable>& y,
bool is_strict) {
106 model->TakeOwnership(x_helper);
107 model->TakeOwnership(y_helper);
113 model->TakeOwnership(constraint);
115 const SatParameters* params =
model->GetOrCreate<SatParameters>();
116 const bool add_cumulative_relaxation =
117 params->use_timetabling_in_no_overlap_2d() ||
118 params->use_energetic_reasoning_in_no_overlap_2d();
120 if (add_cumulative_relaxation) {
122 bool some_boxes_are_only_optional_on_x =
false;
123 bool some_boxes_are_only_optional_on_y =
false;
124 for (
int i = 0; i < x.size(); ++i) {
133 some_boxes_are_only_optional_on_x =
true;
138 some_boxes_are_only_optional_on_y =
true;
141 if (!some_boxes_are_only_optional_on_y) {
144 if (!some_boxes_are_only_optional_on_x) {
Class that owns everything related to a particular optimization model.
void Register(int fast_priority, int slow_priority)
~NonOverlappingRectanglesDisjunctivePropagator() override
NonOverlappingRectanglesDisjunctivePropagator(bool strict, SchedulingConstraintHelper *x, SchedulingConstraintHelper *y, Model *model)
bool IsOptional(int t) const
Literal PresenceLiteral(int index) const
std::function< void(Model *)> NonOverlappingRectangles(const std::vector< IntervalVariable > &x, const std::vector< IntervalVariable > &y, bool is_strict)
void AddDiffnCumulativeRelationOnX(SchedulingConstraintHelper *x, SchedulingConstraintHelper *y, Model *model)
Collection of objects used to extend the Constraint Solver library.