Class RoutingModel
java.lang.Object
com.google.ortools.constraintsolver.RoutingModel
- 
Nested Class SummaryNested ClassesModifier and TypeClassDescriptionstatic classstatic classstatic classThe position of a node in the set of pickup and delivery pairs.static classA ResourceGroup defines a set of available Resources with attributes on
 one or multiple dimensions.
 For every ResourceGroup in the model, each (used) vehicle in the solution
 which requires a resource (see NotifyVehicleRequiresResource()) from this
 group must be assigned to exactly 1 resource, and each resource can in
 turn be assigned to at most 1 vehicle requiring it.static classClass used to solve a secondary model within a first solution strategy.static classStruct used to store a variable value.static classStruct used to sort and store vehicles by their type.
- 
Field SummaryFieldsModifier and TypeFieldDescriptionstatic final intWhen visited, one instance of type 'T' previously added to the route
 (TYPE_ADDED_TO_VEHICLE), if any, is removed from the vehicle.
 If the type was not previously added to the route or all added instances
 have already been removed, this visit has no effect on the types.static final intstatic final intstatic final intRepresents the sign of values returned by a transit evaluator.static final intThe following enum is used to describe how the penalty cost is computed
 when using AddDisjunction.static final intstatic final intDeliveries must be performed in the same order as pickups.static final intDeliveries must be performed in reverse order of pickups.static final intAny precedence is accepted.protected booleanstatic final intWhen visited, the number of types 'T' on the vehicle increases by one.static final intWith the following policy, the visit enforces that type 'T' is
 considered on the route from its start until this node is visited.static final intThe visit doesn't have an impact on the number of types 'T' on the
 route, as it's (virtually) added and removed directly.
 This policy can be used for visits which are part of an incompatibility
 or requirement set without affecting the type count on the route.
