discrete_optimization.vrp.solver package
Submodules
discrete_optimization.vrp.solver.greedy_vrp module
- class discrete_optimization.vrp.solver.greedy_vrp.GreedyVRPSolver(problem: Problem, params_objective_function: ParamsObjectiveFunction | None = None, **kwargs: Any)[source]
Bases:
SolverVrp
- solve(**kwargs: Any) ResultStorage [source]
Generic solving function.
- Parameters:
callbacks – list of callbacks used to hook into the various stage of the solve
**kwargs – any argument specific to the solver
Solvers deriving from SolverDo should use callbacks methods .on_step_end(), … during solve(). But some solvers are not yet updated and are just ignoring it.
Returns (ResultStorage): a result object containing potentially a pool of solutions to a discrete-optimization problem
discrete_optimization.vrp.solver.lp_vrp_iterative module
- class discrete_optimization.vrp.solver.lp_vrp_iterative.VRPIterativeLP(problem: Problem, params_objective_function: ParamsObjectiveFunction | None = None, **kwargs: Any)[source]
Bases:
SolverVrp
- constraint_on_edge: Dict[int, Any] | None = None
- edges: Set[Edge]
- edges_in_customers: Dict[int, Set[Edge]]
- edges_in_merged_graph: Dict[Node, Set[Edge]]
- edges_out_customers: Dict[int, Set[Edge]]
- edges_out_merged_graph: Dict[Node, Set[Edge]]
- edges_warm_set: Set[Edge]
- init_model(**kwargs: Any) None [source]
Initialize intern model used to solve.
Can initialize a ortools, milp, gurobi, … model.
- model: Model | None = None
- problem: VrpProblem2D
- solve(**kwargs: Any) ResultStorage [source]
Generic solving function.
- Parameters:
callbacks – list of callbacks used to hook into the various stage of the solve
**kwargs – any argument specific to the solver
Solvers deriving from SolverDo should use callbacks methods .on_step_end(), … during solve(). But some solvers are not yet updated and are just ignoring it.
Returns (ResultStorage): a result object containing potentially a pool of solutions to a discrete-optimization problem
- x_var: Dict[Edge, Var] | None = None
- discrete_optimization.vrp.solver.lp_vrp_iterative.build_graph_pruned_vrp(vrp_problem: VrpProblem2D) Tuple[DiGraph, DiGraph, Dict[int, Set[Tuple[Tuple[int, int], Tuple[int, int]]]], Dict[int, Set[Tuple[Tuple[int, int], Tuple[int, int]]]], Dict[Tuple[int, int], Set[Tuple[Tuple[int, int], Tuple[int, int]]]], Dict[Tuple[int, int], Set[Tuple[Tuple[int, int], Tuple[int, int]]]]] [source]
- discrete_optimization.vrp.solver.lp_vrp_iterative.build_matrice_distance_np(customer_count: int, customers: Sequence[Customer2D]) Tuple[ndarray, ndarray] [source]
- discrete_optimization.vrp.solver.lp_vrp_iterative.build_the_cycles(x_solution: Set[Tuple[Tuple[int, int], Tuple[int, int]]], component: Set[Tuple[int, int]], start_index: Tuple[int, int], end_index: Tuple[int, int]) Tuple[List[Tuple[int, int]], Dict[Tuple[int, int], int]] [source]
- discrete_optimization.vrp.solver.lp_vrp_iterative.build_warm_edges_and_update_graph(vrp_problem: VrpProblem, vrp_solution: VrpSolution, graph: DiGraph, edges: Set[Tuple[Tuple[int, int], Tuple[int, int]]], edges_in_merged_graph: Dict[Tuple[int, int], Set[Tuple[Tuple[int, int], Tuple[int, int]]]], edges_out_merged_graph: Dict[Tuple[int, int], Set[Tuple[Tuple[int, int], Tuple[int, int]]]], edges_in_customers: Dict[int, Set[Tuple[Tuple[int, int], Tuple[int, int]]]], edges_out_customers: Dict[int, Set[Tuple[Tuple[int, int], Tuple[int, int]]]]) Tuple[List[List[Tuple[Tuple[int, int], Tuple[int, int]]]], Set[Tuple[Tuple[int, int], Tuple[int, int]]]] [source]
- discrete_optimization.vrp.solver.lp_vrp_iterative.compute_start_end_flows_info(start_indexes: List[int], end_indexes: List[int]) Tuple[Dict[int, Dict[str, Any]], Dict[int, Dict[str, Any]]] [source]
- discrete_optimization.vrp.solver.lp_vrp_iterative.init_model_lp(g: nx.DiGraph, edges: Set[Edge], edges_in_customers: Dict[int, Set[Edge]], edges_out_customers: Dict[int, Set[Edge]], edges_in_merged_graph: Dict[Node, Set[Edge]], edges_out_merged_graph: Dict[Node, Set[Edge]], edges_warm_set: Set[Edge], fraction: float, start_indexes: List[int], end_indexes: List[int], vehicle_count: int, vehicle_capacity: List[float], do_lns: bool = False, include_backward: bool = True, include_triangle: bool = False) Tuple['Model', Dict[Edge, 'Var'], Dict[str | int, Any], Dict[str, Any], Dict[int, Any]] [source]
- discrete_optimization.vrp.solver.lp_vrp_iterative.plot_solve(solutions: List[Dict[int, Set[Tuple[Tuple[int, int], Tuple[int, int]]]]], customers: Sequence[Customer2D], rebuilt_solution: List[Dict[int, List[Tuple[int, int]]]], cost: List[float], rebuilt_obj: List[float]) None [source]
- discrete_optimization.vrp.solver.lp_vrp_iterative.rebuild_tsp_routine(sorted_connected_component: List[Tuple[Set[Tuple[int, int]], int]], paths_component: Dict[int, List[Tuple[int, int]]], node_to_component: Dict[Tuple[int, int], int], indexes: Dict[int, Dict[Tuple[int, int], int]], graph: DiGraph, edges: Set[Tuple[Tuple[int, int], Tuple[int, int]]], evaluate_function_indexes: Callable[[int, int], float], vrp_model: VrpProblem, start_index: Tuple[int, int], end_index: Tuple[int, int]) Tuple[List[Tuple[int, int]], float] [source]
- discrete_optimization.vrp.solver.lp_vrp_iterative.reevaluate_solutions(solutions: List[Tuple[DiGraph, Dict[int, DiGraph], Dict[int, Set[Tuple[Tuple[int, int], Tuple[int, int]]]]]], vehicle_count: int, g: DiGraph, vrp_problem: VrpProblem) Tuple[Dict[int, Set[Tuple[Tuple[int, int], Tuple[int, int]]]], Dict[int, List[Tuple[int, int]]], float, Dict[int, List[Tuple[Set[Tuple[int, int]], int]]], List[Tuple[Set[Tuple[int, int]], int]], List[Dict[int, List[Tuple[Set[Tuple[int, int]], int]]]], List[List[Tuple[Set[Tuple[int, int]], int]]]] [source]
- discrete_optimization.vrp.solver.lp_vrp_iterative.retrieve_solutions(model: Model, x_var: Dict[Edge, 'Var'], vehicle_count: int, g: nx.DiGraph) List[Tuple[nx.DiGraph, Dict[int, nx.DiGraph], Dict[int, Set[Edge]]]] [source]
- discrete_optimization.vrp.solver.lp_vrp_iterative.update_graph(g: DiGraph, edges: Set[Tuple[Tuple[int, int], Tuple[int, int]]], edges_in_customers: Dict[int, Set[Tuple[Tuple[int, int], Tuple[int, int]]]], edges_out_customers: Dict[int, Set[Tuple[Tuple[int, int], Tuple[int, int]]]], edges_in_merged_graph: Dict[Tuple[int, int], Set[Tuple[Tuple[int, int], Tuple[int, int]]]], edges_out_merged_graph: Dict[Tuple[int, int], Set[Tuple[Tuple[int, int], Tuple[int, int]]]], edges_missing: Set[Tuple[Tuple[int, int], Tuple[int, int]]], customers: Sequence[Customer2D]) Tuple[DiGraph, Set[Tuple[Tuple[int, int], Tuple[int, int]]], Dict[int, Set[Tuple[Tuple[int, int], Tuple[int, int]]]], Dict[int, Set[Tuple[Tuple[int, int], Tuple[int, int]]]], Dict[Tuple[int, int], Set[Tuple[Tuple[int, int], Tuple[int, int]]]], Dict[Tuple[int, int], Set[Tuple[Tuple[int, int], Tuple[int, int]]]]] [source]
discrete_optimization.vrp.solver.lp_vrp_iterative_pymip module
- class discrete_optimization.vrp.solver.lp_vrp_iterative_pymip.VRPIterativeLP_Pymip(problem: Problem, params_objective_function: ParamsObjectiveFunction | None = None, **kwargs: Any)[source]
Bases:
SolverVrp
- constraint_on_edge: Dict[int, Any] | None = None
- edges: Set[Edge]
- edges_in_customers: Dict[int, Set[Edge]]
- edges_in_merged_graph: Dict[Node, Set[Edge]]
- edges_out_customers: Dict[int, Set[Edge]]
- edges_out_merged_graph: Dict[Node, Set[Edge]]
- edges_warm_set: Set[Edge]
- init_model(**kwargs: Any) None [source]
Initialize intern model used to solve.
Can initialize a ortools, milp, gurobi, … model.
- model: MyModelMilp | None = None
- problem: VrpProblem2D
- solve(**kwargs: Any) ResultStorage [source]
Generic solving function.
- Parameters:
callbacks – list of callbacks used to hook into the various stage of the solve
**kwargs – any argument specific to the solver
Solvers deriving from SolverDo should use callbacks methods .on_step_end(), … during solve(). But some solvers are not yet updated and are just ignoring it.
Returns (ResultStorage): a result object containing potentially a pool of solutions to a discrete-optimization problem
- x_var: Dict[Edge, Var] | None = None
- discrete_optimization.vrp.solver.lp_vrp_iterative_pymip.init_model_lp(g: DiGraph, edges: Set[Tuple[Tuple[int, int], Tuple[int, int]]], edges_in_customers: Dict[int, Set[Tuple[Tuple[int, int], Tuple[int, int]]]], edges_out_customers: Dict[int, Set[Tuple[Tuple[int, int], Tuple[int, int]]]], edges_in_merged_graph: Dict[Tuple[int, int], Set[Tuple[Tuple[int, int], Tuple[int, int]]]], edges_out_merged_graph: Dict[Tuple[int, int], Set[Tuple[Tuple[int, int], Tuple[int, int]]]], edges_warm_set: Set[Tuple[Tuple[int, int], Tuple[int, int]]], fraction: float, start_indexes: List[int], end_indexes: List[int], vehicle_count: int, vehicle_capacity: List[float], do_lns: bool = False, include_backward: bool = True, include_triangle: bool = False, solver_name: str = 'CBC') Tuple[MyModelMilp, Dict[Tuple[Tuple[int, int], Tuple[int, int]], Var], Dict[str | int, Any], Dict[str, Any], Dict[int, Any]] [source]
- discrete_optimization.vrp.solver.lp_vrp_iterative_pymip.retrieve_solutions(model: Model, x_var: Dict[Tuple[Tuple[int, int], Tuple[int, int]], Var], vehicle_count: int, g: DiGraph) List[Tuple[DiGraph, Dict[int, DiGraph], Dict[int, Set[Tuple[Tuple[int, int], Tuple[int, int]]]]]] [source]
- discrete_optimization.vrp.solver.lp_vrp_iterative_pymip.update_model_2(model: MyModelMilp, x_var: Dict[Tuple[Tuple[int, int], Tuple[int, int]], Var], components_global: List[Tuple[Set[Tuple[int, int]], int]], edges_in_customers: Dict[int, Set[Tuple[Tuple[int, int], Tuple[int, int]]]], edges_out_customers: Dict[int, Set[Tuple[Tuple[int, int], Tuple[int, int]]]]) None [source]
discrete_optimization.vrp.solver.solver_ortools module
- class discrete_optimization.vrp.solver.solver_ortools.BasicRoutingMonitor(do_solver: VrpORToolsSolver)[source]
Bases:
object
- class discrete_optimization.vrp.solver.solver_ortools.FirstSolutionStrategy(value)[source]
Bases:
Enum
An enumeration.
- PATH_MOST_CONSTRAINED_ARC = 1
- SAVINGS = 0
- class discrete_optimization.vrp.solver.solver_ortools.LocalSearchMetaheuristic(value)[source]
Bases:
Enum
An enumeration.
- GUIDED_LOCAL_SEARCH = 0
- SIMULATED_ANNEALING = 1
- class discrete_optimization.vrp.solver.solver_ortools.VrpORToolsSolver(problem: Problem, params_objective_function: ParamsObjectiveFunction | None = None, **kwargs: Any)[source]
Bases:
SolverVrp
- init_model(**kwargs: Any) None [source]
Initialize intern model used to solve.
Can initialize a ortools, milp, gurobi, … model.
- manager: RoutingIndexManager | None = None
- retrieve(solution: Assignment) VrpSolution [source]
- solve(**kwargs: Any) ResultStorage [source]
Generic solving function.
- Parameters:
callbacks – list of callbacks used to hook into the various stage of the solve
**kwargs – any argument specific to the solver
Solvers deriving from SolverDo should use callbacks methods .on_step_end(), … during solve(). But some solvers are not yet updated and are just ignoring it.
Returns (ResultStorage): a result object containing potentially a pool of solutions to a discrete-optimization problem
- discrete_optimization.vrp.solver.solver_ortools.status_description = {0: 'ROUTING_NOT_SOLVED', 1: 'ROUTING_SUCCESS', 2: 'ROUTING_PARTIAL_SUCCESS_LOCAL_OPTIMUM_NOT_REACHED', 3: 'ROUTING_FAIL', 4: 'ROUTING_FAIL_TIMEOUT', 5: 'ROUTING_INVALID', 6: 'ROUTING_INFEASIBLE', 7: 'ROUTING_OPTIMAL'}
Mapping from status integer to description string.
This maps the integer returned by routing_model.status to the corresponding string.
We use the attributes of RoutingModel to construct the dictionary. https://developers.google.com/optimization/routing/routing_options#search_status
discrete_optimization.vrp.solver.vrp_solver module
- class discrete_optimization.vrp.solver.vrp_solver.SolverVrp(problem: Problem, params_objective_function: ParamsObjectiveFunction | None = None, **kwargs: Any)[source]
Bases:
SolverDO
- problem: VrpProblem