diff --git a/.nextmv/golden/python-pyvroom-routing/inputs/both-matrices.json.golden b/.nextmv/golden/python-pyvroom-routing/inputs/both-matrices.json.golden index c90b24f..2b2d9cf 100644 --- a/.nextmv/golden/python-pyvroom-routing/inputs/both-matrices.json.golden +++ b/.nextmv/golden/python-pyvroom-routing/inputs/both-matrices.json.golden @@ -8,7 +8,7 @@ "exploration_level": 4, "solver": "vroom", "threads": 6, - "version": "1.15.0" + "version": "1.15.1" }, "solution": { "unplanned": [], diff --git a/.nextmv/golden/python-pyvroom-routing/inputs/distance-matrix.json.golden b/.nextmv/golden/python-pyvroom-routing/inputs/distance-matrix.json.golden index c4e69f0..1b650fc 100644 --- a/.nextmv/golden/python-pyvroom-routing/inputs/distance-matrix.json.golden +++ b/.nextmv/golden/python-pyvroom-routing/inputs/distance-matrix.json.golden @@ -8,7 +8,7 @@ "exploration_level": 4, "solver": "vroom", "threads": 6, - "version": "1.15.0" + "version": "1.15.1" }, "solution": { "unplanned": [], diff --git a/.nextmv/golden/python-pyvroom-routing/inputs/max-duration.json.golden b/.nextmv/golden/python-pyvroom-routing/inputs/max-duration.json.golden index 3fb51a4..86a0f8a 100644 --- a/.nextmv/golden/python-pyvroom-routing/inputs/max-duration.json.golden +++ b/.nextmv/golden/python-pyvroom-routing/inputs/max-duration.json.golden @@ -8,7 +8,7 @@ "exploration_level": 4, "solver": "vroom", "threads": 6, - "version": "1.15.0" + "version": "1.15.1" }, "solution": { "unplanned": [ diff --git a/.nextmv/golden/python-pyvroom-routing/inputs/no-matrix.json.golden b/.nextmv/golden/python-pyvroom-routing/inputs/no-matrix.json.golden index cbd4ff6..536c6f6 100644 --- a/.nextmv/golden/python-pyvroom-routing/inputs/no-matrix.json.golden +++ b/.nextmv/golden/python-pyvroom-routing/inputs/no-matrix.json.golden @@ -8,7 +8,7 @@ "exploration_level": 4, "solver": "vroom", "threads": 6, - "version": "1.15.0" + "version": "1.15.1" }, "solution": { "unplanned": [], diff --git a/python-pyvroom-routing/main.py b/python-pyvroom-routing/main.py index 6ae31bf..6709458 100644 --- a/python-pyvroom-routing/main.py +++ b/python-pyvroom-routing/main.py @@ -46,9 +46,15 @@ def solve(self, input: nextmv.Input) -> nextmv.Output: nextmv.redirect_stdout() # Solver chatter is logged to stderr. input.options.solver = "vroom" input.options.version = version("pyvroom") - - # TODO: use duration to limit the runtime of the solver - _ = input.options.duration + if input.options.duration is not None and isinstance(input.options.duration, numbers.Number): + if input.options.duration <= 0: + timeout = None # No timeout if duration is 0 or negative. + else: + timeout = timedelta(seconds=input.options.duration) + elif input.options.duration is None: + timeout = None + else: + raise ValueError(f"Invalid duration option {input.options.duration}.") # Prepare data. speed_factors = [v["speed_factor"] if "speed_factor" in v else 1 for v in input.data["vehicles"]] @@ -97,7 +103,9 @@ def solve(self, input: nextmv.Input) -> nextmv.Output: # Solve the problem. solution = problem_instance.solve( - exploration_level=input.options.exploration_level, nb_threads=input.options.threads + exploration_level=input.options.exploration_level, + nb_threads=input.options.threads, + timeout=timeout, ) solve_end_time = time.time() diff --git a/python-pyvroom-routing/requirements.txt b/python-pyvroom-routing/requirements.txt index d579422..63961d6 100644 --- a/python-pyvroom-routing/requirements.txt +++ b/python-pyvroom-routing/requirements.txt @@ -1,2 +1,2 @@ -pyvroom==1.15.0 +pyvroom==1.15.1 nextmv==1.6.2