pyepo.model.omo.vrp¶
Capacitated vehicle routing problem
Classes¶
Abstract Pyomo-backed model for the capacitated vehicle routing problem. |
|
CVRP formulation on a directed graph with MTZ-style capacity constraints. |
|
LP relaxation of |
Module Contents¶
- class pyepo.model.omo.vrp.vrpABModel(num_nodes: int, demands: list[float] | numpy.ndarray, capacity: float, num_vehicle: int, solver: str = 'glpk')¶
Bases:
pyepo.model.omo.omomodel.optOmoModelAbstract Pyomo-backed model for the capacitated vehicle routing problem.
Pyomo lacks easy callback support, so no lazy-cut RCI formulation exists for this backend — only MTZ. A single-customer route is excluded so all edge variables stay strictly binary; if a single-stop route is actually needed, duplicate the depot.
- Variables:
num_nodes – number of nodes (including depot at index 0)
nodes – list of node indices
edges – undirected edges as (i, j) with i < j
demands – customer demands (excluding depot)
capacity – per-vehicle capacity
num_vehicle – number of vehicles
solver – optimization solver in the background
- num_nodes¶
- nodes¶
- edges¶
- demands¶
- capacity¶
- num_vehicle¶
- getTour(sol: numpy.ndarray | torch.Tensor | list) list[list[int]]¶
Reconstruct vehicle tours from an undirected edge-selection vector.
- Parameters:
sol – per-edge selection values aligned with
self.edges- Returns:
list of tours; each tour is a node sequence starting and ending at the depot
- copy() Self¶
A method to copy the model
- class pyepo.model.omo.vrp.vrpMTZModel(num_nodes: int, demands: list[float] | numpy.ndarray, capacity: float, num_vehicle: int, solver: str = 'glpk')¶
Bases:
vrpABModelCVRP formulation on a directed graph with MTZ-style capacity constraints. Cost vector is per undirected edge: cost
c[k]is assigned to bothx[i,j]andx[j,i].- solve() tuple[numpy.ndarray, float]¶
A method to solve the model
- Returns:
edge-selection vector (uint8) and objective value (float)
- Return type:
- relax() vrpMTZModelRel¶
A method to get linear relaxation model
- class pyepo.model.omo.vrp.vrpMTZModelRel(num_nodes: int, demands: list[float] | numpy.ndarray, capacity: float, num_vehicle: int, solver: str = 'glpk')¶
Bases:
vrpMTZModelLP relaxation of
vrpMTZModel.- solve() tuple[numpy.ndarray, float]¶
A method to solve the model — returns fractional edge selections
- relax() NoReturn¶
A forbidden method to relax MIP model
- getTour(sol: numpy.ndarray | torch.Tensor | list) list[list[int]]¶
A forbidden method to get a tour from solution