vrp-model 0.1.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- vrp_model/__init__.py +65 -0
- vrp_model/core/__init__.py +38 -0
- vrp_model/core/errors.py +25 -0
- vrp_model/core/kinds.py +12 -0
- vrp_model/core/model.py +739 -0
- vrp_model/core/records.py +99 -0
- vrp_model/core/solution.py +31 -0
- vrp_model/core/storage.py +21 -0
- vrp_model/core/time_window_flex.py +26 -0
- vrp_model/core/travel_edges.py +54 -0
- vrp_model/core/views.py +276 -0
- vrp_model/io/__init__.py +35 -0
- vrp_model/io/vrplib_io.py +29 -0
- vrp_model/io/vrplib_keys.py +90 -0
- vrp_model/io/vrplib_normalize.py +232 -0
- vrp_model/io/vrplib_read.py +154 -0
- vrp_model/io/vrplib_types.py +58 -0
- vrp_model/io/vrplib_write.py +158 -0
- vrp_model/solvers/__init__.py +35 -0
- vrp_model/solvers/_helpers.py +52 -0
- vrp_model/solvers/base.py +26 -0
- vrp_model/solvers/hgs_cvrp/__init__.py +1 -0
- vrp_model/solvers/jsprit/__init__.py +1 -0
- vrp_model/solvers/nextroute/__init__.py +10 -0
- vrp_model/solvers/nextroute/bindings.py +17 -0
- vrp_model/solvers/nextroute/options.py +58 -0
- vrp_model/solvers/nextroute/solver.py +315 -0
- vrp_model/solvers/options.py +102 -0
- vrp_model/solvers/ortools/__init__.py +22 -0
- vrp_model/solvers/ortools/bindings.py +18 -0
- vrp_model/solvers/ortools/options.py +54 -0
- vrp_model/solvers/ortools/solver.py +535 -0
- vrp_model/solvers/pyvrp/__init__.py +18 -0
- vrp_model/solvers/pyvrp/bindings.py +66 -0
- vrp_model/solvers/pyvrp/options.py +24 -0
- vrp_model/solvers/pyvrp/solver.py +358 -0
- vrp_model/solvers/registry.py +21 -0
- vrp_model/solvers/status.py +40 -0
- vrp_model/solvers/vroom/__init__.py +10 -0
- vrp_model/solvers/vroom/bindings.py +17 -0
- vrp_model/solvers/vroom/options.py +48 -0
- vrp_model/solvers/vroom/solver.py +336 -0
- vrp_model/solvers/vrpsolvereasy/__init__.py +1 -0
- vrp_model/solvers/vrpy/__init__.py +1 -0
- vrp_model/utils/__init__.py +6 -0
- vrp_model/utils/distance.py +12 -0
- vrp_model/utils/time.py +8 -0
- vrp_model/validation/__init__.py +5 -0
- vrp_model/validation/consistency.py +58 -0
- vrp_model/validation/feasibility.py +230 -0
- vrp_model/validation/structure.py +18 -0
- vrp_model/validation/tags.py +20 -0
- vrp_model-0.1.1.dist-info/METADATA +140 -0
- vrp_model-0.1.1.dist-info/RECORD +55 -0
- vrp_model-0.1.1.dist-info/WHEEL +4 -0
vrp_model/__init__.py
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"""vrp_model: canonical VRP modeling API (solver-agnostic core)."""
|
|
2
|
+
|
|
3
|
+
from vrp_model.core.errors import (
|
|
4
|
+
MappingError,
|
|
5
|
+
SolutionUnavailableError,
|
|
6
|
+
SolverCapabilityError,
|
|
7
|
+
SolverNotInstalledError,
|
|
8
|
+
ValidationError,
|
|
9
|
+
VRPModelError,
|
|
10
|
+
)
|
|
11
|
+
from vrp_model.core.kinds import NodeKind
|
|
12
|
+
from vrp_model.core.model import Feature, Model, SolveStatus
|
|
13
|
+
from vrp_model.core.solution import Route, Solution
|
|
14
|
+
from vrp_model.core.time_window_flex import TimeWindowFlex
|
|
15
|
+
from vrp_model.core.travel_edges import TRAVEL_COST_INF, TravelEdgeAttrs, TravelEdgesMap
|
|
16
|
+
from vrp_model.core.views import Depot, Job, Vehicle
|
|
17
|
+
from vrp_model.solvers.base import Solver
|
|
18
|
+
from vrp_model.solvers.options import (
|
|
19
|
+
GAP_ABS,
|
|
20
|
+
GAP_REL,
|
|
21
|
+
LOG_PATH,
|
|
22
|
+
MAX_ITERATIONS,
|
|
23
|
+
MSG,
|
|
24
|
+
SEED,
|
|
25
|
+
TIME_LIMIT,
|
|
26
|
+
SolverOptions,
|
|
27
|
+
default_solver_options,
|
|
28
|
+
merge_solver_options,
|
|
29
|
+
)
|
|
30
|
+
from vrp_model.solvers.status import SolutionStatus, SolverStopReason
|
|
31
|
+
|
|
32
|
+
__all__ = [
|
|
33
|
+
"Depot",
|
|
34
|
+
"Feature",
|
|
35
|
+
"GAP_ABS",
|
|
36
|
+
"GAP_REL",
|
|
37
|
+
"Job",
|
|
38
|
+
"LOG_PATH",
|
|
39
|
+
"MappingError",
|
|
40
|
+
"MSG",
|
|
41
|
+
"Model",
|
|
42
|
+
"NodeKind",
|
|
43
|
+
"Route",
|
|
44
|
+
"Solution",
|
|
45
|
+
"SolveStatus",
|
|
46
|
+
"TIME_LIMIT",
|
|
47
|
+
"TimeWindowFlex",
|
|
48
|
+
"TRAVEL_COST_INF",
|
|
49
|
+
"TravelEdgeAttrs",
|
|
50
|
+
"TravelEdgesMap",
|
|
51
|
+
"MAX_ITERATIONS",
|
|
52
|
+
"SEED",
|
|
53
|
+
"Solver",
|
|
54
|
+
"SolverOptions",
|
|
55
|
+
"SolverCapabilityError",
|
|
56
|
+
"SolutionStatus",
|
|
57
|
+
"SolutionUnavailableError",
|
|
58
|
+
"SolverNotInstalledError",
|
|
59
|
+
"SolverStopReason",
|
|
60
|
+
"ValidationError",
|
|
61
|
+
"VRPModelError",
|
|
62
|
+
"Vehicle",
|
|
63
|
+
"default_solver_options",
|
|
64
|
+
"merge_solver_options",
|
|
65
|
+
]
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"""Core model, solution, and feature types."""
|
|
2
|
+
|
|
3
|
+
from vrp_model.core.errors import (
|
|
4
|
+
MappingError,
|
|
5
|
+
SolutionUnavailableError,
|
|
6
|
+
SolverCapabilityError,
|
|
7
|
+
SolverNotInstalledError,
|
|
8
|
+
ValidationError,
|
|
9
|
+
VRPModelError,
|
|
10
|
+
)
|
|
11
|
+
from vrp_model.core.kinds import NodeKind
|
|
12
|
+
from vrp_model.core.model import Feature, Model, SolveStatus
|
|
13
|
+
from vrp_model.core.solution import Route, Solution
|
|
14
|
+
from vrp_model.core.time_window_flex import TimeWindowFlex
|
|
15
|
+
from vrp_model.core.travel_edges import TRAVEL_COST_INF, TravelEdgeAttrs, TravelEdgesMap
|
|
16
|
+
from vrp_model.core.views import Depot, Job, Vehicle
|
|
17
|
+
|
|
18
|
+
__all__ = [
|
|
19
|
+
"Depot",
|
|
20
|
+
"Feature",
|
|
21
|
+
"Job",
|
|
22
|
+
"MappingError",
|
|
23
|
+
"Model",
|
|
24
|
+
"NodeKind",
|
|
25
|
+
"Route",
|
|
26
|
+
"Solution",
|
|
27
|
+
"SolveStatus",
|
|
28
|
+
"TRAVEL_COST_INF",
|
|
29
|
+
"TravelEdgeAttrs",
|
|
30
|
+
"TravelEdgesMap",
|
|
31
|
+
"TimeWindowFlex",
|
|
32
|
+
"SolverCapabilityError",
|
|
33
|
+
"SolverNotInstalledError",
|
|
34
|
+
"SolutionUnavailableError",
|
|
35
|
+
"ValidationError",
|
|
36
|
+
"VRPModelError",
|
|
37
|
+
"Vehicle",
|
|
38
|
+
]
|
vrp_model/core/errors.py
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"""Domain-specific exceptions."""
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class VRPModelError(Exception):
|
|
5
|
+
"""Base error for vrp_model."""
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class ValidationError(VRPModelError):
|
|
9
|
+
"""Model failed structure, consistency, or feasibility validation."""
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class SolverCapabilityError(VRPModelError):
|
|
13
|
+
"""Solver does not support one or more features present on the model."""
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class SolverNotInstalledError(VRPModelError):
|
|
17
|
+
"""Optional solver dependency is not installed."""
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class MappingError(VRPModelError):
|
|
21
|
+
"""Canonical model ↔ solver-native conversion failed."""
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class SolutionUnavailableError(VRPModelError):
|
|
25
|
+
"""Raised when a method requires an attached solution but ``model.solution`` is ``None``."""
|
vrp_model/core/kinds.py
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"""Node classification for unified ``Model._nodes`` storage."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from enum import Enum, auto
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class NodeKind(Enum):
|
|
9
|
+
"""Discriminator for rows in :attr:`~vrp_model.core.model.Model._nodes`."""
|
|
10
|
+
|
|
11
|
+
DEPOT = auto()
|
|
12
|
+
JOB = auto()
|