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

#include <timetable.h>

Inheritance diagram for operations_research::sat::TimeTablingPerTask:
operations_research::sat::PropagatorInterface

Public Member Functions

 TimeTablingPerTask (AffineExpression capacity, SchedulingConstraintHelper *helper, SchedulingDemandHelper *demands, Model *model)
 
 TimeTablingPerTask (const TimeTablingPerTask &)=delete
 This type is neither copyable nor movable.
 
TimeTablingPerTaskoperator= (const TimeTablingPerTask &)=delete
 
bool Propagate () final
 
void 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

A strongly quadratic version of Time Tabling filtering. This propagator is similar to the CumulativeTimeTable propagator of the constraint solver.

Todo
(user): Use SchedulingDemandHelper. In particular, if we know the task is from a set of fixed alternatives, we might be able to push it more.

Definition at line 109 of file timetable.h.

Constructor & Destructor Documentation

◆ TimeTablingPerTask() [1/2]

operations_research::sat::TimeTablingPerTask::TimeTablingPerTask ( AffineExpression capacity,
SchedulingConstraintHelper * helper,
SchedulingDemandHelper * demands,
Model * model )

Each task may create at most two profile rectangles. Such pattern appear if the profile is shaped like the Hanoi tower. The additional space is for both extremities and the sentinels.

Todo
(user): This usually correspond to a makespan interval. We should just detect and propagate it separately as it would result in a faster propagation.

Definition at line 309 of file timetable.cc.

◆ TimeTablingPerTask() [2/2]

operations_research::sat::TimeTablingPerTask::TimeTablingPerTask ( const TimeTablingPerTask & )
delete

This type is neither copyable nor movable.

Member Function Documentation

◆ operator=()

TimeTablingPerTask & operations_research::sat::TimeTablingPerTask::operator= ( const TimeTablingPerTask & )
delete

◆ Propagate()

bool operations_research::sat::TimeTablingPerTask::Propagate ( )
finalvirtual
Note
we relly on being called again to reach a fixed point.

This can fail if the profile exceeds the resource capacity.

Update the minimum start times.

We reuse the same profile, but reversed, to update the maximum end times.

Update the maximum end times (reversed problem).

Implements operations_research::sat::PropagatorInterface.

Definition at line 358 of file timetable.cc.

◆ RegisterWith()

void operations_research::sat::TimeTablingPerTask::RegisterWith ( GenericLiteralWatcher * watcher)

Changing the times or pushing task absence migth have side effects on the other intervals, so we would need to be called again in this case.

Definition at line 343 of file timetable.cc.


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