Classes | |
| struct | CostClass |
| struct | StateDependentTransit |
| What follows is relevant for models with time/state dependent transits. More... | |
| struct | VehicleClass |
Public Types | |
| enum | Status { ROUTING_NOT_SOLVED, ROUTING_SUCCESS, ROUTING_FAIL, ROUTING_FAIL_TIMEOUT, ROUTING_INVALID } |
| Status of the search. More... | |
| enum | PickupAndDeliveryPolicy { PICKUP_AND_DELIVERY_NO_ORDER, PICKUP_AND_DELIVERY_LIFO, PICKUP_AND_DELIVERY_FIFO } |
| Types of precedence policy applied to pickup and delivery pairs. More... | |
| typedef RoutingCostClassIndex | CostClassIndex |
| typedef RoutingDimensionIndex | DimensionIndex |
| typedef RoutingDisjunctionIndex | DisjunctionIndex |
| typedef RoutingVehicleClassIndex | VehicleClassIndex |
| typedef RoutingTransitCallback1 | TransitCallback1 |
| typedef RoutingTransitCallback2 | TransitCallback2 |
| typedef RoutingIndexPair | IndexPair |
| typedef RoutingIndexPairs | IndexPairs |
| typedef std::function< StateDependentTransit(int64, int64)> | VariableIndexEvaluator2 |
| using | GetTabuVarsCallback = std::function< std::vector< operations_research::IntVar * >(RoutingModel *)> |
| Sets the callback returning the variable to use for the Tabu Search metaheuristic. More... | |
Public Member Functions | |
| RoutingModel (const RoutingIndexManager &index_manager) | |
| Constructor taking an index manager. More... | |
| RoutingModel (const RoutingIndexManager &index_manager, const RoutingModelParameters ¶meters) | |
| ~RoutingModel () | |
| int | RegisterUnaryTransitCallback (TransitCallback1 callback) |
| Registers 'callback' and returns its index. More... | |
| int | RegisterPositiveUnaryTransitCallback (TransitCallback1 callback) |
| int | RegisterTransitCallback (TransitCallback2 callback) |
| int | RegisterPositiveTransitCallback (TransitCallback2 callback) |
| int | RegisterStateDependentTransitCallback (VariableIndexEvaluator2 callback) |
| const TransitCallback2 & | TransitCallback (int callback_index) const |
| const TransitCallback1 & | UnaryTransitCallbackOrNull (int callback_index) const |
| const VariableIndexEvaluator2 & | StateDependentTransitCallback (int callback_index) const |
| bool | AddDimension (int evaluator_index, int64 slack_max, int64 capacity, bool fix_start_cumul_to_zero, const std::string &name) |
| Model creation. More... | |
| bool | AddDimensionWithVehicleTransits (const std::vector< int > &evaluator_indices, int64 slack_max, int64 capacity, bool fix_start_cumul_to_zero, const std::string &name) |
| bool | AddDimensionWithVehicleCapacity (int evaluator_index, int64 slack_max, std::vector< int64 > vehicle_capacities, bool fix_start_cumul_to_zero, const std::string &name) |
| bool | AddDimensionWithVehicleTransitAndCapacity (const std::vector< int > &evaluator_indices, int64 slack_max, std::vector< int64 > vehicle_capacities, bool fix_start_cumul_to_zero, const std::string &name) |
| bool | AddConstantDimensionWithSlack (int64 value, int64 capacity, int64 slack_max, bool fix_start_cumul_to_zero, const std::string &name) |
| Creates a dimension where the transit variable is constrained to be equal to 'value'; 'capacity' is the upper bound of the cumul variables. More... | |
| bool | AddConstantDimension (int64 value, int64 capacity, bool fix_start_cumul_to_zero, const std::string &name) |
| bool | AddVectorDimension (std::vector< int64 > values, int64 capacity, bool fix_start_cumul_to_zero, const std::string &name) |
| Creates a dimension where the transit variable is constrained to be equal to 'values[i]' for node i; 'capacity' is the upper bound of the cumul variables. More... | |
| bool | AddMatrixDimension (std::vector< std::vector< int64 >> values, int64 capacity, bool fix_start_cumul_to_zero, const std::string &name) |
| Creates a dimension where the transit variable is constrained to be equal to 'values[i][next(i)]' for node i; 'capacity' is the upper bound of the cumul variables. More... | |
| bool | AddDimensionDependentDimensionWithVehicleCapacity (const std::vector< int > &pure_transits, const std::vector< int > &dependent_transits, const RoutingDimension *base_dimension, int64 slack_max, std::vector< int64 > vehicle_capacities, bool fix_start_cumul_to_zero, const std::string &name) |
| Creates a dimension with transits depending on the cumuls of another dimension. More... | |
| bool | AddDimensionDependentDimensionWithVehicleCapacity (const std::vector< int > &transits, const RoutingDimension *base_dimension, int64 slack_max, std::vector< int64 > vehicle_capacities, bool fix_start_cumul_to_zero, const std::string &name) |
| As above, but pure_transits are taken to be zero evaluators. More... | |
| bool | AddDimensionDependentDimensionWithVehicleCapacity (int transit, const RoutingDimension *base_dimension, int64 slack_max, int64 vehicle_capacity, bool fix_start_cumul_to_zero, const std::string &name) |
| Homogeneous versions of the functions above. More... | |
| bool | AddDimensionDependentDimensionWithVehicleCapacity (int pure_transit, int dependent_transit, const RoutingDimension *base_dimension, int64 slack_max, int64 vehicle_capacity, bool fix_start_cumul_to_zero, const std::string &name) |
| Constraint * | MakePathSpansAndTotalSlacks (const RoutingDimension *dimension, std::vector< IntVar * > spans, std::vector< IntVar * > total_slacks) |
| For every vehicle of the routing model: More... | |
| std::vector<::std::string > | GetAllDimensionNames () const |
| Outputs the names of all dimensions added to the routing engine. More... | |
| const std::vector< RoutingDimension * > & | GetDimensions () const |
| Returns all dimensions of the model. More... | |
| std::vector< RoutingDimension * > | GetDimensionsWithSoftOrSpanCosts () const |
| Returns dimensions with soft or vehicle span costs. More... | |
| const std::vector< RoutingDimension * > & | GetDimensionsForGlobalCumulOptimizers () const |
| Returns dimensions_for_[global|local]_optimizer_ if the model has been closed, and empty vectors otherwise. More... | |
| const std::vector< RoutingDimension * > & | GetDimensionsForLocalCumulOptimizers () const |
| bool | HasDimension (const std::string &dimension_name) const |
| Returns true if a dimension exists for a given dimension name. More... | |
| const RoutingDimension & | GetDimensionOrDie (const std::string &dimension_name) const |
| Returns a dimension from its name. Dies if the dimension does not exist. More... | |
| RoutingDimension * | GetMutableDimension (const std::string &dimension_name) const |
| Returns a dimension from its name. More... | |
| void | SetPrimaryConstrainedDimension (const std::string &dimension_name) |
| Set the given dimension as "primary constrained". More... | |
| const std::string & | GetPrimaryConstrainedDimension () const |
| Get the primary constrained dimension, or an empty std::string if it is unset. More... | |
| DisjunctionIndex | AddDisjunction (const std::vector< int64 > &indices, int64 penalty=kNoPenalty, int64 max_cardinality=1) |
| Adds a disjunction constraint on the indices: exactly 'max_cardinality' of the indices are active. More... | |
| const std::vector< DisjunctionIndex > & | GetDisjunctionIndices (int64 index) const |
| Returns the indices of the disjunctions to which an index belongs. More... | |
| template<typename F > | |
| void | ForEachNodeInDisjunctionWithMaxCardinalityFromIndex (int64 index, int64 max_cardinality, F f) const |
| Calls f for each variable index of indices in the same disjunctions as the node corresponding to the variable index 'index'; only disjunctions of cardinality 'cardinality' are considered. More... | |
| const std::vector< int64 > & | GetDisjunctionIndices (DisjunctionIndex index) const |
| Returns the variable indices of the nodes in the disjunction of index 'index'. More... | |
| int64 | GetDisjunctionPenalty (DisjunctionIndex index) const |
| Returns the penalty of the node disjunction of index 'index'. More... | |
| int64 | GetDisjunctionMaxCardinality (DisjunctionIndex index) const |
| Returns the maximum number of possible active nodes of the node disjunction of index 'index'. More... | |
| int | GetNumberOfDisjunctions () const |
| Returns the number of node disjunctions in the model. More... | |
| std::vector< std::pair< int64, int64 > > | GetPerfectBinaryDisjunctions () const |
| Returns the list of all perfect binary disjunctions, as pairs of variable indices: a disjunction is "perfect" when its variables do not appear in any other disjunction. More... | |
| void | IgnoreDisjunctionsAlreadyForcedToZero () |
| SPECIAL: Makes the solver ignore all the disjunctions whose active variables are all trivially zero (i.e. More... | |
| void | AddSoftSameVehicleConstraint (const std::vector< int64 > &indices, int64 cost) |
| Adds a soft contraint to force a set of variable indices to be on the same vehicle. More... | |
| void | SetAllowedVehiclesForIndex (const std::vector< int > &vehicles, int64 index) |
| Sets the vehicles which can visit a given node. More... | |
| bool | IsVehicleAllowedForIndex (int vehicle, int64 index) |
| Returns true if a vehicle is allowed to visit a given node. More... | |
| void | AddPickupAndDelivery (int64 pickup, int64 delivery) |
| Notifies that index1 and index2 form a pair of nodes which should belong to the same route. More... | |
| void | AddPickupAndDeliverySets (DisjunctionIndex pickup_disjunction, DisjunctionIndex delivery_disjunction) |
| Same as AddPickupAndDelivery but notifying that the performed node from the disjunction of index 'pickup_disjunction' is on the same route as the performed node from the disjunction of index 'delivery_disjunction'. More... | |
| const std::vector< std::pair< int, int > > & | GetPickupIndexPairs (int64 node_index) const |
| Returns pairs for which the node is a pickup; the first element of each pair is the index in the pickup and delivery pairs list in which the pickup appears, the second element is its index in the pickups list. More... | |
| const std::vector< std::pair< int, int > > & | GetDeliveryIndexPairs (int64 node_index) const |
| Same as above for deliveries. More... | |
| void | SetPickupAndDeliveryPolicyOfAllVehicles (PickupAndDeliveryPolicy policy) |
| Sets the Pickup and delivery policy of all vehicles. More... | |
| void | SetPickupAndDeliveryPolicyOfVehicle (PickupAndDeliveryPolicy policy, int vehicle) |
| PickupAndDeliveryPolicy | GetPickupAndDeliveryPolicyOfVehicle (int vehicle) const |
| int | GetNumOfSingletonNodes () const |
| Returns the number of non-start/end nodes which do not appear in a pickup/delivery pair. More... | |
| const IndexPairs & | GetPickupAndDeliveryPairs () const |
| Returns pickup and delivery pairs currently in the model. More... | |
| const std::vector< std::pair< DisjunctionIndex, DisjunctionIndex > > & | GetPickupAndDeliveryDisjunctions () const |
| void | SetVisitType (int64 index, int type) |
| Set the node visit types and incompatibilities/requirements between the types (see below). More... | |
| int | GetVisitType (int64 index) const |
| void | CloseVisitTypes () |
| This function should be called once all node visit types have been set and prior to adding any incompatibilities/requirements. More... | |
| int | GetNumberOfVisitTypes () const |
| void | AddHardTypeIncompatibility (int type1, int type2) |
| Incompatibilities: Two nodes with "hard" incompatible types cannot share the same route at all, while with a "temporal" incompatibility they can't be on the same route at the same time. More... | |
| void | AddTemporalTypeIncompatibility (int type1, int type2) |
| const absl::flat_hash_set< int > & | GetHardTypeIncompatibilitiesOfType (int type) const |
| Returns visit types incompatible with a given type. More... | |
| const absl::flat_hash_set< int > & | GetTemporalTypeIncompatibilitiesOfType (int type) const |
| bool | HasHardTypeIncompatibilities () const |
| Returns true iff any hard (resp. More... | |
| bool | HasTemporalTypeIncompatibilities () const |
| void | AddSameVehicleRequiredTypeAlternatives (int dependent_type, absl::flat_hash_set< int > required_type_alternatives) |
| Requirements: NOTE: As of 2019-04, cycles in the requirement graph are not supported, and lead to the dependent nodes being skipped if possible (otherwise the model is considered infeasible). More... | |
| void | AddTemporalRequiredTypeAlternatives (int dependent_type, absl::flat_hash_set< int > required_type_alternatives) |
| If type_D temporally depends on type_R, any non-delivery node_D of type_D requires at least one non-delivered node of type_R on its vehicle at the time node_D is visited. More... | |
| const std::vector< absl::flat_hash_set< int > > & | GetSameVehicleRequiredTypeAlternativesOfType (int type) const |
| Returns the sets of same-vehicle/temporal requirement alternatives for the given type. More... | |
| const std::vector< absl::flat_hash_set< int > > & | GetTemporalRequiredTypeAlternativesOfType (int type) const |
| bool | HasSameVehicleTypeRequirements () const |
| Returns true iff any same-route (resp. More... | |
| bool | HasTemporalTypeRequirements () const |
| bool | HasTypeRegulations () const |
| Returns true iff the model has any incompatibilities or requirements set on node types. More... | |
| int64 | UnperformedPenalty (int64 var_index) const |
| Get the "unperformed" penalty of a node. More... | |
| int64 | UnperformedPenaltyOrValue (int64 default_value, int64 var_index) const |
| Same as above except that it returns default_value instead of 0 when penalty is not well defined (default value is passed as first argument to simplify the usage of the method in a callback). More... | |
| int64 | GetDepot () const |
| Returns the variable index of the first starting or ending node of all routes. More... | |
| void | SetArcCostEvaluatorOfAllVehicles (int evaluator_index) |
| Sets the cost function of the model such that the cost of a segment of a route between node 'from' and 'to' is evaluator(from, to), whatever the route or vehicle performing the route. More... | |
| void | SetArcCostEvaluatorOfVehicle (int evaluator_index, int vehicle) |
| Sets the cost function for a given vehicle route. More... | |
| void | SetFixedCostOfAllVehicles (int64 cost) |
| Sets the fixed cost of all vehicle routes. More... | |
| void | SetFixedCostOfVehicle (int64 cost, int vehicle) |
| Sets the fixed cost of one vehicle route. More... | |
| int64 | GetFixedCostOfVehicle (int vehicle) const |
| Returns the route fixed cost taken into account if the route of the vehicle is not empty, aka there's at least one node on the route other than the first and last nodes. More... | |
| void | SetAmortizedCostFactorsOfAllVehicles (int64 linear_cost_factor, int64 quadratic_cost_factor) |
| The following methods set the linear and quadratic cost factors of vehicles (must be positive values). More... | |
| void | SetAmortizedCostFactorsOfVehicle (int64 linear_cost_factor, int64 quadratic_cost_factor, int vehicle) |
| Sets the linear and quadratic cost factor of the given vehicle. More... | |
| const std::vector< int64 > & | GetAmortizedLinearCostFactorOfVehicles () const |
| const std::vector< int64 > & | GetAmortizedQuadraticCostFactorOfVehicles () const |
| void | ConsiderEmptyRouteCostsForVehicle (bool consider_costs, int vehicle) |
| bool | AreEmptyRouteCostsConsideredForVehicle (int vehicle) const |
| const Solver::IndexEvaluator2 & | first_solution_evaluator () const |
| Gets/sets the evaluator used during the search. More... | |
| void | SetFirstSolutionEvaluator (Solver::IndexEvaluator2 evaluator) |
| Takes ownership of evaluator. More... | |
| void | AddLocalSearchOperator (LocalSearchOperator *ls_operator) |
| Adds a local search operator to the set of operators used to solve the vehicle routing problem. More... | |
| void | AddSearchMonitor (SearchMonitor *const monitor) |
| Adds a search monitor to the search used to solve the routing model. More... | |
| void | AddAtSolutionCallback (std::function< void()> callback) |
| Adds a callback called each time a solution is found during the search. More... | |
| void | AddVariableMinimizedByFinalizer (IntVar *var) |
| Adds a variable to minimize in the solution finalizer. More... | |
| void | AddVariableMaximizedByFinalizer (IntVar *var) |
| Adds a variable to maximize in the solution finalizer (see above for information on the solution finalizer). More... | |
| void | AddWeightedVariableMinimizedByFinalizer (IntVar *var, int64 cost) |
| Adds a variable to minimize in the solution finalizer, with a weighted priority: the higher the more priority it has. More... | |
| void | AddVariableTargetToFinalizer (IntVar *var, int64 target) |
| Add a variable to set the closest possible to the target value in the solution finalizer. More... | |
| void | CloseModel () |
| Closes the current routing model; after this method is called, no modification to the model can be done, but RoutesToAssignment becomes available. More... | |
| void | CloseModelWithParameters (const RoutingSearchParameters &search_parameters) |
| Same as above taking search parameters (as of 10/2015 some the parameters have to be set when closing the model). More... | |
| const Assignment * | Solve (const Assignment *assignment=nullptr) |
| Solves the current routing model; closes the current model. More... | |
| const Assignment * | SolveWithParameters (const RoutingSearchParameters &search_parameters, std::vector< const Assignment * > *solutions=nullptr) |
| Solves the current routing model with the given parameters. More... | |
| const Assignment * | SolveFromAssignmentWithParameters (const Assignment *assignment, const RoutingSearchParameters &search_parameters, std::vector< const Assignment * > *solutions=nullptr) |
| void | SetAssignmentFromOtherModelAssignment (Assignment *target_assignment, const RoutingModel *source_model, const Assignment *source_assignment) |
| Given a "source_model" and its "source_assignment", resets "target_assignment" with the IntVar variables (nexts_, and vehicle_vars_ if costs aren't homogeneous across vehicles) of "this" model, with the values set according to those in "other_assignment". More... | |
| int64 | ComputeLowerBound () |
| Computes a lower bound to the routing problem solving a linear assignment problem. More... | |
| Status | status () const |
| Returns the current status of the routing model. More... | |
| IntVar * | ApplyLocks (const std::vector< int64 > &locks) |
| Applies a lock chain to the next search. More... | |
| bool | ApplyLocksToAllVehicles (const std::vector< std::vector< int64 >> &locks, bool close_routes) |
| Applies lock chains to all vehicles to the next search, such that locks[p] is the lock chain for route p. More... | |
| const Assignment *const | PreAssignment () const |
| Returns an assignment used to fix some of the variables of the problem. More... | |
| Assignment * | MutablePreAssignment () |
| bool | WriteAssignment (const std::string &file_name) const |
| Writes the current solution to a file containing an AssignmentProto. More... | |
| Assignment * | ReadAssignment (const std::string &file_name) |
| Reads an assignment from a file and returns the current solution. More... | |
| Assignment * | RestoreAssignment (const Assignment &solution) |
| Restores an assignment as a solution in the routing model and returns the new solution. More... | |
| Assignment * | ReadAssignmentFromRoutes (const std::vector< std::vector< int64 >> &routes, bool ignore_inactive_indices) |
| Restores the routes as the current solution. More... | |
| bool | RoutesToAssignment (const std::vector< std::vector< int64 >> &routes, bool ignore_inactive_indices, bool close_routes, Assignment *const assignment) const |
| Fills an assignment from a specification of the routes of the vehicles. More... | |
| void | AssignmentToRoutes (const Assignment &assignment, std::vector< std::vector< int64 >> *const routes) const |
| Converts the solution in the given assignment to routes for all vehicles. More... | |
| Assignment * | CompactAssignment (const Assignment &assignment) const |
| Returns a compacted version of the given assignment, in which all vehicles with id lower or equal to some N have non-empty routes, and all vehicles with id greater than N have empty routes. More... | |
| Assignment * | CompactAndCheckAssignment (const Assignment &assignment) const |
| Same as CompactAssignment() but also checks the validity of the final compact solution; if it is not valid, no attempts to repair it are made (instead, the method returns nullptr). More... | |
| void | AddToAssignment (IntVar *const var) |
| Adds an extra variable to the vehicle routing assignment. More... | |
| void | AddIntervalToAssignment (IntervalVar *const interval) |
| const Assignment * | PackCumulsOfOptimizerDimensionsFromAssignment (const Assignment *original_assignment, absl::Duration duration_limit) |
| For every dimension in the model's dimensions_for_local/global_optimizer_, this method tries to pack the cumul values of the dimension, such that: More... | |
| void | SetSweepArranger (SweepArranger *sweep_arranger) |
| SweepArranger * | sweep_arranger () const |
| Returns the sweep arranger to be used by routing heuristics. More... | |
| void | AddLocalSearchFilter (LocalSearchFilter *filter) |
| Adds a custom local search filter to the list of filters used to speed up local search by pruning unfeasible variable assignments. More... | |
| int64 | Start (int vehicle) const |
| Model inspection. More... | |
| int64 | End (int vehicle) const |
| Returns the variable index of the ending node of a vehicle route. More... | |
| bool | IsStart (int64 index) const |
| Returns true if 'index' represents the first node of a route. More... | |
| bool | IsEnd (int64 index) const |
| Returns true if 'index' represents the last node of a route. More... | |
| int | VehicleIndex (int index) const |
| Returns the vehicle of the given start/end index, and -1 if the given index is not a vehicle start/end. More... | |
| int64 | Next (const Assignment &assignment, int64 index) const |
| Assignment inspection Returns the variable index of the node directly after the node corresponding to 'index' in 'assignment'. More... | |
| bool | IsVehicleUsed (const Assignment &assignment, int vehicle) const |
| Returns true if the route of 'vehicle' is non empty in 'assignment'. More... | |
| const std::vector< IntVar * > & | Nexts () const |
| Returns all next variables of the model, such that Nexts(i) is the next variable of the node corresponding to i. More... | |
| const std::vector< IntVar * > & | VehicleVars () const |
| Returns all vehicle variables of the model, such that VehicleVars(i) is the vehicle variable of the node corresponding to i. More... | |
| IntVar * | NextVar (int64 index) const |
| !defined(SWIGPYTHON) More... | |
| IntVar * | ActiveVar (int64 index) const |
| Returns the active variable of the node corresponding to index. More... | |
| IntVar * | VehicleCostsConsideredVar (int vehicle) const |
| Returns the variable specifying whether or not costs are considered for vehicle. More... | |
| IntVar * | VehicleVar (int64 index) const |
| Returns the vehicle variable of the node corresponding to index. More... | |
| IntVar * | CostVar () const |
| Returns the global cost variable which is being minimized. More... | |
| int64 | GetArcCostForVehicle (int64 from_index, int64 to_index, int64 vehicle) const |
| Returns the cost of the transit arc between two nodes for a given vehicle. More... | |
| bool | CostsAreHomogeneousAcrossVehicles () const |
| Whether costs are homogeneous across all vehicles. More... | |
| int64 | GetHomogeneousCost (int64 from_index, int64 to_index) const |
| Returns the cost of the segment between two nodes supposing all vehicle costs are the same (returns the cost for the first vehicle otherwise). More... | |
| int64 | GetArcCostForFirstSolution (int64 from_index, int64 to_index) const |
| Returns the cost of the arc in the context of the first solution strategy. More... | |
| int64 | GetArcCostForClass (int64 from_index, int64 to_index, int64 cost_class_index) const |
| Returns the cost of the segment between two nodes for a given cost class. More... | |
| CostClassIndex | GetCostClassIndexOfVehicle (int64 vehicle) const |
| Get the cost class index of the given vehicle. More... | |
| bool | HasVehicleWithCostClassIndex (CostClassIndex cost_class_index) const |
| Returns true iff the model contains a vehicle with the given cost_class_index. More... | |
| int | GetCostClassesCount () const |
| Returns the number of different cost classes in the model. More... | |
| int | GetNonZeroCostClassesCount () const |
| Ditto, minus the 'always zero', built-in cost class. More... | |
| VehicleClassIndex | GetVehicleClassIndexOfVehicle (int64 vehicle) const |
| int | GetVehicleClassesCount () const |
| Returns the number of different vehicle classes in the model. More... | |
| const std::vector< int > & | GetSameVehicleIndicesOfIndex (int node) const |
| Returns variable indices of nodes constrained to be on the same route. More... | |
| bool | ArcIsMoreConstrainedThanArc (int64 from, int64 to1, int64 to2) |
| Returns whether the arc from->to1 is more constrained than from->to2, taking into account, in order: More... | |
| std::string | DebugOutputAssignment (const Assignment &solution_assignment, const std::string &dimension_to_print) const |
| Print some debugging information about an assignment, including the feasible intervals of the CumulVar for dimension "dimension_to_print" at each step of the routes. More... | |
| Solver * | solver () const |
| Returns the underlying constraint solver. More... | |
| bool | CheckLimit () |
| Returns true if the search limit has been crossed. More... | |
| absl::Duration | RemainingTime () const |
| Returns the time left in the search limit. More... | |
| int | nodes () const |
| Sizes and indices Returns the number of nodes in the model. More... | |
| int | vehicles () const |
| Returns the number of vehicle routes in the model. More... | |
| int64 | Size () const |
| Returns the number of next variables in the model. More... | |
| int64 | GetNumberOfDecisionsInFirstSolution (const RoutingSearchParameters &search_parameters) const |
| Returns statistics on first solution search, number of decisions sent to filters, number of decisions rejected by filters. More... | |
| int64 | GetNumberOfRejectsInFirstSolution (const RoutingSearchParameters &search_parameters) const |
| bool | IsMatchingModel () const |
| Returns true if a vehicle/node matching problem is detected. More... | |
| void | SetTabuVarsCallback (GetTabuVarsCallback tabu_var_callback) |
| DecisionBuilder * | MakeGuidedSlackFinalizer (const RoutingDimension *dimension, std::function< int64(int64)> initializer) |
| The next few members are in the public section only for testing purposes. More... | |
| DecisionBuilder * | MakeSelfDependentDimensionFinalizer (const RoutingDimension *dimension) |
| SWIG More... | |
Static Public Member Functions | |
| static RoutingModel::StateDependentTransit | MakeStateDependentTransit (const std::function< int64(int64)> &f, int64 domain_start, int64 domain_end) |
| Creates a cached StateDependentTransit from an std::function. More... | |
| static std::unique_ptr< LocalSearchOperator > | MakeGreedyDescentLSOperator (std::vector< IntVar * > variables) |
| Perhaps move it to constraint_solver.h. More... | |
Static Public Attributes | |
| static const int64 | kNoPenalty |
| Constant used to express a hard constraint instead of a soft penalty. More... | |
| static const DisjunctionIndex | kNoDisjunction |
| Constant used to express the "no disjunction" index, returned when a node does not appear in any disjunction. More... | |
| static const DimensionIndex | kNoDimension |
| Constant used to express the "no dimension" index, returned when a dimension name does not correspond to an actual dimension. More... | |
Friends | |
| class | RoutingDimension |
| class | RoutingModelInspector |
| typedef RoutingCostClassIndex operations_research::RoutingModel::CostClassIndex |
| typedef RoutingDimensionIndex operations_research::RoutingModel::DimensionIndex |
| typedef RoutingDisjunctionIndex operations_research::RoutingModel::DisjunctionIndex |
| using operations_research::RoutingModel::GetTabuVarsCallback = std::function<std::vector<operations_research::IntVar*>(RoutingModel*)> |
| typedef std::function<StateDependentTransit(int64, int64)> operations_research::RoutingModel::VariableIndexEvaluator2 |
| typedef RoutingVehicleClassIndex operations_research::RoutingModel::VehicleClassIndex |
Status of the search.
| Enumerator | |
|---|---|
| ROUTING_NOT_SOLVED | Problem not solved yet (before calling RoutingModel::Solve()). |
| ROUTING_SUCCESS | Problem solved successfully after calling RoutingModel::Solve(). |
| ROUTING_FAIL | No solution found to the problem after calling RoutingModel::Solve(). |
| ROUTING_FAIL_TIMEOUT | Time limit reached before finding a solution with RoutingModel::Solve(). |
| ROUTING_INVALID | Model, model parameters or flags are not valid. |
|
explicit |
Constructor taking an index manager.
The version which does not take RoutingModelParameters is equivalent to passing DefaultRoutingModelParameters().
| operations_research::RoutingModel::RoutingModel | ( | const RoutingIndexManager & | index_manager, |
| const RoutingModelParameters & | parameters | ||
| ) |
| operations_research::RoutingModel::~RoutingModel | ( | ) |
|
inline |
| void operations_research::RoutingModel::AddAtSolutionCallback | ( | std::function< void()> | callback | ) |
Adds a callback called each time a solution is found during the search.
This is a shortcut to creating a monitor to call the callback on AtSolution() and adding it with AddSearchMonitor.
|
inline |
| bool operations_research::RoutingModel::AddConstantDimensionWithSlack | ( | int64 | value, |
| int64 | capacity, | ||
| int64 | slack_max, | ||
| bool | fix_start_cumul_to_zero, | ||
| const std::string & | name | ||
| ) |
Creates a dimension where the transit variable is constrained to be equal to 'value'; 'capacity' is the upper bound of the cumul variables.
'name' is the name used to reference the dimension; this name is used to get cumul and transit variables from the routing model. Returns false if a dimension with the same name has already been created (and doesn't create the new dimension).
| bool operations_research::RoutingModel::AddDimension | ( | int | evaluator_index, |
| int64 | slack_max, | ||
| int64 | capacity, | ||
| bool | fix_start_cumul_to_zero, | ||
| const std::string & | name | ||
| ) |
Model creation.
Methods to add dimensions to routes; dimensions represent quantities accumulated at nodes along the routes. They represent quantities such as weights or volumes carried along the route, or distance or times. Quantities at a node are represented by "cumul" variables and the increase or decrease of quantities between nodes are represented by "transit" variables. These variables are linked as follows: if j == next(i), cumul(j) = cumul(i) + transit(i) + slack(i) where slack is a positive slack variable (can represent waiting times for a time dimension). Setting the value of fix_start_cumul_to_zero to true will force the "cumul" variable of the start node of all vehicles to be equal to 0. Creates a dimension where the transit variable is constrained to be equal to evaluator(i, next(i)); 'slack_max' is the upper bound of the slack variable and 'capacity' is the upper bound of the cumul variables. 'name' is the name used to reference the dimension; this name is used to get cumul and transit variables from the routing model. Returns false if a dimension with the same name has already been created (and doesn't create the new dimension). Takes ownership of the callback 'evaluator'.
|
inline |
Creates a dimension with transits depending on the cumuls of another dimension.
'pure_transits' are the per-vehicle fixed transits as above. 'dependent_transits' is a vector containing for each vehicle an index to a registered state dependent transit callback. 'base_dimension' indicates the dimension from which the cumul variable is taken. If 'base_dimension' is nullptr, then the newly created dimension is self-based.
| bool operations_research::RoutingModel::AddDimensionDependentDimensionWithVehicleCapacity | ( | const std::vector< int > & | transits, |
| const RoutingDimension * | base_dimension, | ||
| int64 | slack_max, | ||
| std::vector< int64 > | vehicle_capacities, | ||
| bool | fix_start_cumul_to_zero, | ||
| const std::string & | name | ||
| ) |
As above, but pure_transits are taken to be zero evaluators.
| bool operations_research::RoutingModel::AddDimensionDependentDimensionWithVehicleCapacity | ( | int | transit, |
| const RoutingDimension * | base_dimension, | ||
| int64 | slack_max, | ||
| int64 | vehicle_capacity, | ||
| bool | fix_start_cumul_to_zero, | ||
| const std::string & | name | ||
| ) |
Homogeneous versions of the functions above.
| bool operations_research::RoutingModel::AddDimensionDependentDimensionWithVehicleCapacity | ( | int | pure_transit, |
| int | dependent_transit, | ||
| const RoutingDimension * | base_dimension, | ||
| int64 | slack_max, | ||
| int64 | vehicle_capacity, | ||
| bool | fix_start_cumul_to_zero, | ||
| const std::string & | name | ||
| ) |
| bool operations_research::RoutingModel::AddDimensionWithVehicleCapacity | ( | int | evaluator_index, |
| int64 | slack_max, | ||
| std::vector< int64 > | vehicle_capacities, | ||
| bool | fix_start_cumul_to_zero, | ||
| const std::string & | name | ||
| ) |
| bool operations_research::RoutingModel::AddDimensionWithVehicleTransitAndCapacity | ( | const std::vector< int > & | evaluator_indices, |
| int64 | slack_max, | ||
| std::vector< int64 > | vehicle_capacities, | ||
| bool | fix_start_cumul_to_zero, | ||
| const std::string & | name | ||
| ) |
| bool operations_research::RoutingModel::AddDimensionWithVehicleTransits | ( | const std::vector< int > & | evaluator_indices, |
| int64 | slack_max, | ||
| int64 | capacity, | ||
| bool | fix_start_cumul_to_zero, | ||
| const std::string & | name | ||
| ) |
| DisjunctionIndex operations_research::RoutingModel::AddDisjunction | ( | const std::vector< int64 > & | indices, |
| int64 | penalty = kNoPenalty, |
||
| int64 | max_cardinality = 1 |
||
| ) |
Adds a disjunction constraint on the indices: exactly 'max_cardinality' of the indices are active.
Start and end indices of any vehicle cannot be part of a disjunction.
If a penalty is given, at most 'max_cardinality' of the indices can be active, and if less are active, 'penalty' is payed per inactive index. This is equivalent to adding the constraint: p + Sum(i)active[i] == max_cardinality where p is an integer variable, and the following cost to the cost function: p * penalty. 'penalty' must be positive to make the disjunction optional; a negative penalty will force 'max_cardinality' indices of the disjunction to be performed, and therefore p == 0. Note: passing a vector with a single index will model an optional index with a penalty cost if it is not visited.
| void operations_research::RoutingModel::AddHardTypeIncompatibility | ( | int | type1, |
| int | type2 | ||
| ) |
Incompatibilities: Two nodes with "hard" incompatible types cannot share the same route at all, while with a "temporal" incompatibility they can't be on the same route at the same time.
| void operations_research::RoutingModel::AddIntervalToAssignment | ( | IntervalVar *const | interval | ) |
|
inline |
Adds a custom local search filter to the list of filters used to speed up local search by pruning unfeasible variable assignments.
Calling this method after the routing model has been closed (CloseModel() or Solve() has been called) has no effect. The routing model does not take ownership of the filter.
| void operations_research::RoutingModel::AddLocalSearchOperator | ( | LocalSearchOperator * | ls_operator | ) |
Adds a local search operator to the set of operators used to solve the vehicle routing problem.
| bool operations_research::RoutingModel::AddMatrixDimension | ( | std::vector< std::vector< int64 >> | values, |
| int64 | capacity, | ||
| bool | fix_start_cumul_to_zero, | ||
| const std::string & | name | ||
| ) |
Creates a dimension where the transit variable is constrained to be equal to 'values[i][next(i)]' for node i; 'capacity' is the upper bound of the cumul variables.
'name' is the name used to reference the dimension; this name is used to get cumul and transit variables from the routing model. Returns false if a dimension with the same name has already been created (and doesn't create the new dimension).
| void operations_research::RoutingModel::AddPickupAndDelivery | ( | int64 | pickup, |
| int64 | delivery | ||
| ) |
Notifies that index1 and index2 form a pair of nodes which should belong to the same route.
This methods helps the search find better solutions, especially in the local search phase. It should be called each time you have an equality constraint linking the vehicle variables of two node (including for instance pickup and delivery problems): Solver* const solver = routing.solver(); int64 index1 = manager.NodeToIndex(node1); int64 index2 = manager.NodeToIndex(node2); solver->AddConstraint(solver->MakeEquality( routing.VehicleVar(index1), routing.VehicleVar(index2))); routing.AddPickupAndDelivery(index1, index2);
| void operations_research::RoutingModel::AddPickupAndDeliverySets | ( | DisjunctionIndex | pickup_disjunction, |
| DisjunctionIndex | delivery_disjunction | ||
| ) |
Same as AddPickupAndDelivery but notifying that the performed node from the disjunction of index 'pickup_disjunction' is on the same route as the performed node from the disjunction of index 'delivery_disjunction'.
| void operations_research::RoutingModel::AddSameVehicleRequiredTypeAlternatives | ( | int | dependent_type, |
| absl::flat_hash_set< int > | required_type_alternatives | ||
| ) |
Requirements: NOTE: As of 2019-04, cycles in the requirement graph are not supported, and lead to the dependent nodes being skipped if possible (otherwise the model is considered infeasible).
The following functions specify that "dependent_type" requires at least one of the types in "required_type_alternatives".
For same-vehicle requirements, a node of dependent type type_D requires at least one node of type type_R among the required alternatives on the same route.
| void operations_research::RoutingModel::AddSearchMonitor | ( | SearchMonitor *const | monitor | ) |
Adds a search monitor to the search used to solve the routing model.
| void operations_research::RoutingModel::AddSoftSameVehicleConstraint | ( | const std::vector< int64 > & | indices, |
| int64 | cost | ||
| ) |
Adds a soft contraint to force a set of variable indices to be on the same vehicle.
If all nodes are not on the same vehicle, each extra vehicle used adds 'cost' to the cost function.
| void operations_research::RoutingModel::AddTemporalRequiredTypeAlternatives | ( | int | dependent_type, |
| absl::flat_hash_set< int > | required_type_alternatives | ||
| ) |
If type_D temporally depends on type_R, any non-delivery node_D of type_D requires at least one non-delivered node of type_R on its vehicle at the time node_D is visited.
| void operations_research::RoutingModel::AddTemporalTypeIncompatibility | ( | int | type1, |
| int | type2 | ||
| ) |
| void operations_research::RoutingModel::AddToAssignment | ( | IntVar *const | var | ) |
Adds an extra variable to the vehicle routing assignment.
| void operations_research::RoutingModel::AddVariableMaximizedByFinalizer | ( | IntVar * | var | ) |
Adds a variable to maximize in the solution finalizer (see above for information on the solution finalizer).
| void operations_research::RoutingModel::AddVariableMinimizedByFinalizer | ( | IntVar * | var | ) |
Adds a variable to minimize in the solution finalizer.
The solution finalizer is called each time a solution is found during the search and allows to instantiate secondary variables (such as dimension cumul variables).
| void operations_research::RoutingModel::AddVariableTargetToFinalizer | ( | IntVar * | var, |
| int64 | target | ||
| ) |
Add a variable to set the closest possible to the target value in the solution finalizer.
| bool operations_research::RoutingModel::AddVectorDimension | ( | std::vector< int64 > | values, |
| int64 | capacity, | ||
| bool | fix_start_cumul_to_zero, | ||
| const std::string & | name | ||
| ) |
Creates a dimension where the transit variable is constrained to be equal to 'values[i]' for node i; 'capacity' is the upper bound of the cumul variables.
'name' is the name used to reference the dimension; this name is used to get cumul and transit variables from the routing model. Returns false if a dimension with the same name has already been created (and doesn't create the new dimension).
| void operations_research::RoutingModel::AddWeightedVariableMinimizedByFinalizer | ( | IntVar * | var, |
| int64 | cost | ||
| ) |
Adds a variable to minimize in the solution finalizer, with a weighted priority: the higher the more priority it has.
| IntVar* operations_research::RoutingModel::ApplyLocks | ( | const std::vector< int64 > & | locks | ) |
Applies a lock chain to the next search.
'locks' represents an ordered vector of nodes representing a partial route which will be fixed during the next search; it will constrain next variables such that: next[locks[i]] == locks[i+1].
Returns the next variable at the end of the locked chain; this variable is not locked. An assignment containing the locks can be obtained by calling PreAssignment().
| bool operations_research::RoutingModel::ApplyLocksToAllVehicles | ( | const std::vector< std::vector< int64 >> & | locks, |
| bool | close_routes | ||
| ) |
Applies lock chains to all vehicles to the next search, such that locks[p] is the lock chain for route p.
Returns false if the locks do not contain valid routes; expects that the routes do not contain the depots, i.e. there are empty vectors in place of empty routes. If close_routes is set to true, adds the end nodes to the route of each vehicle and deactivates other nodes. An assignment containing the locks can be obtained by calling PreAssignment().
| bool operations_research::RoutingModel::ArcIsMoreConstrainedThanArc | ( | int64 | from, |
| int64 | to1, | ||
| int64 | to2 | ||
| ) |
Returns whether the arc from->to1 is more constrained than from->to2, taking into account, in order:
|
inline |
| void operations_research::RoutingModel::AssignmentToRoutes | ( | const Assignment & | assignment, |
| std::vector< std::vector< int64 >> *const | routes | ||
| ) | const |
Converts the solution in the given assignment to routes for all vehicles.
Expects that assignment contains a valid solution (i.e. routes for all vehicles end with an end index for that vehicle).
|
inline |
| void operations_research::RoutingModel::CloseModel | ( | ) |
Closes the current routing model; after this method is called, no modification to the model can be done, but RoutesToAssignment becomes available.
Note that CloseModel() is automatically called by Solve() and other methods that produce solution. This is equivalent to calling CloseModelWithParameters(DefaultRoutingSearchParameters()).
| void operations_research::RoutingModel::CloseModelWithParameters | ( | const RoutingSearchParameters & | search_parameters | ) |
Same as above taking search parameters (as of 10/2015 some the parameters have to be set when closing the model).
| void operations_research::RoutingModel::CloseVisitTypes | ( | ) |
This function should be called once all node visit types have been set and prior to adding any incompatibilities/requirements.
"close" types.
| Assignment* operations_research::RoutingModel::CompactAndCheckAssignment | ( | const Assignment & | assignment | ) | const |
Same as CompactAssignment() but also checks the validity of the final compact solution; if it is not valid, no attempts to repair it are made (instead, the method returns nullptr).
| Assignment* operations_research::RoutingModel::CompactAssignment | ( | const Assignment & | assignment | ) | const |
Returns a compacted version of the given assignment, in which all vehicles with id lower or equal to some N have non-empty routes, and all vehicles with id greater than N have empty routes.
Does not take ownership of the returned object. If found, the cost of the compact assignment is the same as in the original assignment and it preserves the values of 'active' variables. Returns nullptr if a compact assignment was not found. This method only works in homogenous mode, and it only swaps equivalent vehicles (vehicles with the same start and end nodes). When creating the compact assignment, the empty plan is replaced by the route assigned to the compatible vehicle with the highest id. Note that with more complex constraints on vehicle variables, this method might fail even if a compact solution exists. This method changes the vehicle and dimension variables as necessary. While compacting the solution, only basic checks on vehicle variables are performed; if one of these checks fails no attempts to repair it are made (instead, the method returns nullptr).
| int64 operations_research::RoutingModel::ComputeLowerBound | ( | ) |
Computes a lower bound to the routing problem solving a linear assignment problem.
The routing model must be closed before calling this method. Note that problems with node disjunction constraints (including optional nodes) and non-homogenous costs are not supported (the method returns 0 in these cases).
|
inline |
|
inline |
|
inline |
| std::string operations_research::RoutingModel::DebugOutputAssignment | ( | const Assignment & | solution_assignment, |
| const std::string & | dimension_to_print | ||
| ) | const |
Print some debugging information about an assignment, including the feasible intervals of the CumulVar for dimension "dimension_to_print" at each step of the routes.
If "dimension_to_print" is omitted, all dimensions will be printed.
|
inline |
|
inline |
Gets/sets the evaluator used during the search.
Only relevant when RoutingSearchParameters.first_solution_strategy = EVALUATOR_STRATEGY.
|
inline |
| std::vector<::std::string> operations_research::RoutingModel::GetAllDimensionNames | ( | ) | const |
Outputs the names of all dimensions added to the routing engine.
|
inline |
|
inline |
| int64 operations_research::RoutingModel::GetArcCostForClass | ( | int64 | from_index, |
| int64 | to_index, | ||
| int64 | cost_class_index | ||
| ) | const |
Returns the cost of the segment between two nodes for a given cost class.
Input are variable indices of nodes and the cost class. Unlike GetArcCostForVehicle(), if cost_class is kNoCost, then the returned cost won't necessarily be zero: only some of the components of the cost that depend on the cost class will be omited. See the code for details.
| int64 operations_research::RoutingModel::GetArcCostForFirstSolution | ( | int64 | from_index, |
| int64 | to_index | ||
| ) | const |
Returns the cost of the arc in the context of the first solution strategy.
This is typically a simplification of the actual cost; see the .cc.
| int64 operations_research::RoutingModel::GetArcCostForVehicle | ( | int64 | from_index, |
| int64 | to_index, | ||
| int64 | vehicle | ||
| ) | const |
Returns the cost of the transit arc between two nodes for a given vehicle.
Input are variable indices of node. This returns 0 if vehicle < 0.
|
inline |
|
inline |
| const std::vector<std::pair<int, int> >& operations_research::RoutingModel::GetDeliveryIndexPairs | ( | int64 | node_index | ) | const |
Same as above for deliveries.
| int64 operations_research::RoutingModel::GetDepot | ( | ) | const |
Returns the variable index of the first starting or ending node of all routes.
If all routes start and end at the same node (single depot), this is the node returned.
| const RoutingDimension& operations_research::RoutingModel::GetDimensionOrDie | ( | const std::string & | dimension_name | ) | const |
Returns a dimension from its name. Dies if the dimension does not exist.
|
inline |
|
inline |
|
inline |
| std::vector<RoutingDimension*> operations_research::RoutingModel::GetDimensionsWithSoftOrSpanCosts | ( | ) | const |
Returns dimensions with soft or vehicle span costs.
|
inline |
|
inline |
|
inline |
|
inline |
| int64 operations_research::RoutingModel::GetFixedCostOfVehicle | ( | int | vehicle | ) | const |
Returns the route fixed cost taken into account if the route of the vehicle is not empty, aka there's at least one node on the route other than the first and last nodes.
| const absl::flat_hash_set<int>& operations_research::RoutingModel::GetHardTypeIncompatibilitiesOfType | ( | int | type | ) | const |
Returns visit types incompatible with a given type.
|
inline |
| RoutingDimension* operations_research::RoutingModel::GetMutableDimension | ( | const std::string & | dimension_name | ) | const |
Returns a dimension from its name.
Returns nullptr if the dimension does not exist.
|
inline |
| int64 operations_research::RoutingModel::GetNumberOfDecisionsInFirstSolution | ( | const RoutingSearchParameters & | search_parameters | ) | const |
Returns statistics on first solution search, number of decisions sent to filters, number of decisions rejected by filters.
|
inline |
| int64 operations_research::RoutingModel::GetNumberOfRejectsInFirstSolution | ( | const RoutingSearchParameters & | search_parameters | ) | const |
|
inline |
| int operations_research::RoutingModel::GetNumOfSingletonNodes | ( | ) | const |
Returns the number of non-start/end nodes which do not appear in a pickup/delivery pair.
| std::vector<std::pair<int64, int64> > operations_research::RoutingModel::GetPerfectBinaryDisjunctions | ( | ) | const |
Returns the list of all perfect binary disjunctions, as pairs of variable indices: a disjunction is "perfect" when its variables do not appear in any other disjunction.
Each pair is sorted (lowest variable index first), and the output vector is also sorted (lowest pairs first).
|
inline |
|
inline |
| PickupAndDeliveryPolicy operations_research::RoutingModel::GetPickupAndDeliveryPolicyOfVehicle | ( | int | vehicle | ) | const |
| const std::vector<std::pair<int, int> >& operations_research::RoutingModel::GetPickupIndexPairs | ( | int64 | node_index | ) | const |
Returns pairs for which the node is a pickup; the first element of each pair is the index in the pickup and delivery pairs list in which the pickup appears, the second element is its index in the pickups list.
|
inline |
|
inline |
| const std::vector<absl::flat_hash_set<int> >& operations_research::RoutingModel::GetSameVehicleRequiredTypeAlternativesOfType | ( | int | type | ) | const |
Returns the sets of same-vehicle/temporal requirement alternatives for the given type.
| const std::vector<absl::flat_hash_set<int> >& operations_research::RoutingModel::GetTemporalRequiredTypeAlternativesOfType | ( | int | type | ) | const |
| const absl::flat_hash_set<int>& operations_research::RoutingModel::GetTemporalTypeIncompatibilitiesOfType | ( | int | type | ) | const |
|
inline |
|
inline |
| int operations_research::RoutingModel::GetVisitType | ( | int64 | index | ) | const |
| bool operations_research::RoutingModel::HasDimension | ( | const std::string & | dimension_name | ) | const |
Returns true if a dimension exists for a given dimension name.
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
| void operations_research::RoutingModel::IgnoreDisjunctionsAlreadyForcedToZero | ( | ) |
SPECIAL: Makes the solver ignore all the disjunctions whose active variables are all trivially zero (i.e.
Max() == 0), by setting their max_cardinality to 0. This can be useful when using the BaseBinaryDisjunctionNeighborhood operators, in the context of arc-based routing.
|
inline |
| bool operations_research::RoutingModel::IsMatchingModel | ( | ) | const |
Returns true if a vehicle/node matching problem is detected.
| bool operations_research::RoutingModel::IsStart | ( | int64 | index | ) | const |
Returns true if 'index' represents the first node of a route.
|
inline |
| bool operations_research::RoutingModel::IsVehicleUsed | ( | const Assignment & | assignment, |
| int | vehicle | ||
| ) | const |
Returns true if the route of 'vehicle' is non empty in 'assignment'.
|
static |
Perhaps move it to constraint_solver.h.
MakeGreedyDescentLSOperator creates a local search operator that tries to improve the initial assignment by moving a logarithmically decreasing step away in each possible dimension.
| DecisionBuilder* operations_research::RoutingModel::MakeGuidedSlackFinalizer | ( | const RoutingDimension * | dimension, |
| std::function< int64(int64)> | initializer | ||
| ) |
The next few members are in the public section only for testing purposes.
MakeGuidedSlackFinalizer creates a DecisionBuilder for the slacks of a dimension using a callback to choose which values to start with. The finalizer works only when all next variables in the model have been fixed. It has the following two characteristics:
| Constraint* operations_research::RoutingModel::MakePathSpansAndTotalSlacks | ( | const RoutingDimension * | dimension, |
| std::vector< IntVar * > | spans, | ||
| std::vector< IntVar * > | total_slacks | ||
| ) |
For every vehicle of the routing model:
| DecisionBuilder* operations_research::RoutingModel::MakeSelfDependentDimensionFinalizer | ( | const RoutingDimension * | dimension | ) |
SWIG
MakeSelfDependentDimensionFinalizer is a finalizer for the slacks of a self-dependent dimension. It makes an extensive use of the caches of the state dependent transits. In detail, MakeSelfDependentDimensionFinalizer returns a composition of a local search decision builder with a greedy descent operator for the cumul of the start of each route and a guided slack finalizer. Provided there are no time windows and the maximum slacks are large enough, once the cumul of the start of route is fixed, the guided finalizer can find optimal values of the slacks for the rest of the route in time proportional to the length of the route. Therefore the composed finalizer generally works in time O(log(t)*n*m), where t is the latest possible departute time, n is the number of nodes in the network and m is the number of vehicles.
|
static |
Creates a cached StateDependentTransit from an std::function.
|
inline |
| int64 operations_research::RoutingModel::Next | ( | const Assignment & | assignment, |
| int64 | index | ||
| ) | const |
Assignment inspection Returns the variable index of the node directly after the node corresponding to 'index' in 'assignment'.
|
inline |
|
inline |
|
inline |
| const Assignment* operations_research::RoutingModel::PackCumulsOfOptimizerDimensionsFromAssignment | ( | const Assignment * | original_assignment, |
| absl::Duration | duration_limit | ||
| ) |
For every dimension in the model's dimensions_for_local/global_optimizer_, this method tries to pack the cumul values of the dimension, such that:
|
inline |
Returns an assignment used to fix some of the variables of the problem.
In practice, this assignment locks partial routes of the problem. This can be used in the context of locking the parts of the routes which have already been driven in online routing problems.
| Assignment* operations_research::RoutingModel::ReadAssignment | ( | const std::string & | file_name | ) |
Reads an assignment from a file and returns the current solution.
Returns nullptr if the file cannot be opened or if the assignment is not valid.
| Assignment* operations_research::RoutingModel::ReadAssignmentFromRoutes | ( | const std::vector< std::vector< int64 >> & | routes, |
| bool | ignore_inactive_indices | ||
| ) |
Restores the routes as the current solution.
Returns nullptr if the solution cannot be restored (routes do not contain a valid solution). Note that calling this method will run the solver to assign values to the dimension variables; this may take considerable amount of time, especially when using dimensions with slack.
| int operations_research::RoutingModel::RegisterPositiveTransitCallback | ( | TransitCallback2 | callback | ) |
| int operations_research::RoutingModel::RegisterPositiveUnaryTransitCallback | ( | TransitCallback1 | callback | ) |
| int operations_research::RoutingModel::RegisterStateDependentTransitCallback | ( | VariableIndexEvaluator2 | callback | ) |
| int operations_research::RoutingModel::RegisterTransitCallback | ( | TransitCallback2 | callback | ) |
| int operations_research::RoutingModel::RegisterUnaryTransitCallback | ( | TransitCallback1 | callback | ) |
Registers 'callback' and returns its index.
|
inline |
| Assignment* operations_research::RoutingModel::RestoreAssignment | ( | const Assignment & | solution | ) |
Restores an assignment as a solution in the routing model and returns the new solution.
Returns nullptr if the assignment is not valid.
| bool operations_research::RoutingModel::RoutesToAssignment | ( | const std::vector< std::vector< int64 >> & | routes, |
| bool | ignore_inactive_indices, | ||
| bool | close_routes, | ||
| Assignment *const | assignment | ||
| ) | const |
Fills an assignment from a specification of the routes of the vehicles.
The routes are specified as lists of variable indices that appear on the routes of the vehicles. The indices of the outer vector in 'routes' correspond to vehicles IDs, the inner vector contains the variable indices on the routes for the given vehicle. The inner vectors must not contain the start and end indices, as these are determined by the routing model. Sets the value of NextVars in the assignment, adding the variables to the assignment if necessary. The method does not touch other variables in the assignment. The method can only be called after the model is closed. With ignore_inactive_indices set to false, this method will fail (return nullptr) in case some of the route contain indices that are deactivated in the model; when set to true, these indices will be skipped. Returns true if routes were successfully loaded. However, such assignment still might not be a valid solution to the routing problem due to more complex constraints; it is advisible to call solver()->CheckSolution() afterwards.
| void operations_research::RoutingModel::SetAllowedVehiclesForIndex | ( | const std::vector< int > & | vehicles, |
| int64 | index | ||
| ) |
Sets the vehicles which can visit a given node.
If the node is in a disjunction, this will not prevent it from being unperformed. Specifying an empty vector of vehicles has no effect (all vehicles will be allowed to visit the node).
| void operations_research::RoutingModel::SetAmortizedCostFactorsOfAllVehicles | ( | int64 | linear_cost_factor, |
| int64 | quadratic_cost_factor | ||
| ) |
The following methods set the linear and quadratic cost factors of vehicles (must be positive values).
The default value of these parameters is zero for all vehicles.
When set, the cost_ of the model will contain terms aiming at reducing the number of vehicles used in the model, by adding the following to the objective for every vehicle v: INDICATOR(v used in the model) * [linear_cost_factor_of_vehicle_[v]
Sets the linear and quadratic cost factor of all vehicles.
| void operations_research::RoutingModel::SetAmortizedCostFactorsOfVehicle | ( | int64 | linear_cost_factor, |
| int64 | quadratic_cost_factor, | ||
| int | vehicle | ||
| ) |
Sets the linear and quadratic cost factor of the given vehicle.
| void operations_research::RoutingModel::SetArcCostEvaluatorOfAllVehicles | ( | int | evaluator_index | ) |
Sets the cost function of the model such that the cost of a segment of a route between node 'from' and 'to' is evaluator(from, to), whatever the route or vehicle performing the route.
| void operations_research::RoutingModel::SetArcCostEvaluatorOfVehicle | ( | int | evaluator_index, |
| int | vehicle | ||
| ) |
Sets the cost function for a given vehicle route.
| void operations_research::RoutingModel::SetAssignmentFromOtherModelAssignment | ( | Assignment * | target_assignment, |
| const RoutingModel * | source_model, | ||
| const Assignment * | source_assignment | ||
| ) |
Given a "source_model" and its "source_assignment", resets "target_assignment" with the IntVar variables (nexts_, and vehicle_vars_ if costs aren't homogeneous across vehicles) of "this" model, with the values set according to those in "other_assignment".
The objective_element of target_assignment is set to this->cost_.
|
inline |
| void operations_research::RoutingModel::SetFixedCostOfAllVehicles | ( | int64 | cost | ) |
Sets the fixed cost of all vehicle routes.
It is equivalent to calling SetFixedCostOfVehicle on all vehicle routes.
| void operations_research::RoutingModel::SetFixedCostOfVehicle | ( | int64 | cost, |
| int | vehicle | ||
| ) |
Sets the fixed cost of one vehicle route.
| void operations_research::RoutingModel::SetPickupAndDeliveryPolicyOfAllVehicles | ( | PickupAndDeliveryPolicy | policy | ) |
Sets the Pickup and delivery policy of all vehicles.
It is equivalent to calling SetPickupAndDeliveryPolicyOfVehicle on all vehicles.
| void operations_research::RoutingModel::SetPickupAndDeliveryPolicyOfVehicle | ( | PickupAndDeliveryPolicy | policy, |
| int | vehicle | ||
| ) |
|
inline |
Set the given dimension as "primary constrained".
As of August 2013, this is only used by ArcIsMoreConstrainedThanArc(). "dimension" must be the name of an existing dimension, or be empty, in which case there will not be a primary dimension after this call.
|
inline |
| void operations_research::RoutingModel::SetTabuVarsCallback | ( | GetTabuVarsCallback | tabu_var_callback | ) |
| void operations_research::RoutingModel::SetVisitType | ( | int64 | index, |
| int | type | ||
| ) |
Set the node visit types and incompatibilities/requirements between the types (see below).
NOTE: The visit type of a node must be positive, and all nodes belonging to the same pickup/delivery pair must have the same type (or no type at all).
NOTE: Before adding any incompatibilities and/or requirements on types: 1) All corresponding node types must have been set. 2) CloseVisitTypes() must be called so all containers are resized accordingly.
NOTE: These incompatibilities and requirements are only handled when each node index appears in at most one pickup/delivery pair, i.e. when the same node isn't a pickup and/or delivery in multiple pickup/delivery pairs.
|
inline |
| const Assignment* operations_research::RoutingModel::Solve | ( | const Assignment * | assignment = nullptr | ) |
Solves the current routing model; closes the current model.
This is equivalent to calling SolveWithParameters(DefaultRoutingSearchParameters()) or SolveFromAssignmentWithParameters(assignment, DefaultRoutingSearchParameters()).
| const Assignment* operations_research::RoutingModel::SolveFromAssignmentWithParameters | ( | const Assignment * | assignment, |
| const RoutingSearchParameters & | search_parameters, | ||
| std::vector< const Assignment * > * | solutions = nullptr |
||
| ) |
|
inline |
| const Assignment* operations_research::RoutingModel::SolveWithParameters | ( | const RoutingSearchParameters & | search_parameters, |
| std::vector< const Assignment * > * | solutions = nullptr |
||
| ) |
Solves the current routing model with the given parameters.
If 'solutions' is specified, it will contain the k best solutions found during the search (from worst to best, including the one returned by this method), where k corresponds to the 'number_of_solutions_to_collect' in 'search_parameters'. Note that the Assignment returned by the method and the ones in solutions are owned by the underlying solver and should not be deleted.
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
| int64 operations_research::RoutingModel::UnperformedPenalty | ( | int64 | var_index | ) | const |
Get the "unperformed" penalty of a node.
This is only well defined if the node is only part of a single Disjunction involving only itself, and that disjunction has a penalty. In all other cases, including forced active nodes, this returns 0.
| int64 operations_research::RoutingModel::UnperformedPenaltyOrValue | ( | int64 | default_value, |
| int64 | var_index | ||
| ) | const |
Same as above except that it returns default_value instead of 0 when penalty is not well defined (default value is passed as first argument to simplify the usage of the method in a callback).
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
| bool operations_research::RoutingModel::WriteAssignment | ( | const std::string & | file_name | ) | const |
Writes the current solution to a file containing an AssignmentProto.
Returns false if the file cannot be opened or if there is no current solution.
|
friend |
|
static |
|
static |
|
static |