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;
+  }
 }