From 07a0d8304ad3136b650e85f1915da2cb1569866b Mon Sep 17 00:00:00 2001 From: Alexander Diewald <diewald@fortiss.org> Date: Mon, 30 Jul 2018 14:05:29 +0200 Subject: [PATCH] DI: Enable DI-based creators. * Add a mechanism to analyze the Guice dependency graph to collect the set of genotypes that is required to obtain a requested Phenotype. The code is a modified version of the dependency graphs calculated within Guice's Grapher extension). The list of required Genotypes determines the list of creators to be launched. * Use OperatorModules from Opt4J to inject them into the fw instead of using custom ones (conflicting inheritance hierarchy). * Register Variables at the service level (Genotypes, Creators, Operators). Signed-off-by: Alexander Diewald <diewald@fortiss.org> --- .../org/fortiss/af3/exploration/alg/.ratings | 4 +- .../af3/exploration/alg/ExplorationAlg.java | 40 ++++- .../fortiss/af3/exploration/alg/dse/.ratings | 12 +- .../af3/exploration/alg/dse/DSEFactory.java | 31 ++-- .../alg/dse/TaskMappingFactory.java | 2 +- .../alg/dse/backend/opt4j/.ratings | 10 +- .../backend/opt4j/Opt4JExplorerBackend.java | 2 +- .../opt4j/create/partitionmapping/.ratings | 2 +- .../PartitionMappingCreator.java | 45 +++--- .../opt4j/create/safetyfunctionarch/.ratings | 2 +- .../SafetyFunctionArchCreator.java | 37 ++--- .../backend/opt4j/create/taskmapping/.ratings | 8 +- .../AbstractTaskMappingCreator.java | 33 +--- .../FailSilentTaskMappingCreator.java | 37 +---- ...aultDetectionVotingTaskMappingCreator.java | 35 +--- .../taskmapping/TaskMappingCreator.java | 13 +- .../opt4j/encoding/taskmapping/.ratings | 4 +- .../taskmapping/TaskMappingEncoding.java | 10 +- .../taskmapping/abstractmapping/.ratings | 4 +- .../AbstractTaskMappingEncoding.java | 3 +- .../taskmapping/instantiatedmapping/.ratings | 12 +- .../FailSilentTaskMappingEncoding.java | 12 +- .../InstantiatedTaskMappingEncoding.java | 9 -- .../extensions/compositegene/create/.ratings | 10 +- .../compositegene/create/GuiceCreator.java | 49 +++++- .../extensions/compositegene/decode/.ratings | 16 +- .../compositegene/decode/GuiceDecoder.java | 17 +- .../extensions/compositegene/graph/.ratings | 6 +- .../compositegene/graph/GenotypeFinder.java | 85 ++++++++++ .../graph/TransitiveDependencyVisitor.java | 150 ++++++++++++++++++ .../opt4j/operator/mutate/safetyarch/.ratings | 10 +- ...utateSafetyFunctionArchitectureModule.java | 3 +- .../alg/dse/backend/opt4j/problem/.ratings | 14 +- .../ArchitectureExplorationProblemModule.java | 33 +++- .../af3/exploration/alg/dse/sysmodel/.ratings | 4 +- .../sysmodel/FailSilentExecModelFactory.java | 2 +- .../FaultDetectionVotingExecModelFactory.java | 2 +- .../alg/dse/sysmodel/arch/.ratings | 34 ++-- .../dse/sysmodel/arch/SystemModelAdapter.java | 1 + .../af3/exploration/alg/service/.ratings | 28 ++-- .../service/IExplorationModuleService.java | 4 +- .../exploration/alg/service/internal/.ratings | 10 +- .../internal/ExplorationModuleService.java | 8 +- 43 files changed, 552 insertions(+), 301 deletions(-) create mode 100644 org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/graph/GenotypeFinder.java create mode 100644 org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/graph/TransitiveDependencyVisitor.java diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/.ratings index fd69979b..6bc68964 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/.ratings +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/.ratings @@ -1,2 +1,2 @@ -ExplorationAlg.java fbb9547b59a46da10a25bef60a04ef2060d8c277 RED -ExplorationAlgActivator.java 1970505dc53286fd3752c909abc568e0bf598fe0 RED +ExplorationAlg.java 213524a903ff48c0b8edcac6819c206440519274 RED +ExplorationAlgActivator.java 1970505dc53286fd3752c909abc568e0bf598fe0 RED diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/ExplorationAlg.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/ExplorationAlg.java index fbb9547b..213524a9 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/ExplorationAlg.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/ExplorationAlg.java @@ -20,14 +20,24 @@ import static org.fortiss.af3.exploration.alg.service.ExplorationServiceManager. import org.eclipse.ui.IStartup; import org.fortiss.af3.exploration.alg.backend.Opt4JDseBackend; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.create.partitionmapping.PartitionMappingCreator; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.create.safetyfunctionarch.SafetyFunctionArchCreator; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.create.taskmapping.AbstractTaskMappingCreator; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.create.taskmapping.FailSilentTaskMappingCreator; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.comm.MessageEncoding; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.PartitionMappingEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.platform.PlatformCommunicationGraphEncoding; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.safetyfunctionarch.SafetyFunctionArchEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph.InstantiatedAcyclicTaskGraphEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph.InstantiatedTaskGraphEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph.SafeTaskGraphEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.abstractmapping.AbstractTaskMappingEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.FailSilentTaskMappingEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.InstantiatedTaskMappingEncoding; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.operator.mutate.partitionmapping.PartitionMappingModule; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.operator.mutate.safetyarch.MutateSafetyFunctionArchitectureModule; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.operator.mutate.taskinstantiation.MutateTaskInstanceModule; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.operator.mutate.taskmapping.MutateTaskMappingModule; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.StrictTTDecoder; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.comm.MessageDecoder; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.instantiatetaskgraph.InstantiatedTaskMappingDecoder; @@ -111,14 +121,13 @@ public final class ExplorationAlg implements IStartup { private static void registerExplorationModules() { // Functional groups of Decoders. registerSafetyFunctionModules(); + registerPartitionMappingModules(); registerTaskMappingModules(); registerInstTaskGraphModules(); // Single exploration modules: Decoding. getService(IExplorationModuleService.class).registerProblem(StrictTTSchedule.class, new StrictTTDecoder()); - getService(IExplorationModuleService.class).registerProblem( - PlatformCommunicationGraphEncoding.class, new PartitionMappingDecoderGraph()); getService(IExplorationModuleService.class).registerProblem(MessageEncoding.class, new MessageDecoder()); } @@ -126,6 +135,12 @@ public final class ExplorationAlg implements IStartup { /** Registers problem modules related to safety functions. */ @SuppressWarnings("unchecked") private static void registerSafetyFunctionModules() { + // Variables + getService(IExplorationModuleService.class).registerVariable( + SafetyFunctionArchEncoding.class, new SafetyFunctionArchCreator(), + new MutateSafetyFunctionArchitectureModule()); + + // Decoding getService(IExplorationModuleService.class).registerProblem( AbstractTaskMappingEncoding.class, new SFMappingDecoder()); // TODO: ConstraintDecoder @@ -135,8 +150,29 @@ public final class ExplorationAlg implements IStartup { new SFGraphDecoder()); } + /** Registers problem modules related to safety functions. */ + private static void registerPartitionMappingModules() { + // Variables + getService(IExplorationModuleService.class).registerVariable( + PartitionMappingEncoding.class, new PartitionMappingCreator(), + new PartitionMappingModule()); + + // Decoding + getService(IExplorationModuleService.class).registerProblem( + PlatformCommunicationGraphEncoding.class, new PartitionMappingDecoderGraph()); + } + /** Registers all problem modules related to task mapping. */ private static void registerTaskMappingModules() { + // Variables + getService(IExplorationModuleService.class).registerVariable( + AbstractTaskMappingEncoding.class, new AbstractTaskMappingCreator(), + new MutateTaskMappingModule()); + getService(IExplorationModuleService.class).registerVariable( + FailSilentTaskMappingEncoding.class, new FailSilentTaskMappingCreator(), + new MutateTaskInstanceModule()); + + // Decoding getService(IExplorationModuleService.class).registerProblem( AbstractTaskMappingEncoding.class, new AbstractTaskMappingIdentityDecoder()); getService(IExplorationModuleService.class).registerProblem( diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/.ratings index 80924703..95c9ceba 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/.ratings +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/.ratings @@ -1,6 +1,6 @@ -CompositeExplorationSolution.java db9dadb94e6696cddaf12f0c5238fecfc4348afc RED -DSEFactory.java c033d4fb34746a0f712be1d99e648d3c95623497 RED -Explorer.java 48ce78929632a9b78b4c809c7719eb5aa46d21df RED -ImplicitExplorationTargetFactory.java 25c3c668ed268843f8af7e37eb03370ed513b482 RED -SolutionQuantification.java 19cd7caa721bbca3112af7825c7fb20a96a4a799 RED -TaskMappingFactory.java 88a64fe8b56faad869ccc5cb9111cee6e90d32d3 RED +CompositeExplorationSolution.java db9dadb94e6696cddaf12f0c5238fecfc4348afc RED +DSEFactory.java a4afb8c8c2ab23258ca13083c58b9d8ea766eed2 RED +Explorer.java 48ce78929632a9b78b4c809c7719eb5aa46d21df RED +ImplicitExplorationTargetFactory.java 25c3c668ed268843f8af7e37eb03370ed513b482 RED +SolutionQuantification.java 19cd7caa721bbca3112af7825c7fb20a96a4a799 RED +TaskMappingFactory.java 13f4e8104769a1592050ebb6e23d6fbcf864d1d2 RED diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/DSEFactory.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/DSEFactory.java index c033d4fb..a4afb8c8 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/DSEFactory.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/DSEFactory.java @@ -146,15 +146,13 @@ public class DSEFactory { DecoderDependencyGraph execDepGraph) throws Exception { // These suppress warnings are required since type erasure in Java does not allow to pass // XY<Z>.class. - SafetyFunctionArchCreator sfCreator = - new SafetyFunctionArchCreator(systemModelAdapter.getSafetyFunctionAdapters(), - execDepGraph); + SafetyFunctionArchCreator sfCreator = new SafetyFunctionArchCreator(); @SuppressWarnings("rawtypes") List<ComposableDecoder> sfDecoders = new ArrayList<>(); - execDepGraph.addCreatedEncoding(sfCreator.getCreatedEncodingType()); - archExpProblemModule.registerSubProblem(SafetyFunctionArchEncoding.class, sfCreator, - sfDecoders); + // execDepGraph.addCreatedEncoding(sfCreator.getCreatedEncodingType()); + // archExpProblemModule.registerSubProblem(SafetyFunctionArchEncoding.class, sfCreator, + // sfDecoders); } /** @@ -170,20 +168,15 @@ public class DSEFactory { * @throws CycleFoundException * if a cyclic dependency is discovered when registering the problem. */ - @SuppressWarnings("unchecked") private void createPartitionMappingProblem( ArchitectureExplorationProblemModule archExpProblemModule, DseSpecification dse, DecoderDependencyGraph execDepGraph) throws CycleFoundException { Class<PartitionMappingEncoding> pmEnodingClass = PartitionMappingEncoding.class; - PartitionMappingCreator pmCreator = - new PartitionMappingCreator(execDepGraph, - (Collection<IExecutionUnitAdapter<?>>)(Collection<?>)systemModelAdapter - .getDeploymentTargets(), systemModelAdapter - .getDeployableComponents().size()); + PartitionMappingCreator pmCreator = new PartitionMappingCreator(); @SuppressWarnings("rawtypes") List<ComposableDecoder> pmDecoders = new ArrayList<>(); - execDepGraph.addCreatedEncoding(pmCreator.getCreatedEncodingType()); - archExpProblemModule.registerSubProblem(pmEnodingClass, pmCreator, pmDecoders); + // execDepGraph.addCreatedEncoding(pmCreator.getCreatedEncodingType()); + // archExpProblemModule.registerSubProblem(pmEnodingClass, pmCreator, pmDecoders); } /** @@ -243,8 +236,8 @@ public class DSEFactory { @SuppressWarnings("rawtypes") List<ComposableDecoder> abstrTaskDecoders = new ArrayList<>(); // AbstractTaskMappingIdentityDecoder idtDecoder = new AbstractTaskMappingIdentityDecoder(); - execDepGraph.addCreatedEncoding(tmCreator.getCreatedEncodingType()); - archExpProblemModule.registerSubProblem(tmEnodingClass, tmCreator, abstrTaskDecoders); + // execDepGraph.addCreatedEncoding(tmCreator.getCreatedEncodingType()); + // archExpProblemModule.registerSubProblem(tmEnodingClass, tmCreator, abstrTaskDecoders); } /** @@ -276,9 +269,9 @@ public class DSEFactory { @SuppressWarnings("rawtypes") TaskMappingCreator tmCreator = tmFactory.createTaskMappingCreator(execDepGraph); - execDepGraph.addCreatedEncoding(tmCreator.getCreatedEncodingType()); - archExpProblemModule.registerSubProblem(InstantiatedTaskMappingEncoding.class, tmCreator, - new ArrayList<>()); + // execDepGraph.addCreatedEncoding(tmCreator.getCreatedEncodingType()); + // archExpProblemModule.registerSubProblem(InstantiatedTaskMappingEncoding.class, tmCreator, + // new ArrayList<>()); } /** diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/TaskMappingFactory.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/TaskMappingFactory.java index 88a64fe8..13f4e810 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/TaskMappingFactory.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/TaskMappingFactory.java @@ -101,7 +101,7 @@ public abstract class TaskMappingFactory<S extends InstantiatedTaskMappingEntry, */ public AbstractTaskMappingCreator createAbstractTaskMappingCreator( DecoderDependencyGraph execDepGraph) { - return new AbstractTaskMappingCreator(execDepGraph); + return new AbstractTaskMappingCreator(); } /** diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/.ratings index 9f36a7a7..8861e953 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/.ratings +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/.ratings @@ -1,5 +1,5 @@ -Opt4JDseTask.java b5cb9e664e7a8fc2b5157bcdcaca740c2fa85336 YELLOW -Opt4JDseTaskProvider.java ff2bbc6da2b21bd0bc64c3fa77dc8fa9939d10af RED -Opt4JExplorationSolutionSet.java 8578ee9c438bc3327a64172e996306a89606c782 RED -Opt4JExplorerBackend.java efa271f055e57df194e24f4bb7e94a00d252f3bb RED -Opt4JSingleExplorationSolution.java 41ce92d11b2e7a6a8c39bffa990c691160c36c8d RED +Opt4JDseTask.java b5cb9e664e7a8fc2b5157bcdcaca740c2fa85336 YELLOW +Opt4JDseTaskProvider.java ff2bbc6da2b21bd0bc64c3fa77dc8fa9939d10af RED +Opt4JExplorationSolutionSet.java 8578ee9c438bc3327a64172e996306a89606c782 RED +Opt4JExplorerBackend.java 143812e08f4ef9a803e0e24dc32612007c98cbd2 RED +Opt4JSingleExplorationSolution.java 41ce92d11b2e7a6a8c39bffa990c691160c36c8d RED diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/Opt4JExplorerBackend.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/Opt4JExplorerBackend.java index efa271f0..143812e0 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/Opt4JExplorerBackend.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/Opt4JExplorerBackend.java @@ -158,7 +158,7 @@ public class Opt4JExplorerBackend extends ExplorerBackendBase<EAOptimizer> { // modules.add(multiEvaluatorModule); archExplorationProblemModule = - new ArchitectureExplorationProblemModule(dse, requestedSolutions); + new ArchitectureExplorationProblemModule(dse, dseInjector, requestedSolutions); modules.add(archExplorationProblemModule); // Configure operators diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/partitionmapping/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/partitionmapping/.ratings index 4f0e777b..66bdddf5 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/partitionmapping/.ratings +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/partitionmapping/.ratings @@ -1 +1 @@ -PartitionMappingCreator.java 6c83f8a857b0fa1e1bf90121a91d58038ed5d9d0 RED +PartitionMappingCreator.java 087de657669392f17b1bd3c84de4fb794d2f4da5 RED diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/partitionmapping/PartitionMappingCreator.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/partitionmapping/PartitionMappingCreator.java index 6c83f8a8..087de657 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/partitionmapping/PartitionMappingCreator.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/partitionmapping/PartitionMappingCreator.java @@ -19,40 +19,33 @@ 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; -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.module.CreatorModule; 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.random.RandomExploration; -import org.fortiss.af3.exploration.alg.service.IExplorationEncoding; import org.opt4j.core.problem.Creator; +import com.google.inject.Provides; + /** * {@link Creator} for {@link PartitionMappingEncoding}s. * * @author diewald */ -public class PartitionMappingCreator extends ComposableCreatorBase<PartitionMappingEncoding> { - /** Physical execution units. */ - private Collection<IExecutionUnitAdapter<?>> execUnits; - - /** Number of tasks to allocate to partitions. */ - int numTasks; +public class PartitionMappingCreator extends CreatorModule<PartitionMappingEncoding> { - /** Constructor. */ - public PartitionMappingCreator(DecoderDependencyGraph depGraph, - Collection<IExecutionUnitAdapter<?>> execUnits, int numTasks) { - super(depGraph); - this.execUnits = execUnits; - this.numTasks = numTasks; - } + // /** Constructor. */ + // public PartitionMappingCreator(Collection<IExecutionUnitAdapter<?>> execUnits, int numTasks) + // { + // this.execUnits = execUnits; + // this.numTasks = numTasks; + // } /** {@inheritDoc} */ - @Override - public PartitionMappingEncoding createComposable(FlatGenotypeMap createdGenotypes, - FlatPhenotypeMap<Phenotype> decodedPhenotypes) { + @Provides + public PartitionMappingEncoding create(Collection<IExecutionUnitAdapter<?>> execUnits, + Collection<ITaskAdapter<?>> tasks) { + int numTasks = tasks.size(); // "Probability distribution" for the strategy selection: |1|numTasks - 2|1| ==> numTasks int strategySelIdx = RandomExploration.getInstance().nextInt(numTasks); switch(strategySelIdx) { @@ -61,14 +54,14 @@ public class PartitionMappingCreator extends ComposableCreatorBase<PartitionMapp case 24: return new PartitionMappingEncoding(execUnits, numTasks, CREATE_STARTEGY.MAX_SET); default: - return new PartitionMappingEncoding(execUnits, numTasks, - CREATE_STARTEGY.RANDOM_SET); + return new PartitionMappingEncoding(execUnits, numTasks, CREATE_STARTEGY.RANDOM_SET); } } /** {@inheritDoc} */ @Override - public Class<? extends IExplorationEncoding> getCreatedEncodingType() { - return PartitionMappingEncoding.class; + public PartitionMappingEncoding create() { + // TODO Auto-generated method stub + return null; } } diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/safetyfunctionarch/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/safetyfunctionarch/.ratings index 74e85e0a..851a8d5f 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/safetyfunctionarch/.ratings +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/safetyfunctionarch/.ratings @@ -1 +1 @@ -SafetyFunctionArchCreator.java 3eace15fd28f2c6ad20090306a3e35641f35e5c7 RED +SafetyFunctionArchCreator.java 987b9a91b5dc0062486af2304ffa9a8986759a49 RED diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/safetyfunctionarch/SafetyFunctionArchCreator.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/safetyfunctionarch/SafetyFunctionArchCreator.java index 3eace15f..987b9a91 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/safetyfunctionarch/SafetyFunctionArchCreator.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/safetyfunctionarch/SafetyFunctionArchCreator.java @@ -18,14 +18,10 @@ package org.fortiss.af3.exploration.alg.dse.backend.opt4j.create.safetyfunctiona 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.module.CreatorModule; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ISafetyFunctionAdapter; -import org.fortiss.af3.exploration.alg.service.IExplorationEncoding; -import com.google.inject.Inject; +import com.google.inject.Provides; /** * Creator for the {@link SafetyFunctionArchEncoding} that provides a standard encoding for the @@ -33,23 +29,19 @@ import com.google.inject.Inject; * * @author diewald */ -public class SafetyFunctionArchCreator extends ComposableCreatorBase<SafetyFunctionArchEncoding> { - /** Collection of safety functions present in the system. */ - Collection<ISafetyFunctionAdapter<?>> sfAdapters; +public class SafetyFunctionArchCreator extends CreatorModule<SafetyFunctionArchEncoding> { - /** Constructor. */ - @Inject - public SafetyFunctionArchCreator(Collection<ISafetyFunctionAdapter<?>> sfAdapters, - DecoderDependencyGraph execDepGraph) { - super(execDepGraph); - this.sfAdapters = sfAdapters; - } + // /** Constructor. */ + // @Inject + // public SafetyFunctionArchCreator(Collection<ISafetyFunctionAdapter<?>> sfAdapters, + // DecoderDependencyGraph execDepGraph) { + // super(execDepGraph); + // this.sfAdapters = sfAdapters; + // } /** {@inheritDoc} */ - @SuppressWarnings({"rawtypes"}) - @Override - public SafetyFunctionArchEncoding createComposable(FlatGenotypeMap createdGenotypes, - FlatPhenotypeMap decodedPhenotypes) { + @Provides + public SafetyFunctionArchEncoding create(Collection<ISafetyFunctionAdapter<?>> sfAdapters) { // It is clear that the generic is right. However, the compiler does not get it. Thus, // suppress the corresponding Warnings. return new SafetyFunctionArchEncoding(sfAdapters, true, true); @@ -57,7 +49,8 @@ public class SafetyFunctionArchCreator extends ComposableCreatorBase<SafetyFunct /** {@inheritDoc} */ @Override - public Class<? extends IExplorationEncoding> getCreatedEncodingType() { - return SafetyFunctionArchEncoding.class; + public SafetyFunctionArchEncoding create() { + // TODO Auto-generated method stub + return null; } } diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/.ratings index d2b47b8a..622950fe 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/.ratings +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/.ratings @@ -1,4 +1,4 @@ -AbstractTaskMappingCreator.java 481bf7cebf384ba705cd5b099c7a3a63878bf3a5 RED -FailSilentTaskMappingCreator.java 76afb8716f870091dc962dcca267665db31dc81d RED -FaultDetectionVotingTaskMappingCreator.java fd0059619804d5e8e07f81fc97e9ba637b42d925 RED -TaskMappingCreator.java da026f6e18b7220ccc1acb2ecb640d7ffcd488ea RED +AbstractTaskMappingCreator.java 4e9f7e693743ccdc133bc25ea9ae09b68c79fa0e RED +FailSilentTaskMappingCreator.java 398ceee31ebb494723f9d11dd6987a782495812d RED +FaultDetectionVotingTaskMappingCreator.java 4759ac9bae1a4504591872ca871ff75fe7c7bfb3 RED +TaskMappingCreator.java e5bdf7ae7faad15d7d7a87ae72d882901bf72a34 RED diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/AbstractTaskMappingCreator.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/AbstractTaskMappingCreator.java index 481bf7ce..4e9f7e69 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/AbstractTaskMappingCreator.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/AbstractTaskMappingCreator.java @@ -19,17 +19,12 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmappi 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.encoding.taskmapping.abstractmapping.AbstractTaskMappingEntry; -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.ITaskAdapter; import org.fortiss.af3.exploration.alg.exception.ExplorationException; -import org.fortiss.af3.exploration.alg.service.IExplorationEncoding; import org.opt4j.core.Genotype; import org.opt4j.core.problem.Creator; -import com.google.inject.Inject; +import com.google.inject.Provides; /** * {@link Creator} for an {@link AbstractTaskMappingEncoding}, i.e. a {@link Genotype} that may @@ -40,36 +35,24 @@ import com.google.inject.Inject; public class AbstractTaskMappingCreator extends TaskMappingCreator<AbstractTaskMappingEntry, AbstractTaskMappingEncoding> { - /** Constructor */ - @Inject - public AbstractTaskMappingCreator(DecoderDependencyGraph execDepGraph) { - super(execDepGraph); - } - /** * {@inheritDoc} * * @throws ExplorationException * if no valid allocation targets can be identified for one {@link ITaskAdapter}. */ - @Override - public AbstractTaskMappingEncoding createComposable(FlatGenotypeMap createdGenotypes, - FlatPhenotypeMap<Phenotype> decodedPhenotypes) throws ExplorationException { - AbstractTaskGraphEncoding atgEnc = - decodedPhenotypes.getEncoding(AbstractTaskGraphEncoding.class); - assert (atgEnc != null) : "The required abstract task graph encoding could not be found in the map of already decoded phenotypes."; + @Provides + public AbstractTaskMappingEncoding create(PartitionMappingEncoding partEnc, + AbstractTaskGraphEncoding atgEnc) throws ExplorationException { // The AbstractTaskMappingEncoding may be NULL to indicate that no previous step produced a // partial mapping. - AbstractTaskMappingEncoding atmEnc = - 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(partEnc, atgEnc, atmEnc); + return new AbstractTaskMappingEncoding(partEnc, atgEnc/* , atmEnc */); } /** {@inheritDoc} */ @Override - public Class<? extends IExplorationEncoding> getCreatedEncodingType() { - return AbstractTaskMappingEncoding.class; + public AbstractTaskMappingEncoding create() { + // TODO Auto-generated method stub + return null; } } diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/FailSilentTaskMappingCreator.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/FailSilentTaskMappingCreator.java index 76afb871..398ceee3 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/FailSilentTaskMappingCreator.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/FailSilentTaskMappingCreator.java @@ -20,14 +20,8 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph.Abst import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.abstractmapping.AbstractTaskMappingEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.FailSilentTaskMappingEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.FailSilentTaskMappingEntry; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.InstantiatedTaskMappingEncoding; -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.service.IExplorationEncoding; -import com.google.inject.Inject; +import com.google.inject.Provides; /** * Creator of random task mappings for fail-silent execution model @@ -37,34 +31,17 @@ import com.google.inject.Inject; public class FailSilentTaskMappingCreator extends TaskMappingCreator<FailSilentTaskMappingEntry, FailSilentTaskMappingEncoding> { - /** - * Constructs a task mapping creator for a given DSE specification and input model - * (execution model = fail-silent) - */ - @Inject - public FailSilentTaskMappingCreator(DecoderDependencyGraph execDepGraph) { - super(execDepGraph); - } - /** {@inheritDoc} */ - @Override - public FailSilentTaskMappingEncoding createComposable(FlatGenotypeMap createdGenotypes, - FlatPhenotypeMap<Phenotype> decodedPhenotypes) { - AbstractTaskGraphEncoding atgEnc = - decodedPhenotypes.getEncoding(AbstractTaskGraphEncoding.class); - assert (atgEnc != null) : "The required abstract task graph encoding could not be found in the map of already decoded phenotypes."; - AbstractTaskMappingEncoding atmEnc = - createdGenotypes.get(AbstractTaskMappingEncoding.class); - 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."; + @Provides + public FailSilentTaskMappingEncoding create(AbstractTaskGraphEncoding atgEnc, + AbstractTaskMappingEncoding atmEnc, PartitionMappingEncoding partEnc) { return new FailSilentTaskMappingEncoding(partEnc, atgEnc, atmEnc); } - // TODO: remove this method: use the identifier from the encoding, instead. /** {@inheritDoc} */ @Override - public Class<? extends IExplorationEncoding> getCreatedEncodingType() { - return InstantiatedTaskMappingEncoding.class; + public FailSilentTaskMappingEncoding create() { + // TODO Auto-generated method stub + return null; } } diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/FaultDetectionVotingTaskMappingCreator.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/FaultDetectionVotingTaskMappingCreator.java index fd005961..4759ac9b 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/FaultDetectionVotingTaskMappingCreator.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/FaultDetectionVotingTaskMappingCreator.java @@ -20,14 +20,8 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph.Abst import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.abstractmapping.AbstractTaskMappingEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.FaultDetectionVotingTaskMappingEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.FaultDetectionVotingTaskMappingEntry; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.InstantiatedTaskMappingEncoding; -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.service.IExplorationEncoding; -import com.google.inject.Inject; +import com.google.inject.Provides; /** * Creator of random task mappings for fail-silent execution model @@ -38,33 +32,18 @@ public class FaultDetectionVotingTaskMappingCreator extends TaskMappingCreator<FaultDetectionVotingTaskMappingEntry, FaultDetectionVotingTaskMappingEncoding> { - /** - * Constructs a task mapping creator for a given DSE specification and input model - * (execution model = fault-detection and voting) - */ - @Inject - public FaultDetectionVotingTaskMappingCreator(DecoderDependencyGraph execDepGraph) { - super(execDepGraph); - } - /** {@inheritDoc} */ - @Override + @Provides public FaultDetectionVotingTaskMappingEncoding createComposable( - FlatGenotypeMap createdGenotypes, FlatPhenotypeMap<Phenotype> decodedPhenotypes) { - AbstractTaskGraphEncoding atgEnc = - decodedPhenotypes.getEncoding(AbstractTaskGraphEncoding.class); - assert (atgEnc != null) : "The required abstract task graph encoding could not be found in the map of already decoded phenotypes."; - AbstractTaskMappingEncoding atmEnc = - createdGenotypes.get(AbstractTaskMappingEncoding.class); - 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."; + AbstractTaskGraphEncoding atgEnc, AbstractTaskMappingEncoding atmEnc, + PartitionMappingEncoding partEnc) { return new FaultDetectionVotingTaskMappingEncoding(partEnc, atgEnc, atmEnc); } /** {@inheritDoc} */ @Override - public Class<? extends IExplorationEncoding> getCreatedEncodingType() { - return InstantiatedTaskMappingEncoding.class; + public FaultDetectionVotingTaskMappingEncoding create() { + // TODO Auto-generated method stub + return null; } } diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/TaskMappingCreator.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/TaskMappingCreator.java index da026f6e..e5bdf7ae 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/TaskMappingCreator.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/TaskMappingCreator.java @@ -18,14 +18,11 @@ package org.fortiss.af3.exploration.alg.dse.backend.opt4j.create.taskmapping; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.Partition; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.TaskMappingEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.TaskMappingEntry; -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.module.CreatorModule; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ITaskAdapter; import org.opt4j.core.Genotype; import org.opt4j.core.problem.Creator; -import com.google.inject.Inject; - /** * {@link Creator} module for general {@link TaskMappingEncoding}s {@link Genotype}s. * @@ -33,11 +30,5 @@ import com.google.inject.Inject; */ public abstract class TaskMappingCreator<S extends TaskMappingEntry<ITaskAdapter<?>, Partition>, T extends TaskMappingEncoding<ITaskAdapter<?>, S>> - extends ComposableCreatorBase<T> { - - /** Constructor. */ - @Inject - public TaskMappingCreator(DecoderDependencyGraph execDepGraph) { - super(execDepGraph); - } + extends CreatorModule<T> { } diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/.ratings index ab8a8b6c..98342aae 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/.ratings +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/.ratings @@ -1,2 +1,2 @@ -TaskMappingEncoding.java b944240cb5e8ab19fc773d85e652f2d880d8361f RED -TaskMappingEntry.java 407c9065007f8cd4adc8b64eea13a837bba581ae RED +TaskMappingEncoding.java 9f1f50a21bfb70f9a40b3530af76f0457211f8ab RED +TaskMappingEntry.java 407c9065007f8cd4adc8b64eea13a837bba581ae RED diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/TaskMappingEncoding.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/TaskMappingEncoding.java index b944240c..9f1f50a2 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/TaskMappingEncoding.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/TaskMappingEncoding.java @@ -37,7 +37,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.taskgraph.DefaultTaskGraph; import org.fortiss.af3.exploration.alg.dse.sysmodel.mapping.IMappingEncoding; import org.fortiss.af3.exploration.alg.dse.sysmodel.mapping.IMappingEntry; import org.fortiss.af3.exploration.alg.dse.sysmodel.random.RandomExploration; @@ -113,7 +112,6 @@ public abstract class TaskMappingEncoding<S extends ITaskAdapter<?>, T extends T @SuppressWarnings("unchecked") public TaskMappingEncoding(PartitionMappingEncoding partMappingEncoding, TaskGraphEncoding<?> tgEncoding) { - this.tgEncoding = tgEncoding; this.partMappingEncoding = partMappingEncoding; this.tasks = (Collection<S>)tgEncoding.getTasks(); this.partitions = partMappingEncoding.getRequesters(); @@ -724,10 +722,10 @@ public abstract class TaskMappingEncoding<S extends ITaskAdapter<?>, T extends T return str; } - /** Returns all independent {@link DefaultTaskGraph}s contained in this encoding. */ - public TaskGraphEncoding<?> getTaskGraphEncoding() { - return tgEncoding; - } + // /** Returns all independent {@link DefaultTaskGraph}s contained in this encoding. */ + // public TaskGraphEncoding<?> getTaskGraphEncoding() { + // return tgEncoding; + // } /** * Returns the list of Partitions that are allocated to the given list of physical execution diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/abstractmapping/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/abstractmapping/.ratings index 0b39ca83..ca902f8c 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/abstractmapping/.ratings +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/abstractmapping/.ratings @@ -1,2 +1,2 @@ -AbstractTaskMappingEncoding.java fa5ec76217a920b514c7ee255f3ca0b3f0360ae0 RED -AbstractTaskMappingEntry.java 5a402c12dbf882f6c6f19146a66f837764f50e1f RED +AbstractTaskMappingEncoding.java 091831363b6f9f40c17ad9ea28440da62130e44a RED +AbstractTaskMappingEntry.java 5a402c12dbf882f6c6f19146a66f837764f50e1f RED diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/abstractmapping/AbstractTaskMappingEncoding.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/abstractmapping/AbstractTaskMappingEncoding.java index fa5ec762..09183136 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/abstractmapping/AbstractTaskMappingEncoding.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/abstractmapping/AbstractTaskMappingEncoding.java @@ -44,7 +44,8 @@ public class AbstractTaskMappingEncoding extends * Constructor that is initialized with a reference to the DSE specification and the input * system model. */ - AbstractTaskMappingEncoding(PartitionMappingEncoding partEnc, SafeTaskGraphEncoding tgEncoding) { + public AbstractTaskMappingEncoding(PartitionMappingEncoding partEnc, + SafeTaskGraphEncoding tgEncoding) { super(partEnc, tgEncoding); } diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/.ratings index bbd58aa1..180424a9 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/.ratings +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/.ratings @@ -1,6 +1,6 @@ -FailSilentTaskMappingEncoding.java cbd5546ce9cb78fd284464ea07d9be4a68a96006 RED -FailSilentTaskMappingEntry.java 6cc36c6e47786732ffc71c636820a44659917886 RED -FaultDetectionVotingTaskMappingEncoding.java 247891eb76b773dca87017b293fa7f0711781ad1 RED -FaultDetectionVotingTaskMappingEntry.java ae401b16a2098ee85809f895c2469f494b6fc279 RED -InstantiatedTaskMappingEncoding.java 0900e95fdc40241738762b84810a194ace305da7 RED -InstantiatedTaskMappingEntry.java ffac1e77d53b2a9253b864b876aae18b6820f1f0 RED +FailSilentTaskMappingEncoding.java 95cbf3617edc9d57359fcad05d87833f3657aeb0 RED +FailSilentTaskMappingEntry.java 6cc36c6e47786732ffc71c636820a44659917886 RED +FaultDetectionVotingTaskMappingEncoding.java 247891eb76b773dca87017b293fa7f0711781ad1 RED +FaultDetectionVotingTaskMappingEntry.java ae401b16a2098ee85809f895c2469f494b6fc279 RED +InstantiatedTaskMappingEncoding.java 989bd16a2f534d941a458e13cc76408626f31faf RED +InstantiatedTaskMappingEntry.java ffac1e77d53b2a9253b864b876aae18b6820f1f0 RED diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FailSilentTaskMappingEncoding.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FailSilentTaskMappingEncoding.java index cbd5546c..95cbf361 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FailSilentTaskMappingEncoding.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FailSilentTaskMappingEncoding.java @@ -34,17 +34,9 @@ import org.fortiss.af3.exploration.alg.exception.ExplorationException; public class FailSilentTaskMappingEncoding extends InstantiatedTaskMappingEncoding<FailSilentTaskMappingEntry> { - /** - * Constructor that is initialized with a reference to the DSE specification and the input - * system model. - */ - FailSilentTaskMappingEncoding(PartitionMappingEncoding partEnc, - AbstractTaskGraphEncoding tgEncoding) { - super(partEnc, tgEncoding); - } - /** Copy Constructor. */ - FailSilentTaskMappingEncoding(PartitionMappingEncoding partEnc, TaskGraphEncoding<?> tgEncoding) { + public FailSilentTaskMappingEncoding(PartitionMappingEncoding partEnc, + TaskGraphEncoding<?> tgEncoding) { super(partEnc, tgEncoding); } diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/InstantiatedTaskMappingEncoding.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/InstantiatedTaskMappingEncoding.java index 0900e95f..989bd16a 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/InstantiatedTaskMappingEncoding.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/InstantiatedTaskMappingEncoding.java @@ -41,15 +41,6 @@ import org.opt4j.core.Genotype; public abstract class InstantiatedTaskMappingEncoding<T extends InstantiatedTaskMappingEntry> extends TaskMappingEncoding<ITaskAdapter<?>, T> { - /** - * Constructor that is initialized with a reference to the DSE specification and the input - * system model. - */ - protected InstantiatedTaskMappingEncoding(PartitionMappingEncoding partEnc, - AbstractTaskGraphEncoding tgEncoding) { - super(partEnc, tgEncoding); - } - /** Copy Constructor. */ protected InstantiatedTaskMappingEncoding(PartitionMappingEncoding partEnc, TaskGraphEncoding<?> tgEncoding) { diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/create/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/create/.ratings index 04d9ec76..dfd93834 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/create/.ratings +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/create/.ratings @@ -1,5 +1,5 @@ -ComposableCreator.java 6d2d61205890a2b0b99f41d2caa4debc511c8b4a RED -ComposableCreatorBase.java e1a898541dd2b480e6c345ad2429bf93393957e6 RED -CompositeCreator.java bb054d281931f461ca67def20360cc767940e204 RED -CompositeCreatorBase.java d897947ff0db02ea1cac4034a4912f9afce283ec RED -GuiceCreator.java 0a5a0c771346775ba21a739ebf8761c17bd78b13 RED +ComposableCreator.java 6d2d61205890a2b0b99f41d2caa4debc511c8b4a RED +ComposableCreatorBase.java e1a898541dd2b480e6c345ad2429bf93393957e6 RED +CompositeCreator.java bb054d281931f461ca67def20360cc767940e204 RED +CompositeCreatorBase.java d897947ff0db02ea1cac4034a4912f9afce283ec RED +GuiceCreator.java d97b10032981b574922d292afd9306a55df351bb RED diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/create/GuiceCreator.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/create/GuiceCreator.java index 0a5a0c77..d97b1003 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/create/GuiceCreator.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/create/GuiceCreator.java @@ -15,21 +15,66 @@ +--------------------------------------------------------------------------*/ package org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.create; +import static org.fortiss.af3.exploration.alg.service.ExplorationServiceManager.getService; + +import java.util.Collection; + +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.Opt4JDseTaskProvider; +import org.fortiss.af3.exploration.alg.dse.module.CreatorModule; +import org.fortiss.af3.exploration.alg.service.IExplorationModuleService; import org.opt4j.core.Genotype; import org.opt4j.core.genotype.CompositeGenotype; import org.opt4j.core.problem.Creator; +import org.opt4j.core.start.Opt4JTask; + +import com.google.inject.AbstractModule; +import com.google.inject.Inject; +import com.google.inject.Injector; /** * Dummy creator to allow registering the Guice Decoder. * * @author diewald */ -public class GuiceCreator implements +public class GuiceCreator extends AbstractModule implements Creator<CompositeGenotype<Class<? extends Genotype>, ? extends Genotype>> { + /** Set of {@link Genotype}-Types for which instances shall be created. */ + private Collection<Class<? extends Genotype>> requiredGenotypes; + + /** {@link Opt4JTask} provider used to obtain the opt4j injector. */ + @Inject + protected Opt4JDseTaskProvider opt4JProvider; + + /** Child {@link Injector} for creating the required {@link Genotype}s in the creation phase. */ + protected Injector createInjector; + + /** Constructor. */ + public GuiceCreator(Collection<Class<? extends Genotype>> requiredGenotypes) { + this.requiredGenotypes = requiredGenotypes; + } + /** {@inheritDoc} */ @Override public CompositeGenotype<Class<? extends Genotype>, ? extends Genotype> create() { - return new CompositeGenotype(); + createInjector = opt4JProvider.get().get().createChildInjector(this); + + CompositeGenotype<Class<? extends Genotype>, Genotype> compGenotype = + new CompositeGenotype<>(); + for(Class<? extends Genotype> requiredGenotype : requiredGenotypes) { + compGenotype.put(requiredGenotype, createInjector.getInstance(requiredGenotype)); + } + + return compGenotype; + } + + /** {@inheritDoc} */ + @Override + protected void configure() { + // bindScope(ThreadScoped.class, new ThreadScope()); + + for(CreatorModule<?> module : getService(IExplorationModuleService.class).getCreators()) { + install(module); + } } } diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/.ratings index ae7800cd..63f97eac 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/.ratings +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/.ratings @@ -1,8 +1,8 @@ -ComposableDecoder.java 0ef247e0e8424968cd8dab8317df0e504c5018d4 RED -ComposableDecoderBase.java 7c47b41e609b6911128efa469c2dd65122276bcc RED -CompositeDecoder.java 68864146cbd7b0d1444d4157cf88023deb4a21ea RED -CompositeDecoderBase.java cc878483ec3dcf3afd60509579c7c17a3433893c RED -GuiceDecoder.java 40fe6757b224ffc399ef14e5b60a36775edffe3c RED -PhenotypeDecoder.java 042d35c9bcba9a2cddc5e82ca5abe6f52438d1c3 RED -ThreadScope.java f3a2b90fdbf0b2aabde4112c94623da5c262952b RED -ThreadScoped.java a8335b0831586ea6ced17a5e7adf2952b72957d9 RED +ComposableDecoder.java 0ef247e0e8424968cd8dab8317df0e504c5018d4 RED +ComposableDecoderBase.java 7c47b41e609b6911128efa469c2dd65122276bcc RED +CompositeDecoder.java 68864146cbd7b0d1444d4157cf88023deb4a21ea RED +CompositeDecoderBase.java cc878483ec3dcf3afd60509579c7c17a3433893c RED +GuiceDecoder.java e118048ae4abd7dedc858845cda9bc67e7565835 RED +PhenotypeDecoder.java 042d35c9bcba9a2cddc5e82ca5abe6f52438d1c3 RED +ThreadScope.java f3a2b90fdbf0b2aabde4112c94623da5c262952b RED +ThreadScoped.java a8335b0831586ea6ced17a5e7adf2952b72957d9 RED diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/GuiceDecoder.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/GuiceDecoder.java index 40fe6757..e118048a 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/GuiceDecoder.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/GuiceDecoder.java @@ -17,10 +17,12 @@ package org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositege import static org.fortiss.af3.exploration.alg.service.ExplorationServiceManager.getService; +import java.util.Set; + import org.fortiss.af3.exploration.alg.dse.backend.opt4j.Opt4JDseTaskProvider; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.safetyfunctionarch.SafetyFunctionArchEncoding; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.FailSilentTaskMappingEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.exception.DecodingRuntimeException; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.graph.GenotypeFinder; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype; import org.fortiss.af3.exploration.alg.dse.module.DecoderModule; import org.fortiss.af3.exploration.alg.service.IExplorationModuleService; @@ -29,6 +31,7 @@ import org.opt4j.core.genotype.CompositeGenotype; import org.opt4j.core.problem.Decoder; import org.opt4j.core.start.Opt4JTask; +import com.google.common.collect.Sets; import com.google.inject.AbstractModule; import com.google.inject.Inject; import com.google.inject.Injector; @@ -47,13 +50,13 @@ public class GuiceDecoder extends AbstractModule implements Decoder<Genotype, Ph /** Defines the desired exploration result type. */ // TODO: Remove this hard coded line and get the desired result from the backend interface. - protected Class<? extends Phenotype> resultType = FailSilentTaskMappingEncoding.class; + protected Class<? extends Phenotype> resultType; /** {@link Opt4JTask} provider used to obtain the opt4j injector. */ @Inject protected Opt4JDseTaskProvider opt4JProvider; - /** Child injector for the dependency management of the decode phase. */ + /** Child {@link Injector} for the dependency management of the decode phase. */ protected Injector decodingInjector; /** Reference to the input {@link Genotype}. */ @@ -61,6 +64,11 @@ public class GuiceDecoder extends AbstractModule implements Decoder<Genotype, Ph protected ThreadLocal<CompositeGenotype<Class<? extends Genotype>, ? extends Genotype>> genotype = new ThreadLocal<>(); + /** Constructor. Remembers the demanded {@link Phenotype}ss to be produced. */ + public GuiceDecoder(Class<? extends Phenotype> resultType) { + this.resultType = resultType; + } + // To be used later: Constructor injection is favorable. // /** Constructor. Gets the Opt4J injector by Guice. */ // @Inject @@ -83,6 +91,9 @@ public class GuiceDecoder extends AbstractModule implements Decoder<Genotype, Ph // TODO(AD): See configure(): We need a service machenism and user configuration to select // the desired set of activated decoders. decodingInjector = opt4JProvider.get().get().createChildInjector(this); + GenotypeFinder genotypeFinder = new GenotypeFinder(); + @SuppressWarnings("unused") Set<Class<? extends Genotype>> reqGenotypes = + genotypeFinder.getGenotypesFor(Sets.newHashSet(resultType), decodingInjector); decodingInjector.getInstance(resultType); return composedPhenotype; } diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/graph/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/graph/.ratings index 5bf819a7..3c95bb39 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/graph/.ratings +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/graph/.ratings @@ -1,2 +1,4 @@ -DecoderDependencyGraph.java c2d1a8d6c86002c4faea11b6ab822b0d1bef408b RED -DecoderEdge.java b72d75a14a0cf4b7fd7c632951b6d88474a1ba56 RED +DecoderDependencyGraph.java c2d1a8d6c86002c4faea11b6ab822b0d1bef408b RED +DecoderEdge.java b72d75a14a0cf4b7fd7c632951b6d88474a1ba56 RED +GenotypeFinder.java 675edad7a91117ef3df77cde2b48f769c02f707f YELLOW +TransitiveDependencyVisitor.java ecb9b5c57877654e45e0392d6532e8d7a0a8b6e6 YELLOW diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/graph/GenotypeFinder.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/graph/GenotypeFinder.java new file mode 100644 index 00000000..675edad7 --- /dev/null +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/graph/GenotypeFinder.java @@ -0,0 +1,85 @@ +/*-------------------------------------------------------------------------+ +| 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.extensions.compositegene.graph; + +import java.util.Base64.Decoder; +import java.util.Iterator; +import java.util.List; +import java.util.Set; + +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype; +import org.opt4j.core.Genotype; + +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; +import com.google.inject.Binding; +import com.google.inject.Injector; +import com.google.inject.Key; + +/** + * Allows to retrieve the set of required {@link Genotype} that is needed to construct a given set + * of {@link Phenotype}. Therefore, a visitor is constructed that remembers the bindings to + * {@link Genotype}s in decode methods. The visitor traverses the dse-wide {@link Injector} (that + * includes the decoding {@link Injector}) to capture the dependencies of the decoding phase. + * This class is inspired by the InjectorGrapher of the Guice Grapher extension. + * + * @author diewald + */ +public class GenotypeFinder { + + /** Dependency tree visitor that remembers the visited {@link Genotype} bindings. */ + @SuppressWarnings("unchecked") + private TransitiveDependencyVisitor<Genotype> keyVisitor = new TransitiveDependencyVisitor<>( + Sets.newHashSet(Genotype.class)); + + /** + * Collects the set of {@link Genotype}s that is required to construct the set of given + * {@link Phenotype}s. + * + * @param phenotypes + * Set of requested {@link Phenotype}s (e.g., a schedule). + * @param injector + * DSE-wide inector to analyze the {@link Decoder} dependencies. + * @return Set of required {@link Genotype}s. + */ + public Set<Class<? extends Genotype>> getGenotypesFor( + Set<Class<? extends Phenotype>> phenotypes, Injector injector) { + Set<Key<?>> phenotypeKeys = Sets.newHashSet(); + phenotypes.forEach(p -> phenotypeKeys.add(Key.get(p))); + iterateBindings(injector, phenotypeKeys); + return keyVisitor.getFoundSubTypes(); + } + + /** Iterates over the bindings for the root keys and their transitive dependencies. */ + private void iterateBindings(Injector injector, Set<Key<?>> phenotypeKeys) { + Set<Key<?>> keys = Sets.newHashSet(phenotypeKeys); + Set<Key<?>> visitedKeys = Sets.newHashSet(); + List<Binding<?>> bindings = Lists.newArrayList(); + + while(!keys.isEmpty()) { + Iterator<Key<?>> iterator = keys.iterator(); + Key<?> key = iterator.next(); + iterator.remove(); + + if(!visitedKeys.contains(key)) { + Binding<?> binding = injector.getBinding(key); + bindings.add(binding); + visitedKeys.add(key); + keys.addAll(binding.acceptTargetVisitor(keyVisitor)); + } + } + } +} diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/graph/TransitiveDependencyVisitor.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/graph/TransitiveDependencyVisitor.java new file mode 100644 index 00000000..ecb9b5c5 --- /dev/null +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/graph/TransitiveDependencyVisitor.java @@ -0,0 +1,150 @@ +/* + * Copyright (C) 2008 Google Inc. + * Copyright (C) 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.extensions.compositegene.graph; + +import java.util.Collection; +import java.util.Set; + +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Sets; +import com.google.inject.Binder; +import com.google.inject.Binding; +import com.google.inject.Key; +import com.google.inject.spi.ConstructorBinding; +import com.google.inject.spi.ConvertedConstantBinding; +import com.google.inject.spi.DefaultBindingTargetVisitor; +import com.google.inject.spi.Dependency; +import com.google.inject.spi.HasDependencies; +import com.google.inject.spi.InstanceBinding; +import com.google.inject.spi.LinkedKeyBinding; +import com.google.inject.spi.ProviderBinding; +import com.google.inject.spi.ProviderInstanceBinding; +import com.google.inject.spi.ProviderKeyBinding; + +/** + * Walks the dependency graph from a given type that must have a Guice binding to obtain a list of + * relevant dependent types. These types have to be given at construction time. All dependent types + * bound in the graph that are a subtype of the given list is returned by + * {@link #getFoundSubTypes()}. + * This class is a modified version of the TransitiveDependencyVisitor class of the Grapher + * extension of google Guice. + * + * @author phopkins@gmail.com (Pete Hopkins) + * @author diewald@fortiss.org (Alexander Diewald) + */ +public class TransitiveDependencyVisitor<G> extends + DefaultBindingTargetVisitor<Object, Collection<Key<?>>> { + + /** + * Set of found types to which a dependency exists and which is compatible with any of the + * initially given type-set. + */ + private Set<Class<? extends G>> foundSubTypes = Sets.newHashSet(); + + /** Type set to filter while iterating over the graph. */ + private Collection<Class<?>> seekTypes = Sets.newHashSet(); + + /** Constructor. */ + public TransitiveDependencyVisitor(Collection<Class<?>> seekTypes) { + this.seekTypes = seekTypes; + } + + /** + * Iterates over the dependency tree spanned by the {@link Binder} and remembers every + * encountered type binding if it is a sub-type of the initially given set of types. + */ + private Collection<Key<?>> visitHasDependencies(HasDependencies hasDependencies) { + Set<Key<?>> dependencies = Sets.newHashSet(); + + for(Dependency<?> dependency : hasDependencies.getDependencies()) { + Key<?> key = dependency.getKey(); + addIfSubType(key); + dependencies.add(key); + } + + return dependencies; + } + + /** + * Adds the type wrapped by the given {@link Key} to the set of found types if it is a subtype + * of any of the initially given type set. + */ + @SuppressWarnings("unchecked") + private void addIfSubType(Key<?> key) { + Class<?> depClass = key.getTypeLiteral().getRawType(); + if(seekTypes.stream().anyMatch(c -> c.isAssignableFrom(depClass))) { + foundSubTypes.add((Class<? extends G>)depClass); + } + } + + /** Visits a {@link ConstructorBinding}. */ + @Override + public Collection<Key<?>> visit(ConstructorBinding<?> binding) { + return visitHasDependencies(binding); + } + + /** Visits a {@link ConvertedConstantBinding}. */ + @Override + public Collection<Key<?>> visit(ConvertedConstantBinding<?> binding) { + return visitHasDependencies(binding); + } + + /** Visits a {@link InstanceBinding}. */ + @Override + public Collection<Key<?>> visit(InstanceBinding<?> binding) { + return visitHasDependencies(binding); + } + + /** Visits a {@link LinkedKeyBinding}. */ + @Override + public Collection<Key<?>> visit(LinkedKeyBinding<?> binding) { + return ImmutableSet.<Key<?>>of(binding.getLinkedKey()); + } + + /** Visits a {@link ProviderBinding}. */ + @Override + public Collection<Key<?>> visit(ProviderBinding<?> binding) { + return ImmutableSet.<Key<?>>of(binding.getProvidedKey()); + } + + /** Visits a {@link ProviderInstanceBinding}. */ + @Override + public Collection<Key<?>> visit(ProviderInstanceBinding<?> binding) { + return visitHasDependencies(binding); + } + + /** Visits a {@link ProviderKeyBinding}. */ + @Override + public Collection<Key<?>> visit(ProviderKeyBinding<?> binding) { + return ImmutableSet.<Key<?>>of(binding.getProviderKey()); + } + + /** @since 4.0 */ + @Override + public Collection<Key<?>> visitOther(Binding<?> binding) { + return ImmutableSet.of(); + } + + /** + * Returns the set of types that are subtypes of the initial set of given types and to which a + * dependency exits. + */ + public Set<Class<? extends G>> getFoundSubTypes() { + return foundSubTypes; + } +} diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/safetyarch/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/safetyarch/.ratings index 91fd6866..6ef94c63 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/safetyarch/.ratings +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/safetyarch/.ratings @@ -1,5 +1,5 @@ -MutateChannelNumber.java f616faa5824fbfef7856192c8d5bd7c389eeb978 RED -MutateConnectedDiagnosisPresent.java 0156e6fbb1774823a5c8a3ee24dea809fd5e44a6 RED -MutateSafetyArchBase.java 29c91b28d8f1bb2e65add4525c6027942fc59a33 RED -MutateSafetyFunctionArchitectureModule.java bb771ba71ab6788b2b6bbf462a7a8da65cab5328 RED -MutateSafetyTriggerSignalNumber.java f3dbe9689e96ae5d8d4934f41123ab2af8d5183f RED +MutateChannelNumber.java f616faa5824fbfef7856192c8d5bd7c389eeb978 RED +MutateConnectedDiagnosisPresent.java 0156e6fbb1774823a5c8a3ee24dea809fd5e44a6 RED +MutateSafetyArchBase.java 29c91b28d8f1bb2e65add4525c6027942fc59a33 RED +MutateSafetyFunctionArchitectureModule.java b393d52af8444286b403b91221eb15cd9ee8511e RED +MutateSafetyTriggerSignalNumber.java f3dbe9689e96ae5d8d4934f41123ab2af8d5183f RED diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/safetyarch/MutateSafetyFunctionArchitectureModule.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/safetyarch/MutateSafetyFunctionArchitectureModule.java index bb771ba7..b393d52a 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/safetyarch/MutateSafetyFunctionArchitectureModule.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/safetyarch/MutateSafetyFunctionArchitectureModule.java @@ -28,7 +28,8 @@ import com.google.inject.Module; * * @author diewald */ -public class MutateSafetyFunctionArchitectureModule extends MutateOperatorModuleBase { +public class MutateSafetyFunctionArchitectureModule extends MutateOperatorModuleBase implements + Module { /** {@inheritDoc} */ @SuppressWarnings({"rawtypes"}) @Override diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/.ratings index a869f32a..135c19b0 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/.ratings +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/.ratings @@ -1,7 +1,7 @@ -ArchitectureDecoder.java d067dc995e0895860d98d717647c0f7b061f5908 RED -ArchitectureExplorationProblemModule.java 12878158971065df3395a6474ca86b785e667f52 RED -DseProblemModuleBase.java 0eba41852529e92e7255c7a7d8fce18354facbca RED -EvaluatorWrapper.java 3747e5b78b1dcef8e1595c1ae9354e8ef2738e79 RED -ExplorationGoalPriorityMultiEvaluator.java 1f6d2aa6ece8acdf4f57face0439f3429ab87329 RED -ProblemModuleBase.java 460f7a8a07435eb13634caa9072e425bdf20e399 RED -StrictTTDecoder.java d55ece0076bec24d74fd18dae3e33aaa9d2ac854 RED +ArchitectureDecoder.java d067dc995e0895860d98d717647c0f7b061f5908 RED +ArchitectureExplorationProblemModule.java a856314dfb6f0b4e3a0f7af28fcede66563dac74 RED +DseProblemModuleBase.java 0eba41852529e92e7255c7a7d8fce18354facbca RED +EvaluatorWrapper.java 3747e5b78b1dcef8e1595c1ae9354e8ef2738e79 RED +ExplorationGoalPriorityMultiEvaluator.java 1f6d2aa6ece8acdf4f57face0439f3429ab87329 RED +ProblemModuleBase.java 460f7a8a07435eb13634caa9072e425bdf20e399 RED +StrictTTDecoder.java d55ece0076bec24d74fd18dae3e33aaa9d2ac854 RED diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/ArchitectureExplorationProblemModule.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/ArchitectureExplorationProblemModule.java index 12878158..a856314d 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/ArchitectureExplorationProblemModule.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/ArchitectureExplorationProblemModule.java @@ -15,18 +15,26 @@ +--------------------------------------------------------------------------*/ package org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem; +import static com.google.common.collect.Sets.newHashSet; import static org.fortiss.af3.exploration.alg.util.ExplorationAlgUtils.rethrow; +import java.util.Collection; import java.util.Set; import org.fortiss.af3.exploration.alg.dse.DSEFactory; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.ArchitectureExplorationEncoding; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.FailSilentTaskMappingEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.create.GuiceCreator; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.decode.GuiceDecoder; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.graph.GenotypeFinder; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.solution.ArchitectureSolution; import org.fortiss.af3.exploration.alg.dse.evaluator.ArchitectureEvaluator; import org.fortiss.af3.exploration.alg.service.IExplorationEncoding; import org.fortiss.af3.exploration.moea.model.DseSpecification; +import org.opt4j.core.Genotype; + +import com.google.inject.Injector; /** * Problem module for fail-silent execution model, that encapsulates a creator, a decoder and @@ -41,10 +49,14 @@ public class ArchitectureExplorationProblemModule /** To be removed. */ DSEFactory dseFactory = DSEFactory.getInstance(); + /** Reference to the DSE-wide {@link Injector} to allow access to the system model parameters. */ + private Injector dseInjector; + /** Constructor. */ - public ArchitectureExplorationProblemModule(DseSpecification dse, + public ArchitectureExplorationProblemModule(DseSpecification dse, Injector dseInjector, Set<Class<? extends IExplorationEncoding>> requestedSolutions) { super(dse, null, requestedSolutions); + this.dseInjector = dseInjector; dseFactory.init(null); } @@ -66,7 +78,12 @@ public class ArchitectureExplorationProblemModule // bindProblem(dseFactory.createArchitectureExplorationCreator(), // dseFactory.createArchitectureDecoder(execDepGraph), archEvaluator); - bindProblem(new GuiceCreator(), new GuiceDecoder(), archEvaluator); + Class<? extends Phenotype> resultType = FailSilentTaskMappingEncoding.class; + GuiceDecoder guiceDecoder = new GuiceDecoder(resultType); + Collection<Class<? extends Genotype>> requiredGenotypes = + findRequiredGenotypes(resultType, guiceDecoder); + bindProblem(new GuiceCreator(requiredGenotypes), new GuiceDecoder(resultType), + archEvaluator); // Create/Bind the subproblems of the architectural exploration problem. try { @@ -84,4 +101,16 @@ public class ArchitectureExplorationProblemModule throw rethrow(e); } } + + /** + * Returns the collection of {@link Genotype}s that are required as inputs to decoders to obtain + * the requested {@link Phenotype}. + */ + @SuppressWarnings("unchecked") + private Collection<Class<? extends Genotype>> findRequiredGenotypes( + Class<? extends Phenotype> resultType, GuiceDecoder guiceDecoder) { + Injector decodingInjector = dseInjector.createChildInjector(guiceDecoder); + GenotypeFinder genotypeFinder = new GenotypeFinder(); + return genotypeFinder.getGenotypesFor(newHashSet(resultType), decodingInjector); + } } diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/.ratings index 3d0f9a8a..59176915 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/.ratings +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/.ratings @@ -1,2 +1,2 @@ -FailSilentExecModelFactory.java 5811c8cba759f3e7ca5809e6021a64f4a5188788 RED -FaultDetectionVotingExecModelFactory.java 0d0d9cf608f95f1dfe3afd653049ae2f3bb19d5a RED +FailSilentExecModelFactory.java ef5705dced9c886160ad0e0bf6288f3c207c9b91 RED +FaultDetectionVotingExecModelFactory.java 27c16654d0be4a31c80801ce2af1cb73ecc23b0b RED diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/FailSilentExecModelFactory.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/FailSilentExecModelFactory.java index 5811c8cb..ef5705dc 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/FailSilentExecModelFactory.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/FailSilentExecModelFactory.java @@ -84,7 +84,7 @@ public class FailSilentExecModelFactory extends @Override public TaskMappingCreator<FailSilentTaskMappingEntry, FailSilentTaskMappingEncoding> createTaskMappingCreator(DecoderDependencyGraph execDepGraph) { - return new FailSilentTaskMappingCreator(execDepGraph); + return new FailSilentTaskMappingCreator(); } /* Construct execution model specific operators. */ diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/FaultDetectionVotingExecModelFactory.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/FaultDetectionVotingExecModelFactory.java index 0d0d9cf6..27c16654 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/FaultDetectionVotingExecModelFactory.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/FaultDetectionVotingExecModelFactory.java @@ -89,7 +89,7 @@ public class FaultDetectionVotingExecModelFactory public TaskMappingCreator<FaultDetectionVotingTaskMappingEntry, FaultDetectionVotingTaskMappingEncoding> createTaskMappingCreator(DecoderDependencyGraph execDepGraph) { - return new FaultDetectionVotingTaskMappingCreator(execDepGraph); + return new FaultDetectionVotingTaskMappingCreator(); } /* Construct execution model specific operators. */ diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/.ratings index 262a281c..8b4bf19d 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/.ratings +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/.ratings @@ -1,17 +1,17 @@ -ICommunicationResourceAdapter.java 05fba6a2c158545f28393eb4c845b2ace86eb99d RED -IComponentAdapter.java 2dfb64428d4edc278e6b5f7c3f21e44d07196917 RED -IExecutionUnitAdapter.java a73348f4bff9a9c8f4a3f0e60177490e2e228388 RED -IGatewayUnitAdapter.java dcf6aa0afcb20d3035b3034e2183c5dfc867e9b9 RED -ILogicalArchitectureAdapter.java 2dea1c829c1542ffa788b669ae979854ae7e8480 RED -IMemoryUnitAdapter.java c4093302720e21dec978479051184c842f1061d4 RED -IModelElementAdapter.java a7620a897eb9ebfdcaf869ebb25e112d900b5622 RED -IPlatformArchitectureAdapter.java 399d3cdff468c5ac95ca4cf6f17caabdeb2fef16 RED -IRequestAdapter.java d9298837caf9e15971471aae0bb567e416e82a41 RED -IResourceAdapter.java 4d41218b96f25daedad66098250baf622a3f89b3 RED -IResourceConnectionAdapter.java 67d0a7f54de3e3fe21532fc33f6b853eb844b993 RED -ISafetyFunctionAdapter.java 6a16258729ba9dff91c35285d18bc06cc99a713a RED -ISignalAdapter.java 2bdb578564cf1d3351c99811c9090e2e9bd70715 RED -ITaskAdapter.java 0f8c8699bb48e609211713aef6a7e1e82a00c963 RED -ITransmissionUnitAdapter.java 217aca158641261dc8035805f341fe4c4c527a36 RED -InternalComponentParameters.java cd5eea4ddf104c4cb3c4521d3256566812876027 RED -SystemModelAdapter.java 4c99efd7137bcef08924bf6c5d28d35bab722676 RED +ICommunicationResourceAdapter.java 05fba6a2c158545f28393eb4c845b2ace86eb99d RED +IComponentAdapter.java 2dfb64428d4edc278e6b5f7c3f21e44d07196917 RED +IExecutionUnitAdapter.java a73348f4bff9a9c8f4a3f0e60177490e2e228388 RED +IGatewayUnitAdapter.java dcf6aa0afcb20d3035b3034e2183c5dfc867e9b9 RED +ILogicalArchitectureAdapter.java 2dea1c829c1542ffa788b669ae979854ae7e8480 RED +IMemoryUnitAdapter.java c4093302720e21dec978479051184c842f1061d4 RED +IModelElementAdapter.java a7620a897eb9ebfdcaf869ebb25e112d900b5622 RED +IPlatformArchitectureAdapter.java 399d3cdff468c5ac95ca4cf6f17caabdeb2fef16 RED +IRequestAdapter.java d9298837caf9e15971471aae0bb567e416e82a41 RED +IResourceAdapter.java 4d41218b96f25daedad66098250baf622a3f89b3 RED +IResourceConnectionAdapter.java 67d0a7f54de3e3fe21532fc33f6b853eb844b993 RED +ISafetyFunctionAdapter.java 6a16258729ba9dff91c35285d18bc06cc99a713a RED +ISignalAdapter.java 2bdb578564cf1d3351c99811c9090e2e9bd70715 RED +ITaskAdapter.java 0f8c8699bb48e609211713aef6a7e1e82a00c963 RED +ITransmissionUnitAdapter.java 217aca158641261dc8035805f341fe4c4c527a36 RED +InternalComponentParameters.java cd5eea4ddf104c4cb3c4521d3256566812876027 RED +SystemModelAdapter.java 2927e62f6642b78e9caf6bb61f8b0d39f93f7e87 RED diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/SystemModelAdapter.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/SystemModelAdapter.java index 4c99efd7..2927e62f 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/SystemModelAdapter.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/SystemModelAdapter.java @@ -536,6 +536,7 @@ public class SystemModelAdapter<C, E, SO, SI, G, TR, M> extends AbstractModule { * present in the input models. */ @SuppressWarnings("unchecked") + @Provides public Collection<ISafetyFunctionAdapter<?>> getSafetyFunctionAdapters() { if(safetyFunctionAdapters != null) { return (Collection<ISafetyFunctionAdapter<?>>)(Collection<?>)safetyFunctionAdapters; diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/service/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/service/.ratings index d759d1d4..4072df2b 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/service/.ratings +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/service/.ratings @@ -1,14 +1,14 @@ -ExplorationEncodingMap.java aaea06f5731018d159a04266c92f1a701e461323 RED -ExplorationServiceManager.java 6b15f230dd0cac5f3a9b954da805526da7358ad1 RED -ExplorationTransformationInputs.java 3374ce609b50e69c3c29f1eb79bee25cd06b181d RED -IExplorationConstraintTransformationService.java 48b673e1fb69c05e35c4e60ecf73b8f708cfcf0e RED -IExplorationContraintTransformationModule.java 1d3560401275f719e2b9901d1639a6be6bd7c169 RED -IExplorationEncoding.java f58adbcf840af521333c2777f50041a60548bff3 RED -IExplorationEvaluatationService.java c79cd47a3eac58d56071e51bb5465efefa226fc5 RED -IExplorationExtension.java c2a148e18c580d2432357e93da45e7bf7df8eb0c RED -IExplorationModuleService.java 91a12b02e4c5a4a94b5e1dd644fe357f96ca7814 YELLOW -IExplorationRepairService.java 879d73fce129cd3c4c6fd2819a5c4ed0a625c55b RED -IExplorationService.java 5aaf2b75e88e4ee1b1a206c00e77dd173a5cdeb5 RED -IExplorationTargetEvaluator.java 99c27a053a123462b8a4faadc9c3530fe6bc0c67 RED -IExplorationTransformationService.java eed8f4a86eda433c2fc0af00fbef31dbd942c9f0 RED -IRepairModule.java 0cca5fea3835e4fccc151eec42232ad0e6c88e66 RED +ExplorationEncodingMap.java aaea06f5731018d159a04266c92f1a701e461323 RED +ExplorationServiceManager.java 6b15f230dd0cac5f3a9b954da805526da7358ad1 RED +ExplorationTransformationInputs.java 3374ce609b50e69c3c29f1eb79bee25cd06b181d RED +IExplorationConstraintTransformationService.java 48b673e1fb69c05e35c4e60ecf73b8f708cfcf0e RED +IExplorationContraintTransformationModule.java 1d3560401275f719e2b9901d1639a6be6bd7c169 RED +IExplorationEncoding.java f58adbcf840af521333c2777f50041a60548bff3 RED +IExplorationEvaluatationService.java c79cd47a3eac58d56071e51bb5465efefa226fc5 RED +IExplorationExtension.java c2a148e18c580d2432357e93da45e7bf7df8eb0c RED +IExplorationModuleService.java 55f602c4ba4cb80de3d249e1722819482828a471 RED +IExplorationRepairService.java 879d73fce129cd3c4c6fd2819a5c4ed0a625c55b RED +IExplorationService.java 5aaf2b75e88e4ee1b1a206c00e77dd173a5cdeb5 RED +IExplorationTargetEvaluator.java 99c27a053a123462b8a4faadc9c3530fe6bc0c67 RED +IExplorationTransformationService.java eed8f4a86eda433c2fc0af00fbef31dbd942c9f0 RED +IRepairModule.java 0cca5fea3835e4fccc151eec42232ad0e6c88e66 RED diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/service/IExplorationModuleService.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/service/IExplorationModuleService.java index 91a12b02..55f602c4 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/service/IExplorationModuleService.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/service/IExplorationModuleService.java @@ -21,12 +21,12 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegen import org.fortiss.af3.exploration.alg.dse.module.CreatorModule; import org.fortiss.af3.exploration.alg.dse.module.DecoderModule; import org.fortiss.af3.exploration.alg.dse.module.EvaluatorModule; -import org.fortiss.af3.exploration.alg.dse.module.OperatorModule; import org.opt4j.core.Genotype; import org.opt4j.core.optimizer.Operator; import org.opt4j.core.problem.Creator; import org.opt4j.core.problem.Decoder; import org.opt4j.core.problem.Evaluator; +import org.opt4j.operators.OperatorModule; import com.google.inject.AbstractModule; @@ -65,7 +65,7 @@ public interface IExplorationModuleService extends IExplorationService { * modifications applied during the process iterations. */ <G extends Genotype> void registerVariable(Class<G> genotype, CreatorModule<G> creator, - OperatorModule<G> operator); + OperatorModule<?> operator); /** * Registers a problem definition with the DSE process. The {@code phenotype} is equivalent to diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/service/internal/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/service/internal/.ratings index f42c4ba7..78a31166 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/service/internal/.ratings +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/service/internal/.ratings @@ -1,5 +1,5 @@ -ExplorationConstraintTransformationService.java 5e7117398827ae129b3c9a8a16457d816ba665a7 RED -ExplorationEvaluationService.java ed22af146e8230a39a47ba60224b824b6d0ac599 RED -ExplorationModuleService.java 18799dc62ecdfccfe635d9a168f6c22e0e662a0b YELLOW -ExplorationRepairService.java 940ceda7c8c48f282132355249af1fe0a005c0f5 RED -ExplorationTransformationService.java 36e2368dd6098e1f3aa210a6defd4f269628e28a RED +ExplorationConstraintTransformationService.java 5e7117398827ae129b3c9a8a16457d816ba665a7 RED +ExplorationEvaluationService.java ed22af146e8230a39a47ba60224b824b6d0ac599 RED +ExplorationModuleService.java c3ae40f2c20e38c7aa7a3f24a9ace41b59e421d3 YELLOW +ExplorationRepairService.java 940ceda7c8c48f282132355249af1fe0a005c0f5 RED +ExplorationTransformationService.java 36e2368dd6098e1f3aa210a6defd4f269628e28a RED diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/service/internal/ExplorationModuleService.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/service/internal/ExplorationModuleService.java index 18799dc6..c3ae40f2 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/service/internal/ExplorationModuleService.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/service/internal/ExplorationModuleService.java @@ -24,13 +24,13 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegen import org.fortiss.af3.exploration.alg.dse.module.CreatorModule; import org.fortiss.af3.exploration.alg.dse.module.DecoderModule; import org.fortiss.af3.exploration.alg.dse.module.EvaluatorModule; -import org.fortiss.af3.exploration.alg.dse.module.OperatorModule; import org.fortiss.af3.exploration.alg.exception.ExplorationServiceRuntimeException; import org.fortiss.af3.exploration.alg.service.IExplorationModuleService; import org.fortiss.tooling.kernel.introspection.IIntrospectionDetailsItem; import org.fortiss.tooling.kernel.introspection.IIntrospectionItem; import org.opt4j.core.Genotype; import org.opt4j.core.problem.Decoder; +import org.opt4j.operators.OperatorModule; import com.google.common.collect.ClassToInstanceMap; import com.google.common.collect.MutableClassToInstanceMap; @@ -88,7 +88,7 @@ public class ExplorationModuleService implements IExplorationModuleService { /** {@inheritDoc} */ @Override public <G extends Genotype> void registerVariable(Class<G> genotype, CreatorModule<G> creator, - OperatorModule<G> operator) { + OperatorModule<?> operator) { // Input check: Allow only fully specified variable registrations. if(genotype == null) { throw new ExplorationServiceRuntimeException(getClass(), "The passed genotype is null!"); @@ -105,8 +105,8 @@ public class ExplorationModuleService implements IExplorationModuleService { throw new ExplorationServiceRuntimeException(getClass(), "The module " + creatorClass.getSimpleName() + " has already been registered!"); } - @SuppressWarnings("unchecked") Class<OperatorModule<G>> operatorClass = - (Class<OperatorModule<G>>)operator.getClass(); + @SuppressWarnings("unchecked") Class<OperatorModule<?>> operatorClass = + (Class<OperatorModule<?>>)operator.getClass(); if(registeredExpModules.getInstance(operatorClass) != null) { throw new ExplorationServiceRuntimeException(getClass(), "The module " + operatorClass.getSimpleName() + " has already been registered!"); -- GitLab