From b1d55ae945ccdb8caf191fadabf36c196852da06 Mon Sep 17 00:00:00 2001 From: Domenik Eichhorn <domenik.eichhorn@kit.edu> Date: Mon, 25 Nov 2024 10:51:30 +0100 Subject: [PATCH] fixed EOF issue in LKH3 solver for VRP --- .../toolbox/vrp/solvers/LkhVrpSolver.java | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/main/java/edu/kit/provideq/toolbox/vrp/solvers/LkhVrpSolver.java b/src/main/java/edu/kit/provideq/toolbox/vrp/solvers/LkhVrpSolver.java index e849ce93..25e17c66 100644 --- a/src/main/java/edu/kit/provideq/toolbox/vrp/solvers/LkhVrpSolver.java +++ b/src/main/java/edu/kit/provideq/toolbox/vrp/solvers/LkhVrpSolver.java @@ -51,10 +51,25 @@ public Mono<Solution<String>> solve( ProcessRunner.INPUT_FILE_PATH, "--output-file", ProcessRunner.OUTPUT_FILE_PATH ) - .writeInputFile(input, "problem.vrp") + .writeInputFile(adaptInput(input), "problem.vrp") .readOutputFile("problem.sol") .run(getProblemType(), solution.getId()); return Mono.just(processResult.applyTo(solution)); } + + /** + * LKH-3 solver has an issue when the "EOF" tag. + * This method removes this substring. + * + * @param originalInput original input of the TSP problem + * @return adapted input with "EOF" + */ + private String adaptInput(String originalInput) { + String inputAsVrp = originalInput; + if (inputAsVrp.endsWith("EOF")) { + inputAsVrp = inputAsVrp.replaceAll("EOF$", ""); + } + return inputAsVrp; + } }