14#ifndef OR_TOOLS_CONSTRAINT_SOLVER_ROUTING_ILS_H_
15#define OR_TOOLS_CONSTRAINT_SOLVER_ROUTING_ILS_H_
25#include "absl/time/time.h"
28#include "ortools/constraint_solver/routing_ils.pb.h"
29#include "ortools/constraint_solver/routing_parameters.pb.h"
78 int64_t visit, std::mt19937& rnd,
79 std::bernoulli_distribution& boolean_dist)
const;
86 int64_t seed_visit, std::mt19937& rnd,
87 std::bernoulli_distribution& boolean_dist,
int size)
const;
90 const RoutingModel& model_;
91 std::vector<int64_t> nexts_;
92 std::vector<int64_t> prevs_;
93 std::vector<int> route_sizes_;
106 virtual std::function<int64_t(int64_t)>
Ruin(
115 int num_neighbors_for_route_selection);
120 std::function<int64_t(int64_t)>
Ruin(
const Assignment* assignment)
override;
123 const RoutingModel& model_;
124 const RoutingModel::NodeNeighborsByCostClass*
const neighbors_manager_;
125 const size_t num_routes_;
127 std::uniform_int_distribution<int64_t> customer_dist_;
139 int num_neighbors_for_route_selection);
141 std::function<int64_t(int64_t)>
Ruin(
const Assignment* assignment)
override;
145 int64_t GetNextNodeToRemove(
const Assignment* assignment,
int node);
147 const RoutingModel& model_;
149 const RoutingModel::NodeNeighborsByCostClass*
const neighbors_manager_;
151 const int walk_length_;
152 std::uniform_int_distribution<int64_t> customer_dist_;
153 std::bernoulli_distribution boolean_dist_;
167 virtual const std::vector<RuinProcedure*>&
Select() = 0;
176 std::vector<std::unique_ptr<RuinProcedure>> ruin_procedures,
177 RuinCompositionStrategy::Value composition_strategy, std::mt19937* rnd);
179 std::function<int64_t(int64_t)>
Ruin(
const Assignment* assignment)
override;
183 const Assignment* BuildAssignmentFromNextAccessor(
184 const std::function<int64_t(int64_t)>& next_accessor);
186 const RoutingModel& model_;
187 std::vector<std::unique_ptr<RuinProcedure>> ruin_procedures_;
188 std::unique_ptr<CompositionStrategy> composition_strategy_;
213 int max_removed_sequence_size,
int avg_num_removed_visits,
214 double bypass_factor,
int num_neighbors);
216 std::function<int64_t(int64_t)>
Ruin(
const Assignment* assignment)
override;
219 int RuinRoute(
const Assignment& assignment, int64_t seed_visit,
220 double global_max_sequence_size);
223 void RuinRouteWithSequenceProcedure(int64_t seed_visit,
int sequence_size);
227 void RuinRouteWithSplitSequenceProcedure(int64_t route, int64_t seed_visit,
230 const RoutingModel& model_;
232 int max_removed_sequence_size_;
233 int avg_num_removed_visits_;
234 double bypass_factor_;
235 const RoutingModel::NodeNeighborsByCostClass*
const neighbors_manager_;
236 std::uniform_int_distribution<int64_t> customer_dist_;
237 std::bernoulli_distribution boolean_dist_;
238 std::uniform_real_distribution<double> probability_dist_;
246 const RoutingSearchParameters& parameters, RoutingModel* model,
247 std::mt19937* rnd,
const Assignment* assignment,
248 std::function<
bool()> stop_search,
272 const RoutingModel& model,
const RoutingSearchParameters& parameters,
278 const RoutingModel& model,
const SimulatedAnnealingParameters& sa_params,
CloseRoutesRemovalRuinProcedure(RoutingModel *model, std::mt19937 *rnd, size_t num_routes, int num_neighbors_for_route_selection)
std::function< int64_t(int64_t)> Ruin(const Assignment *assignment) override
std::vector< RuinProcedure * > ruins_
Contains ptrs to the available ruins.
CompositionStrategy(std::vector< RuinProcedure * > ruin_procedures)
virtual const std::vector< RuinProcedure * > & Select()=0
Returns the selected ruin procedures.
virtual ~CompositionStrategy()=default
CompositeRuinProcedure(RoutingModel *model, std::vector< std::unique_ptr< RuinProcedure > > ruin_procedures, RuinCompositionStrategy::Value composition_strategy, std::mt19937 *rnd)
std::function< int64_t(int64_t)> Ruin(const Assignment *assignment) override
Returns next accessors describing the ruined solution.
Neighbor acceptance criterion interface.
virtual ~NeighborAcceptanceCriterion()=default
virtual bool Accept(const SearchState &search_state, const Assignment *candidate, const Assignment *reference)=0
RandomWalkRemovalRuinProcedure(RoutingModel *model, std::mt19937 *rnd, int walk_length, int num_neighbors_for_route_selection)
std::function< int64_t(int64_t)> Ruin(const Assignment *assignment) override
Returns next accessors describing the ruined solution.
Wraps a routing assignment providing extra features.
int64_t GetInitializedPrevNodeIndex(int64_t node_index) const
bool CanBeRemoved(int64_t node_index) const
void RemoveNode(int64_t node_index)
void RemovePerformedPickupDeliverySibling(int64_t customer)
Removes the performed sibling pickup or delivery of customer, if any.
void Reset(const Assignment *assignment)
Initializes the routing solution for the given assignment.
int64_t GetRandomAdjacentVisit(int64_t visit, std::mt19937 &rnd, std::bernoulli_distribution &boolean_dist) const
void InitializeRouteInfoIfNeeded(int vehicle)
std::vector< int64_t > GetRandomSequenceOfVisits(int64_t seed_visit, std::mt19937 &rnd, std::bernoulli_distribution &boolean_dist, int size) const
RoutingSolution(const RoutingModel &model)
int64_t GetNextNodeIndex(int64_t node_index) const
Returns the next node index of the given node_index.
int GetRouteSize(int vehicle) const
bool BelongsToInitializedRoute(int64_t node_index) const
Returns whether node_index belongs to a route that has been initialized.
virtual ~RuinProcedure()=default
virtual std::function< int64_t(int64_t)> Ruin(const Assignment *assignment)=0
Returns next accessors describing the ruined solution.
SISRRuinProcedure(RoutingModel *model, std::mt19937 *rnd, int max_removed_sequence_size, int avg_num_removed_visits, double bypass_factor, int num_neighbors)
std::function< int64_t(int64_t)> Ruin(const Assignment *assignment) override
Returns next accessors describing the ruined solution.
In SWIG mode, we don't want anything besides these top-level includes.
std::pair< double, double > GetSimulatedAnnealingTemperatures(const RoutingModel &model, const SimulatedAnnealingParameters &sa_params, std::mt19937 *rnd)
DecisionBuilder * MakePerturbationDecisionBuilder(const RoutingSearchParameters ¶meters, RoutingModel *model, std::mt19937 *rnd, const Assignment *assignment, std::function< bool()> stop_search, LocalSearchFilterManager *filter_manager)
std::unique_ptr< NeighborAcceptanceCriterion > MakeNeighborAcceptanceCriterion(const RoutingModel &model, const RoutingSearchParameters ¶meters, std::mt19937 *rnd)
Returns a neighbor acceptance criterion based on the given parameters.
Representation of the search process state.
absl::Duration duration
Search duration.
int64_t solutions
Explored solutions.