14 #ifndef OR_TOOLS_CONSTRAINT_SOLVER_ROUTING_FILTERS_H_
15 #define OR_TOOLS_CONSTRAINT_SOLVER_ROUTING_FILTERS_H_
25 #include "ortools/constraint_solver/routing_parameters.pb.h"
32 const RoutingModel& routing_model);
36 const RoutingModel& routing_model,
bool filter_cost);
40 const RoutingModel& routing_model);
44 const RoutingModel& routing_model);
50 const std::vector<RoutingModel::PickupAndDeliveryPolicy>& vehicle_policies);
54 const RoutingModel& routing_model);
58 bool propagate_own_objective_value,
59 bool filter_objective_cost,
64 const RoutingDimension& dimension);
68 GlobalDimensionCumulOptimizer* optimizer,
69 GlobalDimensionCumulOptimizer* mp_optimizer,
bool filter_objective_cost);
74 LocalDimensionCumulOptimizer* optimizer,
75 LocalDimensionCumulOptimizer* mp_optimizer,
76 bool propagate_own_objective_value,
bool filter_objective_cost);
84 const PathState* path_state,
85 const std::vector<RoutingDimension*>&
dimensions,
86 std::vector<LocalSearchFilterManager::FilterEvent>* filters);
89 const std::vector<RoutingDimension*>&
dimensions,
90 const RoutingSearchParameters&
parameters,
bool filter_objective_cost,
91 bool use_chain_cumul_filter,
92 std::vector<LocalSearchFilterManager::FilterEvent>* filters);
98 BasePathFilter(
const std::vector<IntVar*>& nexts,
int next_domain_size);
101 int64_t objective_min, int64_t objective_max)
override;
113 int64_t
Start(
int i)
const {
return starts_[i]; }
114 int GetPath(int64_t node)
const {
return paths_[node]; }
115 int Rank(int64_t node)
const {
return ranks_[node]; }
128 enum Status { UNKNOWN, ENABLED, DISABLED };
130 virtual bool DisableFiltering()
const {
return false; }
131 virtual void OnBeforeSynchronizePaths() {}
132 virtual void OnAfterSynchronizePaths() {}
133 virtual void OnSynchronizePathFromStart(int64_t
start) {}
134 virtual bool InitializeAcceptPath() {
return true; }
135 virtual bool AcceptPath(int64_t path_start, int64_t chain_start,
136 int64_t chain_end) = 0;
137 virtual bool FinalizeAcceptPath(int64_t objective_min,
138 int64_t objective_max) {
142 void ComputePathStarts(std::vector<int64_t>* path_starts,
143 std::vector<int>* index_to_path);
144 bool HavePathsChanged();
145 void SynchronizeFullAssignment();
146 void UpdateAllRanks();
147 void UpdatePathRanksFromStart(
int start);
149 std::vector<int64_t> node_path_starts_;
150 std::vector<int64_t> starts_;
151 std::vector<int> paths_;
152 SparseBitset<int64_t> new_synchronized_unperformed_nodes_;
153 std::vector<int64_t> new_nexts_;
154 std::vector<int> delta_touched_;
155 SparseBitset<> touched_paths_;
157 std::vector<std::pair<int64_t, int64_t> > touched_path_chain_start_ends_;
159 std::vector<int> ranks_;
std::vector< int > dimensions
An Assignment is a variable -> domains mapping, used to report solutions to the user.
Generic path-based filter class.
bool Accept(const Assignment *delta, const Assignment *deltadelta, int64_t objective_min, int64_t objective_max) override
Accepts a "delta" given the assignment with which the filter has been synchronized; the delta holds t...
int Rank(int64_t node) const
bool PathStartTouched(int64_t start) const
int64_t Start(int i) const
static const int64_t kUnassigned
const std::vector< int64_t > & GetTouchedPathStarts() const
bool lns_detected() const
BasePathFilter(const std::vector< IntVar * > &nexts, int next_domain_size)
int64_t GetNext(int64_t node) const
~BasePathFilter() override
int GetPath(int64_t node) const
void OnSynchronize(const Assignment *delta) override
const std::vector< int64_t > & GetNewSynchronizedUnperformedNodes() const
int64_t Value(int index) const
bool IsVarSynced(int index) const
RoutingIndexPairs IndexPairs
const std::vector< IntegerType > & PositionsSetAtLeastOnce() const
Collection of objects used to extend the Constraint Solver library.
IntVarLocalSearchFilter * MakeCumulBoundsPropagatorFilter(const RoutingDimension &dimension)
Returns a filter handling dimension cumul bounds.
IntVarLocalSearchFilter * MakeVehicleAmortizedCostFilter(const RoutingModel &routing_model)
Returns a filter computing vehicle amortized costs.
IntVarLocalSearchFilter * MakeCPFeasibilityFilter(RoutingModel *routing_model)
Returns a filter checking the current solution using CP propagation.
LocalSearchFilter * MakeResourceAssignmentFilter(LocalDimensionCumulOptimizer *optimizer, LocalDimensionCumulOptimizer *mp_optimizer, bool propagate_own_objective_value, bool filter_objective_cost)
Returns a filter checking the feasibility and cost of the resource assignment.
IntVarLocalSearchFilter * MakeGlobalLPCumulFilter(GlobalDimensionCumulOptimizer *optimizer, GlobalDimensionCumulOptimizer *mp_optimizer, bool filter_objective_cost)
Returns a filter checking global linear constraints and costs.
IntVarLocalSearchFilter * MakeMaxActiveVehiclesFilter(const RoutingModel &routing_model)
Returns a filter ensuring that max active vehicles constraints are enforced.
void AppendDimensionCumulFilters(const std::vector< RoutingDimension * > &dimensions, const RoutingSearchParameters ¶meters, bool filter_objective_cost, bool use_chain_cumul_filter, std::vector< LocalSearchFilterManager::FilterEvent > *filters)
IntVarLocalSearchFilter * MakeVehicleVarFilter(const RoutingModel &routing_model)
Returns a filter checking that vehicle variable domains are respected.
IntVarLocalSearchFilter * MakePathCumulFilter(const RoutingDimension &dimension, bool propagate_own_objective_value, bool filter_objective_cost, bool can_use_lp)
Returns a filter handling dimension costs and constraints.
IntVarLocalSearchFilter * MakePickupDeliveryFilter(const RoutingModel &routing_model, const RoutingModel::IndexPairs &pairs, const std::vector< RoutingModel::PickupAndDeliveryPolicy > &vehicle_policies)
Returns a filter enforcing pickup and delivery constraints for the given pair of nodes and given poli...
IntVarLocalSearchFilter * MakeTypeRegulationsFilter(const RoutingModel &routing_model)
Returns a filter ensuring type regulation constraints are enforced.
void AppendLightWeightDimensionFilters(const PathState *path_state, const std::vector< RoutingDimension * > &dimensions, std::vector< LocalSearchFilterManager::FilterEvent > *filters)
Appends dimension-based filters to the given list of filters using a path state.
IntVarLocalSearchFilter * MakeNodeDisjunctionFilter(const RoutingModel &routing_model, bool filter_cost)
Returns a filter ensuring that node disjunction constraints are enforced.