From fbefcaea27a87a5e74fdb9e525877d22af2bbdae Mon Sep 17 00:00:00 2001 From: Alexander Diewald <diewald@fortiss.org> Date: Wed, 21 Feb 2018 17:21:09 +0000 Subject: [PATCH] Exploration: DSE project MM improvements & DSE Backend Unification ================= | Exploration exploration.ecore ================= - ExplorationSpecification - targets: non-contained (Migrator!) - Add superSet reference to pass required SuperSets to the DSE backend. - Remove ExplorationSolution interface: No Migration needed. - Rename ExplorationSolutionSet --> ExplorationSolution - Deprecated inputModelAdapter: No migration needed, only used in MOEA. - Renaming: targetSpecification --> explorationSpec - targetSpecification marked @deprecated - No mirgator needed: Class was not used in previous stable releases. - Add EClass SuperSetMap: Relates types of elements to SuperSets - solution: EJavaClassToSuperSetMap (containment!) - Add EClass EJavaClassToSuperSetMap: internal map of "SuperSetMap" - key: Class - Value: SuperSet (NO containment!) - ExplorationSolution - Renamed solutionModelMap -> solutionSets (Type EJavaClassToEJavaObjectMap -> EJavaClassToSuperSetMap) - Adjust EOperations to modifications in backend map. - SingleExplorationSolution - Add the solution state for single solutions. - Adjust EOperations to modifications in backend map. - Removed EJavaClassToEJavaObjectMap dseproject.ecore ================ - DSE: - Add EReference target: ExplorationTarget (containment) - Remove explorationSpecification (Migrator!) - Add an ExplorationTargetPool that contains all ExplorationTargets of a DSE project. - DSERun: - Add EReference explorationSolution (containment) - Remove EReference visualization (Migrator!) dsl_v2.ecore ============ - Overwrite the accept method for the Sum expression: Do not return null if the associated set is empty, evaluate to Zero, instead. New Migrators ============= - DSEExplorationTargetContainmentMigrator Migrates the set of explorationTargets to the DSE project - VisualizationToExpSolutionMigrator: Migrates the Visualization data to the ExplorationSolution representation that allows a better traceability. Other Business ============== - Adjust plugin.xml to account for recently removed Objective- and ConstraintExpression classes. Now, ExplorationObjective and ExplorationConstraint is used. ================= | Exploration.alg - Adjust the Opt4JBackend to be comply to the new DSE Backend Specification - The output type detection in the base decoder is more robust. - The ITaskAdapter temporally references its corresponding component to ease the refactoring of the DSE backend interface. This shall not be needed when the transformation framework is integrated again. - Temporally transform the internal solutions to a superset of ComponentToExecutionUnitAllocations to create s solution model. Workaround until the transformation framework is integrated again. - Misc adjustment for backend changes. ================= | Exploration.smt - Adjust the Z3Backend to be comply to the new DSE Backend Specification - Base the results of the DeploymentRun2 and SolverRun2 on the ExplorationSolution (see above). ================ | Exploration.ui - Adjust the GUI logic to account for the changed containment relations. - Update the DSE project import wizard for the Meta-Model changes. - Move the ExplorationSolutionVisualizationUtils class to the UI plugin (here). It is used to transform ExplorationSolutions to a Visualization representation (i.e., DataSetCollection). - Use doubles instead of ints in the SpiderChartUtils. Although not a proper solution, this covers more cases... Instead the generic should be reflected. refs 3273 --- .../trunk/plugin.xml | 4 +- .../af3/exploration/alg/backend/.ratings | 2 +- .../alg/backend/Opt4JDseBackend.java | 40 ++++------ .../fortiss/af3/exploration/alg/dse/.ratings | 2 +- .../alg/dse/CompositeExplorationSolution.java | 75 ++++++++++++++----- .../extensions/compositegene/decode/.ratings | 2 +- .../decode/ComposableDecoderBase.java | 4 +- .../alg/dse/evaluator/objective/.ratings | 2 +- .../objective/MappingEvaluatorObjective.java | 5 +- .../dse/modeltransformation/comparch/.ratings | 2 +- .../ComponentArchitectureTransformer.java | 4 +- .../alg/dse/sysmodel/arch/.ratings | 2 +- .../alg/dse/sysmodel/arch/ITaskAdapter.java | 31 ++++---- .../alg/dse/sysmodel/arch/af3/.ratings | 4 +- .../arch/af3/AF3SystemModelAdapter.java | 21 +++++- .../dse/sysmodel/arch/af3/AF3TaskAdapter.java | 23 ++++-- .../fortiss/af3/exploration/alg/plot/.ratings | 2 +- .../af3/exploration/alg/plot/XYPlotter.java | 63 +++++++--------- .../af3/exploration/alg/service/.ratings | 4 +- .../IExplorationTransformationService.java | 6 +- .../alg/service/IRepairModule.java | 2 +- .../exploration/alg/service/internal/.ratings | 2 +- .../ExplorationTransformationService.java | 9 ++- .../fortiss/af3/exploration/alg/util/.ratings | 2 +- ...gnSpaceExplorationModelElementFactory.java | 13 ---- 25 files changed, 186 insertions(+), 140 deletions(-) diff --git a/org.fortiss.af3.exploration.alg/trunk/plugin.xml b/org.fortiss.af3.exploration.alg/trunk/plugin.xml index d64925fb..e0c7a73c 100644 --- a/org.fortiss.af3.exploration.alg/trunk/plugin.xml +++ b/org.fortiss.af3.exploration.alg/trunk/plugin.xml @@ -225,13 +225,13 @@ <evaluator module="org.fortiss.af3.exploration.alg.dse.evaluator.objective.MappingEvaluatorObjective"> <modelElementClass - modelElementClass="org.fortiss.af3.exploration.model.ObjectiveExpression"> + modelElementClass="org.fortiss.af3.exploration.model.ExplorationObjective"> </modelElementClass> </evaluator> <evaluator module="org.fortiss.af3.exploration.alg.dse.evaluator.constraint.MappingEvaluatorConstraint"> <modelElementClass - modelElementClass="org.fortiss.af3.exploration.model.ConstraintExpression"> + modelElementClass="org.fortiss.af3.exploration.model.ExplorationConstraint"> </modelElementClass> </evaluator> </extension> diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/backend/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/backend/.ratings index 1264a044..f4da2572 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/backend/.ratings +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/backend/.ratings @@ -1 +1 @@ -Opt4JDseBackend.java 50254b3b5058ed77e8a868f3545fde16153217b1 RED +Opt4JDseBackend.java 1e40a39efe861ae007a3629c4955e5ccceee8a92 RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/backend/Opt4JDseBackend.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/backend/Opt4JDseBackend.java index 9e3076ed..ed47533c 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/backend/Opt4JDseBackend.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/backend/Opt4JDseBackend.java @@ -16,7 +16,6 @@ package org.fortiss.af3.exploration.alg.backend; import static org.fortiss.af3.exploration.alg.util.DesignSpaceExplorationModelElementFactory.createDefaultDesignSpaceExploration; -import static org.fortiss.af3.exploration.util.DesignSpaceExplorationModelElementFactory.createExplorationSpecification; import static org.fortiss.tooling.common.util.LambdaUtils.getFirst; import static org.fortiss.tooling.kernel.utils.EcoreUtils.getParentsWithType; @@ -37,16 +36,13 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.af3.AF3SystemModelAdapt import org.fortiss.af3.exploration.alg.plot.XYPlotter; import org.fortiss.af3.exploration.alg.service.IExplorationEncoding; import org.fortiss.af3.exploration.backend.IDseBackend; -import org.fortiss.af3.exploration.backend.RuleSetContainer; -import org.fortiss.af3.exploration.backend.SuperSetMap; import org.fortiss.af3.exploration.dsl_v2.model.expression.SuperSet; -import org.fortiss.af3.exploration.model.ExplorationSolution; import org.fortiss.af3.exploration.model.ExplorationSpecification; import org.fortiss.af3.exploration.model.IExplorationFeature; -import org.fortiss.af3.exploration.model.solutions.ExplorationSolutionSet; +import org.fortiss.af3.exploration.model.SuperSetMap; +import org.fortiss.af3.exploration.model.solutions.ExplorationSolution; import org.fortiss.af3.exploration.moea.model.DseSpecification; import org.fortiss.af3.exploration.moea.model.feature.FeatureFactory; -import org.fortiss.af3.exploration.projectmodel.RuleSet; import org.fortiss.af3.platform.model.ExecutionUnit; import org.fortiss.af3.platform.model.PlatformArchitecture; import org.fortiss.af3.task.model.Signal; @@ -66,9 +62,8 @@ import org.jfree.ui.RefineryUtilities; public class Opt4JDseBackend implements IDseBackend { /** Specifies the required input models from the DSE. */ - private final Collection<Class<?>> requiredInputModels = - Arrays.asList(ComponentArchitecture.class, TaskArchitecture.class, - PlatformArchitecture.class, RuleSetContainer.class); + private final Collection<Class<?>> requiredInputModels = Arrays.asList( + ComponentArchitecture.class, TaskArchitecture.class, PlatformArchitecture.class); // TODO: Remove after migration to AF3 visiualization /** Last {@link XYPlotter} (in order to close it before creating a new one. */ @@ -83,30 +78,25 @@ public class Opt4JDseBackend implements IDseBackend { /** {@inheritDoc} */ @SuppressWarnings("unchecked") @Override - public Optional<ExplorationSolution> executeDSE(RuleSetContainer expSpec, - Set<Class<? extends IModelElement>> solutionModels, SuperSetMap superSets, + public Optional<ExplorationSolution> executeDSE(ExplorationSpecification expSpec, + Set<Class<? extends IModelElement>> solutionModelTypes, Collection<IExplorationFeature> explorationModules, IProgressMonitor monitor, int timeoutMS) throws Exception { - ExplorationSolutionSet explorationSolutionSet; + ExplorationSolution explorationSolution; SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter; + SuperSetMap superSets = expSpec.getSearchSpace(); // TODO: Find a cleaner way to extract the model context. TaskArchitecture taskArchitecture = getArchModel(superSets, TaskArchitecture.class, Task.class); ITopLevelElement context = IPersistencyService.getInstance().getTopLevelElementFor(taskArchitecture); - ExplorationSpecification spec = createExplorationSpecification(); - for(RuleSet ruleSet : expSpec) { - context.runAsNonDirtyingCommand( - () -> spec.getTargets().addAll(ruleSet.getExplorationTargets())); - } - // Input to DSE: {@link SystemModelAdapter} and {@link DesignSpaceExploration}. // SystemModelAdapter systemModelAdapter; systemModelAdapter = new AF3SystemModelAdapter(superSets.get(Task.class), superSets.get(ComponentToTaskAllocationEntry.class), superSets.get(ExecutionUnit.class), superSets.get(Signal.class)); - DseSpecification dseSpec = createDefaultDesignSpaceExploration(spec, context); + DseSpecification dseSpec = createDefaultDesignSpaceExploration(expSpec, context); // Set the requested solutions. Set<Class<?>> solutionTypes = new HashSet<>(); @@ -130,10 +120,8 @@ public class Opt4JDseBackend implements IDseBackend { } CompositeExplorationSolution<?> expResult = explorer.explore(dseSpec, systemModelAdapter, solPhenotypeTypes, monitor, true); - explorationSolutionSet = expResult.convertToExplorationSolution(); - explorationSolutionSet.setInputModelAdapter(systemModelAdapter); - - explorationSolutionSet.setTargetSpecification(spec); + explorationSolution = expResult.convertToExplorationSolution(); + explorationSolution.setExplorationSpec(expSpec); } catch(Exception ex) { // TODO: readd code to present the schedule which failed... Use the LoggingService from // the kernel. @@ -147,7 +135,7 @@ public class Opt4JDseBackend implements IDseBackend { // } throw ex; } - return Optional.of(explorationSolutionSet); + return Optional.of(explorationSolution); } /** @@ -170,7 +158,7 @@ public class Opt4JDseBackend implements IDseBackend { * each solution. */ @Override - public void plotResult(ExplorationSolutionSet solutionSet) { + public void plotResult(ExplorationSolution solutionSet) { if(solutionSet != null) { // Keep only one DSE result window if(lastPlotter != null) { @@ -179,7 +167,7 @@ public class Opt4JDseBackend implements IDseBackend { // draw figure // FIXME: Unchecked cast to ExplorationSolutionSet - XYPlotter plotter = new XYPlotter(solutionSet.getTargetSpecification(), solutionSet, + XYPlotter plotter = new XYPlotter(solutionSet.getExplorationSpec(), solutionSet, "Design Space Exploration Result (generations: " + "N/A" + ")"); plotter.createPlot(); plotter.pack(); diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/.ratings index df685a90..1c1866f0 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/.ratings +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/.ratings @@ -1,4 +1,4 @@ -CompositeExplorationSolution.java 528283a3dd57500539b2e11dd3d3eb35512de9b8 RED +CompositeExplorationSolution.java 80437fd1a7022e8718b8116533afdf12015e4398 RED DSEFactory.java 0a2f2cc6a197e760c1f8223339ffa5f16856b184 RED Explorer.java 4e23a668d0b0ad236e77eec2634efe2a0a6d0a23 RED ImplicitExplorationTargetFactory.java 0b10dc4e8385bbdee0217dac783203080eb723f0 RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/CompositeExplorationSolution.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/CompositeExplorationSolution.java index 57b2dc02..c357d3ae 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/CompositeExplorationSolution.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/CompositeExplorationSolution.java @@ -15,22 +15,34 @@ +--------------------------------------------------------------------------*/ package org.fortiss.af3.exploration.alg.dse; -import static org.fortiss.af3.exploration.alg.util.DesignSpaceExplorationModelElementFactory.createSingleExplorationSolutionMap; +import static org.fortiss.af3.allocation.utils.AllocationModelElementFactory.createAllocationEntry; +import static org.fortiss.af3.exploration.util.DSMLModelElementFactory.createSuperSet; +import static org.fortiss.af3.exploration.util.DesignSpaceExplorationModelElementFactory.createSingleExplorationSolution; +import static org.fortiss.tooling.common.util.LambdaUtils.getFirst; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; +import org.fortiss.af3.component.model.Component; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.Partition; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.PartitionMappingEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.InstantiatedTaskMappingEncoding; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.InstantiatedTaskMappingEntry; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.solution.IExplorationSolution; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.solution.IScheduleSolution; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.solution.StrictTTSchedule; +import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ITaskAdapter; +import org.fortiss.af3.exploration.dsl_v2.model.expression.SuperSet; import org.fortiss.af3.exploration.model.ExplorationTarget; import org.fortiss.af3.exploration.model.solutions.ExplorationResult; -import org.fortiss.af3.exploration.model.solutions.ExplorationSolutionSet; -import org.fortiss.af3.exploration.model.solutions.SingleExplorationSolutionMap; +import org.fortiss.af3.exploration.model.solutions.ExplorationSolution; +import org.fortiss.af3.exploration.model.solutions.SingleExplorationSolution; +import org.fortiss.af3.exploration.model.solutions.SolutionState; import org.fortiss.af3.exploration.model.solutions.SolutionsFactory; +import org.fortiss.af3.platform.model.allocation.ComponentToExecutionUnitAllocationEntry; +import org.fortiss.tooling.base.model.element.IModelElement; import org.opt4j.core.Value; /** @@ -122,28 +134,22 @@ public class CompositeExplorationSolution<P extends Phenotype> { } /** - * Returns {@code this} {@link CompositeExplorationSolution} as a {@link ExplorationSolutionSet} + * Returns {@code this} {@link CompositeExplorationSolution} as a {@link ExplorationSolution} * . */ @SuppressWarnings("unchecked") - public <T> ExplorationSolutionSet convertToExplorationSolution() throws Exception { - ExplorationSolutionSet expSol = SolutionsFactory.eINSTANCE.createExplorationSolutionSet(); + public <T> ExplorationSolution convertToExplorationSolution() throws Exception { + ExplorationSolution expSol = + org.fortiss.af3.exploration.util.DesignSpaceExplorationModelElementFactory + .createExplorationSolution(); for(Entry<IExplorationSolution<?>, SolutionQuantification> singleSolutionEntry : explorationResultMap .entrySet()) { - SingleExplorationSolutionMap expSolutionMap = createSingleExplorationSolutionMap(); + SingleExplorationSolution singleExpSolution = createSingleExplorationSolution(); IExplorationSolution<?> singleSolution = singleSolutionEntry.getKey(); - // Be transparent, provide all Phenotypes - for(Class<? extends Phenotype> subSolutionType : singleSolution - .getAllSubSolutionClasses()) { - // TODO: Dirty cast, remove. - expSolutionMap.putSolutionModel((Class<T>)subSolutionType, - (T)singleSolution.getSubSolution(subSolutionType)); - } - for(Entry<ExplorationTarget<?>, Value<?>> solEntry : singleSolutionEntry.getValue() .entrySet()) { - if(expSolutionMap.containsKey(solEntry.getKey())) { + if(singleExpSolution.containsKey(solEntry.getKey())) { throw new Exception( "Could not convert to the ExplorationResult to an ExplorationSolutionSet. The exist multiple results for the ExplorationTarget " + solEntry.getKey().getName() + @@ -155,9 +161,42 @@ public class CompositeExplorationSolution<P extends Phenotype> { @SuppressWarnings("rawtypes") ExplorationResult res = SolutionsFactory.eINSTANCE.createExplorationResult(); res.setResult(solEntry.getValue().getDouble()); - expSolutionMap.put((ExplorationTarget<?>)solEntry.getKey(), res); + singleExpSolution.put((ExplorationTarget<?>)solEntry.getKey(), res); + } + + // FIXME: HACK: Currently, only the Deployment exploration is used, whereas the solution + // transformation framework is non-functional at the moment. + InstantiatedTaskMappingEncoding<InstantiatedTaskMappingEntry> tm = + singleSolution.getSubSolution(InstantiatedTaskMappingEncoding.class); + PartitionMappingEncoding pmEncoding = + singleSolution.getSubSolution(PartitionMappingEncoding.class); + SuperSet<ComponentToExecutionUnitAllocationEntry> compExecUnitAllocs = + createSuperSet("Optimized_Allocations"); + for(Partition resource : tm.getResources()) { + for(ITaskAdapter<?> task : tm.getRequesters(resource)) { + Component af3Component = task.getAssignedComponent(); + ComponentToExecutionUnitAllocationEntry allocEntry = + createAllocationEntry(ComponentToExecutionUnitAllocationEntry.class); + allocEntry.getSourceElements().add(af3Component); + allocEntry.setTargetElement( + (IModelElement)getFirst(pmEncoding.getAllocatedResourcesFor(resource)) + .get().getObject()); + compExecUnitAllocs.getEntries().add(allocEntry); + } } - expSol.getSolutions().add(expSolutionMap); + singleExpSolution.getSolutionSets().put(ComponentToExecutionUnitAllocationEntry.class, + compExecUnitAllocs); + + // Invalid solutions are filtered before. + singleExpSolution.setSolutionState(SolutionState.OPTIMIZED); + + expSol.getSolutions().add(singleExpSolution); + } + + if(expSol.getSolutions().isEmpty()) { + expSol.setSolutionState(SolutionState.UNKNOWN); + } else { + expSol.setSolutionState(SolutionState.OPTIMIZED); } return expSol; diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/.ratings index 54494430..2600abd4 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/.ratings +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/.ratings @@ -1,5 +1,5 @@ ComposableDecoder.java 197abec80b880e25fccfc66d61b471b0b5d7e10f RED -ComposableDecoderBase.java 6c2368511fede062e017d76e6be8e5a22132d97f RED +ComposableDecoderBase.java 96e7e4b9f24902b2699e04401225935108cc0d29 YELLOW CompositeDecoder.java 9d34dd0b342e6433ab894974f9430531ce2de39a RED CompositeDecoderBase.java 1bc1860ed616010f7f459ed6579989f155f607c2 RED PhenotypeDecoder.java 44079e8545aaf8b8729919f0b07c774c3ca0df06 RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/ComposableDecoderBase.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/ComposableDecoderBase.java index d874eac4..58a6cd79 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/ComposableDecoderBase.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/ComposableDecoderBase.java @@ -56,8 +56,10 @@ public abstract class ComposableDecoderBase<G extends ComposableGenotype, P exte @SuppressWarnings("unchecked") @Override public Class<? super P> getOutputType() { - if(genotype.getType() instanceof Class) { + if(phenotype.getType() instanceof Class) { return (Class<? super P>)phenotype.getType(); + } else if(phenotype.getRawType() != null) { + return phenotype.getRawType(); } return null; } diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/.ratings index e28f2068..a7461249 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/.ratings +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/.ratings @@ -1,5 +1,5 @@ EnergyObjectiveEvaluator.java ad2b868aa3dce2c7708ee6cc90f357b79a4cf799 RED FailSilentReliabilityEvaluator.java 83211c8e2b69579c424a486cd6845bb8d1bb69fa RED FaultDetectionVotingReliabilityEvaluator.java 189fdfd0daed3348c510a6aeac0bd391e835c524 RED -MappingEvaluatorObjective.java d92d716e5a8ecb531896e66c0254e3a4602d46d8 RED +MappingEvaluatorObjective.java 5a1e083a5f18be458b73c6fc4fd9d37b9f69d213 RED ReliabilityEvaluatorBase.java 98fa54270cba25137112fe55f3551fbd8064ac28 RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/MappingEvaluatorObjective.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/MappingEvaluatorObjective.java index b970ee5c..98906e20 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/MappingEvaluatorObjective.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/MappingEvaluatorObjective.java @@ -86,8 +86,9 @@ public class MappingEvaluatorObjective extends TaskMappingEvaluator { assert (minMaxTerm != null); // The minMax Term is always non-zero. - // TODO: redefine the - @SuppressWarnings("null") Number retVal = minMaxTerm.accept(this, Number.class); + // FIXME: Using "BigInteger" as a type is a hack: It is a workaround to comply with the + // construction of objectives in the UI. + @SuppressWarnings("null") Number retVal = minMaxTerm.accept(this, BigInteger.class); return retVal instanceof BigInteger ? new IntegerValue(retVal.intValue()) : new DoubleValue(retVal.doubleValue()); diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/comparch/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/comparch/.ratings index 7a5d5e0e..06e0097b 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/comparch/.ratings +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/comparch/.ratings @@ -3,4 +3,4 @@ ComponentArchitectureInitializer.java 52d1f756c194774a4ac5b96ac4f2014dc9b5a6b7 R ComponentArchitectureInserter.java 9ab94811d460d06fa1ce2f72e40911beb7982e94 RED ComponentArchitectureInstantiator.java 41fddd490e8b45b39bb3725d1e2a93a63b737169 RED ComponentArchitectureReplicator.java 59ee5ee2ad6331150b53293e1a549b788a52ee00 RED -ComponentArchitectureTransformer.java 9eded58c64a6077a3a5cb13cf3d7d78779b70a49 RED +ComponentArchitectureTransformer.java f4a1ea1337dcb3aeaa99900034dd9ada9b9ee5a7 RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/comparch/ComponentArchitectureTransformer.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/comparch/ComponentArchitectureTransformer.java index 23b442c1..89152cc8 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/comparch/ComponentArchitectureTransformer.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/comparch/ComponentArchitectureTransformer.java @@ -26,12 +26,12 @@ import org.fortiss.af3.exploration.alg.dse.modeltransformation.ITransformationSt import org.fortiss.af3.exploration.alg.dse.modeltransformation.base.TransformationStrategyBase; import org.fortiss.af3.exploration.alg.dse.modeltransformation.deployment.ExplorationSolutionToDeployment; import org.fortiss.af3.exploration.alg.dse.sysmodel.mapping.IMappingEncoding; -import org.fortiss.af3.exploration.model.solutions.SingleExplorationSolutionMap; +import org.fortiss.af3.exploration.model.solutions.SingleExplorationSolution; import org.fortiss.tooling.kernel.model.INamedElement; /** * {@link ITransformationStrategy} for {@link ComponentArchitecture}s based on an - * {@link SingleExplorationSolutionMap} explored by the DSE. + * {@link SingleExplorationSolution} explored by the DSE. * * @author diewald */ diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/.ratings index cfdc8484..6ae08730 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/.ratings +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/.ratings @@ -11,7 +11,7 @@ IResourceAdapter.java 634866895c9d1aa427f3c8d47e69acd807d0b582 RED IResourceConnectionAdapter.java 7e20a8c3e60a9892597301556c891ba2dd43387f RED ISafetyFunctionAdapter.java f20249e7c37f54774a9e8eaa0566a85492c80654 RED ISignalAdapter.java 4f04154c5802a4f1a5469df90652852e16727421 RED -ITaskAdapter.java 97ad40c0ca14be2fb4fd070214a3d6ebe5be914a RED +ITaskAdapter.java ea35d5d3c9482c3a3f4452eec7fa0e825552be59 RED ITransmissionUnitAdapter.java 8965b73bfe9ef232a2a6d5427f7001761716d583 RED InternalComponentParameters.java 2b19f4eeddee84e4c6e558ed9a1613cba33b7665 RED SystemModelAdapter.java 3621d4aaaeb8b5913194dc4cc6182c20f305149b RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/ITaskAdapter.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/ITaskAdapter.java index fb19cef0..0f8c8699 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/ITaskAdapter.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/ITaskAdapter.java @@ -27,27 +27,30 @@ import org.fortiss.af3.component.model.Component; * @author barner */ public interface ITaskAdapter<T> extends IRequestAdapter<T>, Cloneable { + /** TEMP HACK: Returns the AF3 component realized in this task. */ + // FIXME: Remove after updating the transformation framework for SuperSets. + Component getAssignedComponent(); /** * Returns the WCET if this {@link ITaskAdapter} would be executed on the given * {@link IExecutionUnitAdapter}. */ - public Double getWcet(IExecutionUnitAdapter<?> executionUnit); + Double getWcet(IExecutionUnitAdapter<?> executionUnit); /** * Returns the consumed energy if this {@link ITaskAdapter} would be executed on * the given {@link IExecutionUnitAdapter}. */ - public Double getEnergyConsumption(IExecutionUnitAdapter<?> executionUnit); + Double getEnergyConsumption(IExecutionUnitAdapter<?> executionUnit); /** Returns the minimum required safety integrity level of the deployable component. */ - public Enumerator getRequiredSafetyIntegrityLevel(); + Enumerator getRequiredSafetyIntegrityLevel(); /** Returns the period of the deployable component. */ - public Double getPeriod(); + Double getPeriod(); /** Sets the period of the deployable component. */ - public void setPeriod(double period); + void setPeriod(double period); /** * Predicates whether this {@link ITaskAdapter} must be instantiated by another @@ -55,25 +58,25 @@ public interface ITaskAdapter<T> extends IRequestAdapter<T>, Cloneable { * {@link ITaskAdapter}s are given that may be used to instantiate this * {@link ITaskAdapter}. */ - public boolean isInstantiationRequired(); + boolean isInstantiationRequired(); /** * Returns those {@link ITaskAdapter}s that may be used to instantiate this * {@link ITaskAdapter}. */ - public Collection<ITaskAdapter<T>> getReplacementComponents(); + Collection<ITaskAdapter<T>> getReplacementComponents(); /** * Predicates whether this {@link ITaskAdapter} instantiates an abstract * {@link ITaskAdapter}. */ - public boolean isInstantiation(); + boolean isInstantiation(); /** * Returns the {@link ITaskAdapter} instantiated by this * {@link ITaskAdapter} (if applicable). */ - public ITaskAdapter<T> getReplacedComponent(); + ITaskAdapter<T> getReplacedComponent(); /** * Sets the replacedComponent reference of {@code this} {@link ITaskAdapter} to @@ -81,26 +84,26 @@ public interface ITaskAdapter<T> extends IRequestAdapter<T>, Cloneable { * {@link ITaskAdapter}s. */ // TODO: If possible, find a way to eliminate this suppresswarning. - public void setReplacedComponent(@SuppressWarnings("rawtypes") ITaskAdapter abstractComponent); + void setReplacedComponent(@SuppressWarnings("rawtypes") ITaskAdapter abstractComponent); /** * Whenever an {@link ITaskAdapter} is copied/cloned its references wrt. the task * instantiation need to be updated. Hence, after cloning, this method should be called for each * copied/cloned {@link ITaskAdapter}. */ - public void updateInstatiationData(); + void updateInstatiationData(); /** * Returns the minimum number of replications allowed for this * {@link ITaskAdapter}. */ - public int getMinReplication(); + int getMinReplication(); /** * Returns the maximum number of replications allowed for this * {@link ITaskAdapter}. */ - public int getMaxReplication(); + int getMaxReplication(); /** * Clones the {@link ITaskAdapter} on which this method is called. If @@ -108,5 +111,5 @@ public interface ITaskAdapter<T> extends IRequestAdapter<T>, Cloneable { * constructed {@link ITaskAdapter}s must be replicated for each instantiated * encoding. */ - public ITaskAdapter<T> clone(); + ITaskAdapter<T> clone(); } diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/af3/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/af3/.ratings index 75c63c2e..ca703dc5 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/af3/.ratings +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/af3/.ratings @@ -8,6 +8,6 @@ AF3RequestAdapter.java 7cfea424beeacaac81b48efd4e1c24270dcb3929 RED AF3ResourceAdapter.java 00070d4e3ec7f19a672b6295c546fa1d30d7fc50 RED AF3ResourceConnectionAdapter.java 0e791fd7d9602f4cf00f54c6254d31f1c9cc72b0 RED AF3SignalAdapter.java bc102b65b929393808eb747572f9ae05b04a8856 RED -AF3SystemModelAdapter.java e9f93d7710e2b00a6a420687b8fd161974e10dee RED -AF3TaskAdapter.java a3cfe04d7b235cc61031c5477de2cb54ac810aac RED +AF3SystemModelAdapter.java e6ea1aaae3c4867cfc38487d7534e847794fdb82 RED +AF3TaskAdapter.java ac021d7af31888d89d1cb58ec64bf7f551da160b RED AF3TransmissionUnitAdapter.java 0ce1a08c29d75a05fb49668d02abddd852487a4c RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/af3/AF3SystemModelAdapter.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/af3/AF3SystemModelAdapter.java index 346318d0..07b8ad06 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/af3/AF3SystemModelAdapter.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/af3/AF3SystemModelAdapter.java @@ -20,6 +20,7 @@ import static org.fortiss.af3.exploration.alg.util.AF3Utils.getConnectionTypeDir import static org.fortiss.af3.exploration.alg.util.ExplorationAlgUtils.findTargetPorts; import static org.fortiss.tooling.base.ui.annotation.view.AnnotationViewPartBase.isUpdateEnabled; import static org.fortiss.tooling.base.ui.annotation.view.AnnotationViewPartBase.setUpdateEnabled; +import static org.fortiss.tooling.common.util.LambdaUtils.filter; import static org.fortiss.tooling.common.util.LambdaUtils.getFirst; import static org.fortiss.tooling.kernel.utils.EcoreUtils.getChildrenWithType; import static org.fortiss.tooling.kernel.utils.EcoreUtils.getFirstParentWithType; @@ -154,7 +155,7 @@ public class AF3SystemModelAdapter extends // Multimap<Component, ITaskAdapter<Component>> componentToReplacementAdapter = // createComponentReplacementAdapters(systemParameters.getReplacementComponents()); Multimap<Task, ITaskAdapter<Task>> componentToReplacementAdapter = HashMultimap.create(); - this.tasks = createTaskAdapters(componentToReplacementAdapter); + this.tasks = createTaskAdapters(componentTaskAllocs, componentToReplacementAdapter); // TODO(#3264): The three lines below belong to this issue. // componentReplacementAdapters = componentToReplacementAdapter.values(); @@ -204,10 +205,26 @@ public class AF3SystemModelAdapter extends * @throws Exception */ private Collection<ITaskAdapter<Task>> createTaskAdapters( + SuperSet<ComponentToTaskAllocationEntry> componentTaskAllocs, Multimap<Task, ITaskAdapter<Task>> componentReplacementAdapters) throws Exception { Collection<ITaskAdapter<Task>> rval = new HashSet<>(); for(Task currentTask : taskObjects) { - rval.add(new AF3TaskAdapter(currentTask)); + Optional<ComponentToTaskAllocationEntry> assocComponent = + getFirst(filter(componentTaskAllocs.getEntries(), + e -> e.getTargetElement() == currentTask)); + if(!assocComponent.isPresent()) { + throw new Exception("The task " + currentTask.getName() + + " is not associated with any Component. This is required for the" + + " Execution of the DSE."); + } + if(assocComponent.get().getSourceElements().size() != 1) { + throw new Exception("The task " + currentTask.getName() + + " is associated with none or more than one Components. Currently, it is" + + " required that each task has exactly one allocated component."); + } + Component af3Component = + (Component)getFirst(assocComponent.get().getSourceElements()).get(); + rval.add(new AF3TaskAdapter(currentTask, af3Component)); } return rval; } diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/af3/AF3TaskAdapter.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/af3/AF3TaskAdapter.java index 450e544b..dc745b26 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/af3/AF3TaskAdapter.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/af3/AF3TaskAdapter.java @@ -39,6 +39,10 @@ import org.fortiss.af3.timing.model.annotation.Period; * @author barner */ public class AF3TaskAdapter extends AF3RequestAdapter<Task> implements ITaskAdapter<Task> { + /** References the realized AF3 component. */ + // FIXME: Remove after updating the transformation framework for SuperSets. + private Component af3Component; + /** Map of possible Wcets defined by the deployment target. */ @SuppressWarnings("unused") private Map<IExecutionUnitAdapter<?>, Double> wcetMap; @@ -73,7 +77,7 @@ public class AF3TaskAdapter extends AF3RequestAdapter<Task> implements ITaskAdap * @throws InvalidModelException * if a required annotation cannot be found. */ - public AF3TaskAdapter(Task af3Task) throws InvalidModelException { + public AF3TaskAdapter(Task af3Task, Component af3Component) throws InvalidModelException { super(af3Task); // TODO(#3262): Use the Allocation Table to retrieve WCET and EnergyConsumption values. @@ -90,14 +94,17 @@ public class AF3TaskAdapter extends AF3RequestAdapter<Task> implements ITaskAdap minReplication = replicationSpec.getMinReplication(); maxReplication = replicationSpec.getMaxReplication(); + // FIXME: Remove after updating the transformation framework for SuperSets. + this.af3Component = af3Component; + replacementComponents = new HashSet<ITaskAdapter<Component>>(); } // TODO(#3264): Remove this method, component adapters are used. - public AF3TaskAdapter(Task task, + public AF3TaskAdapter(Task task, Component af3Component, Collection<ITaskAdapter<Component>> componentReplacementAdapters) throws InvalidModelException { - this(task); + this(task, af3Component); replacementComponents = componentReplacementAdapters; } @@ -107,9 +114,9 @@ public class AF3TaskAdapter extends AF3RequestAdapter<Task> implements ITaskAdap * @throws InvalidModelException * if a required annotation cannot be found. */ - public AF3TaskAdapter(Task task, ITaskAdapter<Task> replacedComponent) + public AF3TaskAdapter(Task task, Component af3Component, ITaskAdapter<Task> replacedComponent) throws InvalidModelException { - this(task); + this(task, af3Component); // this.replacedComponent = replacedComponent; } @@ -211,4 +218,10 @@ public class AF3TaskAdapter extends AF3RequestAdapter<Task> implements ITaskAdap } return null; } + + /** {@inheritDoc} */ + @Override + public Component getAssignedComponent() { + return af3Component; + } } diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/plot/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/plot/.ratings index f8afe202..3058d130 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/plot/.ratings +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/plot/.ratings @@ -4,4 +4,4 @@ ScheduleLabelGenerator.java 0ceecedfec9802bbcaa33525d61e1a60a70d3841 RED SchedulePlotter.java 29b1156c9419d4ff3314c4b2c932aeb46f4749f8 RED ScheduleToolTipGenerator.java cedfa0dd7ebc7b48d7cc70e966eebaeee9636caf RED TaskSeriesCollectionFromSchedule.java b53b7af649c48980520ad572da8c7bbdbae0aed5 RED -XYPlotter.java 0c384f5d560260225cee5bb65710842613b395b9 RED +XYPlotter.java 4fd144980d0d55bccbe8840c8e049b9bf3d41118 RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/plot/XYPlotter.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/plot/XYPlotter.java index d82ff81b..78fb189b 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/plot/XYPlotter.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/plot/XYPlotter.java @@ -52,8 +52,6 @@ import org.fortiss.af3.component.model.ComponentArchitecture; import org.fortiss.af3.deployment.model.Deployment; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.InstantiatedTaskMappingEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.InstantiatedTaskMappingEntry; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.solution.IScheduleSolution; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.solution.StrictTTSchedule; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; import org.fortiss.af3.exploration.alg.guava.MutableSubClassToInstanceMap; import org.fortiss.af3.exploration.alg.guava.SubClassToInstanceMap; @@ -62,8 +60,8 @@ import org.fortiss.af3.exploration.model.ExplorationConstraint; import org.fortiss.af3.exploration.model.ExplorationSpecification; import org.fortiss.af3.exploration.model.ExplorationTarget; import org.fortiss.af3.exploration.model.solutions.ExplorationResult; -import org.fortiss.af3.exploration.model.solutions.ExplorationSolutionSet; -import org.fortiss.af3.exploration.model.solutions.SingleExplorationSolutionMap; +import org.fortiss.af3.exploration.model.solutions.ExplorationSolution; +import org.fortiss.af3.exploration.model.solutions.SingleExplorationSolution; import org.fortiss.af3.platform.model.PlatformArchitecture; import org.fortiss.af3.project.model.FileProject; import org.fortiss.tooling.kernel.extension.data.ITopLevelElement; @@ -158,13 +156,13 @@ public class XYPlotter extends JFrame implements ChartMouseListener, ActionListe private JFreeChart currentChart; /** holds/buffers the solution that has been selected in the chart */ - private SingleExplorationSolutionMap currentSolution; + private SingleExplorationSolution currentSolution; /** the DSE model containing the objective and constraint description */ private ExplorationSpecification expSpec; /** The overall exploration result */ - private ExplorationSolutionSet explorationResult; + private ExplorationSolution explorationResult; /** The {@link SystemModelAdapter} that references the explored system. */ private SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> exploredSystemModel; @@ -178,7 +176,7 @@ public class XYPlotter extends JFrame implements ChartMouseListener, ActionListe /** * maps the coordinates from the created points in the chart to a specific solution of the DSE */ - private Map<XYDataItem, SingleExplorationSolutionMap> coordinateToSolution; + private Map<XYDataItem, SingleExplorationSolution> coordinateToSolution; /** buffer for the list of goals that exist in the DSE model */ private List<ExplorationTarget<?>> goalList; @@ -200,17 +198,11 @@ public class XYPlotter extends JFrame implements ChartMouseListener, ActionListe * @param title * title of the dialog window */ - public XYPlotter(ExplorationSpecification expSpec, ExplorationSolutionSet explorationResult, + public XYPlotter(ExplorationSpecification expSpec, ExplorationSolution explorationResult, String title) { super(title); this.expSpec = expSpec; this.explorationResult = explorationResult; - if(explorationResult - .getInputModelAdapter() instanceof SystemModelAdapter<?, ?, ?, ?, ?, ?, ?>) { - this.exploredSystemModel = (SystemModelAdapter<?, ?, ?, ?, ?, ?, ?>)explorationResult - .getInputModelAdapter(); - } - // TODO: throw an Exception if the SystemModelAdapter is not there. Xaxis = null; Yaxis = null; @@ -466,7 +458,7 @@ public class XYPlotter extends JFrame implements ChartMouseListener, ActionListe // add the result to series coordinateToSolution.clear(); - for(SingleExplorationSolutionMap solution : explorationResult.getSolutions()) { + for(SingleExplorationSolution solution : explorationResult.getSolutions()) { /* Retrieve the solution values of the selected objectives. */ Map<ExplorationTarget<?>, ExplorationResult<?>> objValues = solution.getSolutionMap().map(); @@ -507,10 +499,10 @@ public class XYPlotter extends JFrame implements ChartMouseListener, ActionListe XYDataItem item = new XYDataItem(x, y); currentSolution = coordinateToSolution.get(item); - Optional<SingleExplorationSolutionMap> singleExpSol = explorationResult.getSolutions() + Optional<SingleExplorationSolution> singleExpSol = explorationResult.getSolutions() .stream().filter(r -> r == currentSolution).findAny(); if(singleExpSol.isPresent()) { - SingleExplorationSolutionMap currentSolMap = singleExpSol.get(); + SingleExplorationSolution currentSolMap = singleExpSol.get(); Map<ExplorationTarget<?>, ExplorationResult<?>> objectiveValues = currentSolMap.getSolutionMap().map(); @@ -600,21 +592,24 @@ public class XYPlotter extends JFrame implements ChartMouseListener, ActionListe } } } else if("showschedule".equals(e.getActionCommand())) { - IScheduleSolution<?> scheduleSolution = - currentSolution.getSolutionModel(IScheduleSolution.class); - if(scheduleSolution instanceof StrictTTSchedule<?, ?>) { - SchedulePlotter sp = new SchedulePlotter((StrictTTSchedule<?, ?>)scheduleSolution); - sp.createPlot(); - } else if(currentSolution == null) { - // No solution has been selected - JOptionPane.showMessageDialog(this, - "Cannot display a schedule : No Exploration Solution Selected!"); - } else { - // The selected solution does not have a valid schedule type - JOptionPane.showMessageDialog(this, - "Cannot display a schedule : The selected solution provides no supported schedule!", - "Invalid schedule detected", JOptionPane.ERROR_MESSAGE); - } + JOptionPane.showMessageDialog(this, + "The schedule view is currently disabled due to a rework of the solution" + + " transformation framework."); + // IScheduleSolution<?> scheduleSolution = + // currentSolution.getSolutionModel(IScheduleSolution.class); + // if(scheduleSolution instanceof StrictTTSchedule<?, ?>) { + // SchedulePlotter sp = new SchedulePlotter((StrictTTSchedule<?, ?>)scheduleSolution); + // sp.createPlot(); + // } else if(currentSolution == null) { + // // No solution has been selected + // JOptionPane.showMessageDialog(this, + // "Cannot display a schedule : No Exploration Solution Selected!"); + // } else { + // // The selected solution does not have a valid schedule type + // JOptionPane.showMessageDialog(this, + // "Cannot display a schedule : The selected solution provides no supported schedule!", + // "Invalid schedule detected", JOptionPane.ERROR_MESSAGE); + // } } } @@ -624,7 +619,7 @@ public class XYPlotter extends JFrame implements ChartMouseListener, ActionListe * * @throws Exception */ - private Deployment transformSingleDeployment(SingleExplorationSolutionMap solutionMap, + private Deployment transformSingleDeployment(SingleExplorationSolution solutionMap, String deploymentName, boolean generateSCSpec) throws Exception { // Deployment generation has NOT been cancelled. if(deploymentName.isEmpty()) { @@ -713,7 +708,7 @@ public class XYPlotter extends JFrame implements ChartMouseListener, ActionListe Collection<Deployment> transformedDeployments = new ArrayList<>(); Integer deploymentNumber = 1; - for(SingleExplorationSolutionMap solution : explorationResult.getSolutions()) { + for(SingleExplorationSolution solution : explorationResult.getSolutions()) { transformedDeployments.add(transformSingleDeployment(solution, deploymentName + "_" + deploymentNumber, generateSCSpec)); deploymentNumber++; diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/service/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/service/.ratings index 3ec1bafb..17d25d24 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/service/.ratings +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/service/.ratings @@ -8,5 +8,5 @@ IExplorationModule.java 8990c654e649f043fa9813b8bf9113ac7bd42d27 RED IExplorationRepairService.java e923c43c49e0c83daef71707d5fdb66444f859f8 RED IExplorationService.java 891b8c4ce01e40ab31bf69231a63fd61c57ac98e RED IExplorationTargetEvaluator.java 9b39b44f64ad8195583b00f8e3852bbc912f75fc RED -IExplorationTransformationService.java aa63b9453ad395a111016cfd7fa7a30f35f4ea17 RED -IRepairModule.java c494db967181595e03557cbaef210514b2cfad66 RED +IExplorationTransformationService.java cb6f6f17d0def73ec680af98f30aa0f391723227 RED +IRepairModule.java 498a5b0ff519482af41db2916b1eefd1142cc9df RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/service/IExplorationTransformationService.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/service/IExplorationTransformationService.java index 40eaf26b..2214e1f1 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/service/IExplorationTransformationService.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/service/IExplorationTransformationService.java @@ -24,7 +24,7 @@ import org.fortiss.af3.exploration.alg.dse.modeltransformation.ITransformationMo import org.fortiss.af3.exploration.alg.dse.modeltransformation.ITransformationStrategy; import org.fortiss.af3.exploration.alg.guava.SubClassToInstanceMap; import org.fortiss.af3.exploration.alg.service.internal.ExplorationTransformationService; -import org.fortiss.af3.exploration.model.solutions.SingleExplorationSolutionMap; +import org.fortiss.af3.exploration.model.solutions.SingleExplorationSolution; import org.fortiss.tooling.kernel.extension.data.ITopLevelElement; import com.google.common.collect.ClassToInstanceMap; @@ -107,7 +107,7 @@ public interface IExplorationTransformationService */ <U extends EObject, S extends EObject> ClassToInstanceMap<U> getTransformedModels( TransformationContext context, ITopLevelElement modelContext, - SingleExplorationSolutionMap solution, SubClassToInstanceMap<S> baseModels, + SingleExplorationSolution solution, SubClassToInstanceMap<S> baseModels, Collection<Class<? extends EObject>> transformedModelTypes, String transformedModelName) throws Exception; @@ -135,7 +135,7 @@ public interface IExplorationTransformationService * demanded model, or if some required solution encoding was not passed. */ <U extends EObject, S extends EObject> U getTransformedModel(TransformationContext context, - ITopLevelElement modelContext, SingleExplorationSolutionMap solution, + ITopLevelElement modelContext, SingleExplorationSolution solution, SubClassToInstanceMap<S> baseModels, Class<U> transformedModelType, String transformedModelName) throws Exception; diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/service/IRepairModule.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/service/IRepairModule.java index 571a7cb9..170c6556 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/service/IRepairModule.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/service/IRepairModule.java @@ -18,7 +18,7 @@ package org.fortiss.af3.exploration.alg.service; import java.util.Collection; import org.fortiss.af3.exploration.alg.exception.ExplorationException; -import org.fortiss.af3.exploration.model.ExplorationSolution; +import org.fortiss.af3.exploration.model.solutions.ExplorationSolution; import org.fortiss.tooling.kernel.service.base.IObjectAware; import org.opt4j.core.Genotype; import org.opt4j.core.Value; diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/service/internal/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/service/internal/.ratings index 9fef57ae..f24f9779 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/service/internal/.ratings +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/service/internal/.ratings @@ -1,4 +1,4 @@ ExplorationConstraintTransformationService.java 80031ad626c327df10bc00859a4036844544553b RED ExplorationEvaluationService.java 259ace09d86990428fb2ff9cfbff552cb4a69be8 RED ExplorationRepairService.java ac50a5e53792c6793ff4b8ad5aa9812141990f5c RED -ExplorationTransformationService.java 96640353f12abd867378b84b5437811ca7996d8f RED +ExplorationTransformationService.java 8ef2e60c6ef1372cee5e2e7afe7408c409744b2a RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/service/internal/ExplorationTransformationService.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/service/internal/ExplorationTransformationService.java index 00fffbe7..e8931f0f 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/service/internal/ExplorationTransformationService.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/service/internal/ExplorationTransformationService.java @@ -41,7 +41,7 @@ import org.fortiss.af3.exploration.alg.guava.SubClassToInstanceMap; import org.fortiss.af3.exploration.alg.service.ExplorationEncodingMap; import org.fortiss.af3.exploration.alg.service.IExplorationEncoding; import org.fortiss.af3.exploration.alg.service.IExplorationTransformationService; -import org.fortiss.af3.exploration.model.solutions.SingleExplorationSolutionMap; +import org.fortiss.af3.exploration.model.solutions.SingleExplorationSolution; import org.fortiss.af3.project.model.FileProject; import org.fortiss.af3.project.utils.ProjectUtils; import org.fortiss.tooling.kernel.extension.data.ITopLevelElement; @@ -195,7 +195,7 @@ public class ExplorationTransformationService<T extends ITransformationModule<?> @Override public <U extends EObject, S extends EObject> U getTransformedModel( TransformationContext context, ITopLevelElement modelContext, - SingleExplorationSolutionMap solution, SubClassToInstanceMap<S> baseModels, + SingleExplorationSolution solution, SubClassToInstanceMap<S> baseModels, Class<U> transformedModelType, String transformedModelName) throws Exception { Collection<Class<? extends EObject>> reqType = new ArrayList<>(); reqType.add(transformedModelType); @@ -214,7 +214,7 @@ public class ExplorationTransformationService<T extends ITransformationModule<?> @Override public <U extends EObject, S extends EObject> ClassToInstanceMap<U> getTransformedModels( TransformationContext context, ITopLevelElement modelContext, - SingleExplorationSolutionMap solution, SubClassToInstanceMap<S> baseModels, + SingleExplorationSolution solution, SubClassToInstanceMap<S> baseModels, Collection<Class<? extends EObject>> transformedModelTypes, String transformedModelName) throws Exception { // First, collect all transformation modules which would generate the requested output. @@ -240,7 +240,8 @@ public class ExplorationTransformationService<T extends ITransformationModule<?> ITransformationModule<?> currentModule = moduleTraversalList.poll(); for(Class<IExplorationEncoding> solutionType : pickSubTypesOf( IExplorationEncoding.class, currentModule.getRequiredTypes())) { - Object solutionModel = solution.getSolutionModel(solutionType); + Object solutionModel = null; // solution.getSolutionModel(solutionType); + // TODO(#3285): Reinclude. if(solutionModel != null) { solutionEncodings.putEncoding(solutionType, (IExplorationEncoding)solutionModel); diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/util/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/util/.ratings index 2854b1f8..b09aa570 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/util/.ratings +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/util/.ratings @@ -1,5 +1,5 @@ AF3Utils.java 0449890944a45bf8cc1c7ce9a578228ba9b824f8 RED -DesignSpaceExplorationModelElementFactory.java 9dc330973f132c4b936e4dc7ee8407614faf2ff6 RED +DesignSpaceExplorationModelElementFactory.java 73368ff5bd5ab3dab10aca6a331e14cbde440f59 RED ExplorationAlgDebugUtils.java 06116a61e99717a59b7b01e4e2865bf044a8a0e2 RED ExplorationAlgUtils.java 2cf411c8d8404d7319d7bc836dd74b5927375711 RED ExplorationEcoreUtils.java 48ed07aec3cd93e66d37abc10d50636d591f1c71 RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/util/DesignSpaceExplorationModelElementFactory.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/util/DesignSpaceExplorationModelElementFactory.java index 2cea68f9..bc6a6462 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/util/DesignSpaceExplorationModelElementFactory.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/util/DesignSpaceExplorationModelElementFactory.java @@ -32,8 +32,6 @@ import org.fortiss.af3.exploration.dsl.model.patterns.LocationProperty; import org.fortiss.af3.exploration.dsl.model.patterns.PatternsFactory; import org.fortiss.af3.exploration.model.ExplorationFactory; import org.fortiss.af3.exploration.model.ExplorationSpecification; -import org.fortiss.af3.exploration.model.solutions.SingleExplorationSolutionMap; -import org.fortiss.af3.exploration.model.solutions.SolutionsFactory; import org.fortiss.af3.exploration.moea.model.DseSpecification; import org.fortiss.af3.exploration.moea.model.MoeaFactory; import org.fortiss.af3.exploration.moea.model.parameters.EAOptimizer; @@ -116,17 +114,6 @@ public class DesignSpaceExplorationModelElementFactory { return ParametersFactory.eINSTANCE.createEAOptimizer(); } - /** Creates an empty {@link SingleExplorationSolutionMap}. */ - public static SingleExplorationSolutionMap createSingleExplorationSolutionMap() { - SingleExplorationSolutionMap solMap = - SolutionsFactory.eINSTANCE.createSingleExplorationSolutionMap(); - // Initialize the Ecore map via the getter: If this method is not called after construction - // of the SingleExplortationSolutionMap, other operations on the solution set will cause a - // NPE. - solMap.getSolutionMap(); - return solMap; - } - /** * Creates an energy minimization objective within the goal specification of the current DSE * model. -- GitLab