diff --git a/Optimierungsalgorithmen/.vscode/settings.json b/.vscode/settings.json similarity index 100% rename from Optimierungsalgorithmen/.vscode/settings.json rename to .vscode/settings.json diff --git a/Optimierungsalgorithmen/bin/Algorithms.class b/Optimierungsalgorithmen/bin/Algorithms.class deleted file mode 100644 index 9f216ddfa026b65f1f982a14bcd6c12fb3247c9b..0000000000000000000000000000000000000000 Binary files a/Optimierungsalgorithmen/bin/Algorithms.class and /dev/null differ diff --git a/Optimierungsalgorithmen/bin/Instance.class b/Optimierungsalgorithmen/bin/Instance.class deleted file mode 100644 index 5209489f54dc9ad1c8245217d194df56a2ae697f..0000000000000000000000000000000000000000 Binary files a/Optimierungsalgorithmen/bin/Instance.class and /dev/null differ diff --git a/Optimierungsalgorithmen/bin/cvrp_ls.class b/Optimierungsalgorithmen/bin/cvrp_ls.class deleted file mode 100644 index 9cb8bab36724165f72b54e5aefe13b99c7ab7ad2..0000000000000000000000000000000000000000 Binary files a/Optimierungsalgorithmen/bin/cvrp_ls.class and /dev/null differ diff --git a/Optimierungsalgorithmen/src/cvrp_ls.java b/Optimierungsalgorithmen/src/cvrp_ls.java deleted file mode 100644 index bef95fec133453745a2873701f0af25ffd6347eb..0000000000000000000000000000000000000000 --- a/Optimierungsalgorithmen/src/cvrp_ls.java +++ /dev/null @@ -1,27 +0,0 @@ - - -public class cvrp_ls { - public static void main(String[] args) throws Exception { - String fileLocation = ""; - try { - fileLocation = args[0]; - } catch (Exception e) { - - } - - - - //create new instance from file - Instance instance = new Instance(fileLocation); - //create initial Greedy Solution - Algorithms algorithms = new Algorithms(); - Solution initialSolution = algorithms.generateInitialSolutionGreedy(instance); - System.out.println("Greedy done"); - - //optimize with local search - Solution localSearchSolution = algorithms.localSearch(initialSolution); - - //print results - System.out.println(instance.getName()+"&"+initialSolution.getCost()+"&"+localSearchSolution.getCost()+"&"); - } -} diff --git a/README.md b/README.md index 4abc2eccb2cf0f2aaec1873033dc614782dd62b8..4869a8f9f5e76094828e08696aef53fb9c35dfb3 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ ## Getting started -Im src-Ordner liegen die Quelldateien und kompilierten Dateien. Aufruf erfolgt durch java cvrp_ls *absolutePath*. Wobei der *absolutePath* auf eine .vrp Datei mit +Im src-Ordner liegen die Quelldateien und kompilierten Dateien. Aufruf erfolgt durch "java cvrp_ls *absolutePath*". Wobei der *absolutePath* auf eine .vrp Datei mit (TYPE : CVRP, EDGE_WEIGHT_TYPE : EXPLICIT, EDGE_WEIGHT_FORMAT : LOWER_ROW) diff --git a/bin/Algorithms.class b/bin/Algorithms.class new file mode 100644 index 0000000000000000000000000000000000000000..8a02c8326f7828299319a119a016f9ad4dec6227 Binary files /dev/null and b/bin/Algorithms.class differ diff --git a/bin/Instance.class b/bin/Instance.class new file mode 100644 index 0000000000000000000000000000000000000000..8845f4076d27d4ca304ae85e83cfcec3ebd35e7e Binary files /dev/null and b/bin/Instance.class differ diff --git a/Optimierungsalgorithmen/bin/Node.class b/bin/Node.class similarity index 100% rename from Optimierungsalgorithmen/bin/Node.class rename to bin/Node.class diff --git a/Optimierungsalgorithmen/bin/Solution.class b/bin/Solution.class similarity index 100% rename from Optimierungsalgorithmen/bin/Solution.class rename to bin/Solution.class diff --git a/bin/cvrp_ls.class b/bin/cvrp_ls.class new file mode 100644 index 0000000000000000000000000000000000000000..4daff393d4b3346ed63729baf9cae5c3fe3ce26c Binary files /dev/null and b/bin/cvrp_ls.class differ diff --git a/Optimierungsalgorithmen/bin/instances/Loggi-n1001-k31.sol b/bin/instances/Loggi-n1001-k31.sol similarity index 100% rename from Optimierungsalgorithmen/bin/instances/Loggi-n1001-k31.sol rename to bin/instances/Loggi-n1001-k31.sol diff --git a/Optimierungsalgorithmen/bin/instances/Loggi-n1001-k31.vrp b/bin/instances/Loggi-n1001-k31.vrp similarity index 100% rename from Optimierungsalgorithmen/bin/instances/Loggi-n1001-k31.vrp rename to bin/instances/Loggi-n1001-k31.vrp diff --git a/Optimierungsalgorithmen/bin/instances/Loggi-n401-k23.sol b/bin/instances/Loggi-n401-k23.sol similarity index 100% rename from Optimierungsalgorithmen/bin/instances/Loggi-n401-k23.sol rename to bin/instances/Loggi-n401-k23.sol diff --git a/Optimierungsalgorithmen/bin/instances/Loggi-n401-k23.vrp b/bin/instances/Loggi-n401-k23.vrp similarity index 100% rename from Optimierungsalgorithmen/bin/instances/Loggi-n401-k23.vrp rename to bin/instances/Loggi-n401-k23.vrp diff --git a/Optimierungsalgorithmen/bin/instances/Loggi-n501-k24.sol b/bin/instances/Loggi-n501-k24.sol similarity index 100% rename from Optimierungsalgorithmen/bin/instances/Loggi-n501-k24.sol rename to bin/instances/Loggi-n501-k24.sol diff --git a/Optimierungsalgorithmen/bin/instances/Loggi-n501-k24.vrp b/bin/instances/Loggi-n501-k24.vrp similarity index 100% rename from Optimierungsalgorithmen/bin/instances/Loggi-n501-k24.vrp rename to bin/instances/Loggi-n501-k24.vrp diff --git a/Optimierungsalgorithmen/bin/instances/Loggi-n601-k19.sol b/bin/instances/Loggi-n601-k19.sol similarity index 100% rename from Optimierungsalgorithmen/bin/instances/Loggi-n601-k19.sol rename to bin/instances/Loggi-n601-k19.sol diff --git a/Optimierungsalgorithmen/bin/instances/Loggi-n601-k19.vrp b/bin/instances/Loggi-n601-k19.vrp similarity index 100% rename from Optimierungsalgorithmen/bin/instances/Loggi-n601-k19.vrp rename to bin/instances/Loggi-n601-k19.vrp diff --git a/Optimierungsalgorithmen/bin/instances/Loggi-n601-k42.sol b/bin/instances/Loggi-n601-k42.sol similarity index 100% rename from Optimierungsalgorithmen/bin/instances/Loggi-n601-k42.sol rename to bin/instances/Loggi-n601-k42.sol diff --git a/Optimierungsalgorithmen/bin/instances/Loggi-n601-k42.vrp b/bin/instances/Loggi-n601-k42.vrp similarity index 100% rename from Optimierungsalgorithmen/bin/instances/Loggi-n601-k42.vrp rename to bin/instances/Loggi-n601-k42.vrp diff --git a/Optimierungsalgorithmen/bin/instances/Loggi-n901-k42.sol b/bin/instances/Loggi-n901-k42.sol similarity index 100% rename from Optimierungsalgorithmen/bin/instances/Loggi-n901-k42.sol rename to bin/instances/Loggi-n901-k42.sol diff --git a/Optimierungsalgorithmen/bin/instances/Loggi-n901-k42.vrp b/bin/instances/Loggi-n901-k42.vrp similarity index 100% rename from Optimierungsalgorithmen/bin/instances/Loggi-n901-k42.vrp rename to bin/instances/Loggi-n901-k42.vrp diff --git a/Optimierungsalgorithmen/bin/instances/ORTEC-n242-k12.sol b/bin/instances/ORTEC-n242-k12.sol similarity index 100% rename from Optimierungsalgorithmen/bin/instances/ORTEC-n242-k12.sol rename to bin/instances/ORTEC-n242-k12.sol diff --git a/Optimierungsalgorithmen/bin/instances/ORTEC-n242-k12.vrp b/bin/instances/ORTEC-n242-k12.vrp similarity index 100% rename from Optimierungsalgorithmen/bin/instances/ORTEC-n242-k12.vrp rename to bin/instances/ORTEC-n242-k12.vrp diff --git a/Optimierungsalgorithmen/bin/instances/ORTEC-n323-k21.sol b/bin/instances/ORTEC-n323-k21.sol similarity index 100% rename from Optimierungsalgorithmen/bin/instances/ORTEC-n323-k21.sol rename to bin/instances/ORTEC-n323-k21.sol diff --git a/Optimierungsalgorithmen/bin/instances/ORTEC-n323-k21.vrp b/bin/instances/ORTEC-n323-k21.vrp similarity index 100% rename from Optimierungsalgorithmen/bin/instances/ORTEC-n323-k21.vrp rename to bin/instances/ORTEC-n323-k21.vrp diff --git a/Optimierungsalgorithmen/bin/instances/ORTEC-n405-k18.sol b/bin/instances/ORTEC-n405-k18.sol similarity index 100% rename from Optimierungsalgorithmen/bin/instances/ORTEC-n405-k18.sol rename to bin/instances/ORTEC-n405-k18.sol diff --git a/Optimierungsalgorithmen/bin/instances/ORTEC-n405-k18.vrp b/bin/instances/ORTEC-n405-k18.vrp similarity index 100% rename from Optimierungsalgorithmen/bin/instances/ORTEC-n405-k18.vrp rename to bin/instances/ORTEC-n405-k18.vrp diff --git a/Optimierungsalgorithmen/bin/instances/ORTEC-n455-k41.sol b/bin/instances/ORTEC-n455-k41.sol similarity index 100% rename from Optimierungsalgorithmen/bin/instances/ORTEC-n455-k41.sol rename to bin/instances/ORTEC-n455-k41.sol diff --git a/Optimierungsalgorithmen/bin/instances/ORTEC-n455-k41.vrp b/bin/instances/ORTEC-n455-k41.vrp similarity index 100% rename from Optimierungsalgorithmen/bin/instances/ORTEC-n455-k41.vrp rename to bin/instances/ORTEC-n455-k41.vrp diff --git a/Optimierungsalgorithmen/bin/instances/ORTEC-n510-k23.sol b/bin/instances/ORTEC-n510-k23.sol similarity index 100% rename from Optimierungsalgorithmen/bin/instances/ORTEC-n510-k23.sol rename to bin/instances/ORTEC-n510-k23.sol diff --git a/Optimierungsalgorithmen/bin/instances/ORTEC-n510-k23.vrp b/bin/instances/ORTEC-n510-k23.vrp similarity index 100% rename from Optimierungsalgorithmen/bin/instances/ORTEC-n510-k23.vrp rename to bin/instances/ORTEC-n510-k23.vrp diff --git a/Optimierungsalgorithmen/bin/instances/ORTEC-n701-k64.sol b/bin/instances/ORTEC-n701-k64.sol similarity index 100% rename from Optimierungsalgorithmen/bin/instances/ORTEC-n701-k64.sol rename to bin/instances/ORTEC-n701-k64.sol diff --git a/Optimierungsalgorithmen/bin/instances/ORTEC-n701-k64.vrp b/bin/instances/ORTEC-n701-k64.vrp similarity index 100% rename from Optimierungsalgorithmen/bin/instances/ORTEC-n701-k64.vrp rename to bin/instances/ORTEC-n701-k64.vrp diff --git a/bin/manifest.MF b/bin/manifest.MF new file mode 100644 index 0000000000000000000000000000000000000000..eb5faf1c948a820b69afbc1d46674d73c973c6f0 --- /dev/null +++ b/bin/manifest.MF @@ -0,0 +1 @@ +Main-Class: cvrp_ls diff --git a/Optimierungsalgorithmen/src/Algorithms.class b/src/Algorithms.class similarity index 100% rename from Optimierungsalgorithmen/src/Algorithms.class rename to src/Algorithms.class diff --git a/Optimierungsalgorithmen/src/Algorithms.java b/src/Algorithms.java similarity index 89% rename from Optimierungsalgorithmen/src/Algorithms.java rename to src/Algorithms.java index 2466ae5e540f52448d23564c9c7ba0e58608d336..4e77456f90d47e2aa98e670b0f39d756b47c40ea 100644 --- a/Optimierungsalgorithmen/src/Algorithms.java +++ b/src/Algorithms.java @@ -2,7 +2,31 @@ import java.util.ArrayList; import java.util.Arrays; public class Algorithms { - public Solution generateInitialSolutionGreedy(Instance instance){ + + String algorithmType; + + public Algorithms(String algorithmType){ + this.algorithmType = algorithmType; + if(algorithmType == null || algorithmType.equals("")){ + this.algorithmType = "primitive_local_search"; + } + } + + public Solution generateSolution(Instance instance){ + return generateInitialSolutionGreedy(instance); + } + + public Solution generateSolution(Solution solution){ + switch (this.algorithmType) { + case "primitive_local_search": + return localSearch(solution); + default: + return null; + } + } + + //primitive greedy Approach + private Solution generateInitialSolutionGreedy(Instance instance){ Solution solution = new Solution(instance); ArrayList<ArrayList<Node>> tours = new ArrayList<ArrayList<Node>>(); ArrayList<Integer> neededNodes = new ArrayList<Integer>(); @@ -66,7 +90,7 @@ public class Algorithms { } //local Search - public Solution localSearch(Solution solution){ + private Solution localSearch(Solution solution){ Solution currentBestSolution = solution; int[] state = {2,0,0,0}; Solution possibleBetterSolution = getOtherNeighbor(state, currentBestSolution); diff --git a/Optimierungsalgorithmen/src/Instance.class b/src/Instance.class similarity index 100% rename from Optimierungsalgorithmen/src/Instance.class rename to src/Instance.class diff --git a/Optimierungsalgorithmen/src/Instance.java b/src/Instance.java similarity index 85% rename from Optimierungsalgorithmen/src/Instance.java rename to src/Instance.java index 967acb5214e0a1e917f4839366829c30c6c64285..784d9405faf1d4c51176d0d0c269ebba1b9f2b9c 100644 --- a/Optimierungsalgorithmen/src/Instance.java +++ b/src/Instance.java @@ -11,6 +11,7 @@ public class Instance { private int[][] edgeWeights; private Node[] nodes; private Node depot; + private int optimalCost; public Instance(String fileLocation){ //import instance of cvrp from file at fileLocation, lower Marix of distances @@ -69,11 +70,26 @@ public class Instance { System.out.println("An error occurred at import."); e.printStackTrace(); } + try { + File file = new File(fileLocation.replace(".vrp", ".sol")); + Scanner scanner = new Scanner(file); + while (scanner.hasNextLine()) { + String data = scanner.nextLine(); + if(data.contains("COST")) this.optimalCost = Integer.valueOf(data.replace("COST", "").trim()); + } + scanner.close(); + } catch (FileNotFoundException e) { + System.out.println("An error occurred at import."); + e.printStackTrace(); + } } public String getName(){ return this.name; } + public int getOptimalCost(){ + return this.optimalCost; + } public int getDimension(){ return this.dimension; } diff --git a/Optimierungsalgorithmen/src/Node.class b/src/Node.class similarity index 100% rename from Optimierungsalgorithmen/src/Node.class rename to src/Node.class diff --git a/Optimierungsalgorithmen/src/Node.java b/src/Node.java similarity index 100% rename from Optimierungsalgorithmen/src/Node.java rename to src/Node.java diff --git a/Optimierungsalgorithmen/src/Solution.class b/src/Solution.class similarity index 100% rename from Optimierungsalgorithmen/src/Solution.class rename to src/Solution.class diff --git a/Optimierungsalgorithmen/src/Solution.java b/src/Solution.java similarity index 100% rename from Optimierungsalgorithmen/src/Solution.java rename to src/Solution.java diff --git a/Optimierungsalgorithmen/src/cvrp_ls.class b/src/cvrp_ls.class similarity index 100% rename from Optimierungsalgorithmen/src/cvrp_ls.class rename to src/cvrp_ls.class diff --git a/src/cvrp_ls.java b/src/cvrp_ls.java new file mode 100644 index 0000000000000000000000000000000000000000..0a12a27182cd6b2227bdf349f84ec5bc9c2069c9 --- /dev/null +++ b/src/cvrp_ls.java @@ -0,0 +1,35 @@ + + +public class cvrp_ls { + public static void main(String[] args) throws Exception { + String fileLocation = ""; + String algorithm =""; + int maxRuntimeInSeconds = -1; + try { + fileLocation = args[0]; + algorithm = args[1]; + maxRuntimeInSeconds = Integer.valueOf(args[2]); + + } catch (Exception e) { + + } + + + + + //create new instance from file + Instance instance = new Instance(fileLocation); + //create initial Greedy Solution + Algorithms greedy = new Algorithms("greedy"); + Solution greedySolution = greedy.generateSolution(instance); + System.out.println("Greedy done"); + + //optimize with chosen algorithm + Algorithms chosen = new Algorithms(algorithm); + Solution optimizedSolution = chosen.generateSolution(greedySolution); + + //print results + System.out.println("Instance name"+" & "+"Cost initial Solution"+" & "+"Cost optimized solution"+" & " + "Cost optimal solution"); + System.out.println(instance.getName()+" & "+greedySolution.getCost()+" & "+optimizedSolution.getCost()+" & "+instance.getOptimalCost()); + } +} diff --git a/Optimierungsalgorithmen/src/instances/Loggi-n1001-k31.sol b/src/instances/Loggi-n1001-k31.sol similarity index 100% rename from Optimierungsalgorithmen/src/instances/Loggi-n1001-k31.sol rename to src/instances/Loggi-n1001-k31.sol diff --git a/Optimierungsalgorithmen/src/instances/Loggi-n1001-k31.vrp b/src/instances/Loggi-n1001-k31.vrp similarity index 100% rename from Optimierungsalgorithmen/src/instances/Loggi-n1001-k31.vrp rename to src/instances/Loggi-n1001-k31.vrp diff --git a/Optimierungsalgorithmen/src/instances/Loggi-n401-k23.sol b/src/instances/Loggi-n401-k23.sol similarity index 100% rename from Optimierungsalgorithmen/src/instances/Loggi-n401-k23.sol rename to src/instances/Loggi-n401-k23.sol diff --git a/Optimierungsalgorithmen/src/instances/Loggi-n401-k23.vrp b/src/instances/Loggi-n401-k23.vrp similarity index 100% rename from Optimierungsalgorithmen/src/instances/Loggi-n401-k23.vrp rename to src/instances/Loggi-n401-k23.vrp diff --git a/Optimierungsalgorithmen/src/instances/Loggi-n501-k24.sol b/src/instances/Loggi-n501-k24.sol similarity index 100% rename from Optimierungsalgorithmen/src/instances/Loggi-n501-k24.sol rename to src/instances/Loggi-n501-k24.sol diff --git a/Optimierungsalgorithmen/src/instances/Loggi-n501-k24.vrp b/src/instances/Loggi-n501-k24.vrp similarity index 100% rename from Optimierungsalgorithmen/src/instances/Loggi-n501-k24.vrp rename to src/instances/Loggi-n501-k24.vrp diff --git a/Optimierungsalgorithmen/src/instances/Loggi-n601-k19.sol b/src/instances/Loggi-n601-k19.sol similarity index 100% rename from Optimierungsalgorithmen/src/instances/Loggi-n601-k19.sol rename to src/instances/Loggi-n601-k19.sol diff --git a/Optimierungsalgorithmen/src/instances/Loggi-n601-k19.vrp b/src/instances/Loggi-n601-k19.vrp similarity index 100% rename from Optimierungsalgorithmen/src/instances/Loggi-n601-k19.vrp rename to src/instances/Loggi-n601-k19.vrp diff --git a/Optimierungsalgorithmen/src/instances/Loggi-n601-k42.sol b/src/instances/Loggi-n601-k42.sol similarity index 100% rename from Optimierungsalgorithmen/src/instances/Loggi-n601-k42.sol rename to src/instances/Loggi-n601-k42.sol diff --git a/Optimierungsalgorithmen/src/instances/Loggi-n601-k42.vrp b/src/instances/Loggi-n601-k42.vrp similarity index 100% rename from Optimierungsalgorithmen/src/instances/Loggi-n601-k42.vrp rename to src/instances/Loggi-n601-k42.vrp diff --git a/Optimierungsalgorithmen/src/instances/Loggi-n901-k42.sol b/src/instances/Loggi-n901-k42.sol similarity index 100% rename from Optimierungsalgorithmen/src/instances/Loggi-n901-k42.sol rename to src/instances/Loggi-n901-k42.sol diff --git a/Optimierungsalgorithmen/src/instances/Loggi-n901-k42.vrp b/src/instances/Loggi-n901-k42.vrp similarity index 100% rename from Optimierungsalgorithmen/src/instances/Loggi-n901-k42.vrp rename to src/instances/Loggi-n901-k42.vrp diff --git a/Optimierungsalgorithmen/src/instances/ORTEC-n242-k12.sol b/src/instances/ORTEC-n242-k12.sol similarity index 100% rename from Optimierungsalgorithmen/src/instances/ORTEC-n242-k12.sol rename to src/instances/ORTEC-n242-k12.sol diff --git a/Optimierungsalgorithmen/src/instances/ORTEC-n242-k12.vrp b/src/instances/ORTEC-n242-k12.vrp similarity index 100% rename from Optimierungsalgorithmen/src/instances/ORTEC-n242-k12.vrp rename to src/instances/ORTEC-n242-k12.vrp diff --git a/Optimierungsalgorithmen/src/instances/ORTEC-n323-k21.sol b/src/instances/ORTEC-n323-k21.sol similarity index 100% rename from Optimierungsalgorithmen/src/instances/ORTEC-n323-k21.sol rename to src/instances/ORTEC-n323-k21.sol diff --git a/Optimierungsalgorithmen/src/instances/ORTEC-n323-k21.vrp b/src/instances/ORTEC-n323-k21.vrp similarity index 100% rename from Optimierungsalgorithmen/src/instances/ORTEC-n323-k21.vrp rename to src/instances/ORTEC-n323-k21.vrp diff --git a/Optimierungsalgorithmen/src/instances/ORTEC-n405-k18.sol b/src/instances/ORTEC-n405-k18.sol similarity index 100% rename from Optimierungsalgorithmen/src/instances/ORTEC-n405-k18.sol rename to src/instances/ORTEC-n405-k18.sol diff --git a/Optimierungsalgorithmen/src/instances/ORTEC-n405-k18.vrp b/src/instances/ORTEC-n405-k18.vrp similarity index 100% rename from Optimierungsalgorithmen/src/instances/ORTEC-n405-k18.vrp rename to src/instances/ORTEC-n405-k18.vrp diff --git a/Optimierungsalgorithmen/src/instances/ORTEC-n455-k41.sol b/src/instances/ORTEC-n455-k41.sol similarity index 100% rename from Optimierungsalgorithmen/src/instances/ORTEC-n455-k41.sol rename to src/instances/ORTEC-n455-k41.sol diff --git a/Optimierungsalgorithmen/src/instances/ORTEC-n455-k41.vrp b/src/instances/ORTEC-n455-k41.vrp similarity index 100% rename from Optimierungsalgorithmen/src/instances/ORTEC-n455-k41.vrp rename to src/instances/ORTEC-n455-k41.vrp diff --git a/Optimierungsalgorithmen/src/instances/ORTEC-n510-k23.sol b/src/instances/ORTEC-n510-k23.sol similarity index 100% rename from Optimierungsalgorithmen/src/instances/ORTEC-n510-k23.sol rename to src/instances/ORTEC-n510-k23.sol diff --git a/Optimierungsalgorithmen/src/instances/ORTEC-n510-k23.vrp b/src/instances/ORTEC-n510-k23.vrp similarity index 100% rename from Optimierungsalgorithmen/src/instances/ORTEC-n510-k23.vrp rename to src/instances/ORTEC-n510-k23.vrp diff --git a/Optimierungsalgorithmen/src/instances/ORTEC-n701-k64.sol b/src/instances/ORTEC-n701-k64.sol similarity index 100% rename from Optimierungsalgorithmen/src/instances/ORTEC-n701-k64.sol rename to src/instances/ORTEC-n701-k64.sol diff --git a/Optimierungsalgorithmen/src/instances/ORTEC-n701-k64.vrp b/src/instances/ORTEC-n701-k64.vrp similarity index 100% rename from Optimierungsalgorithmen/src/instances/ORTEC-n701-k64.vrp rename to src/instances/ORTEC-n701-k64.vrp diff --git a/src/manifest.MF b/src/manifest.MF new file mode 100644 index 0000000000000000000000000000000000000000..eb5faf1c948a820b69afbc1d46674d73c973c6f0 --- /dev/null +++ b/src/manifest.MF @@ -0,0 +1 @@ +Main-Class: cvrp_ls