- 
Constructor SummaryConstructorsConstructorDescriptionRoutingModel(long cPtr, boolean cMemoryOwn) RoutingModel(RoutingIndexManager index_manager) Constructor taking an index manager.RoutingModel(RoutingIndexManager index_manager, RoutingModelParameters parameters) 
- 
Method SummaryModifier and TypeMethodDescriptionactiveVar(long index) Returns the active variable of the node corresponding to index.activeVehicleVar(int vehicle) Returns the active variable of the vehicle.voidaddAtSolutionCallback(Runnable 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.
 If track_unchecked_neighbors is true, the callback will also be called on
 AcceptUncheckedNeighbor() events, which is useful to grab solutions
 obtained when solver_parameters.check_solution_period > 1 (aka fastLS).voidaddAtSolutionCallback(Runnable callback, boolean track_unchecked_neighbors) 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.
 If track_unchecked_neighbors is true, the callback will also be called on
 AcceptUncheckedNeighbor() events, which is useful to grab solutions
 obtained when solver_parameters.check_solution_period > 1 (aka fastLS).addConstantDimension(long value, long capacity, boolean fix_start_cumul_to_zero, String name) addConstantDimensionWithSlack(long value, long capacity, long slack_max, boolean fix_start_cumul_to_zero, 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 a pair consisting of an index to the registered unary transit
 callback and a bool denoting whether the dimension has been created.
 It is false if a dimension with the same name has already been created
 (and doesn't create the new dimension but still register a new callback).booleanaddDimension(int evaluator_index, long slack_max, long capacity, boolean fix_start_cumul_to_zero, String name) Model creation
 Methods to add dimensions to routes; dimensions represent quantities
 accumulated at nodes along the routes.booleanAddDimensionWithCumulDependentVehicleTransitAndCapacity(int[] fixed_evaluator_indices, int[] cumul_dependent_evaluator_indices, long slack_max, long[] vehicle_capacities, boolean fix_start_cumul_to_zero, String name) Creates a dimension where the transit variable on arc i->j is the sum of:
 - A "fixed" transit value, obtained from the fixed_evaluator_index for
 this vehicle, referencing evaluators in transit_evaluators_, and
 - A FloatSlopePiecewiseLinearFunction of the cumul of node i, obtained
 from the cumul_dependent_evaluator_index of this vehicle, pointing to
 an evaluator in cumul_dependent_transit_evaluators_.booleanaddDimensionWithVehicleCapacity(int evaluator_index, long slack_max, long[] vehicle_capacities, boolean fix_start_cumul_to_zero, String name) booleanaddDimensionWithVehicleTransitAndCapacity(int[] evaluator_indices, long slack_max, long[] vehicle_capacities, boolean fix_start_cumul_to_zero, String name) booleanaddDimensionWithVehicleTransits(int[] evaluator_indices, long slack_max, long capacity, boolean fix_start_cumul_to_zero, String name) intaddDisjunction(long[] indices) Adds a disjunction constraint on the indices: exactly 'max_cardinality' of
 the indices are active.intaddDisjunction(long[] indices, long penalty) Adds a disjunction constraint on the indices: exactly 'max_cardinality' of
 the indices are active.intaddDisjunction(long[] indices, long penalty, long max_cardinality) Adds a disjunction constraint on the indices: exactly 'max_cardinality' of
 the indices are active.intaddDisjunction(long[] indices, long penalty, long max_cardinality, int penalty_cost_behavior) Adds a disjunction constraint on the indices: exactly 'max_cardinality' of
 the indices are active.voidAddEnterSearchCallback(Runnable callback) voidaddHardTypeIncompatibility(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.
 NOTE: To avoid unnecessary memory reallocations, it is recommended to only
 add incompatibilities once all the existing types have been set with
 SetVisitType().voidaddIntervalToAssignment(IntervalVar interval) voidAdds 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.voidaddLocalSearchOperator(LocalSearchOperator ls_operator) Adds a local search operator to the set of operators used to solve the
 vehicle routing problem.addMatrixDimension(long[][] values, long capacity, boolean fix_start_cumul_to_zero, 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.voidaddPickupAndDelivery(long pickup, long delivery) Notifies that index1 and index2 form a pair of nodes which should belong
 to the same route.voidaddPickupAndDeliverySets(int pickup_disjunction, int 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'.voidaddRequiredTypeAlternativesWhenAddingType(int dependent_type, SWIGTYPE_p_absl__flat_hash_setT_int_t required_type_alternatives) If type_D depends on type_R when adding type_D, any node_D of type_D and
 VisitTypePolicy TYPE_ADDED_TO_VEHICLE or
 TYPE_SIMULTANEOUSLY_ADDED_AND_REMOVED requires at least one type_R on its
 vehicle at the time node_D is visited.voidaddRequiredTypeAlternativesWhenRemovingType(int dependent_type, SWIGTYPE_p_absl__flat_hash_setT_int_t required_type_alternatives) The following requirements apply when visiting dependent nodes that remove
 their type from the route, i.e. type_R must be on the vehicle when type_D
 of VisitTypePolicy ADDED_TYPE_REMOVED_FROM_VEHICLE,
 TYPE_ON_VEHICLE_UP_TO_VISIT or TYPE_SIMULTANEOUSLY_ADDED_AND_REMOVED is
 visited.Adds a resource group to the routing model and returns a pointer to it.voidvoidAddRouteConstraint(SWIGTYPE_p_std__functionT_std__optionalT_long_t_fstd__vectorT_long_t_const_RF_t route_evaluator) voidAddRouteConstraint(SWIGTYPE_p_std__functionT_std__optionalT_long_t_fstd__vectorT_long_t_const_RF_t route_evaluator, boolean costs_are_homogeneous_across_vehicles) voidaddSearchMonitor(SearchMonitor monitor) Adds a search monitor to the search used to solve the routing model.voidaddSoftSameVehicleConstraint(long[] indices, long cost) Adds a soft constraint to force a set of variable indices to be on the
 same vehicle.voidaddTemporalTypeIncompatibility(int type1, int type2) voidaddToAssignment(IntVar var) Adds an extra variable to the vehicle routing assignment.voidAdds a variable to maximize in the solution finalizer (see above for
 information on the solution finalizer).voidAdds a variable to minimize in the solution finalizer.voidaddVariableTargetToFinalizer(IntVar var, long target) Add a variable to set the closest possible to the target value in the
 solution finalizer.addVectorDimension(long[] values, long capacity, boolean fix_start_cumul_to_zero, 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.voidAddWeightedVariableMaximizedByFinalizer(IntVar var, long cost) Adds a variable to maximize in the solution finalizer, with a weighted
 priority: the higher the more priority it has.voidAddWeightedVariableMinimizedByFinalizer(IntVar var, long cost) Adds a variable to minimize in the solution finalizer, with a weighted
 priority: the higher the more priority it has.voidAddWeightedVariableTargetToFinalizer(IntVar var, long target, long cost) Same as above with a weighted priority: the higher the cost, the more
 priority it has to be set close to the target value.applyLocks(long[] locks) Applies a lock chain to the next search.booleanapplyLocksToAllVehicles(long[][] locks, boolean close_routes) Applies lock chains to all vehicles to the next search, such that locks[p]
 is the lock chain for route p.booleanarcIsMoreConstrainedThanArc(long from, long to1, long to2) Returns whether the arc from->to1 is more constrained than from->to2,
 taking into account, in order:
 - whether the destination node isn't an end node
 - whether the destination node is mandatory
 - whether the destination node is bound to the same vehicle as the source
 - the "primary constrained" dimension (see SetPrimaryConstrainedDimension)
 It then breaks ties using, in order:
 - the arc cost (taking unperformed penalties into account)
 - the size of the vehicle vars of "to1" and "to2" (lowest size wins)
 - the value: the lowest value of the indices to1 and to2 wins.
 See the .cc for details.
 The more constrained arc is typically preferable when building a
 first solution.booleanReturns true if routes are interdependent.voidassignmentToRoutes(Assignment assignment, long[][] routes) 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).voidCancels the current search.booleanCheckIfAssignmentIsFeasible(Assignment assignment, boolean call_at_solution_monitors) Returns a vector cumul_bounds, for which cumul_bounds[i][j] is a pair
 containing the minimum and maximum of the CumulVar of the jth node on
 route i.
 - cumul_bounds[i][j].first is the minimum.
 - cumul_bounds[i][j].second is the maximum.
 Checks if an assignment is feasible.booleanReturns true if the search limit has been crossed with the given time
 offset.booleancheckLimit(SWIGTYPE_p_absl__Duration offset) Returns true if the search limit has been crossed with the given time
 offset.voidCloses the current routing model; after this method is called, no
 modification to the model can be done, but RoutesToAssignment becomes
 available.voidcloseModelWithParameters(RoutingSearchParameters search_parameters) Same as above taking search parameters (as of 10/2015 some the parameters
 have to be set when closing the model).compactAndCheckAssignment(Assignment assignment) 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).compactAssignment(Assignment assignment) Converts the solution in the given assignment to routes for all vehicles.
 If the returned vector is route_indices, route_indices[i][j] is the index
 for jth location visited on route i.longComputes a lower bound to the routing problem solving a linear assignment
 problem.booleanWhether costs are homogeneous across all vehicles.costVar()Returns the global cost variable which is being minimized.CumulDependentTransitCallback(int callback_index) debugOutputAssignment(Assignment solution_assignment, String dimension_to_print) 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.voiddelete()booleanReturns the value of the internal enable_deep_serialization_ parameter.longend(int vehicle) Returns the variable index of the ending node of a vehicle route.FastSolveFromAssignmentWithParameters(Assignment assignment, RoutingSearchParameters search_parameters, boolean check_solution_in_cp) Improves a given assignment using unchecked local search.
 If check_solution_in_cp is true the final solution will be checked with
 the CP solver.
 As of 11/2023, only works with greedy descent.FastSolveFromAssignmentWithParameters(Assignment assignment, RoutingSearchParameters search_parameters, boolean check_solution_in_cp, SWIGTYPE_p_absl__flat_hash_setT_operations_research__IntVar_p_t touched) Improves a given assignment using unchecked local search.
 If check_solution_in_cp is true the final solution will be checked with
 the CP solver.
 As of 11/2023, only works with greedy descent.protected voidfinalize()long[]long[]longgetArcCostForClass(long from_index, long to_index, long cost_class_index) Returns the cost of the segment between two nodes for a given cost
 class.longgetArcCostForFirstSolution(long from_index, long to_index) 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.longgetArcCostForVehicle(long from_index, long to_index, long vehicle) Returns the cost of the transit arc between two nodes for a given vehicle.
 Input are variable indices of node.intReturns the number of different cost classes in the model.intgetCostClassIndexOfVehicle(long vehicle) Get the cost class index of the given vehicle.static longgetCPtr(RoutingModel obj) GetDeliveryPosition(long node_index) Returns the pickup and delivery positions where the node is a delivery.longgetDepot()Returns the variable index of the first starting or ending node of all
 routes.getDimensionOrDie(String dimension_name) Returns a dimension from its name.intGetDimensionResourceGroupIndex(RoutingDimension dimension) Returns the index of the resource group attached to the dimension.
 DCHECKS that there's exactly one resource group for this dimension.int[]GetDimensionResourceGroupIndices(RoutingDimension dimension) Returns the indices of resource groups for this dimension.Returns the dimensions which have [global|local]_dimension_optimizers_.int[]getDisjunctionIndices(long index) Returns the indices of the disjunctions to which an index belongs.longgetDisjunctionMaxCardinality(int index) Returns the maximum number of possible active nodes of the node
 disjunction of index 'index'.long[]GetDisjunctionNodeIndices(int index) Returns the variable indices of the nodes in the disjunction of index
 'index'.longgetDisjunctionPenalty(int index) Returns the penalty of the node disjunction of index 'index'.intGetDisjunctionPenaltyCostBehavior(int index) Returns the PenaltyCostBehavior used by the disjunction of index
 'index'.GetFirstMatchingPickupDeliverySibling(long node, SWIGTYPE_p_std__functionT_bool_flongF_t is_match) Returns the current hint assignment.longgetFixedCostOfVehicle(int vehicle) 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.longgetHomogeneousCost(long from_index, long to_index) Returns the cost of the segment between two nodes supposing all vehicle
 costs are the same (returns the cost for the first vehicle otherwise).static intConstant used to express the "no dimension" index, returned when a
 dimension name does not correspond to an actual dimension.static intConstant used to express the "no disjunction" index, returned when a node
 does not appear in any disjunction.static longConstant used to express a hard constraint instead of a soft penalty.intReturns the maximum number of active vehicles.Returns the atomic<bool> to stop the CP solver.Returns the atomic<bool> to stop the CP-SAT solver.getMutableDimension(String dimension_name) Returns a dimension from its name.GetMutableGlobalCumulLPOptimizer(RoutingDimension dimension) Returns the global/local dimension cumul optimizer for a given dimension,
 or nullptr if there is none.GetMutableGlobalCumulMPOptimizer(RoutingDimension dimension) GetMutableLocalCumulLPOptimizer(RoutingDimension dimension) intDitto, minus the 'always zero', built-in cost class.longgetNumberOfDecisionsInFirstSolution(RoutingSearchParameters search_parameters) Returns statistics on first solution search, number of decisions sent to
 filters, number of decisions rejected by filters.intReturns the number of node disjunctions in the model.longgetNumberOfRejectsInFirstSolution(RoutingSearchParameters search_parameters) intintReturns the number of non-start/end nodes which do not appear in a
 pickup/delivery pair.GetOrCreateNodeNeighborsByCostClass(double neighbors_ratio, long min_neighbors, SWIGTYPE_p_double neighbors_ratio_used) Returns neighbors of all nodes for every cost class.GetOrCreateNodeNeighborsByCostClass(double neighbors_ratio, long min_neighbors, SWIGTYPE_p_double neighbors_ratio_used, boolean add_vehicle_starts_to_neighbors) Returns neighbors of all nodes for every cost class.GetOrCreateNodeNeighborsByCostClass(double neighbors_ratio, long min_neighbors, SWIGTYPE_p_double neighbors_ratio_used, boolean add_vehicle_starts_to_neighbors, boolean add_vehicle_ends_to_neighbors) Returns neighbors of all nodes for every cost class.GetOrCreateNodeNeighborsByCostClass(double neighbors_ratio, long min_neighbors, SWIGTYPE_p_double neighbors_ratio_used, boolean add_vehicle_starts_to_neighbors, boolean add_vehicle_ends_to_neighbors, boolean only_sort_neighbors_for_partial_neighborhoods) Returns neighbors of all nodes for every cost class.Returns parameters.num_neighbors neighbors of all nodes for every cost
 class.int[]GetPairIndicesOfType(int type) intgetPickupAndDeliveryPolicyOfVehicle(int vehicle) GetPickupPosition(long node_index) Returns the pickup and delivery positions where the node is a pickup.Get the primary constrained dimension, or an empty string if it is unset.Returns the set of requirement alternatives when adding the given type.Returns the set of requirement alternatives when removing the given type.GetResourceGroup(int rg_index) GetRouteCost(long[] route) intGetSameActivityGroupOfIndex(int node) Returns the same activity group of the node.intReturns the number of same activity groups.int[]GetSameActivityIndicesOfGroup(int group) Returns variable indices of nodes in the same activity group.int[]GetSameActivityIndicesOfIndex(int node) Returns variable indices of nodes constrained to have the same activity.GetSameVehicleClassArcs(long from_index, long to_index) Returns all arcs which are equivalent to the {from_index, to_index} arc
 wrt vehicle classes.int[]getSameVehicleIndicesOfIndex(int node) Returns variable indices of nodes constrained to be on the same route.int[]GetSingleNodesOfType(int type) getTemporalTypeIncompatibilitiesOfType(int type) Returns dimensions for which all transit evaluators are unary.intReturns the number of different vehicle classes in the model.intgetVehicleClassIndexOfVehicle(long vehicle) intGetVehicleOfClass(int vehicle_class) Returns a vehicle of the given vehicle class, and -1 if there are no
 vehicles for this class.GetVehiclesOfSameClass(long start_end_index) Returns indices of the vehicles which are in the same vehicle class as the
 vehicle starting or ending at start_end_index.intgetVisitType(long index) intGetVisitTypePolicy(long index) booleanhasDimension(String dimension_name) Returns true if a dimension exists for a given dimension name.booleanHasGlobalCumulOptimizer(RoutingDimension dimension) Returns whether the given dimension has global/local cumul optimizers.booleanReturns true iff any hard (resp. temporal) type incompatibilities have
 been added to the model.booleanHasLocalCumulOptimizer(RoutingDimension dimension) booleanReturns true if the model contains mandatory disjunctions (ones with
 kNoPenalty as penalty).booleanReturns true if the model contains at least one disjunction which is
 constrained by its max_cardinality.booleanReturns true iff any same-route (resp. temporal) type requirements have
 been added to the model.booleanbooleanbooleanhasVehicleWithCostClassIndex(int cost_class_index) Returns true iff the model contains a vehicle with the given
 cost_class_index.voidSPECIAL: Makes the solver ignore all the disjunctions whose active
 variables are all trivially zero (i.e.booleanIsDelivery(long node_index) booleanisEnd(long index) Returns true if 'index' represents the last node of a route.booleanReturns true if a vehicle/node matching problem is detected.booleanIsPickup(long node_index) Returns whether the node is a pickup (resp. delivery).booleanisStart(long index) Returns true if 'index' represents the first node of a route.booleanisVehicleAllowedForIndex(int vehicle, long index) Returns true if a vehicle is allowed to visit a given node.booleanisVehicleUsed(Assignment assignment, int vehicle) Returns true if the route of 'vehicle' is non empty in 'assignment'.booleanIsVehicleUsedWhenEmpty(int vehicle) makeGuidedSlackFinalizer(RoutingDimension dimension, LongUnaryOperator 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.MakeSelfDependentDimensionFinalizer is a finalizer for the slacks of a
 self-dependent dimension.longnext(Assignment assignment, long index) Assignment inspection
 Returns the variable index of the node directly after the node
 corresponding to 'index' in 'assignment'.IntVar[]nexts()Returns all next variables of the model, such that Nexts(i) is the next
 variable of the node corresponding to i.nextVar(long index) Returns the next variable of the node corresponding to index.intnodes()Sizes and indices
 Returns the number of nodes in the model.longReturns the current lower bound found by internal solvers during the
 search.Returns an assignment used to fix some of the variables of the problem.
 In practice, this assignment locks partial routes of the problem.readAssignment(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.readAssignmentFromRoutes(long[][] routes, boolean ignore_inactive_indices) Restores the routes as the current solution.intRegisterCumulDependentTransitCallback(SWIGTYPE_p_std__functionT_FloatSlopePiecewiseLinearFunction_const_pflong_longF_t callback) intregisterTransitCallback(LongBinaryOperator callback) intregisterTransitCallback(LongBinaryOperator callback, int sign) intregisterTransitMatrix(long[][] values) intintregisterUnaryTransitCallback(LongUnaryOperator callback, int sign) intregisterUnaryTransitVector(long[] values) Registers 'callback' and returns its index.
 The sign parameter allows to notify the solver that the callback only
 return values of the given sign.ResourceVar(int vehicle, int resource_group) Returns the resource variable for the given vehicle index in the given
 resource group.IntVar[]ResourceVars(int resource_group) Returns vehicle resource variables for a given resource group, such that
 ResourceVars(r_g)[v] is the resource variable for vehicle 'v' in resource
 group 'r_g'.restoreAssignment(Assignment solution) Restores an assignment as a solution in the routing model and returns the
 new solution.booleanroutesToAssignment(long[][] routes, boolean ignore_inactive_indices, boolean close_routes, Assignment assignment) Fills an assignment from a specification of the routes of the
 vehicles.voidsetAllowedVehiclesForIndex(int[] vehicles, long index) Sets the vehicles which can visit a given node.voidsetAmortizedCostFactorsOfAllVehicles(long linear_cost_factor, long quadratic_cost_factor) The following methods set the linear and quadratic cost factors of
 vehicles (must be positive values).voidsetAmortizedCostFactorsOfVehicle(long linear_cost_factor, long quadratic_cost_factor, int vehicle) Sets the linear and quadratic cost factor of the given vehicle.voidsetArcCostEvaluatorOfAllVehicles(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.voidsetArcCostEvaluatorOfVehicle(int evaluator_index, int vehicle) Sets the cost function for a given vehicle route.voidsetAssignmentFromOtherModelAssignment(Assignment target_assignment, RoutingModel source_model, 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_.voidsetFirstSolutionEvaluator(LongBinaryOperator evaluator) Gets/sets the evaluator used during the search.voidAdds a hint to be used by first solution strategies.voidsetFixedCostOfAllVehicles(long cost) Sets the fixed cost of all vehicle routes.voidsetFixedCostOfVehicle(long cost, int vehicle) Sets the fixed cost of one vehicle route.voidSetMaximumNumberOfActiveVehicles(int max_active_vehicles) Constrains the maximum number of active vehicles, aka the number of
 vehicles which do not have an empty route.voidSetPathEnergyCostOfVehicle(String force, String distance, long cost_per_unit, int vehicle) voidSetPathEnergyCostsOfVehicle(String force, String distance, long threshold, long cost_per_unit_below_threshold, long cost_per_unit_above_threshold, int vehicle) voidsetPickupAndDeliveryPolicyOfAllVehicles(int policy) Sets the Pickup and delivery policy of all vehicles.voidsetPickupAndDeliveryPolicyOfVehicle(int policy, int vehicle) voidsetPrimaryConstrainedDimension(String dimension_name) Set the given dimension as "primary constrained".voidSetVehicleUsedWhenEmpty(boolean is_used, int vehicle) voidsetVisitType(long index, int type, int type_policy) longsize()Returns the number of next variables in the model.solve()Solves the current routing model; closes the current model.
 This is equivalent to calling
 SolveWithParameters(DefaultRoutingSearchParameters())
 or
 SolveFromAssignmentWithParameters(assignment,
 DefaultRoutingSearchParameters()).solve(Assignment assignment) Solves the current routing model; closes the current model.
 This is equivalent to calling
 SolveWithParameters(DefaultRoutingSearchParameters())
 or
 SolveFromAssignmentWithParameters(assignment,
 DefaultRoutingSearchParameters()).SolveFromAssignmentsWithParameters(SWIGTYPE_p_std__vectorT_operations_research__Assignment_const_p_t assignments, RoutingSearchParameters search_parameters) Same as above but will try all assignments in order as first solutions
 until one succeeds.SolveFromAssignmentsWithParameters(SWIGTYPE_p_std__vectorT_operations_research__Assignment_const_p_t assignments, RoutingSearchParameters search_parameters, SWIGTYPE_p_std__vectorT_operations_research__Assignment_const_p_t solutions) Same as above but will try all assignments in order as first solutions
 until one succeeds.solveFromAssignmentWithParameters(Assignment assignment, RoutingSearchParameters search_parameters) Same as above, except that if assignment is not null, it will be used as
 the initial solution.solver()Returns the underlying constraint solver.SolveWithIteratedLocalSearch(RoutingSearchParameters search_parameters) Solves the current routing model by using an Iterated Local Search
 approach.solveWithParameters(RoutingSearchParameters search_parameters) Solves the current routing model with the given parameters.longstart(int vehicle) Model inspection.
 Returns the variable index of the starting node of a vehicle route.status()Returns the current status of the routing model.static longswigRelease(RoutingModel obj) Returns the time buffer to safely return a solution.longunperformedPenalty(long var_index) Get the "unperformed" penalty of a node.longunperformedPenaltyOrValue(long default_value, long var_index) 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).voidUpdateTimeLimit(SWIGTYPE_p_absl__Duration time_limit) Updates the time limit of the search limit.intVehicleIndex(long index) Returns the vehicle of the given start/end index, and -1 if the given
 index is not a vehicle start/end.VehicleRouteConsideredVar(int vehicle) Returns the variable specifying whether or not the given vehicle route is
 considered for costs and constraints.intvehicles()Returns the number of vehicle routes in the model.vehicleVar(long index) Returns the vehicle variable of the node corresponding to index.IntVar[]Returns all vehicle variables of the model, such that VehicleVars(i) is
 the vehicle variable of the node corresponding to i.booleanwriteAssignment(String file_name) 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.
- 
Field Details- 
swigCMemOwnprotected transient boolean swigCMemOwn
- 
PICKUP_AND_DELIVERY_NO_ORDERpublic static final int PICKUP_AND_DELIVERY_NO_ORDERAny precedence is accepted.
- 
PICKUP_AND_DELIVERY_LIFOpublic static final int PICKUP_AND_DELIVERY_LIFODeliveries must be performed in reverse order of pickups.
- 
PICKUP_AND_DELIVERY_FIFOpublic static final int PICKUP_AND_DELIVERY_FIFODeliveries must be performed in the same order as pickups.
- 
kTransitEvaluatorSignUnknownpublic static final int kTransitEvaluatorSignUnknownRepresents the sign of values returned by a transit evaluator.
- 
kTransitEvaluatorSignPositiveOrZeropublic static final int kTransitEvaluatorSignPositiveOrZero
- 
kTransitEvaluatorSignNegativeOrZeropublic static final int kTransitEvaluatorSignNegativeOrZero
- 
PENALIZE_ONCEpublic static final int PENALIZE_ONCEThe following enum is used to describe how the penalty cost is computed
 when using AddDisjunction.
- 
PENALIZE_PER_INACTIVEpublic static final int PENALIZE_PER_INACTIVE
- 
TYPE_ADDED_TO_VEHICLEpublic static final int TYPE_ADDED_TO_VEHICLEWhen visited, the number of types 'T' on the vehicle increases by one.
- 
ADDED_TYPE_REMOVED_FROM_VEHICLEpublic static final int ADDED_TYPE_REMOVED_FROM_VEHICLEWhen visited, one instance of type 'T' previously added to the route
 (TYPE_ADDED_TO_VEHICLE), if any, is removed from the vehicle.
 If the type was not previously added to the route or all added instances
 have already been removed, this visit has no effect on the types.
- 
TYPE_ON_VEHICLE_UP_TO_VISITpublic static final int TYPE_ON_VEHICLE_UP_TO_VISITWith the following policy, the visit enforces that type 'T' is
 considered on the route from its start until this node is visited.
- 
TYPE_SIMULTANEOUSLY_ADDED_AND_REMOVEDpublic static final int TYPE_SIMULTANEOUSLY_ADDED_AND_REMOVEDThe visit doesn't have an impact on the number of types 'T' on the
 route, as it's (virtually) added and removed directly.
 This policy can be used for visits which are part of an incompatibility
 or requirement set without affecting the type count on the route.
 
- 
- 
Constructor Details- 
RoutingModelpublic RoutingModel(long cPtr, boolean cMemoryOwn) 
- 
RoutingModelConstructor taking an index manager. The version which does not take
 RoutingModelParameters is equivalent to passing
 DefaultRoutingModelParameters().
- 
RoutingModel
 
- 
- 
Method Details- 
getCPtr
- 
swigRelease
- 
finalize
- 
deletepublic void delete()
- 
getKNoPenaltypublic static long getKNoPenalty()Constant used to express a hard constraint instead of a soft penalty.
- 
getKNoDisjunctionpublic static int getKNoDisjunction()Constant used to express the "no disjunction" index, returned when a node
 does not appear in any disjunction.
- 
getKNoDimensionpublic static int getKNoDimension()Constant used to express the "no dimension" index, returned when a
 dimension name does not correspond to an actual dimension.
- 
registerUnaryTransitVectorpublic int registerUnaryTransitVector(long[] values) Registers 'callback' and returns its index.
 The sign parameter allows to notify the solver that the callback only
 return values of the given sign. This can help the solver, but passing
 an incorrect sign may crash in non-opt compilation mode, and yield
 incorrect results in opt.
- 
registerUnaryTransitCallback
- 
registerUnaryTransitCallback
- 
registerTransitMatrixpublic int registerTransitMatrix(long[][] values) 
- 
registerTransitCallback
- 
registerTransitCallback
- 
RegisterCumulDependentTransitCallbackpublic int RegisterCumulDependentTransitCallback(SWIGTYPE_p_std__functionT_FloatSlopePiecewiseLinearFunction_const_pflong_longF_t callback) 
- 
CumulDependentTransitCallbackpublic SWIGTYPE_p_std__functionT_FloatSlopePiecewiseLinearFunction_const_pflong_longF_t CumulDependentTransitCallback(int callback_index) 
- 
addDimensionpublic boolean addDimension(int evaluator_index, long slack_max, long capacity, boolean fix_start_cumul_to_zero, 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, j) + 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'.
- 
addDimensionWithVehicleTransitspublic boolean addDimensionWithVehicleTransits(int[] evaluator_indices, long slack_max, long capacity, boolean fix_start_cumul_to_zero, String name) 
- 
addDimensionWithVehicleCapacitypublic boolean addDimensionWithVehicleCapacity(int evaluator_index, long slack_max, long[] vehicle_capacities, boolean fix_start_cumul_to_zero, String name) 
- 
addDimensionWithVehicleTransitAndCapacitypublic boolean addDimensionWithVehicleTransitAndCapacity(int[] evaluator_indices, long slack_max, long[] vehicle_capacities, boolean fix_start_cumul_to_zero, String name) 
- 
AddDimensionWithCumulDependentVehicleTransitAndCapacitypublic boolean AddDimensionWithCumulDependentVehicleTransitAndCapacity(int[] fixed_evaluator_indices, int[] cumul_dependent_evaluator_indices, long slack_max, long[] vehicle_capacities, boolean fix_start_cumul_to_zero, String name) Creates a dimension where the transit variable on arc i->j is the sum of:
 - A "fixed" transit value, obtained from the fixed_evaluator_index for
 this vehicle, referencing evaluators in transit_evaluators_, and
 - A FloatSlopePiecewiseLinearFunction of the cumul of node i, obtained
 from the cumul_dependent_evaluator_index of this vehicle, pointing to
 an evaluator in cumul_dependent_transit_evaluators_.
- 
addConstantDimensionWithSlackpublic IntBoolPair addConstantDimensionWithSlack(long value, long capacity, long slack_max, boolean fix_start_cumul_to_zero, 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 a pair consisting of an index to the registered unary transit
 callback and a bool denoting whether the dimension has been created.
 It is false if a dimension with the same name has already been created
 (and doesn't create the new dimension but still register a new callback).
- 
addConstantDimensionpublic IntBoolPair addConstantDimension(long value, long capacity, boolean fix_start_cumul_to_zero, String name) 
- 
addVectorDimensionpublic IntBoolPair addVectorDimension(long[] values, long capacity, boolean fix_start_cumul_to_zero, 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 a pair consisting of an index to the registered unary transit
 callback and a bool denoting whether the dimension has been created.
 It is false if a dimension with the same name has already been created
 (and doesn't create the new dimension but still register a new callback).
- 
addMatrixDimensionpublic IntBoolPair addMatrixDimension(long[][] values, long capacity, boolean fix_start_cumul_to_zero, 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 a pair consisting of an index to the registered transit callback
 and a bool denoting whether the dimension has been created.
 It is false if a dimension with the same name has already been created
 (and doesn't create the new dimension but still register a new callback).
- 
GetUnaryDimensionsReturns dimensions for which all transit evaluators are unary.
- 
GetDimensionsWithGlobalCumulOptimizerspublic SWIGTYPE_p_std__vectorT_operations_research__RoutingDimension_const_p_t GetDimensionsWithGlobalCumulOptimizers()Returns the dimensions which have [global|local]_dimension_optimizers_.
- 
GetDimensionsWithLocalCumulOptimizerspublic SWIGTYPE_p_std__vectorT_operations_research__RoutingDimension_const_p_t GetDimensionsWithLocalCumulOptimizers()
- 
HasGlobalCumulOptimizerReturns whether the given dimension has global/local cumul optimizers.
- 
HasLocalCumulOptimizer
- 
GetMutableGlobalCumulLPOptimizerpublic SWIGTYPE_p_operations_research__GlobalDimensionCumulOptimizer GetMutableGlobalCumulLPOptimizer(RoutingDimension dimension) Returns the global/local dimension cumul optimizer for a given dimension,
 or nullptr if there is none.
- 
GetMutableGlobalCumulMPOptimizerpublic SWIGTYPE_p_operations_research__GlobalDimensionCumulOptimizer GetMutableGlobalCumulMPOptimizer(RoutingDimension dimension) 
- 
GetMutableLocalCumulLPOptimizerpublic SWIGTYPE_p_operations_research__LocalDimensionCumulOptimizer GetMutableLocalCumulLPOptimizer(RoutingDimension dimension) 
- 
hasDimensionReturns true if a dimension exists for a given dimension name.
- 
getDimensionOrDieReturns a dimension from its name. Dies if the dimension does not exist.
- 
getMutableDimensionReturns a dimension from its name. Returns nullptr if the dimension does
 not exist.
- 
setPrimaryConstrainedDimensionSet 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.
- 
getPrimaryConstrainedDimensionGet the primary constrained dimension, or an empty string if it is unset.
- 
AddResourceGroupAdds a resource group to the routing model and returns a pointer to it.
- 
GetResourceGroupspublic SWIGTYPE_p_std__vectorT_std__unique_ptrT_operations_research__RoutingModel__ResourceGroup_t_t GetResourceGroups()
- 
GetResourceGroup
- 
GetDimensionResourceGroupIndicesReturns the indices of resource groups for this dimension. This method can
 only be called after the model has been closed.
- 
GetDimensionResourceGroupIndexReturns the index of the resource group attached to the dimension.
 DCHECKS that there's exactly one resource group for this dimension.
- 
addDisjunctionpublic int addDisjunction(long[] indices, long penalty, long max_cardinality, int penalty_cost_behavior) 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 if
 the penalty cost is set to `PENALIZE_PER_INACTIVE`.
 This is equivalent to adding the constraint:
 p + Sum(i)active[i] == max_cardinality
 where p is an integer variable.
 If the penalty cost is set to `PENALIZE_ONCE`, then 'penalty' is payed
 once if there are less than `max_cardinality` of the indices active.
 This is equivalent to adding the constraint:
 p == (Sum(i)active[i] != max_cardinality)
 where p is a boolean variable.
 The following cost is added 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.
- 
addDisjunctionpublic int addDisjunction(long[] indices, long penalty, long max_cardinality) 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 if
 the penalty cost is set to `PENALIZE_PER_INACTIVE`.
 This is equivalent to adding the constraint:
 p + Sum(i)active[i] == max_cardinality
 where p is an integer variable.
 If the penalty cost is set to `PENALIZE_ONCE`, then 'penalty' is payed
 once if there are less than `max_cardinality` of the indices active.
 This is equivalent to adding the constraint:
 p == (Sum(i)active[i] != max_cardinality)
 where p is a boolean variable.
 The following cost is added 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.
- 
addDisjunctionpublic int addDisjunction(long[] indices, long penalty) 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 if
 the penalty cost is set to `PENALIZE_PER_INACTIVE`.
 This is equivalent to adding the constraint:
 p + Sum(i)active[i] == max_cardinality
 where p is an integer variable.
 If the penalty cost is set to `PENALIZE_ONCE`, then 'penalty' is payed
 once if there are less than `max_cardinality` of the indices active.
 This is equivalent to adding the constraint:
 p == (Sum(i)active[i] != max_cardinality)
 where p is a boolean variable.
 The following cost is added 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.
- 
addDisjunctionpublic int addDisjunction(long[] indices) 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 if
 the penalty cost is set to `PENALIZE_PER_INACTIVE`.
 This is equivalent to adding the constraint:
 p + Sum(i)active[i] == max_cardinality
 where p is an integer variable.
 If the penalty cost is set to `PENALIZE_ONCE`, then 'penalty' is payed
 once if there are less than `max_cardinality` of the indices active.
 This is equivalent to adding the constraint:
 p == (Sum(i)active[i] != max_cardinality)
 where p is a boolean variable.
 The following cost is added 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.
- 
getDisjunctionIndicespublic int[] getDisjunctionIndices(long index) Returns the indices of the disjunctions to which an index belongs.
- 
GetDisjunctionNodeIndicespublic long[] GetDisjunctionNodeIndices(int index) Returns the variable indices of the nodes in the disjunction of index
 'index'.
- 
getDisjunctionPenaltypublic long getDisjunctionPenalty(int index) Returns the penalty of the node disjunction of index 'index'.
- 
getDisjunctionMaxCardinalitypublic long getDisjunctionMaxCardinality(int index) Returns the maximum number of possible active nodes of the node
 disjunction of index 'index'.
- 
GetDisjunctionPenaltyCostBehaviorpublic int GetDisjunctionPenaltyCostBehavior(int index) Returns the PenaltyCostBehavior used by the disjunction of index
 'index'.
- 
getNumberOfDisjunctionspublic int getNumberOfDisjunctions()Returns the number of node disjunctions in the model.
- 
HasMandatoryDisjunctionspublic boolean HasMandatoryDisjunctions()Returns true if the model contains mandatory disjunctions (ones with
 kNoPenalty as penalty).
- 
HasMaxCardinalityConstrainedDisjunctionspublic boolean HasMaxCardinalityConstrainedDisjunctions()Returns true if the model contains at least one disjunction which is
 constrained by its max_cardinality.
- 
ignoreDisjunctionsAlreadyForcedToZeropublic void 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.
- 
addSoftSameVehicleConstraintpublic void addSoftSameVehicleConstraint(long[] indices, long cost) Adds a soft constraint 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.
- 
setAllowedVehiclesForIndexpublic void setAllowedVehiclesForIndex(int[] vehicles, long 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).
- 
isVehicleAllowedForIndexpublic boolean isVehicleAllowedForIndex(int vehicle, long index) Returns true if a vehicle is allowed to visit a given node.
- 
addPickupAndDeliverypublic void addPickupAndDelivery(long pickup, long 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_t index1 = manager.NodeToIndex(node1);
 int64_t index2 = manager.NodeToIndex(node2);
 solver->AddConstraint(solver->MakeEquality(
 routing.VehicleVar(index1),
 routing.VehicleVar(index2)));
 routing.AddPickupAndDelivery(index1, index2);
- 
addPickupAndDeliverySetspublic void addPickupAndDeliverySets(int pickup_disjunction, int 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'.
- 
GetPickupPositionpublic SWIGTYPE_p_std__optionalT_operations_research__RoutingModel__PickupDeliveryPosition_t GetPickupPosition(long node_index) Returns the pickup and delivery positions where the node is a pickup.
- 
GetDeliveryPositionpublic SWIGTYPE_p_std__optionalT_operations_research__RoutingModel__PickupDeliveryPosition_t GetDeliveryPosition(long node_index) Returns the pickup and delivery positions where the node is a delivery.
- 
IsPickuppublic boolean IsPickup(long node_index) Returns whether the node is a pickup (resp. delivery).
- 
IsDeliverypublic boolean IsDelivery(long node_index) 
- 
setPickupAndDeliveryPolicyOfAllVehiclespublic void setPickupAndDeliveryPolicyOfAllVehicles(int policy) Sets the Pickup and delivery policy of all vehicles. It is equivalent to
 calling SetPickupAndDeliveryPolicyOfVehicle on all vehicles.
- 
setPickupAndDeliveryPolicyOfVehiclepublic void setPickupAndDeliveryPolicyOfVehicle(int policy, int vehicle) 
- 
getPickupAndDeliveryPolicyOfVehiclepublic int getPickupAndDeliveryPolicyOfVehicle(int vehicle) 
- 
getNumOfSingletonNodespublic int getNumOfSingletonNodes()Returns the number of non-start/end nodes which do not appear in a
 pickup/delivery pair.
- 
GetFirstMatchingPickupDeliverySiblingpublic SWIGTYPE_p_std__optionalT_long_t GetFirstMatchingPickupDeliverySibling(long node, SWIGTYPE_p_std__functionT_bool_flongF_t is_match) 
- 
setVisitTypepublic void setVisitType(long index, int type, int type_policy) 
- 
getVisitTypepublic int getVisitType(long index) 
- 
GetSingleNodesOfTypepublic int[] GetSingleNodesOfType(int type) 
- 
GetPairIndicesOfTypepublic int[] GetPairIndicesOfType(int type) 
- 
GetVisitTypePolicypublic int GetVisitTypePolicy(long index) 
- 
getNumberOfVisitTypespublic int getNumberOfVisitTypes()
- 
addHardTypeIncompatibilitypublic 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.
 NOTE: To avoid unnecessary memory reallocations, it is recommended to only
 add incompatibilities once all the existing types have been set with
 SetVisitType().
- 
addTemporalTypeIncompatibilitypublic void addTemporalTypeIncompatibility(int type1, int type2) 
- 
getTemporalTypeIncompatibilitiesOfType
- 
hasHardTypeIncompatibilitiespublic boolean hasHardTypeIncompatibilities()Returns true iff any hard (resp. temporal) type incompatibilities have
 been added to the model.
- 
hasTemporalTypeIncompatibilitiespublic boolean hasTemporalTypeIncompatibilities()
- 
addRequiredTypeAlternativesWhenAddingTypepublic void addRequiredTypeAlternativesWhenAddingType(int dependent_type, SWIGTYPE_p_absl__flat_hash_setT_int_t required_type_alternatives) If type_D depends on type_R when adding type_D, any node_D of type_D and
 VisitTypePolicy TYPE_ADDED_TO_VEHICLE or
 TYPE_SIMULTANEOUSLY_ADDED_AND_REMOVED requires at least one type_R on its
 vehicle at the time node_D is visited.
- 
addRequiredTypeAlternativesWhenRemovingTypepublic void addRequiredTypeAlternativesWhenRemovingType(int dependent_type, SWIGTYPE_p_absl__flat_hash_setT_int_t required_type_alternatives) The following requirements apply when visiting dependent nodes that remove
 their type from the route, i.e. type_R must be on the vehicle when type_D
 of VisitTypePolicy ADDED_TYPE_REMOVED_FROM_VEHICLE,
 TYPE_ON_VEHICLE_UP_TO_VISIT or TYPE_SIMULTANEOUSLY_ADDED_AND_REMOVED is
 visited.
- 
GetRequiredTypeAlternativesWhenAddingTypepublic SWIGTYPE_p_std__vectorT_absl__flat_hash_setT_int_t_t GetRequiredTypeAlternativesWhenAddingType(int type) Returns the set of requirement alternatives when adding the given type.
- 
GetRequiredTypeAlternativesWhenRemovingTypepublic SWIGTYPE_p_std__vectorT_absl__flat_hash_setT_int_t_t GetRequiredTypeAlternativesWhenRemovingType(int type) Returns the set of requirement alternatives when removing the given type.
- 
hasSameVehicleTypeRequirementspublic boolean hasSameVehicleTypeRequirements()Returns true iff any same-route (resp. temporal) type requirements have
 been added to the model.
- 
hasTemporalTypeRequirementspublic boolean hasTemporalTypeRequirements()
- 
unperformedPenaltypublic long unperformedPenalty(long var_index) Get the "unperformed" penalty of a node. This is only well defined if the
 node is only part of a single Disjunction, and that disjunction has a
 penalty. For forced active nodes returns max int64_t. In all other cases,
 this returns 0.
- 
unperformedPenaltyOrValuepublic long unperformedPenaltyOrValue(long default_value, long var_index) 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).
- 
getDepotpublic long getDepot()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.
- 
SetMaximumNumberOfActiveVehiclespublic void SetMaximumNumberOfActiveVehicles(int max_active_vehicles) Constrains the maximum number of active vehicles, aka the number of
 vehicles which do not have an empty route. For instance, this can be used
 to limit the number of routes in the case where there are fewer drivers
 than vehicles and that the fleet of vehicle is heterogeneous.
- 
GetMaximumNumberOfActiveVehiclespublic int GetMaximumNumberOfActiveVehicles()Returns the maximum number of active vehicles.
- 
setArcCostEvaluatorOfAllVehiclespublic 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.
- 
setArcCostEvaluatorOfVehiclepublic void setArcCostEvaluatorOfVehicle(int evaluator_index, int vehicle) Sets the cost function for a given vehicle route.
- 
setFixedCostOfAllVehiclespublic void setFixedCostOfAllVehicles(long cost) Sets the fixed cost of all vehicle routes. It is equivalent to calling
 SetFixedCostOfVehicle on all vehicle routes.
- 
setFixedCostOfVehiclepublic void setFixedCostOfVehicle(long cost, int vehicle) Sets the fixed cost of one vehicle route.
- 
getFixedCostOfVehiclepublic long getFixedCostOfVehicle(int vehicle) 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.
- 
SetPathEnergyCostOfVehicle
- 
SetPathEnergyCostsOfVehicle
- 
setAmortizedCostFactorsOfAllVehiclespublic void setAmortizedCostFactorsOfAllVehicles(long linear_cost_factor, long 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]
 - quadratic_cost_factor_of_vehicle_[v]*(square of length of route v)]
 i.e. for every used vehicle, we add the linear factor as fixed cost, and
 subtract the square of the route length multiplied by the quadratic
 factor. This second term aims at making the routes as dense as possible.
 
 Sets the linear and quadratic cost factor of all vehicles.
- 
setAmortizedCostFactorsOfVehiclepublic void setAmortizedCostFactorsOfVehicle(long linear_cost_factor, long quadratic_cost_factor, int vehicle) Sets the linear and quadratic cost factor of the given vehicle.
- 
getAmortizedLinearCostFactorOfVehiclespublic long[] getAmortizedLinearCostFactorOfVehicles()
- 
getAmortizedQuadraticCostFactorOfVehiclespublic long[] getAmortizedQuadraticCostFactorOfVehicles()
- 
AddRouteConstraintpublic void AddRouteConstraint(SWIGTYPE_p_std__functionT_std__optionalT_long_t_fstd__vectorT_long_t_const_RF_t route_evaluator, boolean costs_are_homogeneous_across_vehicles) 
- 
AddRouteConstraintpublic void AddRouteConstraint(SWIGTYPE_p_std__functionT_std__optionalT_long_t_fstd__vectorT_long_t_const_RF_t route_evaluator) 
- 
GetRouteCost
- 
SetVehicleUsedWhenEmptypublic void SetVehicleUsedWhenEmpty(boolean is_used, int vehicle) 
- 
IsVehicleUsedWhenEmptypublic boolean IsVehicleUsedWhenEmpty(int vehicle) 
- 
setFirstSolutionEvaluatorGets/sets the evaluator used during the search. Only relevant when
 RoutingSearchParameters.first_solution_strategy = EVALUATOR_STRATEGY.
 Takes ownership of evaluator.
- 
SetFirstSolutionHintAdds a hint to be used by first solution strategies. The hint assignment
 must outlive the search.
 As of 2024-12, only used by LOCAL_CHEAPEST_INSERTION and
 LOCAL_CHEAPEST_COST_INSERTION.
- 
GetFirstSolutionHintReturns the current hint assignment.
- 
addLocalSearchOperatorAdds a local search operator to the set of operators used to solve the
 vehicle routing problem.
- 
addSearchMonitorAdds a search monitor to the search used to solve the routing model.
- 
AddEnterSearchCallback
- 
addAtSolutionCallbackAdds 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.
 If track_unchecked_neighbors is true, the callback will also be called on
 AcceptUncheckedNeighbor() events, which is useful to grab solutions
 obtained when solver_parameters.check_solution_period > 1 (aka fastLS).
- 
addAtSolutionCallbackAdds 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.
 If track_unchecked_neighbors is true, the callback will also be called on
 AcceptUncheckedNeighbor() events, which is useful to grab solutions
 obtained when solver_parameters.check_solution_period > 1 (aka fastLS).
- 
AddRestoreDimensionValuesResetCallback
- 
addVariableMinimizedByFinalizerAdds 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).
- 
addVariableMaximizedByFinalizerAdds a variable to maximize in the solution finalizer (see above for
 information on the solution finalizer).
- 
AddWeightedVariableMinimizedByFinalizerAdds a variable to minimize in the solution finalizer, with a weighted
 priority: the higher the more priority it has.
- 
AddWeightedVariableMaximizedByFinalizerAdds a variable to maximize in the solution finalizer, with a weighted
 priority: the higher the more priority it has.
- 
addVariableTargetToFinalizerAdd a variable to set the closest possible to the target value in the
 solution finalizer.
- 
AddWeightedVariableTargetToFinalizerSame as above with a weighted priority: the higher the cost, the more
 priority it has to be set close to the target value.
- 
closeModelpublic void 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()).
- 
closeModelWithParametersSame as above taking search parameters (as of 10/2015 some the parameters
 have to be set when closing the model).
- 
solveSolves the current routing model; closes the current model.
 This is equivalent to calling
 SolveWithParameters(DefaultRoutingSearchParameters())
 or
 SolveFromAssignmentWithParameters(assignment,
 DefaultRoutingSearchParameters()).
- 
solveSolves the current routing model; closes the current model.
 This is equivalent to calling
 SolveWithParameters(DefaultRoutingSearchParameters())
 or
 SolveFromAssignmentWithParameters(assignment,
 DefaultRoutingSearchParameters()).
- 
solveWithParametersSolves 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.
- 
solveFromAssignmentWithParameterspublic Assignment solveFromAssignmentWithParameters(Assignment assignment, RoutingSearchParameters search_parameters) Same as above, except that if assignment is not null, it will be used as
 the initial solution.
- 
FastSolveFromAssignmentWithParameterspublic Assignment FastSolveFromAssignmentWithParameters(Assignment assignment, RoutingSearchParameters search_parameters, boolean check_solution_in_cp, SWIGTYPE_p_absl__flat_hash_setT_operations_research__IntVar_p_t touched) Improves a given assignment using unchecked local search.
 If check_solution_in_cp is true the final solution will be checked with
 the CP solver.
 As of 11/2023, only works with greedy descent.
- 
FastSolveFromAssignmentWithParameterspublic Assignment FastSolveFromAssignmentWithParameters(Assignment assignment, RoutingSearchParameters search_parameters, boolean check_solution_in_cp) Improves a given assignment using unchecked local search.
 If check_solution_in_cp is true the final solution will be checked with
 the CP solver.
 As of 11/2023, only works with greedy descent.
- 
SolveFromAssignmentsWithParameterspublic Assignment SolveFromAssignmentsWithParameters(SWIGTYPE_p_std__vectorT_operations_research__Assignment_const_p_t assignments, RoutingSearchParameters search_parameters, SWIGTYPE_p_std__vectorT_operations_research__Assignment_const_p_t solutions) Same as above but will try all assignments in order as first solutions
 until one succeeds.
- 
SolveFromAssignmentsWithParameterspublic Assignment SolveFromAssignmentsWithParameters(SWIGTYPE_p_std__vectorT_operations_research__Assignment_const_p_t assignments, RoutingSearchParameters search_parameters) Same as above but will try all assignments in order as first solutions
 until one succeeds.
- 
SolveWithIteratedLocalSearchSolves the current routing model by using an Iterated Local Search
 approach.
- 
setAssignmentFromOtherModelAssignmentpublic void setAssignmentFromOtherModelAssignment(Assignment target_assignment, RoutingModel source_model, 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_.
- 
computeLowerBoundpublic long 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).
- 
objective_lower_boundpublic long objective_lower_bound()Returns the current lower bound found by internal solvers during the
 search.
- 
statusReturns the current status of the routing model.
- 
enable_deep_serializationpublic boolean enable_deep_serialization()Returns the value of the internal enable_deep_serialization_ parameter.
- 
applyLocksApplies 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().
- 
applyLocksToAllVehiclespublic boolean applyLocksToAllVehicles(long[][] locks, boolean 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().
- 
preAssignmentReturns 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.
- 
mutablePreAssignment
- 
writeAssignmentWrites the current solution to a file containing an AssignmentProto.
 Returns false if the file cannot be opened or if there is no current
 solution.
- 
readAssignmentReads 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.
- 
restoreAssignmentRestores an assignment as a solution in the routing model and returns the
 new solution. Returns nullptr if the assignment is not valid.
- 
readAssignmentFromRoutesRestores 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.
- 
routesToAssignmentpublic boolean routesToAssignment(long[][] routes, boolean ignore_inactive_indices, boolean close_routes, Assignment assignment) 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.
- 
assignmentToRoutesConverts 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).
- 
compactAssignmentConverts the solution in the given assignment to routes for all vehicles.
 If the returned vector is route_indices, route_indices[i][j] is the index
 for jth location visited on route i. Note that contrary to
 AssignmentToRoutes, the vectors do include start and end locations.
 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).
- 
compactAndCheckAssignmentSame 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).
- 
addToAssignmentAdds an extra variable to the vehicle routing assignment.
- 
addIntervalToAssignment
- 
GetOrCreateNodeNeighborsByCostClasspublic RoutingModel.NodeNeighborsByCostClass GetOrCreateNodeNeighborsByCostClass(double neighbors_ratio, long min_neighbors, SWIGTYPE_p_double neighbors_ratio_used, boolean add_vehicle_starts_to_neighbors, boolean add_vehicle_ends_to_neighbors, boolean only_sort_neighbors_for_partial_neighborhoods) Returns neighbors of all nodes for every cost class. The result is cached
 and is computed once. The number of neighbors considered is based on a
 ratio of non-vehicle nodes, specified by neighbors_ratio, with a minimum
 of min-neighbors node considered.
- 
GetOrCreateNodeNeighborsByCostClasspublic RoutingModel.NodeNeighborsByCostClass GetOrCreateNodeNeighborsByCostClass(double neighbors_ratio, long min_neighbors, SWIGTYPE_p_double neighbors_ratio_used, boolean add_vehicle_starts_to_neighbors, boolean add_vehicle_ends_to_neighbors) Returns neighbors of all nodes for every cost class. The result is cached
 and is computed once. The number of neighbors considered is based on a
 ratio of non-vehicle nodes, specified by neighbors_ratio, with a minimum
 of min-neighbors node considered.
- 
GetOrCreateNodeNeighborsByCostClasspublic RoutingModel.NodeNeighborsByCostClass GetOrCreateNodeNeighborsByCostClass(double neighbors_ratio, long min_neighbors, SWIGTYPE_p_double neighbors_ratio_used, boolean add_vehicle_starts_to_neighbors) Returns neighbors of all nodes for every cost class. The result is cached
 and is computed once. The number of neighbors considered is based on a
 ratio of non-vehicle nodes, specified by neighbors_ratio, with a minimum
 of min-neighbors node considered.
- 
GetOrCreateNodeNeighborsByCostClasspublic RoutingModel.NodeNeighborsByCostClass GetOrCreateNodeNeighborsByCostClass(double neighbors_ratio, long min_neighbors, SWIGTYPE_p_double neighbors_ratio_used) Returns neighbors of all nodes for every cost class. The result is cached
 and is computed once. The number of neighbors considered is based on a
 ratio of non-vehicle nodes, specified by neighbors_ratio, with a minimum
 of min-neighbors node considered.
- 
GetOrCreateNodeNeighborsByCostClasspublic RoutingModel.NodeNeighborsByCostClass GetOrCreateNodeNeighborsByCostClass(RoutingModel.NodeNeighborsParameters params) Returns parameters.num_neighbors neighbors of all nodes for every cost
 class. The result is cached and is computed once.
- 
addLocalSearchFilterAdds 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.
- 
startpublic long start(int vehicle) Model inspection.
 Returns the variable index of the starting node of a vehicle route.
- 
endpublic long end(int vehicle) Returns the variable index of the ending node of a vehicle route.
- 
isStartpublic boolean isStart(long index) Returns true if 'index' represents the first node of a route.
- 
isEndpublic boolean isEnd(long index) Returns true if 'index' represents the last node of a route.
- 
VehicleIndexpublic int VehicleIndex(long index) Returns the vehicle of the given start/end index, and -1 if the given
 index is not a vehicle start/end.
- 
nextAssignment inspection
 Returns the variable index of the node directly after the node
 corresponding to 'index' in 'assignment'.
- 
isVehicleUsedReturns true if the route of 'vehicle' is non empty in 'assignment'.
- 
nextsReturns all next variables of the model, such that Nexts(i) is the next
 variable of the node corresponding to i.
- 
vehicleVarsReturns all vehicle variables of the model, such that VehicleVars(i) is
 the vehicle variable of the node corresponding to i.
- 
ResourceVarsReturns vehicle resource variables for a given resource group, such that
 ResourceVars(r_g)[v] is the resource variable for vehicle 'v' in resource
 group 'r_g'.
- 
nextVarReturns the next variable of the node corresponding to index. Note that
 NextVar(index) == index is equivalent to ActiveVar(index) == 0.
- 
activeVarReturns the active variable of the node corresponding to index.
- 
activeVehicleVarReturns the active variable of the vehicle. It will be equal to 1 iff the
 route of the vehicle is not empty, 0 otherwise.
- 
VehicleRouteConsideredVarReturns the variable specifying whether or not the given vehicle route is
 considered for costs and constraints. It will be equal to 1 iff the route
 of the vehicle is not empty OR vehicle_used_when_empty_[vehicle] is true.
- 
vehicleVarReturns the vehicle variable of the node corresponding to index. Note that
 VehicleVar(index) == -1 is equivalent to ActiveVar(index) == 0.
- 
ResourceVarReturns the resource variable for the given vehicle index in the given
 resource group. If a vehicle doesn't require a resource from the
 corresponding resource group, then ResourceVar(v, r_g) == -1.
- 
costVarReturns the global cost variable which is being minimized.
- 
getArcCostForVehiclepublic long getArcCostForVehicle(long from_index, long to_index, long vehicle) 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.
- 
costsAreHomogeneousAcrossVehiclespublic boolean costsAreHomogeneousAcrossVehicles()Whether costs are homogeneous across all vehicles.
- 
getHomogeneousCostpublic long getHomogeneousCost(long from_index, long to_index) Returns the cost of the segment between two nodes supposing all vehicle
 costs are the same (returns the cost for the first vehicle otherwise).
- 
getArcCostForFirstSolutionpublic long getArcCostForFirstSolution(long from_index, long to_index) 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.
- 
getArcCostForClasspublic long getArcCostForClass(long from_index, long to_index, long cost_class_index) 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.
- 
getCostClassIndexOfVehiclepublic int getCostClassIndexOfVehicle(long vehicle) Get the cost class index of the given vehicle.
- 
hasVehicleWithCostClassIndexpublic boolean hasVehicleWithCostClassIndex(int cost_class_index) Returns true iff the model contains a vehicle with the given
 cost_class_index.
- 
getCostClassesCountpublic int getCostClassesCount()Returns the number of different cost classes in the model.
- 
getNonZeroCostClassesCountpublic int getNonZeroCostClassesCount()Ditto, minus the 'always zero', built-in cost class.
- 
getVehicleClassIndexOfVehiclepublic int getVehicleClassIndexOfVehicle(long vehicle) 
- 
GetVehicleOfClasspublic int GetVehicleOfClass(int vehicle_class) Returns a vehicle of the given vehicle class, and -1 if there are no
 vehicles for this class.
- 
getVehicleClassesCountpublic int getVehicleClassesCount()Returns the number of different vehicle classes in the model.
- 
getSameVehicleIndicesOfIndexpublic int[] getSameVehicleIndicesOfIndex(int node) Returns variable indices of nodes constrained to be on the same route.
- 
GetSameActivityIndicesOfIndexpublic int[] GetSameActivityIndicesOfIndex(int node) Returns variable indices of nodes constrained to have the same activity.
- 
GetSameActivityGroupOfIndexpublic int GetSameActivityGroupOfIndex(int node) Returns the same activity group of the node.
- 
GetSameActivityGroupsCountpublic int GetSameActivityGroupsCount()Returns the number of same activity groups.
- 
GetSameActivityIndicesOfGrouppublic int[] GetSameActivityIndicesOfGroup(int group) Returns variable indices of nodes in the same activity group.
- 
GetVehicleTypeContainer
- 
arcIsMoreConstrainedThanArcpublic boolean arcIsMoreConstrainedThanArc(long from, long to1, long to2) Returns whether the arc from->to1 is more constrained than from->to2,
 taking into account, in order:
 - whether the destination node isn't an end node
 - whether the destination node is mandatory
 - whether the destination node is bound to the same vehicle as the source
 - the "primary constrained" dimension (see SetPrimaryConstrainedDimension)
 It then breaks ties using, in order:
 - the arc cost (taking unperformed penalties into account)
 - the size of the vehicle vars of "to1" and "to2" (lowest size wins)
 - the value: the lowest value of the indices to1 and to2 wins.
 See the .cc for details.
 The more constrained arc is typically preferable when building a
 first solution. This method is intended to be used as a callback for the
 BestValueByComparisonSelector value selector.
 Args:
 from: the variable index of the source node
 to1: the variable index of the first candidate destination node.
 to2: the variable index of the second candidate destination node.
- 
debugOutputAssignmentPrint 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.
- 
CheckIfAssignmentIsFeasiblepublic boolean CheckIfAssignmentIsFeasible(Assignment assignment, boolean call_at_solution_monitors) Returns a vector cumul_bounds, for which cumul_bounds[i][j] is a pair
 containing the minimum and maximum of the CumulVar of the jth node on
 route i.
 - cumul_bounds[i][j].first is the minimum.
 - cumul_bounds[i][j].second is the maximum.
 Checks if an assignment is feasible.
- 
solverReturns the underlying constraint solver. Can be used to add extra
 constraints and/or modify search algorithms.
- 
checkLimitReturns true if the search limit has been crossed with the given time
 offset.
- 
checkLimitpublic boolean checkLimit()Returns true if the search limit has been crossed with the given time
 offset.
- 
UpdateTimeLimitUpdates the time limit of the search limit.
- 
TimeBufferReturns the time buffer to safely return a solution.
- 
GetMutableCPSatInterruptReturns the atomic<bool> to stop the CP-SAT solver.
- 
GetMutableCPInterruptReturns the atomic<bool> to stop the CP solver.
- 
CancelSearchpublic void CancelSearch()Cancels the current search.
- 
nodespublic int nodes()Sizes and indices
 Returns the number of nodes in the model.
- 
vehiclespublic int vehicles()Returns the number of vehicle routes in the model.
- 
sizepublic long size()Returns the number of next variables in the model.
- 
getNumberOfDecisionsInFirstSolutionReturns statistics on first solution search, number of decisions sent to
 filters, number of decisions rejected by filters.
- 
getNumberOfRejectsInFirstSolution
- 
isMatchingModelpublic boolean isMatchingModel()Returns true if a vehicle/node matching problem is detected.
- 
AreRoutesInterdependentpublic boolean AreRoutesInterdependent(SWIGTYPE_p_operations_research__RoutingSearchParameters parameters) Returns true if routes are interdependent. This means that any
 modification to a route might impact another.
- 
makeGuidedSlackFinalizerpublic DecisionBuilder makeGuidedSlackFinalizer(RoutingDimension dimension, LongUnaryOperator 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:
 1. It follows the routes defined by the nexts variables when choosing a
 variable to make a decision on.
 2. When it comes to choose a value for the slack of node i, the decision
 builder first calls the callback with argument i, and supposingly the
 returned value is x it creates decisions slack[i] = x, slack[i] = x +
 1, slack[i] = x - 1, slack[i] = x + 2, etc.
- 
makeSelfDependentDimensionFinalizerMakeSelfDependentDimensionFinalizer 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.
- 
GetPathsMetadata
- 
GetVehiclesOfSameClassReturns indices of the vehicles which are in the same vehicle class as the
 vehicle starting or ending at start_end_index.
- 
GetSameVehicleClassArcspublic SWIGTYPE_p_std__vectorT_std__pairT_long_long_t_t GetSameVehicleClassArcs(long from_index, long to_index) Returns all arcs which are equivalent to the {from_index, to_index} arc
 wrt vehicle classes. Arcs will be returned only if from_index is the
 start of a vehicle or if to_index is the end of a vehicle. The returned
 arcs will then be starting or ending at start or end nodes of vehicles in
 the same vehicle class. The input arc is included in the returned vector.
 
-