pyepo.model.copt.vrp ==================== .. py:module:: pyepo.model.copt.vrp .. autoapi-nested-parse:: Capacitated vehicle routing problem Attributes ---------- .. autoapisummary:: pyepo.model.copt.vrp.CallbackBase Classes ------- .. autoapisummary:: pyepo.model.copt.vrp.vrpABModel pyepo.model.copt.vrp.vrpRCIModel pyepo.model.copt.vrp.vrpMTZModel pyepo.model.copt.vrp.vrpMTZModelRel Module Contents --------------- .. py:data:: CallbackBase .. py:class:: vrpABModel(num_nodes: int, demands: list[float] | numpy.ndarray, capacity: float, num_vehicle: int, *args, **kwargs) Bases: :py:obj:`pyepo.model.bases.vrpABBase`, :py:obj:`pyepo.model.copt.coptmodel.optCoptModel` Abstract COPT-backed model for the capacitated vehicle routing problem. A single-customer route is excluded so all edge variables stay strictly binary; if a single-stop route is actually needed, duplicate the depot. .. py:class:: vrpRCIModel(num_nodes: int, demands: list[float] | numpy.ndarray, capacity: float, num_vehicle: int, *args, **kwargs) Bases: :py:obj:`vrpABModel` CVRP formulation with 2-degree constraints and lazy rounded-capacity cuts. Uses one undirected Var per edge (``x[j,i]`` aliases ``x[i,j]``). Subtour elimination and rounded capacity inequalities are added lazily during branch-and-cut via a COPT callback. .. py:method:: setObj(c: numpy.ndarray | torch.Tensor | list) -> None A method to set the objective function :param c: cost vector aligned with ``self.edges`` .. py:method:: solve() -> tuple[numpy.ndarray, float] A method to solve the model :returns: edge-selection vector (uint8) and objective value (float) :rtype: tuple .. py:class:: vrpMTZModel(num_nodes: int, demands: list[float] | numpy.ndarray, capacity: float, num_vehicle: int, *args, **kwargs) Bases: :py:obj:`vrpABModel` CVRP formulation on a directed graph with MTZ-style capacity constraints (no lazy cuts). Cost vector is per undirected edge: cost ``c[k]`` is assigned to both ``x[i,j]`` and ``x[j,i]``. .. py:method:: setObj(c: numpy.ndarray | torch.Tensor | list) -> None A method to set the objective function :param c: cost vector aligned with ``self.edges`` (one cost per undirected edge) .. py:method:: solve() -> tuple[numpy.ndarray, float] A method to solve the model :returns: edge-selection vector (uint8) and objective value (float) :rtype: tuple .. py:method:: relax() -> vrpMTZModelRel A method to get linear relaxation model .. py:class:: vrpMTZModelRel(num_nodes: int, demands: list[float] | numpy.ndarray, capacity: float, num_vehicle: int, *args, **kwargs) Bases: :py:obj:`vrpMTZModel` LP relaxation of :class:`vrpMTZModel`. .. py:method:: solve() -> tuple[numpy.ndarray, float] A method to solve the model — returns fractional edge selections .. py:method:: relax() -> NoReturn A forbidden method to relax MIP model .. py:method:: getTour(sol: numpy.ndarray | torch.Tensor | list) -> list[list[int]] A forbidden method to get a tour from solution