diff --git a/src/main/java/edu/kit/provideq/toolbox/maxcut/MaxCutConfiguration.java b/src/main/java/edu/kit/provideq/toolbox/maxcut/MaxCutConfiguration.java index 42f55e9b..bb3fc354 100644 --- a/src/main/java/edu/kit/provideq/toolbox/maxcut/MaxCutConfiguration.java +++ b/src/main/java/edu/kit/provideq/toolbox/maxcut/MaxCutConfiguration.java @@ -1,6 +1,7 @@ package edu.kit.provideq.toolbox.maxcut; import edu.kit.provideq.toolbox.ResourceProvider; +import edu.kit.provideq.toolbox.exception.MissingExampleException; import edu.kit.provideq.toolbox.maxcut.solvers.CirqMaxCutSolver; import edu.kit.provideq.toolbox.maxcut.solvers.GamsMaxCutSolver; import edu.kit.provideq.toolbox.maxcut.solvers.QiskitMaxCutSolver; @@ -53,7 +54,7 @@ private Set> loadExampleProblems(ResourceProvider resour problem.setInput(resourceProvider.readStream(problemInputStream)); return Set.of(problem); } catch (IOException e) { - throw new RuntimeException("Could not load example problems", e); + throw new MissingExampleException("Could not load example problems", e); } } } diff --git a/src/main/java/edu/kit/provideq/toolbox/meta/setting/BooleanState.java b/src/main/java/edu/kit/provideq/toolbox/meta/setting/BooleanState.java index ac814a2f..5cd820b0 100644 --- a/src/main/java/edu/kit/provideq/toolbox/meta/setting/BooleanState.java +++ b/src/main/java/edu/kit/provideq/toolbox/meta/setting/BooleanState.java @@ -13,10 +13,10 @@ public BooleanState(String name, String title, boolean state) { } public boolean getState() { - return state; + return state; } public void setState(boolean state) { - this.state = state; + this.state = state; } } diff --git a/src/main/java/edu/kit/provideq/toolbox/meta/setting/MetaSolverSetting.java b/src/main/java/edu/kit/provideq/toolbox/meta/setting/MetaSolverSetting.java index 53741a52..fa2b1e12 100644 --- a/src/main/java/edu/kit/provideq/toolbox/meta/setting/MetaSolverSetting.java +++ b/src/main/java/edu/kit/provideq/toolbox/meta/setting/MetaSolverSetting.java @@ -4,20 +4,37 @@ @JsonDeserialize(using = MetaSolverSettingDeserializer.class) public abstract class MetaSolverSetting { - public String name; + private String name; + private MetaSolverSettingType type; private String title; - public MetaSolverSettingType type; - public MetaSolverSetting() { + protected MetaSolverSetting(String name, String title, MetaSolverSettingType type) { + this.setName(name); + this.setType(type); + this.setTitle(title); } - protected MetaSolverSetting(String name, String title, MetaSolverSettingType type) { + public String getTitle() { + return title; + } + + public String getName() { + return name; + } + + public void setName(String name) { this.name = name; + } + + public MetaSolverSettingType getType() { + return type; + } + + public void setType(MetaSolverSettingType type) { this.type = type; - this.title = title; } - public String getTitle() { - return title; + public void setTitle(String title) { + this.title = title; } } diff --git a/src/main/java/edu/kit/provideq/toolbox/meta/setting/Select.java b/src/main/java/edu/kit/provideq/toolbox/meta/setting/Select.java index 68cf82cd..0038a3b1 100644 --- a/src/main/java/edu/kit/provideq/toolbox/meta/setting/Select.java +++ b/src/main/java/edu/kit/provideq/toolbox/meta/setting/Select.java @@ -4,9 +4,9 @@ import javax.annotation.Nullable; public class Select extends MetaSolverSetting { - public List options; + private List options; @Nullable - public T selectedOption; + private T selectedOption; public Select(String name, String title, List options) { this(name, title, options, null); @@ -15,7 +15,24 @@ public Select(String name, String title, List options) { public Select(String name, String title, List options, T selectedOption) { super(name, title, MetaSolverSettingType.SELECT); + this.setOptions(options); + this.setSelectedOption(selectedOption); + } + + public List getOptions() { + return options; + } + + public void setOptions(List options) { this.options = options; + } + + @Nullable + public T getSelectedOption() { + return selectedOption; + } + + public void setSelectedOption(@Nullable T selectedOption) { this.selectedOption = selectedOption; } } diff --git a/src/main/java/edu/kit/provideq/toolbox/process/GamsProcessRunner.java b/src/main/java/edu/kit/provideq/toolbox/process/GamsProcessRunner.java index d796a579..c33ed065 100644 --- a/src/main/java/edu/kit/provideq/toolbox/process/GamsProcessRunner.java +++ b/src/main/java/edu/kit/provideq/toolbox/process/GamsProcessRunner.java @@ -1,14 +1,13 @@ package edu.kit.provideq.toolbox.process; import edu.kit.provideq.toolbox.meta.ProblemType; +import java.util.Optional; import java.util.UUID; import org.apache.logging.log4j.util.Strings; import org.springframework.beans.factory.config.ConfigurableBeanFactory; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; -import java.util.Optional; - /** * Process runner with input & output post-processing specifically for invoking GAMS. */ @@ -55,14 +54,6 @@ public GamsProcessRunner(String directory, String scriptFileName, String... argu addProblemFilePathToProcessCommand("--INPUT=\"%s\""); } - @Override - public ProcessResult run(ProblemType problemType, UUID solutionId, String problemData) { - var result = super.run(problemType, solutionId, problemData); - - var obfuscatedOutput = obfuscateGamsLicense(result.output().get()); - return new ProcessResult<>(result.success(), Optional.of(obfuscatedOutput), Optional.empty()); - } - /** * Removes GAMS' license output from an output log. */ @@ -90,4 +81,13 @@ private static String obfuscateGamsLicense(String output) { private static String obfuscateLine(String line) { return Strings.repeat("*", line.length()); } + + @Override + public ProcessResult run(ProblemType problemType, UUID solutionId, + String problemData) { + var result = super.run(problemType, solutionId, problemData); + + var obfuscatedOutput = obfuscateGamsLicense(result.output().orElse("no license found")); + return new ProcessResult<>(result.success(), Optional.of(obfuscatedOutput), Optional.empty()); + } } diff --git a/src/main/java/edu/kit/provideq/toolbox/process/ProcessRunner.java b/src/main/java/edu/kit/provideq/toolbox/process/ProcessRunner.java index 8febcf6f..286c2237 100644 --- a/src/main/java/edu/kit/provideq/toolbox/process/ProcessRunner.java +++ b/src/main/java/edu/kit/provideq/toolbox/process/ProcessRunner.java @@ -183,7 +183,7 @@ public ProcessResult run(ProblemType problemType, UUID solutionId, .getProblemDirectory(problemType, solutionId) .getAbsolutePath(); } catch (IOException e) { - return new ProcessResult( + return new ProcessResult<>( false, Optional.empty(), Optional.of( @@ -202,7 +202,7 @@ public ProcessResult run(ProblemType problemType, UUID solutionId, try { Files.writeString(problemFilePath, problemData); } catch (IOException e) { - return new ProcessResult( + return new ProcessResult<>( false, Optional.empty(), Optional.of("Error: The problem data couldn't be written to %s:%n%s".formatted( @@ -244,7 +244,7 @@ public ProcessResult run(ProblemType problemType, UUID solutionId, processExitCode = process.waitFor(); } catch (IOException | InterruptedException e) { - return new ProcessResult( + return new ProcessResult<>( false, Optional.empty(), Optional.of( @@ -256,7 +256,7 @@ public ProcessResult run(ProblemType problemType, UUID solutionId, // Return prematurely if the process failed if (processExitCode != 0) { - return new ProcessResult( + return new ProcessResult<>( false, Optional.empty(), Optional.of( @@ -268,7 +268,7 @@ public ProcessResult run(ProblemType problemType, UUID solutionId, reader.read(solutionFile, problemFilePath, Path.of(problemDirectoryPath)); if (!result.success()) { - return new ProcessResult( + return new ProcessResult<>( result.success(), result.output(), result.errorOutput().isPresent() ? Optional.of( diff --git a/src/main/java/edu/kit/provideq/toolbox/process/PythonProcessRunner.java b/src/main/java/edu/kit/provideq/toolbox/process/PythonProcessRunner.java index afc9e0f5..0e34a3eb 100644 --- a/src/main/java/edu/kit/provideq/toolbox/process/PythonProcessRunner.java +++ b/src/main/java/edu/kit/provideq/toolbox/process/PythonProcessRunner.java @@ -1,6 +1,5 @@ package edu.kit.provideq.toolbox.process; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.ConfigurableBeanFactory; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; diff --git a/src/main/java/edu/kit/provideq/toolbox/qubo/QuboConfiguration.java b/src/main/java/edu/kit/provideq/toolbox/qubo/QuboConfiguration.java index 8f70120a..3ec25a32 100644 --- a/src/main/java/edu/kit/provideq/toolbox/qubo/QuboConfiguration.java +++ b/src/main/java/edu/kit/provideq/toolbox/qubo/QuboConfiguration.java @@ -1,6 +1,7 @@ package edu.kit.provideq.toolbox.qubo; import edu.kit.provideq.toolbox.ResourceProvider; +import edu.kit.provideq.toolbox.exception.MissingExampleException; import edu.kit.provideq.toolbox.meta.Problem; import edu.kit.provideq.toolbox.meta.ProblemManager; import edu.kit.provideq.toolbox.meta.ProblemType; @@ -55,7 +56,7 @@ private Set> loadExampleProblems(ResourceProvider resour problem.setInput(resourceProvider.readStream(problemInputStream)); return Set.of(problem); } catch (IOException e) { - throw new RuntimeException("Could not load example problems", e); + throw new MissingExampleException("Could not load example problems", e); } } } diff --git a/src/main/java/edu/kit/provideq/toolbox/qubo/solvers/DwaveQuboSolver.java b/src/main/java/edu/kit/provideq/toolbox/qubo/solvers/DwaveQuboSolver.java index bd463a93..25967d6b 100644 --- a/src/main/java/edu/kit/provideq/toolbox/qubo/solvers/DwaveQuboSolver.java +++ b/src/main/java/edu/kit/provideq/toolbox/qubo/solvers/DwaveQuboSolver.java @@ -16,8 +16,6 @@ */ @Component public class DwaveQuboSolver extends QuboSolver { - private static final String METHOD_SETTING_NAME = "method"; - private static final String API_TOKEN_SETTING_NAME = "dwave-token"; private final String quboScriptPath; private final ApplicationContext context; @@ -34,37 +32,20 @@ public String getName() { return "(D-Wave) Annealing QUBO Solver"; } - /* - @Override - public List getSettings() { - return List.of( - new Select(METHOD_SETTING_NAME, "DWave Annealing Method", List.of("sim", "hybrid", "qbsolv", "direct"), "sim"), - new Text(API_TOKEN_SETTING_NAME, "DWave API Token (required for non-sim methods)") - ); - }*/ - @Override public Mono> solve( String input, SubRoutineResolver subRoutineResolver ) { - /* - String dwaveAnnealingMethod = settings.stream() - .filter(setting -> setting.name.equals(METHOD_SETTING_NAME)) - .map(setting -> ((Select) setting)) - .findFirst() - .map(setting -> setting.selectedOption) - .orElse("sim"); - Optional dwaveToken = settings.stream() - .filter(setting -> setting.name.equals(API_TOKEN_SETTING_NAME)) - .map(setting -> ((Text) setting)) - .findFirst() - .map(setting -> setting.text); - */ //TODO: Add Setting again (currently not part of our model) + // there is currently no field where a token can be added by the user + // this field is kept because it was used in Lucas implementation and will be added back later + Optional dwaveToken = Optional.empty(); - String dwaveAnnealingMethod = "sim"; //TODO: remove this again - Optional dwaveToken = Optional.empty(); //TODO: remove this again + // this field is only relevant when a dwaveToken is added + // (a token is needed to access the d-wave hardware) + // options are: sim, hybrid, absolv, direct + String dwaveAnnealingMethod = "sim"; var solution = new Solution(); diff --git a/src/main/java/edu/kit/provideq/toolbox/sat/SatConfiguration.java b/src/main/java/edu/kit/provideq/toolbox/sat/SatConfiguration.java index 517d612e..dc17ea49 100644 --- a/src/main/java/edu/kit/provideq/toolbox/sat/SatConfiguration.java +++ b/src/main/java/edu/kit/provideq/toolbox/sat/SatConfiguration.java @@ -1,6 +1,7 @@ package edu.kit.provideq.toolbox.sat; import edu.kit.provideq.toolbox.ResourceProvider; +import edu.kit.provideq.toolbox.exception.MissingExampleException; import edu.kit.provideq.toolbox.format.cnf.dimacs.DimacsCnfSolution; import edu.kit.provideq.toolbox.meta.Problem; import edu.kit.provideq.toolbox.meta.ProblemManager; @@ -51,7 +52,7 @@ private Set> loadExampleProblems( problem.setInput(resourceProvider.readStream(problemInputStream)); return Set.of(problem); } catch (IOException e) { - throw new RuntimeException("Could not load example problems", e); + throw new MissingExampleException("Could not load example problems", e); } } } diff --git a/src/main/java/edu/kit/provideq/toolbox/tsp/TspConfiguration.java b/src/main/java/edu/kit/provideq/toolbox/tsp/TspConfiguration.java index 6b459017..32e94671 100644 --- a/src/main/java/edu/kit/provideq/toolbox/tsp/TspConfiguration.java +++ b/src/main/java/edu/kit/provideq/toolbox/tsp/TspConfiguration.java @@ -8,7 +8,6 @@ import edu.kit.provideq.toolbox.tsp.solvers.LkhTspSolver; import edu.kit.provideq.toolbox.tsp.solvers.QuboTspSolver; import java.io.IOException; -import java.util.Collections; import java.util.HashSet; import java.util.Objects; import java.util.Set; @@ -41,7 +40,7 @@ ProblemManager getTspManager( private Set> loadExampleProblems(ResourceProvider provider) { try { - String[] problemNames = new String[]{ + String[] problemNames = new String[] { "att48.tsp", "SmallSampleTSP.tsp", "VerySmallSampleTSP.tsp" }; diff --git a/src/main/java/edu/kit/provideq/toolbox/tsp/solvers/LkhTspSolver.java b/src/main/java/edu/kit/provideq/toolbox/tsp/solvers/LkhTspSolver.java index 117ddb50..e552c66e 100644 --- a/src/main/java/edu/kit/provideq/toolbox/tsp/solvers/LkhTspSolver.java +++ b/src/main/java/edu/kit/provideq/toolbox/tsp/solvers/LkhTspSolver.java @@ -37,52 +37,62 @@ public String getName() { @Override public Mono> solve(String input, SubRoutineResolver subRoutineResolver) { + var solution = new Solution(); + var processResult = context.getBean( + PythonProcessRunner.class, + scriptDir, + "vrp_lkh.py" + ) + .addProblemFilePathToProcessCommand() + .addSolutionFilePathToProcessCommand("--output-file", "%s") + .problemFileName("problem.vrp") + .solutionFileName("problem.sol") + .run(getProblemType(), solution.getId(), adaptInput(input)); + + return Mono.just(processResult.applyTo(solution)); + } - // the following code will transform the TSP problem into a VRP problem - // dummy demand and depot sections are added, every city has a demand of 1. - // this is not an elegant way to solve TSP, but needed to make Lucas' code work. + /** + * The following code will transform the TSP problem into a VRP problem + * dummy demand and depot sections are added, every city has a demand of 1. + * This is not an elegant way to solve TSP, but needed to make Lucas' code work. + * + * @param originalInput original input of the TSP problem + * @return reduction to a VRP + */ + private String adaptInput(String originalInput) { + String inputAsVrp = originalInput; - // read dimension from input: + //read dimension: int dimension = 0; - String[] lines = input.split("\n"); + String[] lines = inputAsVrp.split("\n"); for (String line : lines) { if (line.contains("DIMENSION")) { dimension = Integer.parseInt(line.split(":")[1].trim()); break; } } - System.out.println("dimension: " + dimension); int capacity = dimension - 1; - if (input.contains("TYPE : TSP")) { - input = input.replace("TYPE : TSP", "TYPE : CVRP\nCAPACITY : " + capacity); + //change problem type to vrp: + if (inputAsVrp.contains("TYPE : TSP")) { + inputAsVrp = inputAsVrp.replace("TYPE : TSP", "TYPE : CVRP\nCAPACITY : " + capacity); } - if (!input.contains("DEPOT_SECTION:") && !input.contains("DEMAND_SECTION:")) { - if (input.contains("EOF")) { - input = input.replace("EOF", ""); + //check if depot and demand section are gives (should not be the case when tsp) + if (!inputAsVrp.contains("DEPOT_SECTION:") && !inputAsVrp.contains("DEMAND_SECTION:")) { + if (inputAsVrp.contains("EOF")) { + inputAsVrp = inputAsVrp.replace("EOF", ""); } // add depot section dummy: - input = input.concat("DEPOT_SECTION:\n1\n-1\n"); + inputAsVrp = inputAsVrp.concat("DEPOT_SECTION:\n1\n-1\n"); // add dummy for demands: - input = input.concat("DEMAND_SECTION:\n1 0\n"); + inputAsVrp = inputAsVrp.concat("DEMAND_SECTION:\n1 0\n"); for (int i = 2; i <= dimension; i++) { - input = input.concat(i + " 1\n"); + inputAsVrp = inputAsVrp.concat(i + " 1\n"); } } - var solution = new Solution(); - var processResult = context.getBean( - PythonProcessRunner.class, - scriptDir, - "vrp_lkh.py" - ) - .addProblemFilePathToProcessCommand() - .addSolutionFilePathToProcessCommand("--output-file", "%s") - .problemFileName("problem.vrp") - .solutionFileName("problem.sol") - .run(getProblemType(), solution.getId(), input); - - return Mono.just(processResult.applyTo(solution)); + return inputAsVrp; } } diff --git a/src/main/java/edu/kit/provideq/toolbox/vrp/clusterer/ClusterVrpConfiguration.java b/src/main/java/edu/kit/provideq/toolbox/vrp/clusterer/ClusterVrpConfiguration.java index 7e87797c..4eea2b6a 100644 --- a/src/main/java/edu/kit/provideq/toolbox/vrp/clusterer/ClusterVrpConfiguration.java +++ b/src/main/java/edu/kit/provideq/toolbox/vrp/clusterer/ClusterVrpConfiguration.java @@ -5,49 +5,49 @@ import edu.kit.provideq.toolbox.meta.Problem; import edu.kit.provideq.toolbox.meta.ProblemManager; import edu.kit.provideq.toolbox.meta.ProblemType; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - import java.io.IOException; import java.util.Objects; import java.util.Set; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; @Configuration public class ClusterVrpConfiguration { - /** - * A Capacitated Vehicle Routing Problem - * Optimization Problem with the goal to find a minimal route for a given set of trucks and cities with demand. - */ - public static final ProblemType CLUSTER_VRP = new ProblemType<>( - "cluster-vrp", - String.class, - String.class //TODO: Change output to something different than string. We get multiple files. + /** + * A Capacitated Vehicle Routing Problem + * Optimization Problem with the goal to find a minimal route for a given set of trucks and cities with demand. + */ + public static final ProblemType CLUSTER_VRP = new ProblemType<>( + "cluster-vrp", + String.class, + String.class + ); + + @Bean + ProblemManager getClusterVrpManager( + ResourceProvider resourceProvider, + KmeansClusterer kmeans, + TwoPhaseClusterer twoPhase) { + return new ProblemManager<>( + CLUSTER_VRP, + Set.of(kmeans, twoPhase), + loadExampleProblems(resourceProvider) ); + } - @Bean - ProblemManager getClusterVrpManager( - ResourceProvider resourceProvider, - KmeansClusterer kmeans, - TwoPhaseClusterer twoPhase) { - return new ProblemManager<>( - CLUSTER_VRP, - Set.of(kmeans, twoPhase), - loadExampleProblems(resourceProvider) - ); - } - private Set> loadExampleProblems( - ResourceProvider resourceProvider - ) { - try { - var problemStream = Objects.requireNonNull( - getClass().getResourceAsStream("../CMT1.vrp"), - "Simple VRP CMT1 Problem unavailable!" - ); - var problem = new Problem<>(CLUSTER_VRP); - problem.setInput(resourceProvider.readStream(problemStream)); - return Set.of(problem); - } catch (IOException e) { - throw new MissingExampleException("Could not load example problems", e); - } + private Set> loadExampleProblems( + ResourceProvider resourceProvider + ) { + try { + var problemStream = Objects.requireNonNull( + getClass().getResourceAsStream("../CMT1.vrp"), + "Simple VRP CMT1 Problem unavailable!" + ); + var problem = new Problem<>(CLUSTER_VRP); + problem.setInput(resourceProvider.readStream(problemStream)); + return Set.of(problem); + } catch (IOException e) { + throw new MissingExampleException("Could not load example problems", e); } + } } diff --git a/src/main/java/edu/kit/provideq/toolbox/vrp/clusterer/KmeansClusterer.java b/src/main/java/edu/kit/provideq/toolbox/vrp/clusterer/KmeansClusterer.java index 40df3921..2d388bf6 100644 --- a/src/main/java/edu/kit/provideq/toolbox/vrp/clusterer/KmeansClusterer.java +++ b/src/main/java/edu/kit/provideq/toolbox/vrp/clusterer/KmeansClusterer.java @@ -20,8 +20,6 @@ @Component public class KmeansClusterer extends VrpClusterer { - private static final String CLUSTER_SETTING_NAME = "kmeans-cluster-number"; - @Autowired public KmeansClusterer(@Value("${vrp.directory}") String binaryDir, @Value("${vrp.bin.meta-solver}") String binaryName, @@ -45,25 +43,13 @@ public String getName() { return "K-means Clustering (VRP -> Set of VRP)"; } - -// @Override -// public List getSettings() { -// return List.of( -// new IntegerSetting(CLUSTER_SETTING_NAME, "Number of Kmeans Cluster (default: 3)", 3)); -// } - @Override public Mono> solve(String input, SubRoutineResolver resolver) { - //TODO: add setting again once architecture allows it - -// int clusterNumber = settings.stream() -// .filter(setting -> setting.name.equals(CLUSTER_SETTING_NAME)) -// .map(setting -> (IntegerSetting) setting) -// .findFirst() -// .map(setting -> setting.getNumber()) -// .orElse(3); - int clusterNumber = 3; //TODO: remove later + // for now, set the cluster number to three. Our architecture currently does not allow settings. + // we will change this in the future, cluster numbers can be any positive integer (>0) + // called in python script via "kmeans-cluster-number" + int clusterNumber = 3; var solution = new Solution(); diff --git a/src/main/java/edu/kit/provideq/toolbox/vrp/clusterer/TwoPhaseClusterer.java b/src/main/java/edu/kit/provideq/toolbox/vrp/clusterer/TwoPhaseClusterer.java index 2735a682..eac36b8a 100644 --- a/src/main/java/edu/kit/provideq/toolbox/vrp/clusterer/TwoPhaseClusterer.java +++ b/src/main/java/edu/kit/provideq/toolbox/vrp/clusterer/TwoPhaseClusterer.java @@ -60,8 +60,6 @@ public Mono> solve( .run(getProblemType(), solution.getId(), input, new MultiFileProcessResultReader("./.vrp/problem_*.vrp")); - System.out.print(processResult.output()); - return getSolutionForCluster(input, solution, processResult, resolver, TSP_SUBROUTINE); } } diff --git a/src/test/java/edu/kit/provideq/toolbox/ToolboxServerApplicationTests.java b/src/test/java/edu/kit/provideq/toolbox/ToolboxServerApplicationTests.java deleted file mode 100644 index e786209c..00000000 --- a/src/test/java/edu/kit/provideq/toolbox/ToolboxServerApplicationTests.java +++ /dev/null @@ -1,13 +0,0 @@ -package edu.kit.provideq.toolbox; - -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.context.SpringBootTest; - -@SpringBootTest -class ToolboxServerApplicationTests { - - @Test - void contextLoads() { - } - -} diff --git a/src/test/java/edu/kit/provideq/toolbox/api/QuboSolverTest.java b/src/test/java/edu/kit/provideq/toolbox/api/QuboSolverTest.java index 1c30cea1..7b8ae33e 100644 --- a/src/test/java/edu/kit/provideq/toolbox/api/QuboSolverTest.java +++ b/src/test/java/edu/kit/provideq/toolbox/api/QuboSolverTest.java @@ -23,7 +23,7 @@ @TestInstance(TestInstance.Lifecycle.PER_CLASS) @SpringBootTest @AutoConfigureMockMvc -public class QuboSolverTest { +class QuboSolverTest { @Autowired private WebTestClient client; diff --git a/src/test/java/edu/kit/provideq/toolbox/api/TspSolverTest.java b/src/test/java/edu/kit/provideq/toolbox/api/TspSolverTest.java index b52c6c4c..706e53ee 100644 --- a/src/test/java/edu/kit/provideq/toolbox/api/TspSolverTest.java +++ b/src/test/java/edu/kit/provideq/toolbox/api/TspSolverTest.java @@ -30,7 +30,7 @@ @TestInstance(TestInstance.Lifecycle.PER_CLASS) @SpringBootTest @AutoConfigureMockMvc -public class TspSolverTest { +class TspSolverTest { @Autowired private WebTestClient client; diff --git a/src/test/java/edu/kit/provideq/toolbox/api/VrpSolverTest.java b/src/test/java/edu/kit/provideq/toolbox/api/VrpSolverTest.java index 562ce292..1d74d71f 100644 --- a/src/test/java/edu/kit/provideq/toolbox/api/VrpSolverTest.java +++ b/src/test/java/edu/kit/provideq/toolbox/api/VrpSolverTest.java @@ -34,7 +34,7 @@ @TestInstance(TestInstance.Lifecycle.PER_CLASS) @SpringBootTest @AutoConfigureMockMvc -public class VrpSolverTest { +class VrpSolverTest { @Autowired private WebTestClient client; @@ -123,11 +123,11 @@ void testKmeansWithLkhForVrp() { //check if subproblem is set correctly List vrpSubProblems = problemDto.getSubProblems(); - assertEquals(vrpSubProblems.size(), - 1); //there should be exactly one subproblem, the vrp that needs to be clustered + //there should be exactly one subproblem, the vrp that needs to be clustered: + assertEquals(1, vrpSubProblems.size()); SubProblemReferenceDto vrpProblem = vrpSubProblems.get(0); List clusterSubProblems = vrpProblem.getSubProblemIds(); - assertEquals(clusterSubProblems.size(), 1); //there should also only one subproblem Id + assertEquals(1, clusterSubProblems.size()); //there should also only one subproblem Id assertEquals(vrpProblem.getSubRoutine().getTypeId(), CLUSTER_VRP.getId()); //set k-means as CLUSTER_VRP solver: @@ -237,9 +237,9 @@ void testTwoPhaseWithAnnealer() { TSP.getId()); //set d-wave annealer as qubo solver: - assertEquals(tspClusterProblem.getSubProblems().size(), 1); + assertEquals(1, tspClusterProblem.getSubProblems().size()); var quboProblem = tspClusterProblem.getSubProblems().get(0); - assertEquals(quboProblem.getSubProblemIds().size(), 1); + assertEquals(1, quboProblem.getSubProblemIds().size()); assertEquals(quboProblem.getSubRoutine().getTypeId(), QUBO.getId()); ApiTestHelper.setProblemSolver(client, dwaveQuboSolver, quboProblem.getSubProblemIds().get(0), QUBO.getId()); }