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

Detailed Description

The following constraint ensures that incompatibilities and requirements between types are respected. It verifies both "hard" and "temporal" incompatibilities. Two nodes with hard incompatible types cannot be served by the same vehicle at all, while with a temporal incompatibility they can't be on the same route at the same time. The VisitTypePolicy of a node determines how visiting it impacts the type count on the route. For example, for

  • three temporally incompatible types T1 T2 and T3
  • 2 pairs of nodes a1/r1 and a2/r2 of type T1 and T2 respectively, with
    • a1 and a2 of VisitTypePolicy TYPE_ADDED_TO_VEHICLE
    • r1 and r2 of policy ADDED_TYPE_REMOVED_FROM_VEHICLE
  • 3 nodes A, UV and AR of type T3, respectively with type policies TYPE_ADDED_TO_VEHICLE, TYPE_ON_VEHICLE_UP_TO_VISIT and TYPE_SIMULTANEOUSLY_ADDED_AND_REMOVED the configurations UV --> a1 --> r1 --> a2 --> r2, a1 --> r1 --> a2 --> r2 --> A and a1 --> r1 --> AR --> a2 --> r2 are acceptable, whereas the configurations a1 --> a2 --> r1 --> ..., or A --> a1 --> r1 --> ..., or a1 --> r1 --> UV --> ... are not feasible. It also verifies same-vehicle and temporal type requirements. A node of type T_d with a same-vehicle requirement for type T_r needs to be served by the same vehicle as a node of type T_r. Temporal requirements, on the other hand, can take effect either when the dependent type is being added to the route or when it's removed from it, which is determined by the dependent node's VisitTypePolicy. In the above example:
  • If T3 is required on the same vehicle as T1, A, AR or UV must be on the same vehicle as a1.
  • If T2 is required when adding T1, a2 must be visited before a1, and if r2 is also visited on the route, it must be after a1, i.e. T2 must be on the vehicle when a1 is visited: ... --> a2 --> ... --> a1 --> ... --> r2 --> ...
  • If T3 is required when removing T1, T3 needs to be on the vehicle when r1 is visited: ... --> A --> ... --> r1 --> ... OR ... --> r1 --> ... --> UV --> ...

Definition at line 3019 of file routing.h.

#include <routing.h>

Inheritance diagram for operations_research::TypeRegulationsConstraint:
operations_research::Constraint operations_research::PropagationBaseObject operations_research::BaseObject

Public Member Functions

 TypeRegulationsConstraint (const RoutingModel &model)
void Post () override
void InitialPropagate () override
Public Member Functions inherited from operations_research::Constraint
 Constraint (Solver *const solver)
 Constraint (const Constraint &)=delete
Constraintoperator= (const Constraint &)=delete
 ~Constraint () override
std::string DebugString () const override
void PostAndPropagate ()
virtual void Accept (ModelVisitor *visitor) const
 Accepts the given visitor.
bool IsCastConstraint () const
 Is the constraint created by a cast from expression to integer variable?
virtual IntVarVar ()
Public Member Functions inherited from operations_research::PropagationBaseObject
 PropagationBaseObject (Solver *const s)
 PropagationBaseObject (const PropagationBaseObject &)=delete
PropagationBaseObjectoperator= (const PropagationBaseObject &)=delete
 ~PropagationBaseObject () override
std::string DebugString () const override
Solversolver () const
void FreezeQueue ()
void UnfreezeQueue ()
void EnqueueDelayedDemon (Demon *const d)
void EnqueueVar (Demon *const d)
void ExecuteAll (const SimpleRevFIFO< Demon * > &demons)
void EnqueueAll (const SimpleRevFIFO< Demon * > &demons)
void set_action_on_fail (Solver::Action a)
void reset_action_on_fail ()
 This method clears the failure callback.
void set_variable_to_clean_on_fail (IntVar *v)
 Shortcut for variable cleaner.
virtual std::string name () const
 Object naming.
void set_name (absl::string_view name)
bool HasName () const
 Returns whether the object has been named or not.
virtual std::string BaseName () const
 Returns a base name for automatic naming.
Public Member Functions inherited from operations_research::BaseObject
 BaseObject ()
 BaseObject (const BaseObject &)=delete
BaseObjectoperator= (const BaseObject &)=delete
virtual ~BaseObject ()=default

Constructor & Destructor Documentation

◆ TypeRegulationsConstraint()

operations_research::TypeRegulationsConstraint::TypeRegulationsConstraint ( const RoutingModel & model)
explicit

Definition at line 7095 of file routing.cc.

Member Function Documentation

◆ InitialPropagate()

void operations_research::TypeRegulationsConstraint::InitialPropagate ( )
overridevirtual

This method performs the initial propagation of the constraint. It is called just after the post.

Implements operations_research::Constraint.

Definition at line 7143 of file routing.cc.

◆ Post()

void operations_research::TypeRegulationsConstraint::Post ( )
overridevirtual

This method is called when the constraint is processed by the solver. Its main usage is to attach demons to variables.

Implements operations_research::Constraint.

Definition at line 7128 of file routing.cc.


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