From a53e859d9c3ad0a052157eae358f5314d811459a Mon Sep 17 00:00:00 2001 From: Johannes Mey <johannes.mey@tu-dresden.de> Date: Wed, 18 Jul 2018 15:52:39 +0200 Subject: [PATCH] some refactoring --- .../src/main/jastadd/solvers/Helpers.jadd | 28 ++++--------------- .../src/main/jastadd/solvers/SolverUtils.jadd | 24 ++++++++++++++++ .../src/main/java/ir/ac/ui/eng/ACOSolver.java | 2 +- .../src/main/java/ir/ac/ui/eng/Ant.java | 2 +- .../src/main/java/uniks/EMFeRSolver.java | 2 +- .../src/main/java/uniks/EMFeRTrafos.java | 8 +++--- .../st/mquat/solving/simple/SimpleSolver.java | 2 +- .../inf/st/mquat/solving/SolverUtils.java | 24 +--------------- .../mquat/solving/HandwrittenTestSuite.java | 5 ++++ 9 files changed, 43 insertions(+), 54 deletions(-) create mode 100644 jastadd-mquat-base/src/main/jastadd/solvers/SolverUtils.jadd diff --git a/jastadd-mquat-base/src/main/jastadd/solvers/Helpers.jadd b/jastadd-mquat-base/src/main/jastadd/solvers/Helpers.jadd index 8ca652d..5ffb352 100644 --- a/jastadd-mquat-base/src/main/jastadd/solvers/Helpers.jadd +++ b/jastadd-mquat-base/src/main/jastadd/solvers/Helpers.jadd @@ -1,27 +1,5 @@ aspect Helpers { - public static void Clause.populateResourceMapping(ResourceMapping mapping, ResourceRequirement requirement, Resource resource) { - - for (ResourceRequirement subRequirement : requirement.getResourceRequirementList()) { - int fittingResourceCount = 0; - for (int currentInstance = 0; currentInstance < subRequirement.getNumInstance(); currentInstance++) { - Instance instance = subRequirement.getInstance(currentInstance); - for (int currentResource = 0; currentResource < resource.getNumSubResource(); currentResource++) { - Resource subResource = resource.getSubResource(currentResource); - if (subResource.getType().getRef() == subRequirement.getResourceTypeRef().getRef()) { - if (currentInstance == fittingResourceCount) { - ResourceMapping newMapping = new ResourceMapping(instance, subResource, new de.tudresden.inf.st.mquat.jastadd.model.List<>()); - mapping.addResourceMapping(newMapping); - populateResourceMapping(newMapping, subRequirement, subResource); - fittingResourceCount++; - } - currentInstance++; - } - } - } - } - } - uncache Clause.simpleAssignment(Request request, Resource resource); syn Assignment Clause.simpleAssignment(Request request, Resource resource) { Assignment assignment = new Assignment(); @@ -31,7 +9,7 @@ aspect Helpers { assignment.setImplementation(impl); ResourceMapping mapping=new ResourceMapping(impl.getResourceRequirement().getInstance(0),resource,new de.tudresden.inf.st.mquat.jastadd.model.List<>()); - populateResourceMapping(mapping,impl.getResourceRequirement(),resource); + Resource.populateResourceMapping(mapping,impl.getResourceRequirement(),resource); assignment.setResourceMapping(mapping); } return assignment; @@ -42,6 +20,8 @@ aspect Helpers { public Solution Root.createRandomSolution(java.util.Random random) { Solution solution = new Solution(); + solution.setModel(this); + // create a resource bucket java.util.List<Resource> resourceList = populateResourceList(this.getHardwareModel().getResourceList(), new ArrayList<>()); @@ -97,6 +77,8 @@ aspect Helpers { } while (chosenResource.getType().getRef() != requiredResourceType); mapping.setResource(resourceList.remove(resourceNumber)); + Resource.populateResourceMapping(mapping, resourceRequirement, chosenResource); + assignment.setResourceMapping(mapping); } diff --git a/jastadd-mquat-base/src/main/jastadd/solvers/SolverUtils.jadd b/jastadd-mquat-base/src/main/jastadd/solvers/SolverUtils.jadd new file mode 100644 index 0000000..4b1e68b --- /dev/null +++ b/jastadd-mquat-base/src/main/jastadd/solvers/SolverUtils.jadd @@ -0,0 +1,24 @@ +aspect SolverUtils { + + public static void Resource.populateResourceMapping(ResourceMapping mapping, ResourceRequirement requirement, Resource resource) { + + for (ResourceRequirement subRequirement : requirement.getResourceRequirementList()) { + int fittingResourceCount = 0; + for (int currentInstance = 0; currentInstance < subRequirement.getNumInstance(); currentInstance++) { + Instance instance = subRequirement.getInstance(currentInstance); + for (int currentResource = 0; currentResource < resource.getNumSubResource(); currentResource++) { + Resource subResource = resource.getSubResource(currentResource); + if (subResource.getType().getRef() == subRequirement.getResourceTypeRef().getRef()) { + if (currentInstance == fittingResourceCount) { + ResourceMapping newMapping = new ResourceMapping(instance, subResource, new de.tudresden.inf.st.mquat.jastadd.model.List<>()); + mapping.addResourceMapping(newMapping); + populateResourceMapping(newMapping, subRequirement, subResource); + fittingResourceCount++; + } + currentInstance++; + } + } + } + } + } +} \ No newline at end of file diff --git a/jastadd-mquat-solver-aco/src/main/java/ir/ac/ui/eng/ACOSolver.java b/jastadd-mquat-solver-aco/src/main/java/ir/ac/ui/eng/ACOSolver.java index 6b7fbb7..18cc43d 100644 --- a/jastadd-mquat-solver-aco/src/main/java/ir/ac/ui/eng/ACOSolver.java +++ b/jastadd-mquat-solver-aco/src/main/java/ir/ac/ui/eng/ACOSolver.java @@ -94,7 +94,7 @@ public class ACOSolver implements BenchmarkableSolver { ResourceMapping mapping = new ResourceMapping(impl.getResourceRequirement().getInstance(0), resource, new de.tudresden.inf.st.mquat.jastadd.model.List<>()); - SolverUtils.populateResourceMapping(mapping, impl.getResourceRequirement(), resource); + Resource.populateResourceMapping(mapping, impl.getResourceRequirement(), resource); assignment.setResourceMapping(mapping); } diff --git a/jastadd-mquat-solver-aco/src/main/java/ir/ac/ui/eng/Ant.java b/jastadd-mquat-solver-aco/src/main/java/ir/ac/ui/eng/Ant.java index 61e26b9..c74acc6 100644 --- a/jastadd-mquat-solver-aco/src/main/java/ir/ac/ui/eng/Ant.java +++ b/jastadd-mquat-solver-aco/src/main/java/ir/ac/ui/eng/Ant.java @@ -46,7 +46,7 @@ public class Ant { ResourceMapping mapping = new ResourceMapping(impl.getResourceRequirement().getInstance(0), resource, new de.tudresden.inf.st.mquat.jastadd.model.List<>()); - SolverUtils.populateResourceMapping(mapping, impl.getResourceRequirement(), resource); + Resource.populateResourceMapping(mapping, impl.getResourceRequirement(), resource); assignment.setResourceMapping(mapping); } diff --git a/jastadd-mquat-solver-emfer/src/main/java/uniks/EMFeRSolver.java b/jastadd-mquat-solver-emfer/src/main/java/uniks/EMFeRSolver.java index f7abed4..06d373b 100644 --- a/jastadd-mquat-solver-emfer/src/main/java/uniks/EMFeRSolver.java +++ b/jastadd-mquat-solver-emfer/src/main/java/uniks/EMFeRSolver.java @@ -51,7 +51,7 @@ public class EMFeRSolver implements BenchmarkableSolver { Implementation impl = assignment.getImplementation(); ResourceMapping mapping = new ResourceMapping(impl.getResourceRequirement().getInstance(0), resource, new de.tudresden.inf.st.mquat.jastadd.model.List<>()); - SolverUtils.populateResourceMapping(mapping, impl.getResourceRequirement(), resource); + Resource.populateResourceMapping(mapping, impl.getResourceRequirement(), resource); assignment.setResourceMapping(mapping); } diff --git a/jastadd-mquat-solver-emfer/src/main/java/uniks/EMFeRTrafos.java b/jastadd-mquat-solver-emfer/src/main/java/uniks/EMFeRTrafos.java index 92705dc..c5b3fd4 100644 --- a/jastadd-mquat-solver-emfer/src/main/java/uniks/EMFeRTrafos.java +++ b/jastadd-mquat-solver-emfer/src/main/java/uniks/EMFeRTrafos.java @@ -104,7 +104,7 @@ public class EMFeRTrafos Resource resource = findResource(eAssignment.getNodeName()); ResourceMapping resourceMapping = new ResourceMapping(instance, resource, new List<>()); - SolverUtils.populateResourceMapping(resourceMapping, implementation.getResourceRequirement(), resource); + Resource.populateResourceMapping(resourceMapping, implementation.getResourceRequirement(), resource); dAssignment.setResourceMapping(resourceMapping); @@ -154,7 +154,7 @@ public class EMFeRTrafos { Resource resource = findResource(eSubAssignment.getNodeName()); ResourceMapping resourceMapping = new ResourceMapping(instance, resource, new List<>()); - SolverUtils.populateResourceMapping(resourceMapping, subImpl.getResourceRequirement(), resource); + Resource.populateResourceMapping(resourceMapping, subImpl.getResourceRequirement(), resource); dSubAssignment.setResourceMapping(resourceMapping); if (dSubAssignment.isValid()) @@ -208,7 +208,7 @@ public class EMFeRTrafos { ResourceMapping resourceMapping = new ResourceMapping(instance, resource, new List<>()); - SolverUtils.populateResourceMapping(resourceMapping, implementation.getResourceRequirement(), resource); + Resource.populateResourceMapping(resourceMapping, implementation.getResourceRequirement(), resource); dAssignment.setResourceMapping(resourceMapping); @@ -251,7 +251,7 @@ public class EMFeRTrafos for (Resource resource : availableResources) { ResourceMapping resourceMapping = new ResourceMapping(instance, resource, new List<>()); - SolverUtils.populateResourceMapping(resourceMapping, subImpl.getResourceRequirement(), resource); + Resource.populateResourceMapping(resourceMapping, subImpl.getResourceRequirement(), resource); dSubAssignment.setResourceMapping(resourceMapping); if (dSubAssignment.isValid()) diff --git a/jastadd-mquat-solver-simple/src/main/java/de/tudresden/inf/st/mquat/solving/simple/SimpleSolver.java b/jastadd-mquat-solver-simple/src/main/java/de/tudresden/inf/st/mquat/solving/simple/SimpleSolver.java index e712909..ebfbdf6 100644 --- a/jastadd-mquat-solver-simple/src/main/java/de/tudresden/inf/st/mquat/solving/simple/SimpleSolver.java +++ b/jastadd-mquat-solver-simple/src/main/java/de/tudresden/inf/st/mquat/solving/simple/SimpleSolver.java @@ -40,7 +40,7 @@ public class SimpleSolver implements BenchmarkableSolver { Implementation impl = assignment.getImplementation(); ResourceMapping mapping = new ResourceMapping(impl.getResourceRequirement().getInstance(0), resource, new de.tudresden.inf.st.mquat.jastadd.model.List<>()); - SolverUtils.populateResourceMapping(mapping, impl.getResourceRequirement(), resource); + Resource.populateResourceMapping(mapping, impl.getResourceRequirement(), resource); assignment.setResourceMapping(mapping); } diff --git a/jastadd-mquat-solver/src/main/java/de/tudresden/inf/st/mquat/solving/SolverUtils.java b/jastadd-mquat-solver/src/main/java/de/tudresden/inf/st/mquat/solving/SolverUtils.java index 70af777..173bb4c 100644 --- a/jastadd-mquat-solver/src/main/java/de/tudresden/inf/st/mquat/solving/SolverUtils.java +++ b/jastadd-mquat-solver/src/main/java/de/tudresden/inf/st/mquat/solving/SolverUtils.java @@ -12,28 +12,6 @@ import java.util.concurrent.TimeUnit; @SuppressWarnings("Duplicates") public class SolverUtils { - public static void populateResourceMapping(ResourceMapping mapping, ResourceRequirement requirement, Resource resource) { - - for (ResourceRequirement subRequirement : requirement.getResourceRequirementList()) { - int fittingResourceCount = 0; - for (int currentInstance = 0; currentInstance < subRequirement.getNumInstance(); currentInstance++) { - Instance instance = subRequirement.getInstance(currentInstance); - for (int currentResource = 0; currentResource < resource.getNumSubResource(); currentResource++) { - Resource subResource = resource.getSubResource(currentResource); - if (subResource.getType().getRef() == subRequirement.getResourceTypeRef().getRef()) { - if (currentInstance == fittingResourceCount) { - ResourceMapping newMapping = new ResourceMapping(instance, subResource, new de.tudresden.inf.st.mquat.jastadd.model.List<>()); - mapping.addResourceMapping(newMapping); - populateResourceMapping(newMapping, subRequirement, subResource); - fittingResourceCount++; - } - currentInstance++; - } - } - } - } - } - public static long populateSolution(List<Assignment> listOfInitialAssignments, Solution result, Logger logger) throws SolvingException { StopWatch watch = StopWatch.start(); @@ -44,7 +22,7 @@ public class SolverUtils { Resource resource = assignment.getResource(); ResourceMapping mapping = new ResourceMapping(impl.getResourceRequirement().getInstance(0), resource, new de.tudresden.inf.st.mquat.jastadd.model.List<>()); - populateResourceMapping(mapping, impl.getResourceRequirement(), resource); + Resource.populateResourceMapping(mapping, impl.getResourceRequirement(), resource); assignment.setResourceMapping(mapping); // for (ResourceRequirement rr : impl.getResourceRequirementList()) { diff --git a/jastadd-mquat-solver/src/test/java/de/tudresden/inf/st/mquat/solving/HandwrittenTestSuite.java b/jastadd-mquat-solver/src/test/java/de/tudresden/inf/st/mquat/solving/HandwrittenTestSuite.java index 7307227..b15bc10 100644 --- a/jastadd-mquat-solver/src/test/java/de/tudresden/inf/st/mquat/solving/HandwrittenTestSuite.java +++ b/jastadd-mquat-solver/src/test/java/de/tudresden/inf/st/mquat/solving/HandwrittenTestSuite.java @@ -97,6 +97,11 @@ public abstract class HandwrittenTestSuite { } collector.checkThat("Solution is not valid", true, equalTo(modelAndSolution.getSecondElement().isValid())); + + logger.info("completeness: " + modelAndSolution.getSecondElement().evaluateSoftwareCompleteness()); + logger.info("sw-validity: " + modelAndSolution.getSecondElement().evaluateSoftwareValidity()); + logger.info("validity: " + modelAndSolution.getSecondElement().evaluateValidity()); + logger.info("objective: " + modelAndSolution.getSecondElement().computeObjective()); } @Test -- GitLab