Google OR-Tools v9.12
a fast and portable software suite for combinatorial optimization
Loading...
Searching...
No Matches
operations_research::sat::DisjunctivePrecedences Class Reference

#include <disjunctive.h>

Inheritance diagram for operations_research::sat::DisjunctivePrecedences:
operations_research::sat::PropagatorInterface

Public Member Functions

 DisjunctivePrecedences (bool time_direction, SchedulingConstraintHelper *helper, Model *model)
 
bool Propagate () final
 
int RegisterWith (GenericLiteralWatcher *watcher)
 
- Public Member Functions inherited from operations_research::sat::PropagatorInterface
 PropagatorInterface ()=default
 
virtual ~PropagatorInterface ()=default
 
virtual bool IncrementalPropagate (const std::vector< int > &)
 

Detailed Description

Exploits the precedences relations of the form "this set of disjoint IntervalVariables must be performed before a given IntegerVariable". The relations are computed with PrecedencesPropagator::ComputePrecedences().

Definition at line 350 of file disjunctive.h.

Constructor & Destructor Documentation

◆ DisjunctivePrecedences()

operations_research::sat::DisjunctivePrecedences::DisjunctivePrecedences ( bool time_direction,
SchedulingConstraintHelper * helper,
Model * model )
inline

Definition at line 352 of file disjunctive.h.

Member Function Documentation

◆ Propagate()

bool operations_research::sat::DisjunctivePrecedences::Propagate ( )
finalvirtual

This will be called after one or more literals that are watched by this propagator changed. It will also always be called on the first propagation cycle after registration.

We only need to consider "critical" set of tasks given how we compute the min-offset in PropagateSubwindow().

Start of the next window.

Implements operations_research::sat::PropagatorInterface.

Definition at line 1136 of file disjunctive.cc.

◆ RegisterWith()

int operations_research::sat::DisjunctivePrecedences::RegisterWith ( GenericLiteralWatcher * watcher)

This propagator reach the fixed point in one go. Maybe not in corner cases, but since it is expansive, it is okay not to run it again right away

Note also that technically, we don't need to be waked up if only the upper bound of the task changes, but this require to use more memory and the gain is unclear as this runs with the highest priority.

Definition at line 1331 of file disjunctive.cc.


The documentation for this class was generated from the following files: