From 8c3d3d3d8f666dcef983cd49de2c3f1f91cec88a Mon Sep 17 00:00:00 2001 From: Alexander Diewald <diewald@fortiss.org> Date: Thu, 8 Feb 2018 14:46:44 +0000 Subject: [PATCH] Exploration.alg: Remove the SystemModelAdapter from the inner DSE core [1/2]. * Remove the SystemModelAdapter from many inner constructor methods where it is not needed or can be substituded by other information/data sources. * Introduce the InitialEncodingProvider that provides encodings to inner DSE parts iff an encoding can be constructed from the input models and if no other Exploration Feature provides the required encoding. refs 2962 --- .../alg/annotation/valueprovider/.ratings | 4 +- .../af3/exploration/alg/backend/.ratings | 2 +- .../fortiss/af3/exploration/alg/dse/.ratings | 6 +- .../af3/exploration/alg/dse/DSEFactory.java | 94 ++++----- .../af3/exploration/alg/dse/Explorer.java | 2 +- .../alg/dse/TaskMappingFactory.java | 11 +- .../alg/dse/backend/opt4j/create/.ratings | 3 +- .../ArchitectureExplorationCreator.java | 16 -- .../opt4j/create/InitialEncodingProvider.java | 86 ++++++++ .../opt4j/create/partitionmapping/.ratings | 2 +- .../PartitionMappingCreator.java | 31 +-- .../backend/opt4j/create/platform/.ratings | 2 +- .../PlatformCommunicationGraphCreator.java | 88 +++++++-- .../opt4j/create/safetyfunctionarch/.ratings | 2 +- .../SafetyFunctionArchCreator.java | 14 +- .../backend/opt4j/create/taskmapping/.ratings | 8 +- .../AbstractTaskMappingCreator.java | 9 +- .../FailSilentTaskMappingCreator.java | 9 +- ...aultDetectionVotingTaskMappingCreator.java | 7 +- .../taskmapping/TaskMappingCreator.java | 7 +- .../dse/backend/opt4j/encoding/comm/.ratings | 2 +- .../opt4j/encoding/partitionmapping/.ratings | 2 +- .../PartitionMappingEncoding.java | 11 +- .../backend/opt4j/encoding/platform/.ratings | 2 +- .../PlatformCommunicationGraphEncoding.java | 15 +- .../backend/opt4j/encoding/taskgraph/.ratings | 10 +- .../taskgraph/AbstractTaskGraphEncoding.java | 6 +- .../InstantiatedAcyclicTaskGraphEncoding.java | 12 +- .../InstantiatedTaskGraphEncoding.java | 10 +- .../taskgraph/SafeTaskGraphEncoding.java | 24 ++- .../encoding/taskgraph/TaskGraphEncoding.java | 56 +----- .../opt4j/encoding/taskmapping/.ratings | 2 +- .../taskmapping/TaskMappingEncoding.java | 187 ++++++++---------- .../taskmapping/abstractmapping/.ratings | 2 +- .../AbstractTaskMappingEncoding.java | 59 ++---- .../taskmapping/instantiatedmapping/.ratings | 6 +- .../FailSilentTaskMappingEncoding.java | 47 ++--- ...ultDetectionVotingTaskMappingEncoding.java | 33 +--- .../InstantiatedTaskMappingEncoding.java | 34 +--- .../extensions/compositegene/create/.ratings | 4 +- .../create/ComposableCreatorBase.java | 23 +-- .../create/CompositeCreatorBase.java | 18 +- .../extensions/compositegene/decode/.ratings | 2 +- .../decode/CompositeDecoderBase.java | 17 +- .../compositegene/evaluate/.ratings | 2 +- .../evaluate/CompositeEvaluatorBase.java | 28 +-- .../extensions/compositegene/graph/.ratings | 2 +- .../graph/DecoderDependencyGraph.java | 15 +- .../compositegene/phenotype/.ratings | 2 +- .../phenotype/FlatPhenotypeMap.java | 23 +-- .../operator/mutate/taskmapping/.ratings | 2 +- .../mutate/taskmapping/MutateAllocation.java | 8 +- .../alg/dse/backend/opt4j/problem/.ratings | 4 +- .../opt4j/problem/ArchitectureDecoder.java | 6 +- .../ArchitectureExplorationProblemModule.java | 17 +- .../problem/instantiatetaskgraph/.ratings | 4 +- .../InstantiatedTaskMappingDecoder.java | 8 +- ...InstantiatedTaskMappingDecoderAcyclic.java | 3 +- .../opt4j/problem/safetyfunction/.ratings | 6 +- .../safetyfunction/SFGraphDecoder.java | 22 +-- .../SFMappingConstraintDecoder.java | 26 +-- .../safetyfunction/SFMappingDecoder.java | 11 +- .../problem/taskmapping/instantiate/.ratings | 4 +- .../FailSilentAbstractTaskMappingDecoder.java | 3 +- ...ctionVotingAbstractTaskMappingDecoder.java | 4 +- .../exploration/alg/dse/evaluator/.ratings | 2 +- .../dse/evaluator/ArchitectureEvaluator.java | 4 +- .../af3/exploration/alg/dse/sysmodel/.ratings | 4 +- .../sysmodel/FailSilentExecModelFactory.java | 6 +- .../FaultDetectionVotingExecModelFactory.java | 6 +- .../alg/dse/sysmodel/arch/.ratings | 2 +- .../dse/sysmodel/arch/SystemModelAdapter.java | 154 +++------------ .../alg/dse/sysmodel/arch/af3/.ratings | 2 +- .../arch/af3/AF3SystemModelAdapter.java | 10 +- .../af3/exploration/alg/graph/.ratings | 2 +- .../alg/graph/DependencyGraph.java | 12 ++ .../fortiss/af3/exploration/alg/plot/.ratings | 14 +- .../af3/exploration/alg/service/.ratings | 2 +- .../alg/service/ExplorationEncodingMap.java | 12 -- .../exploration/alg/service/internal/.ratings | 2 +- .../ExplorationTransformationService.java | 4 +- .../dsl/model/patterns/impl/.ratings | 2 +- .../impl/ElementPropertyStaticImpl.java | 2 +- 83 files changed, 615 insertions(+), 814 deletions(-) create mode 100644 org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/InitialEncodingProvider.java diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/annotation/valueprovider/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/annotation/valueprovider/.ratings index 8732d844..17c79725 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/annotation/valueprovider/.ratings +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/annotation/valueprovider/.ratings @@ -1,3 +1,3 @@ ComponentImplDiversityRefValueProvider.java d2cbe7d1acefd9941a766ea7cf2ac958a4347ef6 RED -MaxReplicationBoundValueProvider.java 697ecf4593ec7fd29992b25b782ddf20f191c975 RED -MinReplicationBoundValueProvider.java 3e806929a039c49b83455b637bf16c079a9e9c29 RED +MaxReplicationBoundValueProvider.java 78cde3b9543ff06c9310f96de8ad24e9feacc5d4 RED +MinReplicationBoundValueProvider.java 7ef7176ae0f4e64ad0e0923f09f3bc8fe0a14b67 RED 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 7997c2ae..1264a044 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 2d4b0c96fcda02bf428fb5a6c02a48bbef74374b RED +Opt4JDseBackend.java 50254b3b5058ed77e8a868f3545fde16153217b1 RED 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 14e19ce8..f208d7d8 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,6 +1,6 @@ CompositeExplorationSolution.java 528283a3dd57500539b2e11dd3d3eb35512de9b8 RED -DSEFactory.java 069d001586ce88cb320537b1411b1a3b8649003b RED -Explorer.java c857d21f603d09447953d3e4929aedb76b1b1bfd RED +DSEFactory.java 98b9133b3f33fe8c2d61f8bdab8ac97508872a6e RED +Explorer.java 9e0020b6a55bb035a41fb1bf4a1b709a7d6353f6 RED ImplicitExplorationTargetFactory.java 0b10dc4e8385bbdee0217dac783203080eb723f0 RED SolutionQuantification.java efd31f192c3adbf1a4434452a19eb836a17390e2 RED -TaskMappingFactory.java eb8e4a8b70f9465b849dd5700f603f55aa26363e RED +TaskMappingFactory.java 14671417668c58cbfd97bb1fcebf0874895314e8 RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/DSEFactory.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/DSEFactory.java index 54004127..8712f441 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/DSEFactory.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/DSEFactory.java @@ -18,6 +18,7 @@ package org.fortiss.af3.exploration.alg.dse; import static org.fortiss.tooling.kernel.utils.EcoreUtils.pickFirstInstanceOf; import java.util.ArrayList; +import java.util.Collection; import java.util.List; import javax.activation.UnsupportedDataTypeException; @@ -58,7 +59,11 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.taskmapping.ins import org.fortiss.af3.exploration.alg.dse.evaluator.ArchitectureEvaluator; import org.fortiss.af3.exploration.alg.dse.sysmodel.FailSilentExecModelFactory; import org.fortiss.af3.exploration.alg.dse.sysmodel.FaultDetectionVotingExecModelFactory; +import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IExecutionUnitAdapter; +import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IGatewayUnitAdapter; +import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IMemoryUnitAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ITaskAdapter; +import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ITransmissionUnitAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; import org.fortiss.af3.exploration.moea.model.DseSpecification; import org.fortiss.af3.exploration.moea.model.feature.SafetyExploration; @@ -72,6 +77,7 @@ import org.jgrapht.experimental.dag.DirectedAcyclicGraph.CycleFoundException; * @author diewald */ public class DSEFactory { + private SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter; /** The instance (singleton) of the {@link DSEFactory}. */ private static final class InstanceHolder { @@ -88,6 +94,11 @@ public class DSEFactory { return InstanceHolder.INSTANCE; } + // FIXME: Remove this method: it violates the sigleton pattern. + public void init(SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter) { + this.systemModelAdapter = systemModelAdapter; + } + /** * Creates/Registers the sub problem definitions that compose the overall architectural * exploration problem. @@ -107,9 +118,7 @@ public class DSEFactory { @SuppressWarnings("unchecked") public <C, S extends InstantiatedTaskMappingEntry, T extends InstantiatedTaskMappingEncoding<S>> void createSubProblems(ArchitectureExplorationProblemModule archExpProblemModule, - DseSpecification dse, - SystemModelAdapter<C, ?, ?, ?, ?, ?, ?> systemModelAdapter, - DecoderDependencyGraph execDepGraph) throws Exception { + DseSpecification dse, DecoderDependencyGraph execDepGraph) throws Exception { // Java-limitation: it is not possible to pass the generic to the static methods. TaskMappingFactory<S, T> tmFactory = (TaskMappingFactory<S, T>)TaskMappingFactory.getInstance(); @@ -120,15 +129,12 @@ public class DSEFactory { sfExplorationModule.getAdapters().parallelStream() .forEach(a -> a.initializeAdapter(systemModelAdapter)); systemModelAdapter.addSafetyFunctionAdapters(sfExplorationModule.getAdapters()); - createSafetyFunctionArchProblem(archExpProblemModule, systemModelAdapter, execDepGraph); + createSafetyFunctionArchProblem(archExpProblemModule, execDepGraph); } - createPartitionMappingProblem(archExpProblemModule, dse, systemModelAdapter, execDepGraph); - createPlatformCommunicationGraphProblem(archExpProblemModule, systemModelAdapter, - execDepGraph); - createAbstractTaskMappingProblem(tmFactory, archExpProblemModule, dse, systemModelAdapter, - execDepGraph); - createTaskMappingInstantiationProblem(tmFactory, archExpProblemModule, dse, - systemModelAdapter, execDepGraph); + createPartitionMappingProblem(archExpProblemModule, dse, execDepGraph); + createPlatformCommunicationGraphProblem(archExpProblemModule, execDepGraph); + createAbstractTaskMappingProblem(tmFactory, archExpProblemModule, dse, execDepGraph); + createTaskMappingInstantiationProblem(tmFactory, archExpProblemModule, dse, execDepGraph); } /** @@ -148,20 +154,18 @@ public class DSEFactory { @SuppressWarnings("unchecked") private <C, T extends SafetyFunctionArchEncoding<C>> void createSafetyFunctionArchProblem( ArchitectureExplorationProblemModule archExpProblemModule, - SystemModelAdapter<C, ?, ?, ?, ?, ?, ?> systemModelAdapter, DecoderDependencyGraph execDepGraph) throws Exception { // These suppress warnings are required since type erasure in Java does not allow to pass // XY<Z>.class. @SuppressWarnings("rawtypes") SafetyFunctionArchCreator sfCreator = - new SafetyFunctionArchCreator<C>(systemModelAdapter, execDepGraph); + new SafetyFunctionArchCreator(systemModelAdapter.getSafetyFunctionAdapters(), + execDepGraph); @SuppressWarnings("rawtypes") SFEncodingDecoder sfEncodingDecoder = new SFEncodingDecoder<>(); - @SuppressWarnings("rawtypes") SFGraphDecoder sfGraphDecoder = - new SFGraphDecoder<C>(systemModelAdapter); - @SuppressWarnings("rawtypes") SFMappingDecoder sfMappingDecoder = - new SFMappingDecoder<C>(systemModelAdapter); + @SuppressWarnings("rawtypes") SFGraphDecoder sfGraphDecoder = new SFGraphDecoder(); + @SuppressWarnings("rawtypes") SFMappingDecoder sfMappingDecoder = new SFMappingDecoder(); @SuppressWarnings("rawtypes") SFMappingConstraintDecoder sfMappingConstraintDecoder = - new SFMappingConstraintDecoder<C>(systemModelAdapter); + new SFMappingConstraintDecoder(); sfCreator.registerAssocDecoders(sfEncodingDecoder); sfCreator.registerAssocDecoders(sfGraphDecoder); @@ -174,6 +178,7 @@ public class DSEFactory { sfDecoders.add(sfMappingDecoder); sfDecoders.add(sfMappingConstraintDecoder); + execDepGraph.addCreatedEncoding(sfCreator.getCreatedEncodingType()); archExpProblemModule.registerSubProblem(SafetyFunctionArchEncoding.class, sfCreator, sfDecoders); } @@ -186,8 +191,6 @@ public class DSEFactory { * problem. * @param dse * The design space exploration description. - * @param systemModelAdapter - * The adapter to model of the system on which the dse is executed. * @param execDepGraph * Dependency graph defining the execution order. * @throws CycleFoundException @@ -196,11 +199,12 @@ public class DSEFactory { @SuppressWarnings("unchecked") private void createPartitionMappingProblem( ArchitectureExplorationProblemModule archExpProblemModule, DseSpecification dse, - SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter, DecoderDependencyGraph execDepGraph) throws CycleFoundException { Class<PartitionMappingEncoding> pmEnodingClass = PartitionMappingEncoding.class; - PartitionMappingCreator pmCreator = - new PartitionMappingCreator(systemModelAdapter, execDepGraph); + PartitionMappingCreator pmCreator = new PartitionMappingCreator(execDepGraph, + (Collection<IExecutionUnitAdapter<?>>)(Collection<?>)systemModelAdapter + .getDeploymentTargets(), + systemModelAdapter.getDeployableComponents().size()); @SuppressWarnings("rawtypes") List<ComposableDecoder> pmDecoders = new ArrayList<>(); PartitionMappingIdentityDecoder pmDecoder = new PartitionMappingIdentityDecoder(); @@ -209,6 +213,7 @@ public class DSEFactory { pmDecoders.add(pmDecoder); pmDecoders.add(tiraDecoder); pmCreator.registerAssocDecoders(pmDecoder); + execDepGraph.addCreatedEncoding(pmCreator.getCreatedEncodingType()); archExpProblemModule.registerSubProblem(pmEnodingClass, pmCreator, pmDecoders); } @@ -220,16 +225,25 @@ public class DSEFactory { @SuppressWarnings("unchecked") private void createPlatformCommunicationGraphProblem( ArchitectureExplorationProblemModule archExpProblemModule, - SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter, DecoderDependencyGraph execDepGraph) throws CycleFoundException { Class<PlatformCommunicationGraphEncoding> pmEnodingClass = PlatformCommunicationGraphEncoding.class; - PlatformCommunicationGraphCreator pmCreator = - new PlatformCommunicationGraphCreator(systemModelAdapter, execDepGraph); + PlatformCommunicationGraphCreator pmCreator = new PlatformCommunicationGraphCreator( + execDepGraph, + (Collection<IExecutionUnitAdapter<?>>)(Collection<?>)systemModelAdapter + .getDeploymentTargets(), + (Collection<IMemoryUnitAdapter<?>>)(Collection<?>)systemModelAdapter + .getMemoryUnits(), + (Collection<IGatewayUnitAdapter<?>>)(Collection<?>)systemModelAdapter + .getGatewayUnits(), + (Collection<ITransmissionUnitAdapter<?>>)(Collection<?>)systemModelAdapter + .getTransmissionUnits(), + systemModelAdapter.getResouceConnections()); @SuppressWarnings("rawtypes") List<ComposableDecoder> pmDecoders = new ArrayList<>(); PartitionMappingDecoderGraph pmgDecoder = new PartitionMappingDecoderGraph(); pmDecoders.add(pmgDecoder); + execDepGraph.addCreatedEncoding(pmCreator.getCreatedEncodingType()); archExpProblemModule.registerSubProblem(pmEnodingClass, pmCreator, pmDecoders); } @@ -246,8 +260,6 @@ public class DSEFactory { * problem. * @param dse * The design space exploration description. - * @param systemModelAdapter - * The adapter to model of the system on which the dse is executed. * @param execDepGraph * Dependency graph defining the execution order. * @throws Exception @@ -257,11 +269,10 @@ public class DSEFactory { private <S extends InstantiatedTaskMappingEntry, T extends InstantiatedTaskMappingEncoding<S>> void createAbstractTaskMappingProblem(TaskMappingFactory<S, T> tmFactory, ArchitectureExplorationProblemModule archExpProblemModule, DseSpecification dse, - SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter, DecoderDependencyGraph execDepGraph) throws Exception { Class<AbstractTaskMappingEncoding> tmEnodingClass = AbstractTaskMappingEncoding.class; AbstractTaskMappingCreator tmCreator = - tmFactory.createAbstractTaskMappingCreator(dse, systemModelAdapter, execDepGraph); + tmFactory.createAbstractTaskMappingCreator(dse, execDepGraph); @SuppressWarnings("rawtypes") List<ComposableDecoder> abstrTaskDecoders = new ArrayList<>(); AbstractTaskMappingDecoder<?, ?> atmDecoder = tmFactory.createAbstractTaskMappingDecoder(systemModelAdapter, dse); @@ -272,6 +283,7 @@ public class DSEFactory { tmCreator.registerAssocDecoders(atmDecoder); tmCreator.registerAssocDecoders(idtDecoder); + execDepGraph.addCreatedEncoding(tmCreator.getCreatedEncodingType()); archExpProblemModule.registerSubProblem(tmEnodingClass, tmCreator, abstrTaskDecoders); } @@ -289,8 +301,6 @@ public class DSEFactory { * problem. * @param dse * The design space exploration description. - * @param systemModelAdapter - * The adapter to model of the system on which the dse is executed. * @param execDepGraph * Dependency graph defining the execution order. * @throws Exception @@ -300,7 +310,6 @@ public class DSEFactory { private <S extends InstantiatedTaskMappingEntry, T extends InstantiatedTaskMappingEncoding<S>> void createTaskMappingInstantiationProblem(TaskMappingFactory<S, T> tmFactory, ArchitectureExplorationProblemModule archExpProblemModule, DseSpecification dse, - SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter, DecoderDependencyGraph execDepGraph) throws Exception { // These suppress warnings are required since type erasure in Java does not allow to pass // XY<Z>.class. @@ -312,7 +321,7 @@ public class DSEFactory { @SuppressWarnings("rawtypes") MessageDecoder msgDecoder = tmFactory.createMessageDecoder(systemModelAdapter); @SuppressWarnings("rawtypes") TaskMappingCreator tmCreator = - tmFactory.createTaskMappingCreator(dse, systemModelAdapter, execDepGraph); + tmFactory.createTaskMappingCreator(dse, execDepGraph); @SuppressWarnings("rawtypes") List<ComposableDecoder> instTaskDecoders = new ArrayList<>(); instTaskDecoders.add(tgDecoder); instTaskDecoders.add(acycTgDecoder); @@ -320,6 +329,7 @@ public class DSEFactory { instTaskDecoders.add(tmDecoder); tmCreator.registerAssocDecoders(instTaskDecoders); + execDepGraph.addCreatedEncoding(tmCreator.getCreatedEncodingType()); archExpProblemModule.registerSubProblem(InstantiatedTaskMappingEncoding.class, tmCreator, instTaskDecoders); } @@ -329,9 +339,8 @@ public class DSEFactory { * concrete architecture exploration problem, i.e. the {@link ArchitectureExplorationCreator} * calls the creators of the genotypes composing the architecture exploration problem. */ - public ArchitectureExplorationCreator createArchitectureExplorationCreator(DseSpecification dse, - SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter) { - return new ArchitectureExplorationCreator(dse, systemModelAdapter); + public ArchitectureExplorationCreator createArchitectureExplorationCreator() { + return new ArchitectureExplorationCreator(); } /** @@ -366,10 +375,8 @@ public class DSEFactory { * DSE. * It delegates the subproblems to sub decoders, e.g. a decoder for the task mapping problem. */ - public ArchitectureDecoder createArchitectureDecoder( - SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter, - DecoderDependencyGraph execdepGraph) { - return new ArchitectureDecoder(systemModelAdapter, execdepGraph); + public ArchitectureDecoder createArchitectureDecoder(DecoderDependencyGraph execdepGraph) { + return new ArchitectureDecoder(execdepGraph); } /** @@ -378,8 +385,7 @@ public class DSEFactory { * It delegates the evaluation of the overall problem to sub-decoders, e.g. an evaluator of the * power consumption of a TT-schedule. */ - public ArchitectureEvaluator createArchitectureEvaluator( - SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter) { - return new ArchitectureEvaluator(systemModelAdapter); + public ArchitectureEvaluator createArchitectureEvaluator() { + return new ArchitectureEvaluator(); } } diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/Explorer.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/Explorer.java index 806837be..ca337e8d 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/Explorer.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/Explorer.java @@ -87,6 +87,7 @@ public class Explorer { } // Extract external models to add them to the available input models. + // TODO: readd support for "external" EMF models for(ExplorationTarget<?> expTarget : expSpec.getTargets()) { if(expTarget instanceof ExternalModelTarget) { Collection<EObject> extModels = @@ -94,7 +95,6 @@ public class Explorer { for(EObject extModel : extModels) { @SuppressWarnings("unchecked") Class<? extends EObject> modelType = (Class<? extends EObject>)extModel.eClass().getInstanceClass(); - systemModelAdapter.putInputModel(modelType, extModel); } } } diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/TaskMappingFactory.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/TaskMappingFactory.java index cdb34c19..ec27a950 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/TaskMappingFactory.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/TaskMappingFactory.java @@ -96,16 +96,13 @@ public abstract class TaskMappingFactory<S extends InstantiatedTaskMappingEntry, * * @param dse * design space exploration model defined in the GUI - * @param systemModelAdapter - * the system model deduced from the logical and technical architecture * @param execDepGraph * Dependency graph defining the execution order. * @return instance of an {@link AbstractTaskMappingCreator}. */ public AbstractTaskMappingCreator createAbstractTaskMappingCreator(DseSpecification dse, - SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter, DecoderDependencyGraph execDepGraph) { - return new AbstractTaskMappingCreator(dse, systemModelAdapter, execDepGraph); + return new AbstractTaskMappingCreator(dse, execDepGraph); } /** @@ -113,15 +110,12 @@ public abstract class TaskMappingFactory<S extends InstantiatedTaskMappingEntry, * * @param dse * design space exploration model defined in the GUI - * @param systemModelAdapter - * the system model deduced from the logical and technical architecture * @param execDepGraph * Dependency graph defining the execution order. * @return instance of a {@link TaskMappingCreator}. */ // TODO: document execDepGraph param. public TaskMappingCreator<S, T> createTaskMappingCreator(DseSpecification dse, - SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter, DecoderDependencyGraph execDepGraph) { throw new UnsupportedOperationException(SCHED_NOT_IMPL_MSG); } @@ -132,15 +126,12 @@ public abstract class TaskMappingFactory<S extends InstantiatedTaskMappingEntry, * * @param dse * design space exploration model defined in the GUI - * @param systemModelAdapter - * the system model deduced from the logical and technical architecture * @param abstractEnc * encoding that may contain abstract task which need to be instantiated. * @return instance of a {@link TaskMappingCreator}. */ // TODO: update doc public TaskMappingCreator<S, T> createTaskMappingCreator(DseSpecification dse, - SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter, AbstractTaskMappingEncoding abstractEnc) { throw new UnsupportedOperationException(SCHED_NOT_IMPL_MSG); } diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/.ratings index b88f4248..b4cea5d7 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/.ratings +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/.ratings @@ -1 +1,2 @@ -ArchitectureExplorationCreator.java 5bbd448f433da0e455e026f9452b7bccf67e4905 RED +ArchitectureExplorationCreator.java d0a638d783ec90959bf1f95af42ea5a15606ebd2 RED +InitialEncodingProvider.java a265e1b07f9f5e7dfb3a7dd808240c39ad25f4f9 RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/ArchitectureExplorationCreator.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/ArchitectureExplorationCreator.java index d4bf0d59..1d101999 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/ArchitectureExplorationCreator.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/ArchitectureExplorationCreator.java @@ -18,12 +18,8 @@ package org.fortiss.af3.exploration.alg.dse.backend.opt4j.create; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.ArchitectureExplorationEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.create.CompositeCreatorBase; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.genotype.ComposableGenotype; -import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; -import org.fortiss.af3.exploration.moea.model.DseSpecification; import org.opt4j.core.problem.Creator; -import com.google.inject.Inject; - /** * {@link Creator} of the {@link ArchitectureExplorationEncoding} of an architectural exploration * problem, that consists of sub encodings. Refer to {@link ComposableGenotype} for further @@ -33,18 +29,6 @@ import com.google.inject.Inject; */ public class ArchitectureExplorationCreator extends CompositeCreatorBase<ArchitectureExplorationEncoding> { - - /** DSE specification */ - protected DseSpecification dse; - - /** Constructor. */ - @Inject - public ArchitectureExplorationCreator(DseSpecification dse, - SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter) { - super(systemModelAdapter); - this.dse = dse; - } - /** {@inheritDoc} */ @Override public ArchitectureExplorationEncoding createComposite() { diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/InitialEncodingProvider.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/InitialEncodingProvider.java new file mode 100644 index 00000000..d19f0843 --- /dev/null +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/InitialEncodingProvider.java @@ -0,0 +1,86 @@ +/*-------------------------------------------------------------------------+ +| Copyright 2018 fortiss GmbH | +| | +| Licensed under the Apache License, Version 2.0 (the "License"); | +| you may not use this file except in compliance with the License. | +| You may obtain a copy of the License at | +| | +| http://www.apache.org/licenses/LICENSE-2.0 | +| | +| Unless required by applicable law or agreed to in writing, software | +| distributed under the License is distributed on an "AS IS" BASIS, | +| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | +| See the License for the specific language governing permissions and | +| limitations under the License. | ++--------------------------------------------------------------------------*/ +package org.fortiss.af3.exploration.alg.dse.backend.opt4j.create; + +import java.util.HashMap; +import java.util.Map; +import java.util.Set; + +import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; +import org.fortiss.af3.exploration.alg.service.IExplorationEncoding; +import org.opt4j.core.Genotype; + +/** + * Holds encodings which are generated from the input models. In contrast to {@link Genotype}s, they + * are not considered as variables by the optimizer. + * Nevertheless, this provider may also hold {@link Genotype} encodings for the case that an + * exploration feature is disabled, but it's outputs would be required by dependent features. The + * provider is responsible to provide the required inputs iff these inputs can be constructed from + * the input models. + * + * @author diewald + */ +public class InitialEncodingProvider { + /** Holds the instance. */ + private volatile static InitialEncodingProvider INSTANCE; + + /** Constructor. */ + private InitialEncodingProvider() { + // Prevent direct instantiation of this singleton. + } + + /** Returns the instance of this singleton. */ + public static synchronized InitialEncodingProvider getInstance() { + if(INSTANCE == null) { + INSTANCE = new InitialEncodingProvider(); + } + return INSTANCE; + } + + /** + * Maintains a map of {@link IExplorationEncoding}s that can be provided by {@code this} + * {@link SystemModelAdapter} by their corresponding types. + */ + private Map<Class<? extends IExplorationEncoding>, IExplorationEncoding> inputEncodings = + new HashMap<>(); + + /** Registers a given input encoding with {@code this} {@link SystemModelAdapter}. */ + public <T extends IExplorationEncoding> void registerInputEncoding(T encoding) { + @SuppressWarnings("unchecked") Class<T> encodingType = (Class<T>)encoding.getClass(); + assert (!inputEncodings.containsKey( + encodingType)) : "You are trying to add an encoding to the input encoding whose type is already registered. This is not supported"; + inputEncodings.put(encodingType, encoding); + } + + /** Returns the input encoding of the given type. */ + @SuppressWarnings("unchecked") + public <T extends IExplorationEncoding> T getInputEncoding(Class<T> encodingType) { + return (T)inputEncodings.get(encodingType); + } + + /** + * Returns the collection of {@link IExplorationEncoding} types that are availably through + * {@code this} {@link SystemModelAdapter}. + */ + public Set<Class<? extends IExplorationEncoding>> getRegisteredEncodingTypes() { + return inputEncodings.keySet(); + } + + /** Empties the currently held encodings. */ + public void clearEncodings() { + inputEncodings.clear(); + } +} diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/partitionmapping/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/partitionmapping/.ratings index ec4315b5..b6c77c3a 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/partitionmapping/.ratings +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/partitionmapping/.ratings @@ -1 +1 @@ -PartitionMappingCreator.java c5536fccefbe437360efe9fe8a60409991192243 RED +PartitionMappingCreator.java 624850b3bbf31e965005ed1acf8622e81f1103b6 RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/partitionmapping/PartitionMappingCreator.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/partitionmapping/PartitionMappingCreator.java index 78491205..6c83f8a8 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/partitionmapping/PartitionMappingCreator.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/partitionmapping/PartitionMappingCreator.java @@ -15,6 +15,8 @@ +--------------------------------------------------------------------------*/ package org.fortiss.af3.exploration.alg.dse.backend.opt4j.create.partitionmapping; +import java.util.Collection; + import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.PartitionMappingEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.PartitionMappingEncoding.CREATE_STARTEGY; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.create.ComposableCreatorBase; @@ -22,7 +24,7 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegen import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.graph.DecoderDependencyGraph; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.FlatPhenotypeMap; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype; -import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; +import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IExecutionUnitAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.random.RandomExploration; import org.fortiss.af3.exploration.alg.service.IExplorationEncoding; import org.opt4j.core.problem.Creator; @@ -33,29 +35,34 @@ import org.opt4j.core.problem.Creator; * @author diewald */ public class PartitionMappingCreator extends ComposableCreatorBase<PartitionMappingEncoding> { + /** Physical execution units. */ + private Collection<IExecutionUnitAdapter<?>> execUnits; + + /** Number of tasks to allocate to partitions. */ + int numTasks; /** Constructor. */ - public PartitionMappingCreator(SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter, - DecoderDependencyGraph depGraph) { - super(systemModelAdapter, depGraph); + public PartitionMappingCreator(DecoderDependencyGraph depGraph, + Collection<IExecutionUnitAdapter<?>> execUnits, int numTasks) { + super(depGraph); + this.execUnits = execUnits; + this.numTasks = numTasks; } /** {@inheritDoc} */ @Override public PartitionMappingEncoding createComposable(FlatGenotypeMap createdGenotypes, FlatPhenotypeMap<Phenotype> decodedPhenotypes) { - // TODO In order to correctly choose the create strategy here, we'd need to know the - // population size. For now, we assume an initial population size of 25. - final int INIT_POP_SIZE = 25; - // "Probability distribution" for the strategy selection: | 1 | 23 | 1 | ==> 25 - int strategySelIdx = RandomExploration.getInstance().nextInt(INIT_POP_SIZE); + // "Probability distribution" for the strategy selection: |1|numTasks - 2|1| ==> numTasks + int strategySelIdx = RandomExploration.getInstance().nextInt(numTasks); switch(strategySelIdx) { case 0: - return new PartitionMappingEncoding(systemModelAdapter, CREATE_STARTEGY.MIN_SET); + return new PartitionMappingEncoding(execUnits, numTasks, CREATE_STARTEGY.MIN_SET); case 24: - return new PartitionMappingEncoding(systemModelAdapter, CREATE_STARTEGY.MAX_SET); + return new PartitionMappingEncoding(execUnits, numTasks, CREATE_STARTEGY.MAX_SET); default: - return new PartitionMappingEncoding(systemModelAdapter, CREATE_STARTEGY.RANDOM_SET); + return new PartitionMappingEncoding(execUnits, numTasks, + CREATE_STARTEGY.RANDOM_SET); } } diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/platform/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/platform/.ratings index 98d16b02..8581fab1 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/platform/.ratings +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/platform/.ratings @@ -1 +1 @@ -PlatformCommunicationGraphCreator.java 072bb6445dc182931ef28e47dbaad19ae87cc3d6 RED +PlatformCommunicationGraphCreator.java fd016186eea8e716f9f6699b46c5d386acf2db8a RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/platform/PlatformCommunicationGraphCreator.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/platform/PlatformCommunicationGraphCreator.java index 9427662c..54301f92 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/platform/PlatformCommunicationGraphCreator.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/platform/PlatformCommunicationGraphCreator.java @@ -15,14 +15,26 @@ +--------------------------------------------------------------------------*/ package org.fortiss.af3.exploration.alg.dse.backend.opt4j.create.platform; +import java.util.Collection; + import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.platform.PlatformCommunicationGraphEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.create.ComposableCreatorBase; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.genotype.FlatGenotypeMap; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.graph.DecoderDependencyGraph; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.FlatPhenotypeMap; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype; -import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; +import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IExecutionUnitAdapter; +import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IGatewayUnitAdapter; +import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IMemoryUnitAdapter; +import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IResourceAdapter; +import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IResourceConnectionAdapter; +import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IResourceConnectionAdapter.ConnectionType; +import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ITransmissionUnitAdapter; import org.fortiss.af3.exploration.alg.service.IExplorationEncoding; +import org.jgrapht.DirectedGraph; +import org.jgrapht.Graphs; +import org.jgrapht.graph.DefaultDirectedGraph; +import org.jgrapht.graph.DefaultEdge; /** * @@ -30,24 +42,76 @@ import org.fortiss.af3.exploration.alg.service.IExplorationEncoding; */ public class PlatformCommunicationGraphCreator extends ComposableCreatorBase<PlatformCommunicationGraphEncoding> { + /** Execution Units present in the input models. */ + private Collection<IExecutionUnitAdapter<?>> execUnits; + /** Memories present in the input models. */ + private Collection<IMemoryUnitAdapter<?>> memoryUnits; + /** Gateways present in the input models. */ + private Collection<IGatewayUnitAdapter<?>> gatewayUnits; + /** Transmission Units present in the input models. */ + private Collection<ITransmissionUnitAdapter<?>> transmissionUnits; + /** Connections between resources present in the input models. */ + private Collection<IResourceConnectionAdapter> resourceConnections; + /** Constructor. */ - public PlatformCommunicationGraphCreator( - SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter, - DecoderDependencyGraph depGraph) { - super(systemModelAdapter, depGraph); + public PlatformCommunicationGraphCreator(DecoderDependencyGraph depGraph, + Collection<IExecutionUnitAdapter<?>> execUnits, + Collection<IMemoryUnitAdapter<?>> memoryUnits, + Collection<IGatewayUnitAdapter<?>> gatewayUnits, + Collection<ITransmissionUnitAdapter<?>> transmissionUnits, + Collection<IResourceConnectionAdapter> resourceConnections) { + super(depGraph); + this.execUnits = execUnits; + this.memoryUnits = memoryUnits; + this.gatewayUnits = gatewayUnits; + this.transmissionUnits = transmissionUnits; + this.resourceConnections = resourceConnections; } /** {@inheritDoc} */ @Override public PlatformCommunicationGraphEncoding createComposable(FlatGenotypeMap createdGenotypes, FlatPhenotypeMap<Phenotype> decodedPhenotypes) { - PlatformCommunicationGraphEncoding pcgEncoding = new PlatformCommunicationGraphEncoding( - systemModelAdapter, systemModelAdapter.createGraph()); - // Debug code - // if(isDebugVerboseEnabled()) { - // pcgEncoding.display(); - // } - return pcgEncoding; + DirectedGraph<IResourceAdapter<?>, DefaultEdge> tempPlatformCommGraph = + new DefaultDirectedGraph<IResourceAdapter<?>, DefaultEdge>(DefaultEdge.class); + DirectedGraph<IResourceAdapter<?>, DefaultEdge> platformGraph = + new DefaultDirectedGraph<IResourceAdapter<?>, DefaultEdge>(DefaultEdge.class); + + // Add all resources present in the platform as vertices to the "connection graph" + Graphs.addAllVertices(tempPlatformCommGraph, execUnits); + Graphs.addAllVertices(tempPlatformCommGraph, memoryUnits); + Graphs.addAllVertices(tempPlatformCommGraph, gatewayUnits); + Graphs.addAllVertices(tempPlatformCommGraph, transmissionUnits); + + // Successively connect the resources in the graph. The edges are given within the + // collection resource connectors are assumed to be fully connected. + for(IResourceConnectionAdapter connection : resourceConnections) { + // We add edges for each receiver in order to support broadcast connections + for(IResourceAdapter<?> currentReceiverResource : connection.getTargetResources()) { + // If the current resource is a child of a {@link TransmissionUnit} (like a NoC + // router), respect the direction of connections such that complex networks are + // correctly reflected. + if(connection + .getConnectionType(currentReceiverResource) == ConnectionType.OUTGOING) { + Graphs.addEdgeWithVertices(platformGraph, connection.getSourceResource(), + currentReceiverResource); + } else if(connection + .getConnectionType(currentReceiverResource) == ConnectionType.INCOMING) { + Graphs.addEdgeWithVertices(platformGraph, currentReceiverResource, + connection.getSourceResource()); + } else { + // Add the edges of a single connection. We add to edges for each connection + // such that an undirected graph is generated effectively. It is required to use + // this "trick" in order to be able to use the standard shortest path + // algorithms. + Graphs.addEdgeWithVertices(platformGraph, connection.getSourceResource(), + currentReceiverResource); + Graphs.addEdgeWithVertices(platformGraph, currentReceiverResource, + connection.getSourceResource()); + } + } + } + return new PlatformCommunicationGraphEncoding(platformGraph); } /** {@inheritDoc} */ diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/safetyfunctionarch/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/safetyfunctionarch/.ratings index 20c6ada4..a6d95f4f 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/safetyfunctionarch/.ratings +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/safetyfunctionarch/.ratings @@ -1 +1 @@ -SafetyFunctionArchCreator.java 26770ef069fd786ecf579cbb761a1071073c975d RED +SafetyFunctionArchCreator.java 29178efd61d31c86d719a8fac9a110745e3cf5aa RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/safetyfunctionarch/SafetyFunctionArchCreator.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/safetyfunctionarch/SafetyFunctionArchCreator.java index eea94600..e15712cd 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/safetyfunctionarch/SafetyFunctionArchCreator.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/safetyfunctionarch/SafetyFunctionArchCreator.java @@ -15,12 +15,14 @@ +--------------------------------------------------------------------------*/ package org.fortiss.af3.exploration.alg.dse.backend.opt4j.create.safetyfunctionarch; +import java.util.Collection; + import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.safetyfunctionarch.SafetyFunctionArchEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.create.ComposableCreatorBase; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.genotype.FlatGenotypeMap; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.graph.DecoderDependencyGraph; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.FlatPhenotypeMap; -import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; +import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ISafetyFunctionAdapter; import org.fortiss.af3.exploration.alg.service.IExplorationEncoding; import com.google.inject.Inject; @@ -33,12 +35,15 @@ import com.google.inject.Inject; */ public class SafetyFunctionArchCreator<C> extends ComposableCreatorBase<SafetyFunctionArchEncoding<C>> { + /** Collection of safety functions present in the system. */ + Collection<ISafetyFunctionAdapter<C>> sfAdapters; /** Constructor. */ @Inject - public SafetyFunctionArchCreator(SystemModelAdapter<C, ?, ?, ?, ?, ?, ?> systemModelAdapter, + public SafetyFunctionArchCreator(Collection<ISafetyFunctionAdapter<C>> sfAdapters, DecoderDependencyGraph execDepGraph) { - super(systemModelAdapter, execDepGraph); + super(execDepGraph); + this.sfAdapters = sfAdapters; } /** {@inheritDoc} */ @@ -48,8 +53,7 @@ public class SafetyFunctionArchCreator<C> FlatPhenotypeMap decodedPhenotypes) { // It is clear that the generic is right. However, the compiler does not get it. Thus, // suppress the corresponding Warnings. - return new SafetyFunctionArchEncoding(systemModelAdapter.getSafetyFunctionAdapters(), true, - true); + return new SafetyFunctionArchEncoding(sfAdapters, true, true); } /** {@inheritDoc} */ diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/.ratings index 049b045e..5c511d7e 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/.ratings +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/.ratings @@ -1,4 +1,4 @@ -AbstractTaskMappingCreator.java 1e4473c63abb2aa49b0d85a96ad0de025f42bebb RED -FailSilentTaskMappingCreator.java ec7daa0d1bd3c42eedc69a5d955269e7ff3798d0 RED -FaultDetectionVotingTaskMappingCreator.java 34efb7f7574f833aac75c8f4f80d4d5da0dd9c37 RED -TaskMappingCreator.java e5aa46677ddc797f92847dfe3179a22424a780f8 RED +AbstractTaskMappingCreator.java f0cee5bfa4e83539c2b7ad2ac8e66c1457c39ab5 RED +FailSilentTaskMappingCreator.java e21d4f6d6ed24fb42adeb9cd9f7b0069aeb40fd5 RED +FaultDetectionVotingTaskMappingCreator.java 8b18ef5401d28cc61ba4ce3545c16d531289549e RED +TaskMappingCreator.java 154b1528e3b96078a4f00a633adce5fbe6233151 RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/AbstractTaskMappingCreator.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/AbstractTaskMappingCreator.java index f8bcc0e5..813a927b 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/AbstractTaskMappingCreator.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/AbstractTaskMappingCreator.java @@ -24,7 +24,6 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegen import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.FlatPhenotypeMap; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ITaskAdapter; -import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; import org.fortiss.af3.exploration.alg.exception.ExplorationException; import org.fortiss.af3.exploration.alg.service.IExplorationEncoding; import org.fortiss.af3.exploration.moea.model.DseSpecification; @@ -44,10 +43,8 @@ public class AbstractTaskMappingCreator /** Constructor */ @Inject - public AbstractTaskMappingCreator(DseSpecification dse, - SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter, - DecoderDependencyGraph execDepGraph) { - super(dse, systemModelAdapter, execDepGraph); + public AbstractTaskMappingCreator(DseSpecification dse, DecoderDependencyGraph execDepGraph) { + super(dse, execDepGraph); } /** @@ -69,7 +66,7 @@ public class AbstractTaskMappingCreator createdGenotypes.get(AbstractTaskMappingEncoding.class); PartitionMappingEncoding partEnc = createdGenotypes.get(PartitionMappingEncoding.class); assert (partEnc != null) : "The required partition mapping encoding could not be found in the map of already decoded phenotypes."; - return new AbstractTaskMappingEncoding(dse, systemModelAdapter, partEnc, atgEnc, atmEnc); + return new AbstractTaskMappingEncoding(dse, partEnc, atgEnc, atmEnc); } /** {@inheritDoc} */ diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/FailSilentTaskMappingCreator.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/FailSilentTaskMappingCreator.java index e26e6811..7375dc0d 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/FailSilentTaskMappingCreator.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/FailSilentTaskMappingCreator.java @@ -25,7 +25,6 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegen import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.graph.DecoderDependencyGraph; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.FlatPhenotypeMap; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype; -import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; import org.fortiss.af3.exploration.alg.service.IExplorationEncoding; import org.fortiss.af3.exploration.moea.model.DseSpecification; @@ -44,10 +43,8 @@ public class FailSilentTaskMappingCreator * (execution model = fail-silent) */ @Inject - public FailSilentTaskMappingCreator(DseSpecification dse, - SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter, - DecoderDependencyGraph execDepGraph) { - super(dse, systemModelAdapter, execDepGraph); + public FailSilentTaskMappingCreator(DseSpecification dse, DecoderDependencyGraph execDepGraph) { + super(dse, execDepGraph); } /** {@inheritDoc} */ @@ -62,7 +59,7 @@ public class FailSilentTaskMappingCreator assert (atmEnc != null) : "The required abstract task mapping encoding could not be found in the map of already decoded phenotypes."; PartitionMappingEncoding partEnc = createdGenotypes.get(PartitionMappingEncoding.class); assert (partEnc != null) : "The required partition mapping encoding could not be found in the map of already decoded phenotypes."; - return new FailSilentTaskMappingEncoding(dse, systemModelAdapter, partEnc, atgEnc, atmEnc); + return new FailSilentTaskMappingEncoding(dse, partEnc, atgEnc, atmEnc); } // TODO: remove this method: use the identifier from the encoding, instead. diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/FaultDetectionVotingTaskMappingCreator.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/FaultDetectionVotingTaskMappingCreator.java index c1991126..0b8ce4eb 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/FaultDetectionVotingTaskMappingCreator.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/FaultDetectionVotingTaskMappingCreator.java @@ -25,7 +25,6 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegen import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.graph.DecoderDependencyGraph; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.FlatPhenotypeMap; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype; -import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; import org.fortiss.af3.exploration.alg.service.IExplorationEncoding; import org.fortiss.af3.exploration.moea.model.DseSpecification; @@ -45,9 +44,8 @@ public class FaultDetectionVotingTaskMappingCreator extends */ @Inject public FaultDetectionVotingTaskMappingCreator(DseSpecification dse, - SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter, DecoderDependencyGraph execDepGraph) { - super(dse, systemModelAdapter, execDepGraph); + super(dse, execDepGraph); } /** {@inheritDoc} */ @@ -62,8 +60,7 @@ public class FaultDetectionVotingTaskMappingCreator extends assert (atmEnc != null) : "The required abstract task mapping encoding could not be found in the map of already decoded phenotypes."; PartitionMappingEncoding partEnc = createdGenotypes.get(PartitionMappingEncoding.class); assert (partEnc != null) : "The required partition mapping encoding could not be found in the map of already decoded phenotypes."; - return new FaultDetectionVotingTaskMappingEncoding(dse, systemModelAdapter, partEnc, atgEnc, - atmEnc); + return new FaultDetectionVotingTaskMappingEncoding(dse, partEnc, atgEnc, atmEnc); } /** {@inheritDoc} */ diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/TaskMappingCreator.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/TaskMappingCreator.java index 576da44e..1b09ee1d 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/TaskMappingCreator.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/TaskMappingCreator.java @@ -21,7 +21,6 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.Ta import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.create.ComposableCreatorBase; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.graph.DecoderDependencyGraph; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ITaskAdapter; -import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; import org.fortiss.af3.exploration.moea.model.DseSpecification; import org.opt4j.core.Genotype; import org.opt4j.core.problem.Creator; @@ -42,10 +41,8 @@ public abstract class TaskMappingCreator<S extends TaskMappingEntry<ITaskAdapter /** Constructor. */ @Inject - public TaskMappingCreator(DseSpecification dse, - SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter, - DecoderDependencyGraph execDepGraph) { - super(systemModelAdapter, execDepGraph); + public TaskMappingCreator(DseSpecification dse, DecoderDependencyGraph execDepGraph) { + super(execDepGraph); this.dse = dse; } } diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/comm/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/comm/.ratings index 0f4a0e17..c2323e22 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/comm/.ratings +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/comm/.ratings @@ -1 +1 @@ -MessageEncoding.java f52ba1f6179357209a1fd265238746102a1c3728 RED +MessageEncoding.java 523e16c2ec3d890b6715bfcd24ab39da4f850621 RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/partitionmapping/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/partitionmapping/.ratings index 069573fa..36e5d7bc 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/partitionmapping/.ratings +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/partitionmapping/.ratings @@ -1,3 +1,3 @@ Partition.java b870fdd306818d8195b662daee9546feebb28e18 RED -PartitionMappingEncoding.java 345a25f0324c07a8e4c5b83d2cabeae2ba7c9608 RED +PartitionMappingEncoding.java 45388dce4228074541b17410baabf30f9c22f858 RED PartitionMappingEntry.java 2f8f082e6bcd49dbe2f5ba88724850b54b20d637 RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/partitionmapping/PartitionMappingEncoding.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/partitionmapping/PartitionMappingEncoding.java index d298d291..0bad93c3 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/partitionmapping/PartitionMappingEncoding.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/partitionmapping/PartitionMappingEncoding.java @@ -23,8 +23,8 @@ import java.util.Map; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.MappingEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.genotype.ComposableGenotype; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.ComposablePhenotype; +import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IExecutionUnitAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IResourceAdapter; -import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.random.RandomExploration; /** @@ -52,12 +52,11 @@ public class PartitionMappingEncoding extends /** Constructor. */ // TODO: The strategy can be replaced by lambdas for a cleaner design. - public PartitionMappingEncoding(SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter, + public PartitionMappingEncoding(Collection<IExecutionUnitAdapter<?>> targetSet, int numTasks, CREATE_STARTEGY strategy) { + this.targetSet = targetSet; // Number of tasks to deploy // TODO: This does not consider task replicas yet. - int taskNum = systemModelAdapter.getDeployableComponents().size(); - targetSet = systemModelAdapter.getDeploymentTargets(); if(strategy == CREATE_STARTEGY.MIN_SET) { for(IResourceAdapter<?> target : targetSet) { Partition part = new Partition(); @@ -65,7 +64,7 @@ public class PartitionMappingEncoding extends } } else if(strategy == CREATE_STARTEGY.RANDOM_SET) { for(IResourceAdapter<?> target : targetSet) { - int randMaxPartitions = RandomExploration.getInstance().nextInt(taskNum); + int randMaxPartitions = RandomExploration.getInstance().nextInt(numTasks); // Ensure at least one partition per phys. execution unit. randMaxPartitions = (randMaxPartitions < 1) ? 1 : randMaxPartitions; for(int i = 0; i < randMaxPartitions; ++i) { @@ -75,7 +74,7 @@ public class PartitionMappingEncoding extends } } else if(strategy == CREATE_STARTEGY.MAX_SET) { for(IResourceAdapter<?> target : targetSet) { - for(int i = 0; i < taskNum; ++i) { + for(int i = 0; i < numTasks; ++i) { Partition part = new Partition(); allocationMap.put(part, new PartitionMappingEntry(part, target)); } diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/platform/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/platform/.ratings index 1a362938..d5a16a58 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/platform/.ratings +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/platform/.ratings @@ -1 +1 @@ -PlatformCommunicationGraphEncoding.java 5cd55e1eb23fdb27389dd95ef7edaf16bb4bc01e RED +PlatformCommunicationGraphEncoding.java 69cdf4968c8572f70b4360b0c027cf6cbfd28a92 RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/platform/PlatformCommunicationGraphEncoding.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/platform/PlatformCommunicationGraphEncoding.java index 2aa5bb16..e44f92b6 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/platform/PlatformCommunicationGraphEncoding.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/platform/PlatformCommunicationGraphEncoding.java @@ -20,7 +20,6 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegen import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.ComposablePhenotype; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IResourceAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ITaskAdapter; -import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; import org.fortiss.af3.exploration.alg.graph.display.JGraphTVisualizer; import org.fortiss.af3.exploration.alg.service.IExplorationEncoding; import org.jgrapht.DirectedGraph; @@ -36,25 +35,17 @@ import org.jgrapht.graph.DefaultEdge; */ public class PlatformCommunicationGraphEncoding implements IExplorationEncoding, ComposableGenotype, ComposablePhenotype<PartitionMappingEncoding>, Cloneable { - - /** Representation of input system model */ - protected SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter; - /** The graph representing the communication structure of a platform. */ protected DirectedGraph<IResourceAdapter<?>, DefaultEdge> platformGraph; /** Constructor for the initial version of the Graph w/o available Partitions. */ public PlatformCommunicationGraphEncoding( - SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter, DirectedGraph<IResourceAdapter<?>, DefaultEdge> platformGraph) { - this.systemModelAdapter = systemModelAdapter; this.platformGraph = platformGraph; } /** Copy constructor. */ - protected PlatformCommunicationGraphEncoding( - SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter) { - this.systemModelAdapter = systemModelAdapter; + protected PlatformCommunicationGraphEncoding() { } /** Creates a Dialog that illustrates this {@link DirectedGraph}. */ @@ -82,9 +73,7 @@ public class PlatformCommunicationGraphEncoding implements IExplorationEncoding, @SuppressWarnings("unchecked") @Override public PlatformCommunicationGraphEncoding newInstance() { - PlatformCommunicationGraphEncoding pcgEncoding = - new PlatformCommunicationGraphEncoding(systemModelAdapter, this.platformGraph); - return pcgEncoding; + return new PlatformCommunicationGraphEncoding(platformGraph); } /** {@inheritDoc} */ diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/.ratings index 4d759b43..d5190aa7 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/.ratings +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/.ratings @@ -1,5 +1,5 @@ -AbstractTaskGraphEncoding.java 5978cc6ab893cbd36e337da149b23f728885a923 RED -InstantiatedAcyclicTaskGraphEncoding.java d350697fc6ce436f0eb7466be1462b922f35f1ef RED -InstantiatedTaskGraphEncoding.java 9ac64514fb83bbc4f0258b3fc40ac40bd76a5f83 RED -SafeTaskGraphEncoding.java 2df896a20d2f1759b07de59385df00440a20e8a2 RED -TaskGraphEncoding.java 2b90454bea36e75301633fdeec83cf9a874d7269 RED +AbstractTaskGraphEncoding.java 40dfbbfac60f8c595e7e673e9e709736a1b9e091 RED +InstantiatedAcyclicTaskGraphEncoding.java 4541bb1f0c79aafbc88b49c0cbbe7c973153e1af RED +InstantiatedTaskGraphEncoding.java 01b03a6de225f5890a4a9764f127045c4748e14e RED +SafeTaskGraphEncoding.java 03cb22320614f1ad4c16fbe68acbe045ca7e89ef RED +TaskGraphEncoding.java be6960a7221e7383afc17be8734e982b1529db2f RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/AbstractTaskGraphEncoding.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/AbstractTaskGraphEncoding.java index fd50f6bd..3d297b8c 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/AbstractTaskGraphEncoding.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/AbstractTaskGraphEncoding.java @@ -15,6 +15,8 @@ +--------------------------------------------------------------------------*/ package org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph; +import java.util.Collection; + import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.genotype.ComposableGenotype; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.ComposablePhenotype; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; @@ -31,8 +33,8 @@ public class AbstractTaskGraphEncoding<G extends ComposableGenotype, C> extends TaskGraphEncoding<G, C, DefaultTaskGraph<?>> { /** Constructor. See {@link TaskGraphEncoding#TaskGraphEncoding(SystemModelAdapter)}. */ - public AbstractTaskGraphEncoding(SystemModelAdapter<C, ?, ?, ?, ?, ?, ?> systemModelAdapter) { - super(systemModelAdapter); + public AbstractTaskGraphEncoding(Collection<? extends DefaultTaskGraph<?>> originalTaskGraphs) { + super((Collection<DefaultTaskGraph<?>>)originalTaskGraphs); } /** Copy Constructor. See {@link TaskGraphEncoding#TaskGraphEncoding(TaskGraphEncoding)}. */ diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/InstantiatedAcyclicTaskGraphEncoding.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/InstantiatedAcyclicTaskGraphEncoding.java index 67998b5b..db1d1698 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/InstantiatedAcyclicTaskGraphEncoding.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/InstantiatedAcyclicTaskGraphEncoding.java @@ -38,16 +38,8 @@ public class InstantiatedAcyclicTaskGraphEncoding<T extends InstantiatedTaskMapp /** * Constructor. See {@link TaskGraphEncoding#TaskGraphEncoding(SystemModelAdapter, Collection)}. */ - public InstantiatedAcyclicTaskGraphEncoding( - SystemModelAdapter<C, ?, ?, ?, ?, ?, ?> systemModelAdapter, - Collection<DefaultTaskGraph<?>> taskGraphs) { - super(systemModelAdapter, AcyclicTaskGraph.transformToAcyclicGraphs(taskGraphs)); - } - - /** Constructor. See {@link TaskGraphEncoding#TaskGraphEncoding(SystemModelAdapter)}. */ - public InstantiatedAcyclicTaskGraphEncoding( - SystemModelAdapter<C, ?, ?, ?, ?, ?, ?> systemModelAdapter) { - super(systemModelAdapter); + public InstantiatedAcyclicTaskGraphEncoding(Collection<DefaultTaskGraph<?>> taskGraphs) { + super(AcyclicTaskGraph.transformToAcyclicGraphs(taskGraphs)); } /** Copy Constructor. See {@link TaskGraphEncoding#TaskGraphEncoding(TaskGraphEncoding)}. */ diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/InstantiatedTaskGraphEncoding.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/InstantiatedTaskGraphEncoding.java index cf1f8f17..9b4f735d 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/InstantiatedTaskGraphEncoding.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/InstantiatedTaskGraphEncoding.java @@ -35,15 +35,9 @@ public class InstantiatedTaskGraphEncoding<T extends InstantiatedTaskMappingEntr /** * Constructor. See {@link TaskGraphEncoding#TaskGraphEncoding(SystemModelAdapter, Collection)}. */ - public InstantiatedTaskGraphEncoding(SystemModelAdapter<C, ?, ?, ?, ?, ?, ?> systemModelAdapter, - Collection<DefaultTaskGraph<?>> taskGraphs) { - super(systemModelAdapter, taskGraphs); - } - - /** Constructor. See {@link TaskGraphEncoding#TaskGraphEncoding(SystemModelAdapter)}. */ public InstantiatedTaskGraphEncoding( - SystemModelAdapter<C, ?, ?, ?, ?, ?, ?> systemModelAdapter) { - super(systemModelAdapter); + Collection<? extends DefaultTaskGraph<?>> originalTaskGraphs) { + super((Collection<DefaultTaskGraph<?>>)originalTaskGraphs); } /** Copy Constructor. See {@link TaskGraphEncoding#TaskGraphEncoding(TaskGraphEncoding)}. */ diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/SafeTaskGraphEncoding.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/SafeTaskGraphEncoding.java index 5a2726db..7a845dd4 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/SafeTaskGraphEncoding.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/SafeTaskGraphEncoding.java @@ -15,9 +15,13 @@ +--------------------------------------------------------------------------*/ package org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph; +import java.util.Collection; + import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.safetyfunctionarch.SafetyFunctionArchEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.ComposablePhenotype; +import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ITaskAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; +import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.DefaultTaskGraph; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.TaskGraph; /** @@ -28,10 +32,13 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.TaskGraph; */ public class SafeTaskGraphEncoding<C> extends AbstractTaskGraphEncoding<SafetyFunctionArchEncoding<C>, C> { + /** Collection of task graphs extracted from the input models. */ + Collection<TaskGraph> originalTaskGraphs; /** Constructor. See {@link TaskGraphEncoding#TaskGraphEncoding(SystemModelAdapter)}. */ - public SafeTaskGraphEncoding(SystemModelAdapter<C, ?, ?, ?, ?, ?, ?> systemModelAdapter) { - super(systemModelAdapter); + public SafeTaskGraphEncoding(Collection<TaskGraph> originalTaskGraphs) { + super((Collection<? extends DefaultTaskGraph<?>>)originalTaskGraphs); + this.originalTaskGraphs = originalTaskGraphs; } /** Copy Constructor. See {@link TaskGraphEncoding#TaskGraphEncoding(TaskGraphEncoding)}. */ @@ -39,6 +46,19 @@ public class SafeTaskGraphEncoding<C> super(encoding); } + /** + * Detects whether the {@link TaskGraph} of the input system model references any tasks of the + * internal {@link TaskGraph}s and returns the first matching {@link TaskGraph}. + */ + public TaskGraph getOriginalTaskGraph(ITaskAdapter<?> task) { + for(TaskGraph currTG : originalTaskGraphs) { + if(currTG.containsTask(task)) { + return currTG; + } + } + return null; + } + /** {@inheritDoc} */ @SuppressWarnings("unchecked") @Override diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/TaskGraphEncoding.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/TaskGraphEncoding.java index 3890f90d..cab6a9c2 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/TaskGraphEncoding.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/TaskGraphEncoding.java @@ -19,14 +19,12 @@ import static org.fortiss.af3.exploration.alg.util.GraphUtils.getGraphOf; import java.util.Collection; import java.util.HashSet; -import java.util.stream.Collectors; import org.eclipse.emf.ecore.EObject; import org.fortiss.af3.component.model.Component; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.ComposablePhenotype; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IExecutionUnitAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ITaskAdapter; -import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.SignalAdapterWeightedEdge; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.TaskGraph; import org.fortiss.af3.exploration.alg.service.IExplorationEncoding; @@ -41,10 +39,6 @@ import org.opt4j.core.Genotype; */ public class TaskGraphEncoding<G extends Genotype, C, T extends TaskGraph> implements IExplorationEncoding, ComposablePhenotype<G>, Cloneable { - - /** References the {@link SystemModelAdapter} which adapts the input models. */ - protected SystemModelAdapter<C, ?, ?, ?, ?, ?, ?> systemModelAdapter; - /** {@link TaskGraph} that represents the deployable components and their signals. */ protected Collection<T> taskGraphs; @@ -64,24 +58,7 @@ public class TaskGraphEncoding<G extends Genotype, C, T extends TaskGraph> * Constructor that initializes {@code this} encoding with the collection of * {@link ITaskAdapter}s as they are extracted from the input models. */ - @SuppressWarnings("unchecked") - public TaskGraphEncoding(SystemModelAdapter<C, ?, ?, ?, ?, ?, ?> systemModelAdapter) { - this.systemModelAdapter = systemModelAdapter; - - taskGraphs = (Collection<T>)systemModelAdapter.getTaskGraphs().stream().map(tg -> tg.copy()) - .collect(Collectors.toSet()); - - replicableComponents.addAll(systemModelAdapter.getReplicableComponents()); - deployableComponents.addAll(systemModelAdapter.getDeployableComponents()); - } - - /** - * Constructor that initializes {@code this} encoding with the collection of - * {@link ITaskAdapter}s as they are extracted from the input models. - */ - public TaskGraphEncoding(SystemModelAdapter<C, ?, ?, ?, ?, ?, ?> systemModelAdapter, - Collection<T> taskGraphs) { - this(systemModelAdapter); + public TaskGraphEncoding(Collection<T> taskGraphs) { this.taskGraphs = taskGraphs; this.deployableComponents.clear(); @@ -117,11 +94,6 @@ public class TaskGraphEncoding<G extends Genotype, C, T extends TaskGraph> // present in the system model adapter. TaskGraph taskGraph = getGraphOf(task, taskGraphs); - // Find the right Task Graph, in case the task does not exist in any of the task graphs of - // this encoding. - if(taskGraph == null) { - taskGraph = findTGBySystemModel(systemModelAdapter.getTaskGraph(task)); - } // TODO: This should be transformed into an exception. assert (taskGraph != null) : "The task to be added could be neither found in this encoding, nor the input models."; @@ -133,44 +105,30 @@ public class TaskGraphEncoding<G extends Genotype, C, T extends TaskGraph> } } - /** - * Detects whether the {@link TaskGraph} of the input system model references any tasks of the - * internal {@link TaskGraph}s and returns the first matching {@link TaskGraph}. - */ - private TaskGraph findTGBySystemModel(TaskGraph systemTG) { - for(TaskGraph currTG : taskGraphs) { - if(currTG.containsAnyTaskOf(systemTG.getTasks())) { - return currTG; - } - } - return null; - } - /** * Adds all signals defined in the input models for the given * {@link ITaskAdapter} which must be contained in any of the internal * {@link TaskGraph}s. */ - public void addSignalsOf(ITaskAdapter<C> task) { + public void addSignalsOf(ITaskAdapter<C> task, TaskGraph origTaskGraph) { // The given task must be in the any of the task graphs! T taskGraph = getGraphOf(task, taskGraphs); // TODO: This should be transformed into an exception. assert (taskGraph != null); - TaskGraph systemTG = systemModelAdapter.getTaskGraph(task); Collection<SignalAdapterWeightedEdge> incomingEdges = - systemTG.getGraph().incomingEdgesOf(task); + origTaskGraph.getGraph().incomingEdgesOf(task); Collection<SignalAdapterWeightedEdge> outgoingEdges = - systemTG.getGraph().outgoingEdgesOf(task); + origTaskGraph.getGraph().outgoingEdgesOf(task); for(SignalAdapterWeightedEdge edge : incomingEdges) { - ITaskAdapter<?> source = systemTG.getGraph().getEdgeSource(edge); + ITaskAdapter<?> source = taskGraph.getGraph().getEdgeSource(edge); taskGraph.getGraph().addEdge(source, task, edge); } for(SignalAdapterWeightedEdge edge : outgoingEdges) { - ITaskAdapter<?> target = systemTG.getGraph().getEdgeTarget(edge); + ITaskAdapter<?> target = taskGraph.getGraph().getEdgeTarget(edge); taskGraph.getGraph().addEdge(task, target, edge); } } @@ -259,7 +217,7 @@ public class TaskGraphEncoding<G extends Genotype, C, T extends TaskGraph> * Returns the deployable (software) component that are present in the internal * {@link TaskGraph}s. May contain "abstract" {@link Component}s. */ - public Collection<ITaskAdapter<?>> getDeployableComponents() { + public Collection<ITaskAdapter<?>> getTasks() { // return deployableComponents; Collection<ITaskAdapter<?>> deplComp = new HashSet<>(); for(T tg : taskGraphs) { diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/.ratings index a92b55cd..ceadd362 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/.ratings +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/.ratings @@ -1,2 +1,2 @@ -TaskMappingEncoding.java 930be52f3d4940c4905ce901e8376ea076caf2c7 RED +TaskMappingEncoding.java 978f19bbba5b01c9b5157292775610d2a40df378 RED TaskMappingEntry.java 8872e14a5d29f267ce2be78e9a3f3f817f16edd2 RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/TaskMappingEncoding.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/TaskMappingEncoding.java index 63ca9e12..49480f27 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/TaskMappingEncoding.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/TaskMappingEncoding.java @@ -41,7 +41,6 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.encoding.Con import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IExecutionUnitAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IResourceAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ITaskAdapter; -import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.DefaultTaskGraph; import org.fortiss.af3.exploration.alg.dse.sysmodel.mapping.IMappingEncoding; import org.fortiss.af3.exploration.alg.dse.sysmodel.mapping.IMappingEntry; @@ -52,7 +51,6 @@ import org.fortiss.af3.exploration.model.ExplorationConstraint; import org.fortiss.af3.exploration.moea.model.DseSpecification; import org.fortiss.af3.exploration.moea.model.predefined.ComponentMultiAllocationConstraint; import org.fortiss.af3.exploration.moea.model.predefined.ComponentMultiDislocationConstraint; -import org.fortiss.af3.platform.model.ExecutionUnit; import org.fortiss.tooling.common.util.LambdaUtils; import com.google.common.collect.HashMultimap; @@ -100,14 +98,14 @@ public abstract class TaskMappingEncoding<S extends ITaskAdapter<?>, T extends T /** Deployable component adapters that shall not be considered by the redundancy operator. */ protected Collection<ITaskAdapter<?>> fixAllocatedComponents; - /** Representation of input system */ - protected SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter; - /** * Collection of deployable {@link ITaskAdapter}s represented by {@code this} * mapping. */ - protected Collection<S> deployableComponents; + protected Collection<S> tasks; + + /** Collection of {@link Partition}s to deploy {@link Task}s to. */ + protected Collection<Partition> partitions; /** The input {@link TaskGraphEncoding} that contains the tasks and their signals. */ protected TaskGraphEncoding<?, ?, ?> tgEncoding; @@ -123,37 +121,19 @@ public abstract class TaskMappingEncoding<S extends ITaskAdapter<?>, T extends T * system. */ @SuppressWarnings("unchecked") - public TaskMappingEncoding(DseSpecification dse, - SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter, - PartitionMappingEncoding partMappingEncoding, TaskGraphEncoding<?, ?, ?> tgEncoding) { + public TaskMappingEncoding(DseSpecification dse, PartitionMappingEncoding partMappingEncoding, + TaskGraphEncoding<?, ?, ?> tgEncoding) { this.dse = dse; - this.systemModelAdapter = systemModelAdapter; this.tgEncoding = tgEncoding; this.partMappingEncoding = partMappingEncoding; - this.deployableComponents = (Collection<S>)tgEncoding.getDeployableComponents(); + this.tasks = (Collection<S>)tgEncoding.getTasks(); + this.partitions = partMappingEncoding.getRequesters(); disallowedAllocations = createDisallowedAllocationMap(); allowedAllocations = createAllowedAllocationMap(); fixAllocatedComponents = createFixAllocationCollection(); } - /** - * Constructor that optionally initializes the encoding to a random encoding. - * - * @throws ExplorationException - * if no valid allocation targets can be identified for one - * {@link ITaskAdapter}. - */ - public TaskMappingEncoding(DseSpecification dse, - SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter, boolean initialize) - throws ExplorationException { - this(dse, systemModelAdapter, new PartitionMappingEncoding(systemModelAdapter, null), - new TaskGraphEncoding<>(systemModelAdapter)); - if(initialize) { - resetEncoding(); - } - } - /** * Constructor that optionally initializes the encoding to a random encoding * @@ -161,11 +141,9 @@ public abstract class TaskMappingEncoding<S extends ITaskAdapter<?>, T extends T * if no valid allocation targets can be identified for one * {@link ITaskAdapter}. */ - public TaskMappingEncoding(DseSpecification dse, - SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter, - PartitionMappingEncoding partMappingEncoding, TaskGraphEncoding<?, ?, ?> tgEncoding, - boolean initialize) throws ExplorationException { - this(dse, systemModelAdapter, partMappingEncoding, tgEncoding); + public TaskMappingEncoding(DseSpecification dse, PartitionMappingEncoding partMappingEncoding, + TaskGraphEncoding<?, ?, ?> tgEncoding, boolean initialize) throws ExplorationException { + this(dse, partMappingEncoding, tgEncoding); if(initialize) { resetEncoding(); } @@ -178,12 +156,11 @@ public abstract class TaskMappingEncoding<S extends ITaskAdapter<?>, T extends T * if no valid allocation targets can be identified for one * {@link ITaskAdapter}. */ - public TaskMappingEncoding(DseSpecification dse, - SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter, - PartitionMappingEncoding partMappingEncoding, TaskGraphEncoding<?, ?, ?> tgEncoding, + public TaskMappingEncoding(DseSpecification dse, PartitionMappingEncoding partMappingEncoding, + TaskGraphEncoding<?, ?, ?> tgEncoding, TaskMappingEncoding<ITaskAdapter<?>, ?> incompleteEncoding) throws ExplorationException { - this(dse, systemModelAdapter, partMappingEncoding, tgEncoding); + this(dse, partMappingEncoding, tgEncoding); completeEncoding(incompleteEncoding); } @@ -220,16 +197,16 @@ public abstract class TaskMappingEncoding<S extends ITaskAdapter<?>, T extends T // components (-> marker) to not be processed by subsequent operators. private Collection<ITaskAdapter<?>> createFixAllocationCollection() { Collection<ITaskAdapter<?>> fixAllocatedComponents = new HashSet<>(); - for(ITaskAdapter<?> compAdp : deployableComponents) { + for(ITaskAdapter<?> compAdp : tasks) { Optional<ComponentMultiDislocationConstraint> constr = dse.getTargetSpecification().getTargets().stream() .filter(c -> (c instanceof ComponentMultiDislocationConstraint)) .map(ComponentMultiDislocationConstraint.class::cast) .filter(c -> c.getComponent() == compAdp.getObject()).findAny(); - if(constr.isPresent()) { - fixAllocatedComponents.add( - systemModelAdapter.getDeployableComponentOf(constr.get().getComponent())); - } + // if(constr.isPresent()) { + // fixAllocatedComponents.add( + // systemModelAdapter.getDeployableComponentOf(constr.get().getComponent())); + // } } return fixAllocatedComponents; } @@ -253,26 +230,27 @@ public abstract class TaskMappingEncoding<S extends ITaskAdapter<?>, T extends T private Multimap<ITaskAdapter<?>, IExecutionUnitAdapter<?>> createDisallowedAllocationMap() { Multimap<ITaskAdapter<?>, IExecutionUnitAdapter<?>> rval = HashMultimap.create(); - Collection<ComponentMultiDislocationConstraint> forbiddenDeploymentConstraints = - getChildrenWithType(dse, ComponentMultiDislocationConstraint.class); - - for(ComponentMultiDislocationConstraint currentConstraint : forbiddenDeploymentConstraints) { - for(ITaskAdapter<?> currentComponentAdapter : systemModelAdapter - .getDeployableComponents()) { - if(currentComponentAdapter.getObject() == currentConstraint.getComponent()) { - // TODO: Remove dependency on AF3 here. - Collection<ExecutionUnit> forbiddenAF3TargetsOfComponent = - currentConstraint.getExecutionUnits(); - for(IExecutionUnitAdapter<?> currentForbiddenTargetUnit : systemModelAdapter - .getDeploymentTargets()) { - if(forbiddenAF3TargetsOfComponent - .contains(currentForbiddenTargetUnit.getObject())) { - rval.put(currentComponentAdapter, currentForbiddenTargetUnit); - } - } - } - } - } + // Collection<ComponentMultiDislocationConstraint> forbiddenDeploymentConstraints = + // getChildrenWithType(dse, ComponentMultiDislocationConstraint.class); + // + // for(ComponentMultiDislocationConstraint currentConstraint : + // forbiddenDeploymentConstraints) { + // for(ITaskAdapter<?> currentComponentAdapter : systemModelAdapter + // .getDeployableComponents()) { + // if(currentComponentAdapter.getObject() == currentConstraint.getComponent()) { + // // TODO: Remove dependency on AF3 here. + // Collection<ExecutionUnit> forbiddenAF3TargetsOfComponent = + // currentConstraint.getExecutionUnits(); + // for(IExecutionUnitAdapter<?> currentForbiddenTargetUnit : systemModelAdapter + // .getDeploymentTargets()) { + // if(forbiddenAF3TargetsOfComponent + // .contains(currentForbiddenTargetUnit.getObject())) { + // rval.put(currentComponentAdapter, currentForbiddenTargetUnit); + // } + // } + // } + // } + // } return rval; } @@ -288,30 +266,31 @@ public abstract class TaskMappingEncoding<S extends ITaskAdapter<?>, T extends T getChildrenWithType(dse, ComponentMultiAllocationConstraint.class); Collection<ITaskAdapter<?>> constrainedComponentAdps = new HashSet<>(); - for(ComponentMultiAllocationConstraint currentConstraint : allowedDeploymentConstraints) { - for(ITaskAdapter<?> currentComponentAdapter : systemModelAdapter - .getDeployableComponents()) { - if(currentComponentAdapter.getObject() == currentConstraint.getComponent()) { - constrainedComponentAdps.add(currentComponentAdapter); - - // TODO: Remove dependency on AF3 here. - Collection<ExecutionUnit> allowedAF3TargetsOfComponent = - currentConstraint.getExecutionUnits(); - for(IExecutionUnitAdapter<?> currentAllowedTargetUnit : systemModelAdapter - .getDeploymentTargets()) { - if(allowedAF3TargetsOfComponent - .contains(currentAllowedTargetUnit.getObject())) { - rval.put(currentComponentAdapter, currentAllowedTargetUnit); - } - } - } - } - } + // for(ComponentMultiAllocationConstraint currentConstraint : allowedDeploymentConstraints) + // { + // for(ITaskAdapter<?> currentComponentAdapter : systemModelAdapter + // .getTasks()) { + // if(currentComponentAdapter.getObject() == currentConstraint.getComponent()) { + // constrainedComponentAdps.add(currentComponentAdapter); + // + // // TODO: Remove dependency on AF3 here. + // Collection<ExecutionUnit> allowedAF3TargetsOfComponent = + // currentConstraint.getExecutionUnits(); + // for(IExecutionUnitAdapter<?> currentAllowedTargetUnit : systemModelAdapter + // .getDeploymentTargets()) { + // if(allowedAF3TargetsOfComponent + // .contains(currentAllowedTargetUnit.getObject())) { + // rval.put(currentComponentAdapter, currentAllowedTargetUnit); + // } + // } + // } + // } + // } - for(ITaskAdapter<?> curDeplComp : deployableComponents) { + for(ITaskAdapter<?> curDeplComp : tasks) { // TODO: create a field for the deployment targets. if(!constrainedComponentAdps.contains(curDeplComp)) { - systemModelAdapter.getDeploymentTargets().forEach(t -> rval.put(curDeplComp, t)); + partitions.forEach(t -> rval.put(curDeplComp, t)); } } @@ -328,7 +307,7 @@ public abstract class TaskMappingEncoding<S extends ITaskAdapter<?>, T extends T // ITaskAdapter<?> origComponent = systemModelAdapter // .getDeployableComponentOf((EObject)deployableComponent.getObject()); // return allowedAllocations.get(origComponent); - return Collections.emptySet(); + return allowedAllocations.get(deployableComponent); } /** @@ -397,7 +376,7 @@ public abstract class TaskMappingEncoding<S extends ITaskAdapter<?>, T extends T public void completeEncoding(TaskMappingEncoding<?, ?> incompleteEncoding) throws ExplorationException { ArrayList<S> allocComponents = new ArrayList<>(); - allocComponents.addAll(deployableComponents); + allocComponents.addAll(tasks); if(incompleteEncoding != null) { allocComponents.removeAll(incompleteEncoding.getRequesters()); @@ -420,7 +399,7 @@ public abstract class TaskMappingEncoding<S extends ITaskAdapter<?>, T extends T public void resetEncoding() throws ExplorationException { assert (false); allocationMap.clear(); - createEncoding(deployableComponents); + createEncoding(tasks); } /** @@ -433,8 +412,7 @@ public abstract class TaskMappingEncoding<S extends ITaskAdapter<?>, T extends T */ protected void createEncoding(Collection<S> allocatableComponents) throws ExplorationException { double selRandOrFixedInit = rand.nextDouble(); - List<IExecutionUnitAdapter<?>> execTargets = - new ArrayList<>(systemModelAdapter.getDeploymentTargets()); + List<IExecutionUnitAdapter<?>> execTargets = new ArrayList<>(partitions); int roundRobinAllocIdx = rand.nextInt(execTargets.size()); List<S> compColl = new ArrayList<>(allocatableComponents); @@ -444,13 +422,16 @@ public abstract class TaskMappingEncoding<S extends ITaskAdapter<?>, T extends T for(S deployableComponent : compColl) { List<Partition> validExecTargets = new ArrayList<>(); - if(allowedAllocations.containsKey(deployableComponent)) { - List<IExecutionUnitAdapter<?>> physicalExecTargets = allowedAllocations - .get(deployableComponent).stream().collect(Collectors.toList()); - for(IExecutionUnitAdapter<?> physExecUnit : physicalExecTargets) { - validExecTargets.addAll(partMappingEncoding.getRequesters(physExecUnit)); - } - } + validExecTargets.addAll((Collection<Partition>)(Collection<?>)allowedAllocations + .get(deployableComponent)); + // TODO: reenable the constraints twds. phys exec Units. + // if(allowedAllocations.containsKey(deployableComponent)) { + // List<IExecutionUnitAdapter<?>> physicalExecTargets = allowedAllocations + // .get(deployableComponent).stream().collect(Collectors.toList()); + // for(IExecutionUnitAdapter<?> physExecUnit : physicalExecTargets) { + // validExecTargets.addAll(partMappingEncoding.getRequesters(physExecUnit)); + // } + // } if(selRandOrFixedInit < fixToRandomRatio) { generateRandomDeployment(deployableComponent); @@ -525,9 +506,11 @@ public abstract class TaskMappingEncoding<S extends ITaskAdapter<?>, T extends T // is given if(deploymentTargets == null || deploymentTargets.isEmpty()) { deploymentTargets = new ArrayList<Partition>(); - for(IResourceAdapter<?> physResource : allowedAllocations.get(deployableComponent)) { - deploymentTargets.addAll(partMappingEncoding.getRequesters(physResource)); - } + deploymentTargets.addAll(partitions); + // TODO: Reenable when the constraints twds phys exec units are operational again. + // for(IResourceAdapter<?> physResource : allowedAllocations.get(deployableComponent)) { + // deploymentTargets.addAll(partMappingEncoding.getRequesters(physResource)); + // } } // Remove any disallowed mapping @@ -635,8 +618,7 @@ public abstract class TaskMappingEncoding<S extends ITaskAdapter<?>, T extends T for(ComponentMultiAllocationConstraint cons : constraints) { if(cons.getComponent() == deployableComponent.getObject()) { removeTask(deployableComponent); - List<IExecutionUnitAdapter<?>> physExecList = - new ArrayList<>(systemModelAdapter.getDeploymentTargets()); + List<IExecutionUnitAdapter<?>> physExecList = new ArrayList<>(partitions); List<Partition> execList = new ArrayList<>(); LambdaUtils.forEach(physExecList, e -> execList .addAll(partMappingEncoding.getRequesters((IResourceAdapter<?>)e))); @@ -753,10 +735,7 @@ public abstract class TaskMappingEncoding<S extends ITaskAdapter<?>, T extends T return str; } - /** - * Returns all independent {@link DefaultTaskGraph}s contained in this - * {@link SystemModelAdapter}. - */ + /** Returns all independent {@link DefaultTaskGraph}s contained in this encoding. */ public TaskGraphEncoding<?, ?, ?> getTaskGraphEncoding() { return tgEncoding; } diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/abstractmapping/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/abstractmapping/.ratings index be62ba9c..80ee4955 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/abstractmapping/.ratings +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/abstractmapping/.ratings @@ -1,2 +1,2 @@ -AbstractTaskMappingEncoding.java 631cdcc84f476354eadd07abb21106d2390815bb RED +AbstractTaskMappingEncoding.java 285c8a15dda294bee34119d914e46bd8f0864283 RED AbstractTaskMappingEntry.java 0bef4c1102baf6bfbddc759fd103cf18df4b5553 RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/abstractmapping/AbstractTaskMappingEncoding.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/abstractmapping/AbstractTaskMappingEncoding.java index bc825e86..bf776e42 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/abstractmapping/AbstractTaskMappingEncoding.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/abstractmapping/AbstractTaskMappingEncoding.java @@ -28,7 +28,6 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.Ta import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.genotype.ComposableGenotype; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.ComposablePhenotype; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ITaskAdapter; -import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; import org.fortiss.af3.exploration.alg.exception.ExplorationException; import org.fortiss.af3.exploration.moea.model.DseSpecification; import org.opt4j.core.Genotype; @@ -46,10 +45,9 @@ public class AbstractTaskMappingEncoding * Constructor that is initialized with a reference to the DSE specification and the input * system model. */ - AbstractTaskMappingEncoding(DseSpecification dse, - SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter, - PartitionMappingEncoding partEnc, SafeTaskGraphEncoding<?> tgEncoding) { - super(dse, systemModelAdapter, partEnc, tgEncoding); + AbstractTaskMappingEncoding(DseSpecification dse, PartitionMappingEncoding partEnc, + SafeTaskGraphEncoding<?> tgEncoding) { + super(dse, partEnc, tgEncoding); } /** @@ -59,31 +57,15 @@ public class AbstractTaskMappingEncoding * if no valid allocation targets can be identified for one * {@link ITaskAdapter}. */ - public AbstractTaskMappingEncoding(DseSpecification dse, - SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter, - PartitionMappingEncoding partEnc, SafeTaskGraphEncoding<?> tgEncoding, - boolean initialize) throws ExplorationException { - super(dse, systemModelAdapter, partEnc, tgEncoding, initialize); + public AbstractTaskMappingEncoding(DseSpecification dse, PartitionMappingEncoding partEnc, + SafeTaskGraphEncoding<?> tgEncoding, boolean initialize) throws ExplorationException { + super(dse, partEnc, tgEncoding, initialize); } /** Copy Constructor. */ - public AbstractTaskMappingEncoding(DseSpecification dse, - SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter, - PartitionMappingEncoding partEnc, TaskGraphEncoding<?, ?, ?> tgEncoding) { - super(dse, systemModelAdapter, partEnc, tgEncoding); - } - - /** - * Constructor that optionally initializes the encoding to a random encoding - * - * @throws ExplorationException - * if no valid allocation targets can be identified for one - * {@link ITaskAdapter}. - */ - public AbstractTaskMappingEncoding(DseSpecification dse, - SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter, boolean initialize) - throws ExplorationException { - super(dse, systemModelAdapter, initialize); + public AbstractTaskMappingEncoding(DseSpecification dse, PartitionMappingEncoding partEnc, + TaskGraphEncoding<?, ?, ?> tgEncoding) { + super(dse, partEnc, tgEncoding); } /** @@ -93,11 +75,10 @@ public class AbstractTaskMappingEncoding * if no valid allocation targets can be identified for one * {@link ITaskAdapter}. */ - public AbstractTaskMappingEncoding(DseSpecification dse, - SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter, - PartitionMappingEncoding partEnc, AbstractTaskGraphEncoding<?, ?> atgEnc, - boolean initialize) throws ExplorationException { - super(dse, systemModelAdapter, partEnc, atgEnc, initialize); + public AbstractTaskMappingEncoding(DseSpecification dse, PartitionMappingEncoding partEnc, + AbstractTaskGraphEncoding<?, ?> atgEnc, boolean initialize) + throws ExplorationException { + super(dse, partEnc, atgEnc, initialize); } /** @@ -110,11 +91,10 @@ public class AbstractTaskMappingEncoding * if no valid allocation targets can be identified for one * {@link ITaskAdapter}. */ - public AbstractTaskMappingEncoding(DseSpecification dse, - SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter, - PartitionMappingEncoding partEnc, AbstractTaskGraphEncoding<?, ?> atgEnc, - AbstractTaskMappingEncoding partialEncoding) throws ExplorationException { - super(dse, systemModelAdapter, partEnc, atgEnc, partialEncoding); + public AbstractTaskMappingEncoding(DseSpecification dse, PartitionMappingEncoding partEnc, + AbstractTaskGraphEncoding<?, ?> atgEnc, AbstractTaskMappingEncoding partialEncoding) + throws ExplorationException { + super(dse, partEnc, atgEnc, partialEncoding); } /** {@inheritDoc} */ @@ -142,7 +122,7 @@ public class AbstractTaskMappingEncoding @Override public AbstractTaskMappingEncoding newInstance() { try { - return new AbstractTaskMappingEncoding(dse, systemModelAdapter, true); + return new AbstractTaskMappingEncoding(dse, null, null, true); } catch(ExplorationException e) { // Opt4J does not allow to throw Exceptions here. throw new RuntimeException(e); @@ -153,8 +133,7 @@ public class AbstractTaskMappingEncoding @Override public AbstractTaskMappingEncoding clone() { AbstractTaskMappingEncoding clonedEncoding; - clonedEncoding = new AbstractTaskMappingEncoding(dse, systemModelAdapter, - partMappingEncoding, tgEncoding); + clonedEncoding = new AbstractTaskMappingEncoding(dse, partMappingEncoding, tgEncoding); Map<AbstractTaskMappingEntry, AbstractTaskMappingEntry> copyAssocMap = new HashMap<>(); diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/.ratings index a815873f..962cb0eb 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/.ratings +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/.ratings @@ -1,6 +1,6 @@ -FailSilentTaskMappingEncoding.java 1457b164ab20624575f4bcbd3e9263c2d9c029c5 RED +FailSilentTaskMappingEncoding.java 6cd0c0d865f7930e9c1ef5aa24006c1c118f9ad8 RED FailSilentTaskMappingEntry.java 28c15e958f6208c1c65e5076bc7c3be26d7a2dc9 RED -FaultDetectionVotingTaskMappingEncoding.java 95d5befaeb9185f2ebe5ee5ff0d5e58412afcd03 RED +FaultDetectionVotingTaskMappingEncoding.java dee2b30029af89891814450e064cbfdb70af3124 RED FaultDetectionVotingTaskMappingEntry.java c6f6588154665d765b506850a78d8a434000c843 RED -InstantiatedTaskMappingEncoding.java 564ee5ab7d5eaf98a134dd92faee35cc30d038fd RED +InstantiatedTaskMappingEncoding.java 35e480631da67eebd5e52d20485b6a76c9f030ec RED InstantiatedTaskMappingEntry.java 06181aa57ffb0c269c4dac8047cdccc2ae7afdd9 RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FailSilentTaskMappingEncoding.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FailSilentTaskMappingEncoding.java index 61622c70..e5a362b7 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FailSilentTaskMappingEncoding.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FailSilentTaskMappingEncoding.java @@ -24,7 +24,6 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.Ta import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.abstractmapping.AbstractTaskMappingEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.abstractmapping.AbstractTaskMappingEntry; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ITaskAdapter; -import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; import org.fortiss.af3.exploration.alg.exception.ExplorationException; import org.fortiss.af3.exploration.moea.model.DseSpecification; @@ -40,17 +39,15 @@ public class FailSilentTaskMappingEncoding * Constructor that is initialized with a reference to the DSE specification and the input * system model. */ - FailSilentTaskMappingEncoding(DseSpecification dse, - SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter, - PartitionMappingEncoding partEnc, AbstractTaskGraphEncoding<?, ?> tgEncoding) { - super(dse, systemModelAdapter, partEnc, tgEncoding); + FailSilentTaskMappingEncoding(DseSpecification dse, PartitionMappingEncoding partEnc, + AbstractTaskGraphEncoding<?, ?> tgEncoding) { + super(dse, partEnc, tgEncoding); } /** Copy Constructor. */ - FailSilentTaskMappingEncoding(DseSpecification dse, - SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter, - PartitionMappingEncoding partEnc, TaskGraphEncoding<?, ?, ?> tgEncoding) { - super(dse, systemModelAdapter, partEnc, tgEncoding); + FailSilentTaskMappingEncoding(DseSpecification dse, PartitionMappingEncoding partEnc, + TaskGraphEncoding<?, ?, ?> tgEncoding) { + super(dse, partEnc, tgEncoding); } // TODO: Check whether the two constructors below are actually needed. @@ -61,35 +58,20 @@ public class FailSilentTaskMappingEncoding * if no valid allocation targets can be identified for one * {@link ITaskAdapter}. */ - public FailSilentTaskMappingEncoding(DseSpecification dse, - SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter, - PartitionMappingEncoding partEnc, AbstractTaskGraphEncoding<?, ?> tgEncoding, - boolean initialize) throws ExplorationException { - super(dse, systemModelAdapter, partEnc, tgEncoding, initialize); - } - - /** - * Constructor that optionally initializes the encoding to a random encoding - * - * @throws ExplorationException - * if no valid allocation targets can be identified for one - * {@link ITaskAdapter}. - */ - public FailSilentTaskMappingEncoding(DseSpecification dse, - SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter, boolean initialize) + public FailSilentTaskMappingEncoding(DseSpecification dse, PartitionMappingEncoding partEnc, + AbstractTaskGraphEncoding<?, ?> tgEncoding, boolean initialize) throws ExplorationException { - super(dse, systemModelAdapter, initialize); + super(dse, partEnc, tgEncoding, initialize); } /** * Constructor which derives the resulting {@link FailSilentTaskMappingEncoding} from the given * {@link AbstractTaskMappingEncoding}. */ - public FailSilentTaskMappingEncoding(DseSpecification dse, - SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter, - PartitionMappingEncoding partEnc, AbstractTaskGraphEncoding<?, ?> tgEncoding, + public FailSilentTaskMappingEncoding(DseSpecification dse, PartitionMappingEncoding partEnc, + AbstractTaskGraphEncoding<?, ?> tgEncoding, AbstractTaskMappingEncoding abstractEncoding) { - super(dse, systemModelAdapter, partEnc, tgEncoding, abstractEncoding); + super(dse, partEnc, tgEncoding, abstractEncoding); } /** {@inheritDoc} */ @@ -116,7 +98,7 @@ public class FailSilentTaskMappingEncoding @Override public FailSilentTaskMappingEncoding newInstance() { try { - return new FailSilentTaskMappingEncoding(dse, systemModelAdapter, true); + return new FailSilentTaskMappingEncoding(dse, null, null, true); } catch(ExplorationException e) { // Opt4J does not allow to throw Exceptions here. throw new RuntimeException(e); @@ -128,8 +110,7 @@ public class FailSilentTaskMappingEncoding public FailSilentTaskMappingEncoding clone() { // TODO: Here, we should maintain the mapping. FailSilentTaskMappingEncoding clonedEncoding; - clonedEncoding = new FailSilentTaskMappingEncoding(dse, systemModelAdapter, - partMappingEncoding, tgEncoding); + clonedEncoding = new FailSilentTaskMappingEncoding(dse, partMappingEncoding, tgEncoding); return clonedEncoding; } } diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FaultDetectionVotingTaskMappingEncoding.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FaultDetectionVotingTaskMappingEncoding.java index 2d7b0bdb..e906d793 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FaultDetectionVotingTaskMappingEncoding.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FaultDetectionVotingTaskMappingEncoding.java @@ -23,7 +23,6 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.Ta import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.abstractmapping.AbstractTaskMappingEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.abstractmapping.AbstractTaskMappingEntry; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ITaskAdapter; -import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; import org.fortiss.af3.exploration.alg.exception.ExplorationException; import org.fortiss.af3.exploration.moea.model.DseSpecification; @@ -39,10 +38,9 @@ public class FaultDetectionVotingTaskMappingEncoding extends * Constructor that is initialized with a reference to the DSE specification and the input * system model. */ - FaultDetectionVotingTaskMappingEncoding(DseSpecification dse, - SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter, - PartitionMappingEncoding partEnc, AbstractTaskGraphEncoding<?, ?> tgEncoding) { - super(dse, systemModelAdapter, partEnc, tgEncoding); + FaultDetectionVotingTaskMappingEncoding(DseSpecification dse, PartitionMappingEncoding partEnc, + AbstractTaskGraphEncoding<?, ?> tgEncoding) { + super(dse, partEnc, tgEncoding); } // TODO: Check whether the two constructors below are actually needed. @@ -54,24 +52,9 @@ public class FaultDetectionVotingTaskMappingEncoding extends * {@link ITaskAdapter}. */ public FaultDetectionVotingTaskMappingEncoding(DseSpecification dse, - SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter, PartitionMappingEncoding partEnc, AbstractTaskGraphEncoding<?, ?> tgEncoding, boolean initialize) throws ExplorationException { - super(dse, systemModelAdapter, partEnc, tgEncoding, initialize); - assert (false) : "Never here any more."; - } - - /** - * Constructor that optionally initializes the encoding to a random encoding - * - * @throws ExplorationException - * if no valid allocation targets can be identified for one - * {@link ITaskAdapter}. - */ - public FaultDetectionVotingTaskMappingEncoding(DseSpecification dse, - SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter, boolean initialize) - throws ExplorationException { - super(dse, systemModelAdapter, initialize); + super(dse, partEnc, tgEncoding, initialize); assert (false) : "Never here any more."; } @@ -80,10 +63,9 @@ public class FaultDetectionVotingTaskMappingEncoding extends * the given {@link AbstractTaskMappingEncoding}. */ public FaultDetectionVotingTaskMappingEncoding(DseSpecification dse, - SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter, PartitionMappingEncoding partEnc, AbstractTaskGraphEncoding<?, ?> tgEncoding, AbstractTaskMappingEncoding abstractEncoding) { - super(dse, systemModelAdapter, partEnc, tgEncoding, abstractEncoding); + super(dse, partEnc, tgEncoding, abstractEncoding); } /** {@inheritDoc} */ @@ -112,7 +94,7 @@ public class FaultDetectionVotingTaskMappingEncoding extends @Override public FaultDetectionVotingTaskMappingEncoding newInstance() { try { - return new FaultDetectionVotingTaskMappingEncoding(dse, systemModelAdapter, true); + return new FaultDetectionVotingTaskMappingEncoding(dse, null, null, true); } catch(ExplorationException e) { // Opt4J does not allow to throw Exceptions here. throw new RuntimeException(e); @@ -127,8 +109,7 @@ public class FaultDetectionVotingTaskMappingEncoding extends // TODO: Here, we should maintain the mapping. FaultDetectionVotingTaskMappingEncoding clonedEncoding = null; try { - clonedEncoding = - new FaultDetectionVotingTaskMappingEncoding(dse, systemModelAdapter, false); + clonedEncoding = new FaultDetectionVotingTaskMappingEncoding(dse, null, null, false); } catch(ExplorationException e) { // Opt4J does not allow to throw Exceptions here. throw new RuntimeException(e); diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/InstantiatedTaskMappingEncoding.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/InstantiatedTaskMappingEncoding.java index a616471c..f5653360 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/InstantiatedTaskMappingEncoding.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/InstantiatedTaskMappingEncoding.java @@ -27,7 +27,6 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegen import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.ComposablePhenotype; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IExecutionUnitAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ITaskAdapter; -import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; import org.fortiss.af3.exploration.alg.exception.ExplorationException; import org.fortiss.af3.exploration.moea.model.DseSpecification; import org.opt4j.core.Genotype; @@ -48,16 +47,14 @@ public abstract class InstantiatedTaskMappingEncoding<T extends InstantiatedTask * system model. */ protected InstantiatedTaskMappingEncoding(DseSpecification dse, - SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter, PartitionMappingEncoding partEnc, AbstractTaskGraphEncoding<?, ?> tgEncoding) { - super(dse, systemModelAdapter, partEnc, tgEncoding); + super(dse, partEnc, tgEncoding); } /** Copy Constructor. */ protected InstantiatedTaskMappingEncoding(DseSpecification dse, - SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter, PartitionMappingEncoding partEnc, TaskGraphEncoding<?, ?, ?> tgEncoding) { - super(dse, systemModelAdapter, partEnc, tgEncoding); + super(dse, partEnc, tgEncoding); } // TODO: Check whether the two constructors below are actually needed. @@ -68,35 +65,20 @@ public abstract class InstantiatedTaskMappingEncoding<T extends InstantiatedTask * if no valid allocation targets can be identified for one * {@link ITaskAdapter}. */ - public InstantiatedTaskMappingEncoding(DseSpecification dse, - SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter, - PartitionMappingEncoding partEnc, AbstractTaskGraphEncoding<?, ?> tgEncoding, - boolean initialize) throws ExplorationException { - super(dse, systemModelAdapter, partEnc, tgEncoding, initialize); - } - - /** - * Constructor that optionally initializes the encoding to a random encoding - * - * @throws ExplorationException - * if no valid allocation targets can be identified for one - * {@link ITaskAdapter}. - */ - public InstantiatedTaskMappingEncoding(DseSpecification dse, - SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter, boolean initialize) + public InstantiatedTaskMappingEncoding(DseSpecification dse, PartitionMappingEncoding partEnc, + AbstractTaskGraphEncoding<?, ?> tgEncoding, boolean initialize) throws ExplorationException { - super(dse, systemModelAdapter, initialize); + super(dse, partEnc, tgEncoding, initialize); } /** * Constructor which derives the resulting {@link InstantiatedTaskMappingEncoding} from the * given {@link AbstractTaskMappingEncoding}. */ - public InstantiatedTaskMappingEncoding(DseSpecification dse, - SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter, - PartitionMappingEncoding partEnc, AbstractTaskGraphEncoding<?, ?> tgEncoding, + public InstantiatedTaskMappingEncoding(DseSpecification dse, PartitionMappingEncoding partEnc, + AbstractTaskGraphEncoding<?, ?> tgEncoding, AbstractTaskMappingEncoding abstractEncoding) { - super(dse, systemModelAdapter, partEnc, tgEncoding); + super(dse, partEnc, tgEncoding); this.constraintMap = abstractEncoding.copyConstraintMap(null); instantiateAbstractEntries(abstractEncoding); } diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/create/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/create/.ratings index cba6099f..a0053d4e 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/create/.ratings +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/create/.ratings @@ -1,4 +1,4 @@ ComposableCreator.java 14cb174847cd3a0882bc4fd17cf8cbe18b2b7f36 RED -ComposableCreatorBase.java 1973a3b7381a283020361df273ef7cdf3bfd3948 RED +ComposableCreatorBase.java 336e1e319b4a7650851eddf0417f6dd6726afff7 RED CompositeCreator.java 65ab9f283191b081e40e8587431fd0a95f1daca6 RED -CompositeCreatorBase.java c701656ca99b43c8e868216c0399de635595ca7a RED +CompositeCreatorBase.java ac356e2a17e5929c965f14766d85e609eaf011d2 RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/create/ComposableCreatorBase.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/create/ComposableCreatorBase.java index e6437bb4..69bbbb7a 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/create/ComposableCreatorBase.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/create/ComposableCreatorBase.java @@ -34,7 +34,6 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegen import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.decode.ConstraintGenerationDecoder; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ITaskAdapter; -import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; import org.fortiss.af3.exploration.alg.service.IExplorationEncoding; import org.fortiss.af3.exploration.alg.util.ExplorationAlgDebugUtils; import org.opt4j.core.Genotype; @@ -48,10 +47,6 @@ import org.opt4j.core.problem.Decoder; */ public abstract class ComposableCreatorBase<G extends ComposableGenotype> implements ComposableCreator<G> { - - /** References the input models */ - protected SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter; - /** References the {@link ComposableDecoder}s that decode the created {@link Genotype}. */ private List<ComposableDecoder<G, ? extends ComposablePhenotype<G>>> subDecoders = new ArrayList<>(); @@ -67,12 +62,10 @@ public abstract class ComposableCreatorBase<G extends ComposableGenotype> * References the {@link DecoderDependencyGraph} which defines execution orders and which * {@link Phenotype}s are needed within the DSE. */ - DecoderDependencyGraph depGraph; + private DecoderDependencyGraph depGraph; /** Default constructor that requires a representation of the input models. */ - public ComposableCreatorBase(SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter, - DecoderDependencyGraph depGraph) { - this.systemModelAdapter = systemModelAdapter; + public ComposableCreatorBase(DecoderDependencyGraph depGraph) { this.depGraph = depGraph; } @@ -106,12 +99,10 @@ public abstract class ComposableCreatorBase<G extends ComposableGenotype> public <P extends ComposablePhenotype<G>> FlatPhenotypeMap<Phenotype> decodeCreatedGenotype( G genotype, FlatPhenotypeMap<Phenotype> decodedPhenotypes, Set<Class<? extends Genotype>> createdGenotypeTypeSet) throws DecodingException { - FlatPhenotypeMap<Phenotype> phenotypes = - new FlatPhenotypeMap<Phenotype>(systemModelAdapter); + FlatPhenotypeMap<Phenotype> phenotypes = new FlatPhenotypeMap<>(); Collection<Class<? extends IExplorationEncoding>> reqPhenotypeTypes = depGraph.getAllRequiredTypes(); - FlatPhenotypeMap<Phenotype> intermediatePhenos = - new FlatPhenotypeMap<Phenotype>(systemModelAdapter); + FlatPhenotypeMap<Phenotype> intermediatePhenos = new FlatPhenotypeMap<>(); intermediatePhenos.addAll(decodedPhenotypes); Optional<? extends ComposableDecoder<G, P>> idDecoder = @@ -164,10 +155,8 @@ public abstract class ComposableCreatorBase<G extends ComposableGenotype> public <P extends ComposablePhenotype<G>> FlatPhenotypeMap<Phenotype> identityDecodeCreatedGenotype(G genotype, FlatPhenotypeMap<Phenotype> decodedPhenotypes) throws DecodingException { - FlatPhenotypeMap<Phenotype> phenotypes = - new FlatPhenotypeMap<Phenotype>(systemModelAdapter); - FlatPhenotypeMap<Phenotype> intermediatePhenos = - new FlatPhenotypeMap<Phenotype>(systemModelAdapter); + FlatPhenotypeMap<Phenotype> phenotypes = new FlatPhenotypeMap<>(); + FlatPhenotypeMap<Phenotype> intermediatePhenos = new FlatPhenotypeMap<>(); intermediatePhenos.addAll(decodedPhenotypes); // If an identity decoder is present, execute it before any other decoder to ensure all diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/create/CompositeCreatorBase.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/create/CompositeCreatorBase.java index 0a609d7a..88bb3e8d 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/create/CompositeCreatorBase.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/create/CompositeCreatorBase.java @@ -24,13 +24,10 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegen import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.ComposablePhenotype; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.FlatPhenotypeMap; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype; -import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; import org.fortiss.af3.exploration.alg.exception.ExplorationException; import org.opt4j.core.genotype.CompositeGenotype; import org.opt4j.core.problem.Creator; -import com.google.inject.Inject; - /** * Base class of the {@link Creator} for {@link CompositeGenotype}s. It handles the creation of the * {@link ComposableGenotype}s comprising this {@link CompositeGenotype}. @@ -45,18 +42,6 @@ public abstract class CompositeCreatorBase<G extends CompositeGenotype<Class<? e */ private List<ComposableCreator<? extends ComposableGenotype>> subCreators = new LinkedList<>(); - /** Representation of input system. */ - protected SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter; - - /** - * Default Constructor that requires a {@link SystemModelAdapter} such that {@link Creator}s are - * aware of the input models. - */ - @Inject - public CompositeCreatorBase(SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter) { - this.systemModelAdapter = systemModelAdapter; - } - /** {@inheritDoc} */ @Override public G create() { @@ -81,8 +66,7 @@ public abstract class CompositeCreatorBase<G extends CompositeGenotype<Class<? e public <N extends ComposableGenotype, P extends ComposablePhenotype<N>> void createSubGenotypes(G compositeGenotype) throws DecodingException { FlatGenotypeMap createdGenotypes = new FlatGenotypeMap(); - FlatPhenotypeMap<Phenotype> decodedPhenotypes = - new FlatPhenotypeMap<Phenotype>(systemModelAdapter); + FlatPhenotypeMap<Phenotype> decodedPhenotypes = new FlatPhenotypeMap<>(); for(ComposableCreator<? extends ComposableGenotype> creator : subCreators) { @SuppressWarnings("unchecked") ComposableCreator<N> castedCreator = 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 35d587cc..667938f7 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 4f366cc6c0f8ca929cac43d9c5de675cbafbb132 RED CompositeDecoder.java 9d34dd0b342e6433ab894974f9430531ce2de39a RED -CompositeDecoderBase.java 9f992f1cb91e7575ad10393f013872a67015581d 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/CompositeDecoderBase.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/CompositeDecoderBase.java index fad862eb..15d6562e 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/CompositeDecoderBase.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/CompositeDecoderBase.java @@ -32,7 +32,6 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegen import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.CompositePhenotype; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.FlatPhenotypeMap; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype; -import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; import org.fortiss.af3.exploration.alg.service.IExplorationEncoding; import org.jgrapht.experimental.dag.DirectedAcyclicGraph.CycleFoundException; import org.opt4j.core.Genotype; @@ -47,10 +46,6 @@ import org.opt4j.core.problem.Decoder; */ public abstract class CompositeDecoderBase<C extends CompositeGenotype<Class<? extends ComposableGenotype>, ComposableGenotype>, P extends CompositePhenotype<?>> implements CompositeDecoder<C, P> { - - /** representation of the input models. */ - private SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter; - /** * References the {@link DecoderDependencyGraph} which defines execution orders and which * {@link Phenotype}s are needed within the DSE. @@ -87,9 +82,7 @@ public abstract class CompositeDecoderBase<C extends CompositeGenotype<Class<? e private boolean isDecoderRegistrationChecked = false; /** Default constructor that requires a representation of the input models. */ - public CompositeDecoderBase(SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter, - DecoderDependencyGraph depGraph) { - this.systemModelAdapter = systemModelAdapter; + public CompositeDecoderBase(DecoderDependencyGraph depGraph) { this.depGraph = depGraph; } @@ -112,18 +105,14 @@ public abstract class CompositeDecoderBase<C extends CompositeGenotype<Class<? e * sub-Decoders produces an error. * @throws MissingDependencyException * if some required {@link IExplorationEncoding} of a {@link ComposableDecoder} is - * not provided by another one, a {@link ComposableCreator}, or the - * {@link SystemModelAdapter}. + * not provided by another one, a {@link ComposableCreator}. */ public <SP extends Genotype, CG extends ComposableGenotype, CP extends ComposablePhenotype<CG>> P decodeInternal(C genotype) throws DecodingException, MissingDependencyException { Map<Class<CP>, CP> subPhenotypes = new HashMap<>(); - FlatPhenotypeMap<Phenotype> decodedPhenotypes = - new FlatPhenotypeMap<Phenotype>(systemModelAdapter); - + FlatPhenotypeMap<Phenotype> decodedPhenotypes = new FlatPhenotypeMap<>(); if(!isDecoderRegistrationChecked) { isDecoderRegistrationChecked = true; - for(ComposableDecoder<?, ?> decoder : depGraph.getOperatorExecOrder()) { if(registeredSubDecoders.containsKey(decoder)) { @SuppressWarnings("unchecked") ComposableDecoder<ComposableGenotype, ComposablePhenotype<?>> castedDecoder = diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/evaluate/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/evaluate/.ratings index 9215094d..3740a0d2 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/evaluate/.ratings +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/evaluate/.ratings @@ -1,3 +1,3 @@ ComposableEvaluator.java 5882908b5b90aa31bcf806cbfca047d2d0725640 RED CompositeEvaluator.java 185b9a6776a419ce0fc2adae31eced97c0d756d5 RED -CompositeEvaluatorBase.java a496b7824e5d5fcff8414c18df93a1fec3d43601 RED +CompositeEvaluatorBase.java a7e7f0d30206ef74b7c6f4b8f1244433ec3f8cc6 RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/evaluate/CompositeEvaluatorBase.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/evaluate/CompositeEvaluatorBase.java index 53a0844f..0cce028e 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/evaluate/CompositeEvaluatorBase.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/evaluate/CompositeEvaluatorBase.java @@ -16,7 +16,6 @@ package org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.evaluate; import static org.fortiss.af3.exploration.alg.service.ExplorationService.getService; -import static org.fortiss.af3.exploration.alg.service.IExplorationTransformationService.TransformationContext.DSE_INTERNAL; import static org.fortiss.af3.exploration.alg.util.ExplorationAlgUtils.pickInstanceOf; import java.util.Collection; @@ -34,7 +33,6 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegen import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.FlatPhenotypeMap; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.EvaluatorWrapper; -import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; import org.fortiss.af3.exploration.alg.guava.SubClassToInstanceMultiMap; import org.fortiss.af3.exploration.alg.service.IExplorationEvaluatationService; import org.fortiss.af3.exploration.alg.service.IExplorationTargetEvaluator; @@ -57,10 +55,6 @@ import com.google.common.collect.MutableClassToInstanceMap; */ public abstract class CompositeEvaluatorBase<P extends CompositePhenotype<?>> implements CompositeEvaluator<P> { - - /** Representation of the input models. */ - protected SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter; - /** Flag to mark that marks the top-most evaluator in the composite structure. */ protected boolean isTopLevelEvaluator = false; @@ -82,12 +76,8 @@ public abstract class CompositeEvaluatorBase<P extends CompositePhenotype<?>> new SubClassToInstanceMultiMap<>( (Class<? extends ComposablePhenotype<?>>)ComposablePhenotype.class); - /** - * Default constructor which requires a {@link SystemModelAdapter} to access the input models. - */ - public CompositeEvaluatorBase(SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter) { - this.systemModelAdapter = systemModelAdapter; - + /** Constructor. */ + public CompositeEvaluatorBase() { if(!ComposableEvaluator.class.isAssignableFrom(getClass())) { isTopLevelEvaluator = true; } @@ -144,11 +134,12 @@ public abstract class CompositeEvaluatorBase<P extends CompositePhenotype<?>> ClassToInstanceMap<EObject> transformedModels = MutableClassToInstanceMap.create(); if(isTopLevelEvaluator && !requiredTransformedModelTypes.isEmpty()) { try { - transformedModels = - getService(IExplorationTransformationService.class).getTransformedModels( - DSE_INTERNAL, null, phenotypeTypeMap.asExplorationEncoding(), - systemModelAdapter.getInputModels(), requiredTransformedModelTypes, - null); + // TODO: Readd the transformation service to the evaluators. + // transformedModels = + // getService(IExplorationTransformationService.class).getTransformedModels( + // DSE_INTERNAL, null, phenotypeTypeMap.asExplorationEncoding(), + // systemModelAdapter.getInputModels(), requiredTransformedModelTypes, + // null); } catch(Exception e) { // TODO Auto-generated catch block e.printStackTrace(); @@ -254,8 +245,7 @@ public abstract class CompositeEvaluatorBase<P extends CompositePhenotype<?>> */ private <G extends Genotype, CP extends CompositePhenotype<?>, SP extends ComposablePhenotype<G>> FlatPhenotypeMap<Phenotype> constructPhenotypeMap(CP phenotype) { - FlatPhenotypeMap<Phenotype> phenotypeTypeMap = - new FlatPhenotypeMap<Phenotype>(systemModelAdapter); + FlatPhenotypeMap<Phenotype> phenotypeTypeMap = new FlatPhenotypeMap<>(); @SuppressWarnings("unchecked") LinkedList<SP> subPhenotypes = new LinkedList<SP>((Collection<? extends SP>)phenotype.getSubPhenotypes()); while(!subPhenotypes.isEmpty()) { diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/graph/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/graph/.ratings index 14cc86ad..2d24dbfd 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/graph/.ratings +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/graph/.ratings @@ -1,2 +1,2 @@ -DecoderDependencyGraph.java e0f55416161a46d7fb0663fe3d358aacd3db32ae RED +DecoderDependencyGraph.java a67fe21e5c6e54e426fd3a8502b92275592794ca RED DecoderEdge.java 364767c6d4b15b02830e1c58a47f28f6e3bf3fcb RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/graph/DecoderDependencyGraph.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/graph/DecoderDependencyGraph.java index 02273be7..8c706a82 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/graph/DecoderDependencyGraph.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/graph/DecoderDependencyGraph.java @@ -26,7 +26,6 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegen import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.genotype.ComposableGenotype; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.ComposablePhenotype; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.decode.ConstraintGenerationDecoder; -import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; import org.fortiss.af3.exploration.alg.graph.DependencyGraph; import org.fortiss.af3.exploration.alg.service.IExplorationEncoding; import org.opt4j.core.problem.Creator; @@ -39,20 +38,13 @@ import org.opt4j.core.problem.Decoder; */ public class DecoderDependencyGraph extends DependencyGraph<IExplorationEncoding, ComposableDecoder<ComposableGenotype, ComposablePhenotype<?>>, DecoderEdge<ComposableGenotype, ComposablePhenotype<?>>> { - - /** - * Set of {@link IExplorationEncoding} types that can be obtained from the SystemModelAdapter. - */ - protected Set<Class<? extends IExplorationEncoding>> sysModelEncodings; - + // TODO: Move to the parent? /** Internal graph representation for the execution order of {@link Creator}s. */ private HashSet<ComposableCreator<?>> registeredCreators = new HashSet<>(); /** Constructor. */ - public DecoderDependencyGraph(SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter, - Set<Class<? extends IExplorationEncoding>> pTypeCollection) { + public DecoderDependencyGraph(Set<Class<? extends IExplorationEncoding>> pTypeCollection) { super(pTypeCollection, IExplorationEncoding.class); - sysModelEncodings = systemModelAdapter.getRegisteredEncodingTypes(); } /** {@inheritDoc} */ @@ -65,8 +57,7 @@ public class DecoderDependencyGraph extends if(!dependencyDagGraph .containsVertex((Class<? extends IExplorationEncoding>)reqEnc) && !registeredCreators.stream() - .anyMatch(c -> c.getCreatedEncodingType().equals(reqEnc)) && - !sysModelEncodings.contains(reqEnc)) { + .anyMatch(c -> c.getCreatedEncodingType().equals(reqEnc))) { throw new MissingDependencyException(dec, (Class<? extends IExplorationEncoding>)reqEnc, ""); } diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/phenotype/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/phenotype/.ratings index 307eb0fd..97ce0da1 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/phenotype/.ratings +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/phenotype/.ratings @@ -1,5 +1,5 @@ ComposablePhenotype.java c480ccbf2ed93bdb5a0ec5461629475bff033e18 RED CompositePhenotype.java 8706a2d636e49472dd5160dc8a0c871801f4fb69 RED CompositePhenotypeBase.java dc30951b9b55fef23ba657c54fef512a8886ec93 RED -FlatPhenotypeMap.java dd51eb1e3ed9a0c4ec67eac8c28342f0e98735fe RED +FlatPhenotypeMap.java f6d74992bbdcc84d358c27616b13c512ef7841b1 RED Phenotype.java 3b01d5fc912747b3409fe2868447f395dafd860c RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/phenotype/FlatPhenotypeMap.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/phenotype/FlatPhenotypeMap.java index 7c5e0ac8..f1145eab 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/phenotype/FlatPhenotypeMap.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/phenotype/FlatPhenotypeMap.java @@ -16,10 +16,13 @@ package org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype; import java.util.Collection; +import java.util.HashMap; +import java.util.Map; -import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.create.InitialEncodingProvider; import org.fortiss.af3.exploration.alg.service.ExplorationEncodingMap; import org.fortiss.af3.exploration.alg.service.IExplorationEncoding; +import org.opt4j.core.problem.Creator; /** * Allows to capture the already created/decoded {@link Phenotype}s and pass them to their successor @@ -30,11 +33,12 @@ import org.fortiss.af3.exploration.alg.service.IExplorationEncoding; * @author diewald */ public class FlatPhenotypeMap<T extends Phenotype> extends ExplorationEncodingMap<T> { - - /** Constructor. */ - public FlatPhenotypeMap(SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter) { - super(systemModelAdapter); - } + /** + * Maintains a map of {@link IExplorationEncoding}s that can be provided by {@link Creator}s by + * their corresponding types. + */ + private Map<Class<? extends IExplorationEncoding>, IExplorationEncoding> inputEncodings = + new HashMap<>(); /** * Returns the {@link Phenotype} of the given type. If no {@link Phenotype} of the given type @@ -47,20 +51,17 @@ public class FlatPhenotypeMap<T extends Phenotype> extends ExplorationEncodingMa if(IExplorationEncoding.class.isAssignableFrom(subGenotypeClass)) { @SuppressWarnings("unchecked") Class<IExplorationEncoding> inputEncoding = (Class<IExplorationEncoding>)subGenotypeClass; - assert (systemModelAdapter != null) : "The SystemModelAdapter is required for CompositePhenotypes as an alternate source of input encodings."; @SuppressWarnings("unchecked") P encoding = - (P)systemModelAdapter.getInputEncoding(inputEncoding); + (P)InitialEncodingProvider.getInstance().getInputEncoding(inputEncoding); phenotype = encoding; } } - return phenotype; } /** * Determines whether {@code this} {@link FlatPhenotypeMap} contains {@link ComposablePhenotype} - * s of all given types, or it is able to retrieve the demanded types via the - * {@link SystemModelAdapter}. + * s of all given types, or it is able to retrieve the demanded types via the {@link Creator}s. */ @SuppressWarnings("unchecked") public <P extends T> boolean containsAll(Collection<Class<?>> phenoCollection) { diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/taskmapping/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/taskmapping/.ratings index 5d5b5e77..2b396e58 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/taskmapping/.ratings +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/taskmapping/.ratings @@ -1,4 +1,4 @@ -MutateAllocation.java 39fdbaf0e9bf57743f157a561fa954f4bd907871 RED +MutateAllocation.java 0994667e10022be731b4cb6c04a59d0b562eb575 RED MutateRedundancy.java 916b93f4ee2eb953033daa38273cc2360234c89e RED MutateRedundancyDecrement.java 38c930eb6d5648d58e31d5c0bb39f7edf50f9a87 RED MutateRedundancyIncrement.java 5256080dcaab5482c33915fd8c78e0bb3c3fbcd6 RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/taskmapping/MutateAllocation.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/taskmapping/MutateAllocation.java index b63e0a89..7694d58c 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/taskmapping/MutateAllocation.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/taskmapping/MutateAllocation.java @@ -107,9 +107,11 @@ public class MutateAllocation<S extends TaskMappingEntry<ITaskAdapter<?>, Partit // This respects {@link ExcludeDeploymentConstraint}s. if(encoding.hasLimitedDeployment(deployableComponent)) { - List<IExecutionUnitAdapter<?>> physExecUnits = - new ArrayList<>(encoding.getAllowedAllocations(deployableComponent)); - List<Partition> targets = encoding.getAllowedPartitionTargets(physExecUnits); + // List<IExecutionUnitAdapter<?>> physExecUnits = + // new ArrayList<>(encoding.getAllowedAllocations(deployableComponent)); + // List<Partition> targets = encoding.getAllowedPartitionTargets(physExecUnits); + List<Partition> targets = new ArrayList<>((Collection<Partition>)(Collection<?>)encoding + .getAllowedAllocations(deployableComponent)); int selExecU = max(0, rand.nextInt(targets.size()) - 1); selectedEntry.resetTarget(targets.get(selExecU)); } else { diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/.ratings index 4027b6e6..5609b269 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/.ratings +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/.ratings @@ -1,6 +1,6 @@ ArchExpSubDecoder.java b53315dae39fd6afdae22e2412af5cf9dff5e574 RED -ArchitectureDecoder.java 676d76512f665c3d52ff06a84c65f7d272e33975 RED -ArchitectureExplorationProblemModule.java ebed1fbcb71842bf8f2940c5f6a266568acd8184 RED +ArchitectureDecoder.java 9a002b7e7ecf05835276dd0302faf0bd7c3aa656 RED +ArchitectureExplorationProblemModule.java 650201476e17b6c7df1b9844e69fe979d20f04f6 RED DseProblemModuleBase.java ad44baebb3c417c3778672f10ae4f3e61f1fa932 RED EvaluatorWrapper.java 47ff0b2df7f75e232fa269b55750f0e2c408b08c RED ExplorationGoalPriorityMultiEvaluator.java 0f900f86c8adc14b69d95bb8eb3a34ea1ed2d41e RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/ArchitectureDecoder.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/ArchitectureDecoder.java index cdd3b5ae..bae36d87 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/ArchitectureDecoder.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/ArchitectureDecoder.java @@ -23,7 +23,6 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegen import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.graph.DecoderDependencyGraph; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.ComposablePhenotype; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.solution.ArchitectureSolution; -import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; import org.opt4j.core.Genotype; import org.opt4j.core.genotype.CompositeGenotype; import org.opt4j.core.problem.Decoder; @@ -41,9 +40,8 @@ public class ArchitectureDecoder /** Default constructor that makes the input models accessible for the decoders. */ @Inject - public ArchitectureDecoder(SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter, - DecoderDependencyGraph execdepGraph) { - super(systemModelAdapter, execdepGraph); + public ArchitectureDecoder(DecoderDependencyGraph execdepGraph) { + super(execdepGraph); } /** {@inheritDoc} */ diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/ArchitectureExplorationProblemModule.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/ArchitectureExplorationProblemModule.java index 4bd9474e..6a8f34a2 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/ArchitectureExplorationProblemModule.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/ArchitectureExplorationProblemModule.java @@ -37,11 +37,14 @@ import org.fortiss.af3.exploration.moea.model.DseSpecification; public class ArchitectureExplorationProblemModule extends DseProblemModuleBase<ArchitectureExplorationEncoding, ArchitectureSolution, ArchitectureDecoder> { + DSEFactory dseFactory = DSEFactory.getInstance(); + /** Constructor. */ public ArchitectureExplorationProblemModule(DseSpecification dse, SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter, Set<Class<? extends IExplorationEncoding>> requestedSolutions) { super(dse, systemModelAdapter, requestedSolutions); + dseFactory.init(systemModelAdapter); } /** @@ -54,22 +57,20 @@ public class ArchitectureExplorationProblemModule extends * added separately. */ DSEFactory dseFactory = DSEFactory.getInstance(); + dseFactory.init(systemModelAdapter); - ArchitectureEvaluator archEvaluator = - dseFactory.createArchitectureEvaluator(systemModelAdapter); + ArchitectureEvaluator archEvaluator = dseFactory.createArchitectureEvaluator(); // Dependency graph for the execution order. - DecoderDependencyGraph execDepGraph = - new DecoderDependencyGraph(systemModelAdapter, requestedSolutions); + DecoderDependencyGraph execDepGraph = new DecoderDependencyGraph(requestedSolutions); // TODO: construct the execution dependency graph elsewhere? - bindProblem(dseFactory.createArchitectureExplorationCreator(dse, systemModelAdapter), - dseFactory.createArchitectureDecoder(systemModelAdapter, execDepGraph), - archEvaluator); + bindProblem(dseFactory.createArchitectureExplorationCreator(), + dseFactory.createArchitectureDecoder(execDepGraph), archEvaluator); // Create/Bind the subproblems of the architectural exploration problem. try { - dseFactory.createSubProblems(this, dse, systemModelAdapter, execDepGraph); + dseFactory.createSubProblems(this, dse, execDepGraph); } catch(Exception e) { throw new RuntimeException("Failed setting up the DSE Problem instance.", e); } diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatetaskgraph/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatetaskgraph/.ratings index db79dd4c..0aab7652 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatetaskgraph/.ratings +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatetaskgraph/.ratings @@ -1,2 +1,2 @@ -InstantiatedTaskMappingDecoder.java bfd10ee690ab13330e70c87fced365e66403d6a6 RED -InstantiatedTaskMappingDecoderAcyclic.java 32e5e157dd67b7b5db99fb72a86440f83dd8605f RED +InstantiatedTaskMappingDecoder.java fabe128ecd7f2a651384e4a22c8035c399226a2e RED +InstantiatedTaskMappingDecoderAcyclic.java 9356d1cba4e983db4558b6f5b9b39dde876dc396 RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatetaskgraph/InstantiatedTaskMappingDecoder.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatetaskgraph/InstantiatedTaskMappingDecoder.java index 8a8aaebd..07d14c45 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatetaskgraph/InstantiatedTaskMappingDecoder.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatetaskgraph/InstantiatedTaskMappingDecoder.java @@ -77,7 +77,7 @@ public class InstantiatedTaskMappingDecoder<T extends InstantiatedTaskMappingEnt TaskGraphInstantiator<DefaultTaskGraph<?>> tgInstatiator = new TaskGraphInstantiator<>(tgColl, genotype); InstantiatedTaskGraphEncoding<T, C> itgEnc = new InstantiatedTaskGraphEncoding<T, C>( - systemModelAdapter, tgInstatiator.createMultipleInstanceTaskGraphs(tgColl)); + tgInstatiator.createMultipleInstanceTaskGraphs(tgColl)); if(sfEnc != null) { removeInterSafetyChannelSignals(sfEnc, itgEnc); @@ -128,13 +128,13 @@ public class InstantiatedTaskMappingDecoder<T extends InstantiatedTaskMappingEnt ITaskAdapter<?> outputUnit = sfEntry.getSafetyFunctionAdapter().getOutputComponent(); // TODO: only for a single diag unit. - Collection<ITaskAdapter<?>> realizingSFUnits = itgEnc.getDeployableComponents() + Collection<ITaskAdapter<?>> realizingSFUnits = itgEnc.getTasks() .stream().filter(d -> sfUnits.contains(d.getReplacedComponent())) .collect(Collectors.toList()); - Collection<ITaskAdapter<?>> realizingDiagUnits = itgEnc.getDeployableComponents() + Collection<ITaskAdapter<?>> realizingDiagUnits = itgEnc.getTasks() .stream().filter(d -> diagUnits.contains(d.getReplacedComponent())) .collect(Collectors.toList()); - Collection<ITaskAdapter<?>> outComps = itgEnc.getDeployableComponents().stream() + Collection<ITaskAdapter<?>> outComps = itgEnc.getTasks().stream() .filter(d -> d.getObject() == outputUnit.getObject()) .collect(Collectors.toList()); diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatetaskgraph/InstantiatedTaskMappingDecoderAcyclic.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatetaskgraph/InstantiatedTaskMappingDecoderAcyclic.java index 5aaaf2f7..07e216c2 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatetaskgraph/InstantiatedTaskMappingDecoderAcyclic.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatetaskgraph/InstantiatedTaskMappingDecoderAcyclic.java @@ -68,8 +68,7 @@ public class InstantiatedTaskMappingDecoderAcyclic<T extends InstantiatedTaskMap assert (itgEnc != null) : "The required abstract task graph encoding could not be found in the map of already decoded phenotypes."; InstantiatedAcyclicTaskGraphEncoding<T, C> iAtgEnc = - new InstantiatedAcyclicTaskGraphEncoding<T, C>(systemModelAdapter, - itgEnc.getTaskGraphs()); + new InstantiatedAcyclicTaskGraphEncoding<T, C>(itgEnc.getTaskGraphs()); return iAtgEnc; } diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/.ratings index f008274a..c764bfa6 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/.ratings +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/.ratings @@ -1,4 +1,4 @@ SFEncodingDecoder.java 8e1594c92aa5e0c23d07038bb63db5b483c4f727 RED -SFGraphDecoder.java bad196d3f1f5aca199765783ae80ca30981bc84e RED -SFMappingConstraintDecoder.java 567af65d0f1344a22e5d0fb5ccf6b9beedd631d4 RED -SFMappingDecoder.java 12bccf9c5c44e03a4268b04bf98f29b94a39ed1e RED +SFGraphDecoder.java 2b022c6eaf84224576a24b816cfc5a47c09635da RED +SFMappingConstraintDecoder.java b347e65e6b805103e133386ef76c2297a829559a RED +SFMappingDecoder.java ec3d91b8cacb5743517d87a1c9eed347549d8acc RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/SFGraphDecoder.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/SFGraphDecoder.java index a0d0ba4c..320c2627 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/SFGraphDecoder.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/SFGraphDecoder.java @@ -33,7 +33,7 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegen import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.ArchExpSubDecoder; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ITaskAdapter; -import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; +import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.TaskGraph; import com.google.inject.Inject; @@ -46,14 +46,9 @@ import com.google.inject.Inject; public class SFGraphDecoder<C> extends ComposableDecoderBase<SafetyFunctionArchEncoding<C>, SafeTaskGraphEncoding<C>> implements ArchExpSubDecoder { - - /** Reference to the {@link SystemModelAdapter} that handles input models for the DSE. */ - SystemModelAdapter<C, ?, ?, ?, ?, ?, ?> systemModelAdapter; - /** Constructs a new decoder that instantiates {@link AbstractTaskMappingEncoding}. */ @Inject - public SFGraphDecoder(SystemModelAdapter<C, ?, ?, ?, ?, ?, ?> systemModelAdapter) { - this.systemModelAdapter = systemModelAdapter; + public SFGraphDecoder() { } /** {@inheritDoc} */ @@ -65,7 +60,9 @@ public class SFGraphDecoder<C> } // TODO: we should dynamically retrieve the encoding here, since the statement below assumes // that this decoding step is performed before others. - SafeTaskGraphEncoding<C> encoding = new SafeTaskGraphEncoding<>(systemModelAdapter); + // FIXME: Find a way to pass the original taks graph. We might have a circular dependency + // here. + SafeTaskGraphEncoding<C> encoding = new SafeTaskGraphEncoding<>(Collections.emptySet()); for(SafetyFunctionArchEntry<C> sFAEntry : genotype.getAllEntries()) { boolean diagPresent = sFAEntry.isDiagnosicUnitPresent(); @@ -123,12 +120,15 @@ public class SFGraphDecoder<C> * Adds the given collection of {@link ITaskAdapter}s from the * {@link SafetyFunctionArchEntry} to the {@link TaskGraphEncoding}. */ - private void addTasks(Collection<ITaskAdapter<C>> deplComp, SafeTaskGraphEncoding<C> encoding) { + private void addTasks(Collection<ITaskAdapter<C>> tasks, SafeTaskGraphEncoding<C> encoding) { // Add the Components. - deplComp.stream().forEach(task -> encoding.addTask(task)); + tasks.stream().forEach(task -> encoding.addTask(task)); // Add the corresponding signals. - deplComp.stream().forEach(task -> encoding.addSignalsOf(task)); + for(ITaskAdapter<C> task : tasks) { + TaskGraph tg = encoding.getOriginalTaskGraph(task); + encoding.addSignalsOf(task, tg); + } } /** Removes the diagnostic units from the {@link TaskGraphEncoding}. */ diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/SFMappingConstraintDecoder.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/SFMappingConstraintDecoder.java index 1a28d877..9d4b0183 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/SFMappingConstraintDecoder.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/SFMappingConstraintDecoder.java @@ -31,7 +31,7 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegen import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.decode.ConstraintGenerationDecoder; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ISafetyFunctionAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ITaskAdapter; -import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; +import org.fortiss.af3.platform.hierarchic.model.tile.Tile; import com.google.inject.Inject; @@ -44,15 +44,9 @@ import com.google.inject.Inject; public class SFMappingConstraintDecoder<C> extends ComposableDecoderBase<SafetyFunctionArchEncoding<C>, AbstractTaskMappingEncoding> implements ConstraintGenerationDecoder { - - // TODO: replace with a dynamic mechanism for the retrieval of deployable components. - /** Reference to the {@link SystemModelAdapter} that handles input models for the DSE. */ - private SystemModelAdapter<C, ?, ?, ?, ?, ?, ?> systemModelAdapter; - /** Constructs a new decoder that instantiates {@link AbstractTaskMappingEncoding}. */ @Inject - public SFMappingConstraintDecoder(SystemModelAdapter<C, ?, ?, ?, ?, ?, ?> systemModelAdapter) { - this.systemModelAdapter = systemModelAdapter; + public SFMappingConstraintDecoder() { } /** {@inheritDoc} */ @@ -67,8 +61,6 @@ public class SFMappingConstraintDecoder<C> public AbstractTaskMappingEncoding updateComposable(SafetyFunctionArchEncoding<C> inGenotype, AbstractTaskMappingEncoding outGenotype, FlatPhenotypeMap<Phenotype> decodedPhenotypes) { - Collection<ITaskAdapter<C>> deplComps = new HashSet<>(); - deplComps.addAll(systemModelAdapter.getDeployableComponents()); for(SafetyFunctionArchEntry<C> sFAEntry : inGenotype.getAllEntries()) { int channelNumber = sFAEntry.getNumChannels(); @@ -100,13 +92,13 @@ public class SFMappingConstraintDecoder<C> ISafetyFunctionAdapter<C> sfAdp = sfEntry.getSafetyFunctionAdapter(); // TODO: We should not be aware of the Tile type here. - sepConstraints.add(new InternalSeparationConstraint(sfAdp.getRealizingComponents(), - systemModelAdapter.getFaultContainmentRegion())); - sepConstraints.add(new InternalSeparationConstraint(sfAdp.getDiagnosticComponents(), - systemModelAdapter.getFaultContainmentRegion())); - sepConstraints - .add(new InternalSeparationConstraint(Arrays.asList(sfAdp.getOutputComponent()), - systemModelAdapter.getFaultContainmentRegion())); + // FIXME: We need a "better" machanism than the fault containment region. Also, + sepConstraints.add( + new InternalSeparationConstraint(sfAdp.getRealizingComponents(), Tile.class)); + sepConstraints.add( + new InternalSeparationConstraint(sfAdp.getDiagnosticComponents(), Tile.class)); + sepConstraints.add(new InternalSeparationConstraint( + Arrays.asList(sfAdp.getOutputComponent()), Tile.class)); } return sepConstraints; diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/SFMappingDecoder.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/SFMappingDecoder.java index a4e23b92..cdea51a4 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/SFMappingDecoder.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/SFMappingDecoder.java @@ -38,7 +38,6 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegen import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.decode.ConstraintGenerationDecoder; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ITaskAdapter; -import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.mapping.IMappingEntry; import org.fortiss.af3.exploration.alg.exception.ExplorationException; @@ -52,15 +51,9 @@ import com.google.inject.Inject; public class SFMappingDecoder<C> extends ComposableDecoderBase<SafetyFunctionArchEncoding<C>, AbstractTaskMappingEncoding> implements ConstraintGenerationDecoder { - - // TODO: replace with a dynamic mechanism for the retrieval of deployable components. - /** Reference to the {@link SystemModelAdapter} that handles input models for the DSE. */ - private SystemModelAdapter<C, ?, ?, ?, ?, ?, ?> systemModelAdapter; - /** Constructs a new decoder that instantiates {@link AbstractTaskMappingEncoding}. */ @Inject - public SFMappingDecoder(SystemModelAdapter<C, ?, ?, ?, ?, ?, ?> systemModelAdapter) { - this.systemModelAdapter = systemModelAdapter; + public SFMappingDecoder() { } /** @@ -93,8 +86,6 @@ public class SFMappingDecoder<C> } // TODO: replace with a dynamic mechanism for the retrieval of deployable components. - Collection<ITaskAdapter<C>> deplComps = new HashSet<>(); - deplComps.addAll(systemModelAdapter.getDeployableComponents()); for(SafetyFunctionArchEntry<C> sFAEntry : inGenotype.getAllEntries()) { boolean diagPresent = sFAEntry.isDiagnosicUnitPresent(); int channelNumber = sFAEntry.getNumChannels(); diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/instantiate/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/instantiate/.ratings index 784ff100..b74d77f8 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/instantiate/.ratings +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/instantiate/.ratings @@ -1,4 +1,4 @@ AbstractTaskMappingDecoder.java edd7bd622640dfd8359d4f55b8f1f74839970823 RED -FailSilentAbstractTaskMappingDecoder.java 449364213ecc7a68d1eb2c42b710dea35efa073a RED -FaultDetectionVotingAbstractTaskMappingDecoder.java 80f4f41e445d7ed6decfd6f3125e14b355ee7e15 RED +FailSilentAbstractTaskMappingDecoder.java a443781caf223417b77a6163dcbb4d7df26f63ab RED +FaultDetectionVotingAbstractTaskMappingDecoder.java 2ab809a5ca6bd2530d0c8eec167d4aa0d9b1ab37 RED TaskInstanceResourceAlignmentDecoder.java 116f72a16a02c9aac617cc4c9684cd583b87e1b6 RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/instantiate/FailSilentAbstractTaskMappingDecoder.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/instantiate/FailSilentAbstractTaskMappingDecoder.java index c01bd795..edb981d8 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/instantiate/FailSilentAbstractTaskMappingDecoder.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/instantiate/FailSilentAbstractTaskMappingDecoder.java @@ -61,8 +61,7 @@ public class FailSilentAbstractTaskMappingDecoder extends PartitionMappingEncoding partEnc = phenotypeTypeMap.getEncoding(PartitionMappingEncoding.class); assert (partEnc != null) : "The required partition mapping encoding could not be found in the map of already decoded phenotypes."; - return new FailSilentTaskMappingEncoding(explorationDefinition, systemModelAdapter, partEnc, - atgEnc, genotype); + return new FailSilentTaskMappingEncoding(explorationDefinition, partEnc, atgEnc, genotype); } // TODO: Abstract to the AbstractTaskMappingDecoder. diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/instantiate/FaultDetectionVotingAbstractTaskMappingDecoder.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/instantiate/FaultDetectionVotingAbstractTaskMappingDecoder.java index 8b31cecb..eee6b950 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/instantiate/FaultDetectionVotingAbstractTaskMappingDecoder.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/instantiate/FaultDetectionVotingAbstractTaskMappingDecoder.java @@ -61,8 +61,8 @@ public class FaultDetectionVotingAbstractTaskMappingDecoder extends PartitionMappingEncoding partEnc = phenotypeTypeMap.getEncoding(PartitionMappingEncoding.class); assert (partEnc != null) : "The required partition mapping encoding could not be found in the map of already decoded phenotypes."; - return new FaultDetectionVotingTaskMappingEncoding(explorationDefinition, - systemModelAdapter, partEnc, atgEnc, genotype); + return new FaultDetectionVotingTaskMappingEncoding(explorationDefinition, partEnc, atgEnc, + genotype); } /** diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/.ratings index aa2879b2..673026ae 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/.ratings +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/.ratings @@ -1,5 +1,5 @@ ArchExpSubEvaluator.java 3516cc5a58514e47f965920012cf0cd738ddbaa4 RED -ArchitectureEvaluator.java cf3c9627aa7d4b00413fc3810a42769709432390 RED +ArchitectureEvaluator.java b0c504d4b75bd7286c22713282a5ae38f27db231 RED ExplorationTargetEvaluatorBase.java 1b45c04cb27a911806682b9f5ee18bcaa5f0ee0d RED ExpressionEvaluatorBase.java 920ee255df1861cbad8db5e94e6365d1d69d5fa4 RED ITopLevelEvaluator.java 032ec6375efff2234664690f271cec98816abcc5 RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/ArchitectureEvaluator.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/ArchitectureEvaluator.java index 969118d7..bd4d481f 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/ArchitectureEvaluator.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/ArchitectureEvaluator.java @@ -39,8 +39,8 @@ public class ArchitectureEvaluator extends CompositeEvaluatorBase<ArchitectureSo * Default constructor which requires a {@link SystemModelAdapter} to access the input models. */ @Inject - public ArchitectureEvaluator(SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter) { - super(systemModelAdapter); + public ArchitectureEvaluator() { + super(); } /** {@inheritDoc} */ diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/.ratings index 9ee1c142..f821eb6d 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/.ratings +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/.ratings @@ -1,2 +1,2 @@ -FailSilentExecModelFactory.java 64552c491927f16db7f63406347f0338a0845c06 RED -FaultDetectionVotingExecModelFactory.java 3f06e1e2b33abe9c9830191979da49219a860d8e RED +FailSilentExecModelFactory.java bd1e62664d97539f19cd5b631c02fc4323586af2 RED +FaultDetectionVotingExecModelFactory.java 0bbb870e645aa1dda912ce4a2cc9cf7157414681 RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/FailSilentExecModelFactory.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/FailSilentExecModelFactory.java index cb5d5816..810396b4 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/FailSilentExecModelFactory.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/FailSilentExecModelFactory.java @@ -84,10 +84,8 @@ public class FailSilentExecModelFactory /** Creates a TaskMappingCreator that matches the given execution model. */ @Override public TaskMappingCreator<FailSilentTaskMappingEntry, FailSilentTaskMappingEncoding> - createTaskMappingCreator(DseSpecification dse, - SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter, - DecoderDependencyGraph execDepGraph) { - return new FailSilentTaskMappingCreator(dse, systemModelAdapter, execDepGraph); + createTaskMappingCreator(DseSpecification dse, DecoderDependencyGraph execDepGraph) { + return new FailSilentTaskMappingCreator(dse, execDepGraph); } /* Construct execution model specific operators. */ diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/FaultDetectionVotingExecModelFactory.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/FaultDetectionVotingExecModelFactory.java index 2e62878a..03c96e2c 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/FaultDetectionVotingExecModelFactory.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/FaultDetectionVotingExecModelFactory.java @@ -87,10 +87,8 @@ public class FaultDetectionVotingExecModelFactory extends /** Creates a TaskMappingCreator that matches the given execution model. */ @Override public TaskMappingCreator<FaultDetectionVotingTaskMappingEntry, FaultDetectionVotingTaskMappingEncoding> - createTaskMappingCreator(DseSpecification dse, - SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter, - DecoderDependencyGraph execDepGraph) { - return new FaultDetectionVotingTaskMappingCreator(dse, systemModelAdapter, execDepGraph); + createTaskMappingCreator(DseSpecification dse, DecoderDependencyGraph execDepGraph) { + return new FaultDetectionVotingTaskMappingCreator(dse, execDepGraph); } /* Construct execution model specific operators. */ 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 c40ec268..aeefd7b7 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 @@ -14,4 +14,4 @@ ISignalAdapter.java 4f04154c5802a4f1a5469df90652852e16727421 RED ITaskAdapter.java 97ad40c0ca14be2fb4fd070214a3d6ebe5be914a RED ITransmissionUnitAdapter.java 8965b73bfe9ef232a2a6d5427f7001761716d583 RED InternalComponentParameters.java 2b19f4eeddee84e4c6e558ed9a1613cba33b7665 RED -SystemModelAdapter.java 393b4017059b41dc296d881a0fe39cfc83ccaa39 RED +SystemModelAdapter.java d6ce52abad1f440e9df1c6a3e6bb98cfcfc86bfd RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/SystemModelAdapter.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/SystemModelAdapter.java index def49c10..5b01009a 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/SystemModelAdapter.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/SystemModelAdapter.java @@ -33,17 +33,17 @@ import java.util.stream.Collectors; import org.eclipse.emf.ecore.EObject; import org.fortiss.af3.component.model.Component; import org.fortiss.af3.component.model.ComponentArchitecture; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.create.InitialEncodingProvider; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.platform.PlatformCommunicationGraphEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph.AbstractTaskGraphEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.abstractmapping.AbstractTaskMappingEncoding; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IResourceConnectionAdapter.ConnectionType; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.AcyclicTaskGraph; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.DefaultTaskGraph; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.SignalAdapterWeightedEdge; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.TaskGraph; import org.fortiss.af3.exploration.alg.exception.InvalidTimingModelException; -import org.fortiss.af3.exploration.alg.guava.MutableSubClassToInstanceMap; -import org.fortiss.af3.exploration.alg.guava.SubClassToInstanceMap; import org.fortiss.af3.exploration.alg.service.IExplorationEncoding; import org.fortiss.af3.platform.model.ExecutionUnit; import org.fortiss.af3.platform.model.IPlatformArchitectureElement; @@ -55,11 +55,9 @@ import org.fortiss.tooling.base.model.element.IConnection; import org.fortiss.tooling.base.model.element.IConnector; import org.fortiss.tooling.base.model.element.IHierarchicElement; import org.fortiss.tooling.base.model.element.IModelElement; -import org.jgrapht.DirectedGraph; import org.jgrapht.Graphs; import org.jgrapht.alg.ConnectivityInspector; -import org.jgrapht.graph.DefaultDirectedGraph; -import org.jgrapht.graph.DefaultEdge; +import org.opt4j.core.Genotype; import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; @@ -83,12 +81,6 @@ public class SystemModelAdapter<C, E, SO, SI, G, TR, M> { /** Platform architecture of this {@link SystemModelAdapter}. */ protected IPlatformArchitectureAdapter<?> platformArchitecture; - /** - * Input models that can be retrieved via {@code this} {@link SystemModelAdapter}. It references - * the original - */ - protected SubClassToInstanceMap<EObject> inputModels = MutableSubClassToInstanceMap.create(); - /** Deployable software components, to be mapped to deployment targets provided by platform. */ protected Collection<ITaskAdapter<C>> tasks; @@ -211,59 +203,6 @@ public class SystemModelAdapter<C, E, SO, SI, G, TR, M> { /** Defines the fault containment region defined for the target {@link PlatformArchitecture}. */ protected Class<? extends IPlatformResource> faultContainmentRegion; - /** - * Maintains a map of {@link IExplorationEncoding}s that can be provided by {@code this} - * {@link SystemModelAdapter} by their corresponding types. - */ - private Map<Class<? extends IExplorationEncoding>, IExplorationEncoding> inputEncodings = - new HashMap<>(); - - /** Registers a given input encoding with {@code this} {@link SystemModelAdapter}. */ - protected <T extends IExplorationEncoding> void registerInputEncoding(T encoding) { - @SuppressWarnings("unchecked") Class<T> encodingType = (Class<T>)encoding.getClass(); - assert (!inputEncodings.containsKey( - encodingType)) : "You are trying to add an encoding to the input encoding whose type is already registered. This is not supported"; - inputEncodings.put(encodingType, encoding); - } - - /** Returns the input encoding of the given type. */ - @SuppressWarnings("unchecked") - public <T extends IExplorationEncoding> T getInputEncoding(Class<T> encodingType) { - return (T)inputEncodings.get(encodingType); - } - - /** - * Returns the collection of {@link IExplorationEncoding} types that are availably through - * {@code this} {@link SystemModelAdapter}. - */ - public Set<Class<? extends IExplorationEncoding>> getRegisteredEncodingTypes() { - return inputEncodings.keySet(); - } - - /** Returns the input models accessible via {@code this} {@link SystemModelAdapter}. */ - public SubClassToInstanceMap<EObject> getInputModels() { - return inputModels; - } - - /** - * Adds the given model to the input models that can be obtained via {@code this} - * {@link SystemModelAdapter}. - */ - @SuppressWarnings("unchecked") - public <T extends EObject> void putInputModel(Class<? extends T> modelType, T inputModel) { - inputModels.putInstance((Class<T>)modelType, inputModel); - } - - /** - * Creates and registers an {@link AbstractTaskGraphEncoding} with @code this} - * {@link SystemModelAdapter}. - */ - protected void createAbstractTaskGraphEncoding() { - AbstractTaskGraphEncoding<AbstractTaskMappingEncoding, C> atgEnc = - new AbstractTaskGraphEncoding<>(this); - registerInputEncoding(atgEnc); - } - /** * Setups the list of {@link ITaskAdapter}s that are scheduleable by a * time-triggered scheduler. @@ -358,6 +297,22 @@ public class SystemModelAdapter<C, E, SO, SI, G, TR, M> { return independentTaskGraphs; } + /** + * Creates the initial set of encodings that can be constructed from the input system models. + * While {@link Genotype}s and {@link Phenotype}s have a special meaning in the optimizers' + * context, {@link IExplorationEncoding}s are "only" system abstraction without any of the + * aforementioned meanings. + */ + @SuppressWarnings("unchecked") + protected void createInitialEncodings() { + InitialEncodingProvider initEncProvider = InitialEncodingProvider.getInstance(); + initEncProvider.clearEncodings(); + + initEncProvider.registerInputEncoding( + new AbstractTaskGraphEncoding<AbstractTaskMappingEncoding, C>( + (Collection<? extends DefaultTaskGraph<?>>)getTaskGraphs())); + } + /** * Adds the given collection of {@link ISafetyFunctionAdapter}s to {@code this} * {@link SystemModelAdapter} that represents the input system models. In contrast to other @@ -442,72 +397,6 @@ public class SystemModelAdapter<C, E, SO, SI, G, TR, M> { } } - /** - * Creates the {@link PlatformCommunicationGraphEncoding} that is used to determine the routing - * of - * messages between {@link ITaskAdapter}s and their respective - * {@link IExecutionUnitAdapter}s. - */ - protected void setupPlatformGraph() { - platformCommunicationGraph = new PlatformCommunicationGraphEncoding(this, createGraph()); - } - - /** - * Creates the communication (or connection) graph which is implicitly given by the platform - * referenced in the {@link SystemModelAdapter}. This graph is used for routing messages. - */ - public DirectedGraph<IResourceAdapter<?>, DefaultEdge> createGraph() { - DirectedGraph<IResourceAdapter<?>, DefaultEdge> tempPlatformCommGraph = - new DefaultDirectedGraph<IResourceAdapter<?>, DefaultEdge>(DefaultEdge.class); - DirectedGraph<IResourceAdapter<?>, DefaultEdge> platformGraph = - new DefaultDirectedGraph<IResourceAdapter<?>, DefaultEdge>(DefaultEdge.class); - - // Add all resources present in the platform as vertices to the "connection graph" - for(IResourceAdapter<?> resource : getDeploymentTargets()) { - tempPlatformCommGraph.addVertex(resource); - } - for(IResourceAdapter<?> resource : getMemoryUnits()) { - tempPlatformCommGraph.addVertex(resource); - } - for(IResourceAdapter<?> resource : getGatewayUnits()) { - tempPlatformCommGraph.addVertex(resource); - } - for(IResourceAdapter<?> resource : getTransmissionUnits()) { - tempPlatformCommGraph.addVertex(resource); - } - - // Successively connect the resources in the graph. The edges are given within the - // collection resource connectors are assumed to be fully connected. - for(IResourceConnectionAdapter connection : platformConnections) { - // We add edges for each receiver in order to support broadcast connections - for(IResourceAdapter<?> currentReceiverResource : connection.getTargetResources()) { - // If the current resource is a child of a {@link TransmissionUnit} (like a NoC - // router), respect the direction of connections such that complex networks are - // correctly reflected. - if(connection - .getConnectionType(currentReceiverResource) == ConnectionType.OUTGOING) { - Graphs.addEdgeWithVertices(platformGraph, connection.getSourceResource(), - currentReceiverResource); - } else if(connection - .getConnectionType(currentReceiverResource) == ConnectionType.INCOMING) { - Graphs.addEdgeWithVertices(platformGraph, currentReceiverResource, - connection.getSourceResource()); - } else { - // Add the edges of a single connection. We add to edges for each connection - // such that an undirected graph is generated effectively. It is required to use - // this "trick" in order to be able to use the standard shortest path - // algorithms. - Graphs.addEdgeWithVertices(platformGraph, connection.getSourceResource(), - currentReceiverResource); - Graphs.addEdgeWithVertices(platformGraph, currentReceiverResource, - connection.getSourceResource()); - } - } - } - - return platformGraph; - } - /** * Setups the {#link emittedMessagesBySender} map which makes it possible to easily identify the * {@link ISignalAdapter}s that are emitted by the given {@link ITaskAdapter}. @@ -921,4 +810,9 @@ public class SystemModelAdapter<C, E, SO, SI, G, TR, M> { public Class<? extends IPlatformResource> getFaultContainmentRegion() { return faultContainmentRegion; } + + /** Returns the present connections between platform resources. */ + public Collection<IResourceConnectionAdapter> getResouceConnections() { + return platformConnections; + } } 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 8b0d4b1b..75c63c2e 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 6ecf47e813341aa68f049a8cdec77782b98c2a96 RED +AF3SystemModelAdapter.java e9f93d7710e2b00a6a420687b8fd161974e10dee RED AF3TaskAdapter.java a3cfe04d7b235cc61031c5477de2cb54ac810aac 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 08d7f655..346318d0 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 @@ -135,9 +135,6 @@ public class AF3SystemModelAdapter extends this.taskObjects = tasks.getEntries(); this.faultContainmentRegion = Tile.class; - // TODO(#3254): Use SuperSets here for querying the required input types. - putInputModel(ComponentArchitecture.class, compArch); - putInputModel(PlatformArchitecture.class, platArch); // Disable any annotation view update. annotationUpdateEnabled = isUpdateEnabled(); @@ -167,10 +164,11 @@ public class AF3SystemModelAdapter extends setupScheduleableComponents(); setupTaskGraphs(); + setupEmittedMessages(); - setupPlatformGraph(); - registerInputEncoding(getPlatformCommunicationGraph()); - createAbstractTaskGraphEncoding(); + + // Create the initial encodings that can already be constructed from the input models. + createInitialEncodings(); // Re-enable annotation view updates. setUpdateEnabled(annotationUpdateEnabled); diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/graph/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/graph/.ratings index 54f52d20..6eefaced 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/graph/.ratings +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/graph/.ratings @@ -1,3 +1,3 @@ DependencyEdge.java 2de1bcec554c6167f132b3808040704867c65b7f RED -DependencyGraph.java 3c7e6385ed928f6a0bf9d55c05a75415234bb25c RED +DependencyGraph.java c00ed51a15597aad876b80d2a323c9053c1b5995 RED IDependencyModule.java 51c66e0f96ef56e9c5f34ead3b4efeddf2193b55 RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/graph/DependencyGraph.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/graph/DependencyGraph.java index 719571f1..745cb18d 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/graph/DependencyGraph.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/graph/DependencyGraph.java @@ -38,6 +38,7 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegen import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; import org.fortiss.af3.exploration.alg.graph.display.ObjectJGraphTVisualizer; +import org.fortiss.af3.exploration.alg.service.IExplorationEncoding; import org.fortiss.af3.exploration.alg.util.GraphUtils; import org.jgrapht.Graphs; import org.jgrapht.experimental.dag.DirectedAcyclicGraph; @@ -85,6 +86,9 @@ public abstract class DependencyGraph<V, T extends IDependencyModule<V, ? extend */ private Map<Class<? extends V>, T> pureIdentityOperators = new HashMap<>(); + /** Set of {@link IExplorationEncoding} types that can be obtained from Creators. */ + protected Set<Class<? extends V>> inputEncodings = new HashSet<>(); + /** Constructor. */ public DependencyGraph(Set<Class<? extends V>> reqTypeCollection, Class<? extends V> vertexType) { @@ -92,6 +96,14 @@ public abstract class DependencyGraph<V, T extends IDependencyModule<V, ? extend this.vertexType = vertexType; } + /** + * Adds an initial {@link IExplorationEncoding} that is provided by {@link Creator}s to the + * dependency graph. + */ + public void addCreatedEncoding(Class<? extends V> inputType) { + inputEncodings.add(inputType); + } + /** * Adds the input types and the generated output types of the given * operator to this {@link DependencyGraph}. They are connected by edges 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 f67dac44..f8afe202 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 @@ -1,7 +1,7 @@ -MessagePathOnClicked.java 985f075fabbd5e6aa796e5ef0c0e6a976a9e8571 RED -ScheduleGanttRenderer.java 8c481d56ca65d6074f0340f2c7789bbe6e3a48e6 RED -ScheduleLabelGenerator.java 595273570eef7ef53ba5a9efd4ab25133aded3a8 RED -SchedulePlotter.java 71570960426800c1e2589dd05e538e9abb69f126 RED -ScheduleToolTipGenerator.java 492b5f3469dc2ae7e57af39059c09bd0b64773ae RED -TaskSeriesCollectionFromSchedule.java a945f60435ee3bfa908db211a4924963a6dcdfb2 RED -XYPlotter.java fa10b612914c940cb6c42c3c072d00319aaf82ae RED +MessagePathOnClicked.java e90438a9aa7342112e9c7f9ff9d5ea85d1e3a445 RED +ScheduleGanttRenderer.java 1ebd6405da88417a9cc8464913a1ad5206ff897f RED +ScheduleLabelGenerator.java 0ceecedfec9802bbcaa33525d61e1a60a70d3841 RED +SchedulePlotter.java 29b1156c9419d4ff3314c4b2c932aeb46f4749f8 RED +ScheduleToolTipGenerator.java cedfa0dd7ebc7b48d7cc70e966eebaeee9636caf RED +TaskSeriesCollectionFromSchedule.java b53b7af649c48980520ad572da8c7bbdbae0aed5 RED +XYPlotter.java 0c384f5d560260225cee5bb65710842613b395b9 RED 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 3cf4406c..fb01f2d1 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 @@ -1,4 +1,4 @@ -ExplorationEncodingMap.java 0c8eedf00ba34b96a24b5ec0bcfbe50dbcc7ea35 RED +ExplorationEncodingMap.java 061b6c18f34c3584890ec0630ec40bac1eee7c1c RED ExplorationService.java f5067724b280208d9a7f59f417a068cbc7a20416 RED IExplorationConstraintTransformationService.java 6c3c34b527d526674e6474b42131b6948bdb8937 RED IExplorationContraintTransformationModule.java a7ab4345519341a13ec2de1879c7efbd9cb0dbb2 RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/service/ExplorationEncodingMap.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/service/ExplorationEncodingMap.java index 49444428..224f014d 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/service/ExplorationEncodingMap.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/service/ExplorationEncodingMap.java @@ -22,7 +22,6 @@ import java.util.Set; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.CompositePhenotype; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype; -import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; /** * Allows to capture the already created/decoded {@link Phenotype}s and pass them to their successor @@ -34,23 +33,12 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; */ public class ExplorationEncodingMap<T extends IExplorationEncoding> implements Iterable<Entry<Class<? extends T>, T>> { - - /** - * References the {@link SystemModelAdapter} that provides an abstraction of the input models. - */ - protected SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter; - /** * Map which correlates the {@link IExplorationEncoding} classes with their corresponding * {@link IExplorationEncoding}s. */ protected LinkedHashMap<Class<? extends T>, T> encodings = new LinkedHashMap<>(); - /** Constructor. */ - public ExplorationEncodingMap(SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter) { - this.systemModelAdapter = systemModelAdapter; - } - /** * Returns whether {@code this} {@link ExplorationEncodingMap} contains an encoding that is * assignable from the given encoding type. 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 a5a1d84b..4c6b32d1 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 865f1aba5538370e5855cc46cbe854b0340549e6 RED ExplorationEvaluationService.java 259ace09d86990428fb2ff9cfbff552cb4a69be8 RED ExplorationRepairService.java d8e467d2c83d17ee034ee4cba8c336660ec18b96 RED -ExplorationTransformationService.java 89f24b8f70a4d942478a059193e11930b13c36f2 RED +ExplorationTransformationService.java 96640353f12abd867378b84b5437811ca7996d8f 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 faf08293..00fffbe7 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 @@ -233,7 +233,7 @@ public class ExplorationTransformationService<T extends ITransformationModule<?> // TODO: instead of triggering the transformations here, use a threaded implementation in // the ITransformation's base class. ExplorationEncodingMap<IExplorationEncoding> solutionEncodings = - new ExplorationEncodingMap<>(null); + new ExplorationEncodingMap<>(); Queue<ITransformationModule<?>> moduleTraversalList = new LinkedList<>(); moduleTraversalList.addAll(topLvlModules); while(!moduleTraversalList.isEmpty()) { @@ -339,7 +339,7 @@ public class ExplorationTransformationService<T extends ITransformationModule<?> // and its sub-Modules are present. // TODO: instead of triggering the transformations here, use a threaded implementation in // the ITransformation's base class. - ExplorationEncodingMap<IExplorationEncoding> encodings = new ExplorationEncodingMap<>(null); + ExplorationEncodingMap<IExplorationEncoding> encodings = new ExplorationEncodingMap<>(); Queue<ITransformationModule<?>> moduleTraversalList = new LinkedList<>(); moduleTraversalList.addAll(topLvlModules); while(!moduleTraversalList.isEmpty()) { diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/dsl/model/patterns/impl/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/dsl/model/patterns/impl/.ratings index 01763b6d..2c853377 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/dsl/model/patterns/impl/.ratings +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/dsl/model/patterns/impl/.ratings @@ -1 +1 @@ -ElementPropertyStaticImpl.java 00996d1c7f0f6192d315904d6459d0bf99bc3a30 RED +ElementPropertyStaticImpl.java f979c072af7d0815c71d56ab4e3f4d03b224ae63 RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/dsl/model/patterns/impl/ElementPropertyStaticImpl.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/dsl/model/patterns/impl/ElementPropertyStaticImpl.java index 4b90b4e8..7ca63e3f 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/dsl/model/patterns/impl/ElementPropertyStaticImpl.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/dsl/model/patterns/impl/ElementPropertyStaticImpl.java @@ -27,7 +27,7 @@ import org.fortiss.tooling.base.model.element.IModelElement; */ public class ElementPropertyStaticImpl { - /** Static implementation of the method {@link ElementProperty#getProperty()} using lambdas. */ + /** Static implementation of the method {@link ElementProperty#getProperty} using lambdas. */ public static <T, ME extends IModelElement> T getProperty(ElementProperty<ME, T> pattern) { // FIXME: in the model, there should be a type definition for the java type "Function" to be // type-safer. -- GitLab