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 8d0110b243dc7321df8a630bd536313ca9d70853..fd69979b18663e90a6f14902dc35b70d9404553b 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 ccdbcb35619af73a4bfc73bbcb8ff255e360151e RED +ExplorationAlg.java fbb9547b59a46da10a25bef60a04ef2060d8c277 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 ccdbcb35619af73a4bfc73bbcb8ff255e360151e..fbb9547b59a46da10a25bef60a04ef2060d8c277 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,8 +20,25 @@ 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.encoding.comm.MessageEncoding; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.platform.PlatformCommunicationGraphEncoding; +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.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; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.instantiatetaskgraph.InstantiatedTaskMappingDecoderAcyclic; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.partitionmapping.PartitionMappingDecoderGraph; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.safetyfunction.SFGraphDecoder; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.safetyfunction.SFMappingDecoder; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.taskmapping.AbstractTaskMappingIdentityDecoder; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.taskmapping.instantiate.FailSilentAbstractTaskMappingDecoder; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.taskmapping.instantiate.TaskInstanceResourceAlignmentDecoder; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.solution.StrictTTSchedule; import org.fortiss.af3.exploration.alg.service.IExplorationConstraintTransformationService; import org.fortiss.af3.exploration.alg.service.IExplorationEvaluatationService; import org.fortiss.af3.exploration.alg.service.IExplorationModuleService; @@ -90,9 +107,58 @@ public final class ExplorationAlg implements IStartup { } /** Registers the exploration modules bundled with this plugin. */ + @SuppressWarnings("unchecked") private static void registerExplorationModules() { + // Functional groups of Decoders. + registerSafetyFunctionModules(); + 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()); + } + + /** Registers problem modules related to safety functions. */ + @SuppressWarnings("unchecked") + private static void registerSafetyFunctionModules() { + getService(IExplorationModuleService.class).registerProblem( + AbstractTaskMappingEncoding.class, new SFMappingDecoder()); + // TODO: ConstraintDecoder + // getService(IExplorationModuleService.class).registerProblem( + // AbstractTaskMappingEncoding.class, new SFMappingConstraintDecoder()); + getService(IExplorationModuleService.class).registerProblem(SafeTaskGraphEncoding.class, + new SFGraphDecoder()); + } + + /** Registers all problem modules related to task mapping. */ + private static void registerTaskMappingModules() { + getService(IExplorationModuleService.class).registerProblem( + AbstractTaskMappingEncoding.class, new AbstractTaskMappingIdentityDecoder()); getService(IExplorationModuleService.class).registerProblem( FailSilentTaskMappingEncoding.class, new FailSilentAbstractTaskMappingDecoder()); + // getService(IExplorationModuleService.class).registerProblem( + // FaultDetectionVotingTaskMappingEncoding.class, + // new FaultDetectionVotingAbstractTaskMappingDecoder()); + getService(IExplorationModuleService.class).registerProblem( + InstantiatedTaskMappingEncoding.class, new TaskInstanceResourceAlignmentDecoder()); + } + + /** + * Registers all modules related to the derivation of task graphs from instantiated task + * mappings. + */ + @SuppressWarnings("unchecked") + private static void registerInstTaskGraphModules() { + getService(IExplorationModuleService.class).registerProblem( + InstantiatedTaskGraphEncoding.class, new InstantiatedTaskMappingDecoder()); + getService(IExplorationModuleService.class).registerProblem( + InstantiatedAcyclicTaskGraphEncoding.class, + new InstantiatedTaskMappingDecoderAcyclic()); } /** Register the DSE backend with the exploration plugin. */ 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 6f8381095a44618494b011cddc9c36ddb61fa6f6..7d71b68721299dd6cc17daddd5d1c618a0b3bb37 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 cf3435218c79fa80143333a1a24e77f653203563 RED +DSEFactory.java c033d4fb34746a0f712be1d99e648d3c95623497 RED Explorer.java 48ce78929632a9b78b4c809c7719eb5aa46d21df RED ImplicitExplorationTargetFactory.java 25c3c668ed268843f8af7e37eb03370ed513b482 RED SolutionQuantification.java 19cd7caa721bbca3112af7825c7fb20a96a4a799 RED -TaskMappingFactory.java d80e505c8a1b660a083a9e6f50d6fddbbb365d1e RED +TaskMappingFactory.java 7fc51aac3a3f0342c7fbee01db0dd7c17251e49b 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 cf3435218c79fa80143333a1a24e77f653203563..c033d4fb34746a0f712be1d99e648d3c95623497 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 @@ -43,18 +43,7 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegen import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.problem.CompositeProblemModuleBase; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.ArchitectureDecoder; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.ArchitectureExplorationProblemModule; -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; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.instantiatetaskgraph.InstantiatedTaskMappingDecoderAcyclic; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.partitionmapping.PartitionMappingDecoderGraph; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.partitionmapping.PartitionMappingIdentityDecoder; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.safetyfunction.SFEncodingDecoder; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.safetyfunction.SFGraphDecoder; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.safetyfunction.SFMappingConstraintDecoder; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.safetyfunction.SFMappingDecoder; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.taskmapping.AbstractTaskMappingIdentityDecoder; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.taskmapping.instantiate.TaskInstanceResourceAlignmentDecoder; import org.fortiss.af3.exploration.alg.dse.evaluator.ArchitectureEvaluator; import org.fortiss.af3.exploration.alg.dse.sysmodel.FailSilentExecModelFactory; import org.fortiss.af3.exploration.alg.dse.sysmodel.FaultDetectionVotingExecModelFactory; @@ -152,32 +141,16 @@ public class DSEFactory { * if (one of) the sub problem(s) cannot be registered. */ @SuppressWarnings("unchecked") - private <C, T extends SafetyFunctionArchEncoding<C>> void createSafetyFunctionArchProblem( + private <C, T extends SafetyFunctionArchEncoding> void createSafetyFunctionArchProblem( ArchitectureExplorationProblemModule archExpProblemModule, DecoderDependencyGraph execDepGraph) throws Exception { // These suppress warnings are required since type erasure in Java does not allow to pass // XY<Z>.class. - @SuppressWarnings("rawtypes") SafetyFunctionArchCreator sfCreator = + SafetyFunctionArchCreator sfCreator = new SafetyFunctionArchCreator(systemModelAdapter.getSafetyFunctionAdapters(), execDepGraph); - @SuppressWarnings("rawtypes") SFEncodingDecoder sfEncodingDecoder = - new SFEncodingDecoder<>(); - @SuppressWarnings("rawtypes") SFGraphDecoder sfGraphDecoder = - new SFGraphDecoder(systemModelAdapter.getTaskGraphs()); - @SuppressWarnings("rawtypes") SFMappingDecoder sfMappingDecoder = new SFMappingDecoder(); - @SuppressWarnings("rawtypes") SFMappingConstraintDecoder sfMappingConstraintDecoder = - new SFMappingConstraintDecoder(); - - sfCreator.registerAssocDecoders(sfEncodingDecoder); - sfCreator.registerAssocDecoders(sfGraphDecoder); - sfCreator.registerAssocDecoders(sfMappingDecoder); - sfCreator.registerAssocDecoders(sfMappingConstraintDecoder); @SuppressWarnings("rawtypes") List<ComposableDecoder> sfDecoders = new ArrayList<>(); - sfDecoders.add(sfEncodingDecoder); - sfDecoders.add(sfGraphDecoder); - sfDecoders.add(sfMappingDecoder); - sfDecoders.add(sfMappingConstraintDecoder); execDepGraph.addCreatedEncoding(sfCreator.getCreatedEncodingType()); archExpProblemModule.registerSubProblem(SafetyFunctionArchEncoding.class, sfCreator, @@ -209,12 +182,6 @@ public class DSEFactory { .getDeployableComponents().size()); @SuppressWarnings("rawtypes") List<ComposableDecoder> pmDecoders = new ArrayList<>(); - PartitionMappingIdentityDecoder pmDecoder = new PartitionMappingIdentityDecoder(); - TaskInstanceResourceAlignmentDecoder tiraDecoder = - new TaskInstanceResourceAlignmentDecoder(); - pmDecoders.add(pmDecoder); - pmDecoders.add(tiraDecoder); - pmCreator.registerAssocDecoders(pmDecoder); execDepGraph.addCreatedEncoding(pmCreator.getCreatedEncodingType()); archExpProblemModule.registerSubProblem(pmEnodingClass, pmCreator, pmDecoders); } @@ -243,7 +210,6 @@ public class DSEFactory { @SuppressWarnings("rawtypes") List<ComposableDecoder> pmDecoders = new ArrayList<>(); PartitionMappingDecoderGraph pmgDecoder = new PartitionMappingDecoderGraph(); - pmDecoders.add(pmgDecoder); execDepGraph.addCreatedEncoding(pmCreator.getCreatedEncodingType()); archExpProblemModule.registerSubProblem(pmEnodingClass, pmCreator, pmDecoders); } @@ -275,12 +241,7 @@ public class DSEFactory { AbstractTaskMappingCreator tmCreator = tmFactory.createAbstractTaskMappingCreator(execDepGraph); @SuppressWarnings("rawtypes") List<ComposableDecoder> abstrTaskDecoders = new ArrayList<>(); - AbstractTaskMappingIdentityDecoder idtDecoder = new AbstractTaskMappingIdentityDecoder(); - // abstrTaskDecoders.add(atmDecoder); - abstrTaskDecoders.add(idtDecoder); - // TODO: replace with the registration method that uses lists. - // tmCreator.registerAssocDecoders(atmDecoder); - tmCreator.registerAssocDecoders(idtDecoder); + // AbstractTaskMappingIdentityDecoder idtDecoder = new AbstractTaskMappingIdentityDecoder(); execDepGraph.addCreatedEncoding(tmCreator.getCreatedEncodingType()); archExpProblemModule.registerSubProblem(tmEnodingClass, tmCreator, abstrTaskDecoders); @@ -312,24 +273,12 @@ public class DSEFactory { DseSpecification dse, DecoderDependencyGraph execDepGraph) throws Exception { // These suppress warnings are required since type erasure in Java does not allow to pass // XY<Z>.class. - StrictTTDecoder<S, T> tmDecoder = tmFactory.createStrictTTDecoder(dse); - InstantiatedTaskMappingDecoder<S, ?> tgDecoder = - tmFactory.createInstantiatedTaskMappingDecoder(); - InstantiatedTaskMappingDecoderAcyclic<S, ?> acycTgDecoder = - tmFactory.createAbstractToAcyclicTaskGraphDecoder(); - @SuppressWarnings("rawtypes") MessageDecoder msgDecoder = tmFactory.createMessageDecoder(); @SuppressWarnings("rawtypes") TaskMappingCreator tmCreator = tmFactory.createTaskMappingCreator(execDepGraph); - @SuppressWarnings("rawtypes") List<ComposableDecoder> instTaskDecoders = new ArrayList<>(); - instTaskDecoders.add(tgDecoder); - instTaskDecoders.add(acycTgDecoder); - instTaskDecoders.add(msgDecoder); - instTaskDecoders.add(tmDecoder); - tmCreator.registerAssocDecoders(instTaskDecoders); execDepGraph.addCreatedEncoding(tmCreator.getCreatedEncodingType()); archExpProblemModule.registerSubProblem(InstantiatedTaskMappingEncoding.class, tmCreator, - instTaskDecoders); + 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 d80e505c8a1b660a083a9e6f50d6fddbbb365d1e..7fc51aac3a3f0342c7fbee01db0dd7c17251e49b 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 @@ -19,7 +19,6 @@ import java.util.Collection; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.create.taskmapping.AbstractTaskMappingCreator; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.create.taskmapping.TaskMappingCreator; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph.InstantiatedTaskGraphEncoding; 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.encoding.taskmapping.abstractmapping.AbstractTaskMappingEncoding; @@ -43,11 +42,9 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.mapping.comm.IMessageRouter; import org.fortiss.af3.exploration.alg.dse.sysmodel.mapping.comm.ShortestPathRouter; import org.fortiss.af3.exploration.alg.dse.sysmodel.sched.proc.EDFSchedulerBase; import org.fortiss.af3.exploration.alg.service.internal.ExplorationEvaluationService; -import org.fortiss.af3.exploration.model.ExplorationSpecification; import org.fortiss.af3.exploration.model.ExplorationTarget; import org.fortiss.af3.exploration.model.time.DeadlineConstraint; import org.fortiss.af3.exploration.model.time.PeriodConstraint; -import org.fortiss.af3.exploration.moea.model.DseSpecification; import org.fortiss.af3.exploration.moea.model.predefined.ComponentMultiAllocationConstraint; import org.fortiss.af3.exploration.moea.model.predefined.ComponentMultiDislocationConstraint; import org.fortiss.af3.exploration.moea.model.predefined.FailureMinObjective; @@ -199,8 +196,7 @@ public abstract class TaskMappingFactory<S extends InstantiatedTaskMappingEntry, */ // TODO: remove these suppress warnings by propagating the generic C. @SuppressWarnings({"rawtypes", "unchecked"}) - public InstantiatedTaskMappingDecoder<S, InstantiatedTaskGraphEncoding> - createInstantiatedTaskMappingDecoder() { + public InstantiatedTaskMappingDecoder<S> createInstantiatedTaskMappingDecoder() { return new InstantiatedTaskMappingDecoder(); } @@ -211,7 +207,7 @@ public abstract class TaskMappingFactory<S extends InstantiatedTaskMappingEntry, * The system model deduced from the logical and technical architecture. * @return An instance on an {@link InstantiatedTaskMappingDecoderAcyclic}. */ - public InstantiatedTaskMappingDecoderAcyclic<S, ?> createAbstractToAcyclicTaskGraphDecoder() { + public InstantiatedTaskMappingDecoderAcyclic<S> createAbstractToAcyclicTaskGraphDecoder() { throw new UnsupportedOperationException( "The Decoder to instantiate an \"abstract\" and acyclic Task Graph has not been defined for current Execution Model."); } @@ -239,7 +235,7 @@ public abstract class TaskMappingFactory<S extends InstantiatedTaskMappingEntry, * the decoding strategy. * @return instance of a {@link StrictTTDecoder} */ - public StrictTTDecoder<S, T> createStrictTTDecoder(DseSpecification explorationDefinition) { + public StrictTTDecoder<S, T> createStrictTTDecoder() { throw new UnsupportedOperationException(SCHED_NOT_IMPL_MSG); } @@ -260,7 +256,7 @@ public abstract class TaskMappingFactory<S extends InstantiatedTaskMappingEntry, * DSE goal specification used within the exploration, useful for scheduling * @return instance of the EDF schedule decoder. */ - public EDFSchedulerBase<?, ?> createEDFScheduler(ExplorationSpecification expSpec) { + public EDFSchedulerBase<?, ?> createEDFScheduler() { throw new UnsupportedOperationException(SCHED_NOT_IMPL_MSG); } 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 bb2619f095a49b2b3c13ca939d7ff6c16e41ae6e..9c1c8f255af7a0b7ac2f2354e0a5728163587db0 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,4 +1,4 @@ Opt4JDseTask.java b5cb9e664e7a8fc2b5157bcdcaca740c2fa85336 YELLOW Opt4JExplorationSolutionSet.java 8578ee9c438bc3327a64172e996306a89606c782 RED -Opt4JExplorerBackend.java beb1fb9bcf27974bb99d1c626a3346daf67334db RED +Opt4JExplorerBackend.java 8c673d28854328635af99c0df5ce2864b9bc2262 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 beb1fb9bcf27974bb99d1c626a3346daf67334db..8c673d28854328635af99c0df5ce2864b9bc2262 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 @@ -88,8 +88,6 @@ public class Opt4JExplorerBackend extends ExplorerBackendBase<EAOptimizer> { /** EA parameters. */ private EAOptimizer opt4JParameters; - // public static Injector DseInjector = Guice.createInjector(); - /** * Contains the problem module that includes the evaluators associated with the goals of the * DSE. diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/InitialEncodingProvider.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/InitialEncodingProvider.java deleted file mode 100644 index d378a0d5e952144ee93eff3557bd2253f84e62a9..0000000000000000000000000000000000000000 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/InitialEncodingProvider.java +++ /dev/null @@ -1,85 +0,0 @@ -/*-------------------------------------------------------------------------+ -| Copyright 2018 fortiss GmbH | -| | -| Licensed under the Apache License, Version 2.0 (the "License"); | -| you may not use this file except in compliance with the License. | -| You may obtain a copy of the License at | -| | -| http://www.apache.org/licenses/LICENSE-2.0 | -| | -| Unless required by applicable law or agreed to in writing, software | -| distributed under the License is distributed on an "AS IS" BASIS, | -| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | -| See the License for the specific language governing permissions and | -| limitations under the License. | -+--------------------------------------------------------------------------*/ -package org.fortiss.af3.exploration.alg.dse.backend.opt4j.create; - -import java.util.HashMap; -import java.util.Map; -import java.util.Set; - -import org.fortiss.af3.exploration.alg.service.IExplorationEncoding; -import org.opt4j.core.Genotype; - -/** - * Holds encodings which are generated from the input models. In contrast to {@link Genotype}s, they - * are not considered as variables by the optimizer. - * Nevertheless, this provider may also hold {@link Genotype} encodings for the case that an - * exploration feature is disabled, but it's outputs would be required by dependent features. The - * provider is responsible to provide the required inputs iff these inputs can be constructed from - * the input models. - * - * @author diewald - */ -public class InitialEncodingProvider { - /** Holds the instance. */ - private volatile static InitialEncodingProvider INSTANCE; - - /** Constructor. */ - private InitialEncodingProvider() { - // Prevent direct instantiation of this singleton. - } - - /** Returns the instance of this singleton. */ - public static synchronized InitialEncodingProvider getInstance() { - if(INSTANCE == null) { - INSTANCE = new InitialEncodingProvider(); - } - return INSTANCE; - } - - /** - * Maintains a map of {@link IExplorationEncoding}s that can be constructed from the input - * models. - */ - private Map<Class<? extends IExplorationEncoding>, IExplorationEncoding> inputEncodings = - new HashMap<>(); - - /** Registers a given input encoding that is constructed from the input models. */ - public <T extends IExplorationEncoding> void registerInputEncoding(T encoding) { - @SuppressWarnings("unchecked") Class<T> encodingType = (Class<T>)encoding.getClass(); - assert (!inputEncodings.containsKey( - encodingType)) : "You are trying to add an encoding to the input encoding whose type is already registered. This is not supported"; - inputEncodings.put(encodingType, encoding); - } - - /** Returns the input encoding of the given type. */ - @SuppressWarnings("unchecked") - public <T extends IExplorationEncoding> T getInputEncoding(Class<T> encodingType) { - return (T)inputEncodings.get(encodingType); - } - - /** - * Returns the collection of {@link IExplorationEncoding} types constructed from the input - * models. - */ - public Set<Class<? extends IExplorationEncoding>> getRegisteredEncodingTypes() { - return inputEncodings.keySet(); - } - - /** Empties the currently held encodings. */ - public void clearEncodings() { - inputEncodings.clear(); - } -} diff --git a/org.fortiss.af3.exploration.alg/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 e864fdd3facd432c279baa89193bc836366d4425..74e85e0a7ca0beb49168d5562e0eb0963ff2815e 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 e15712cd3dbf2a62f38c5dcad6cf101fff8525e1 RED +SafetyFunctionArchCreator.java 3eace15fd28f2c6ad20090306a3e35641f35e5c7 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 e15712cd3dbf2a62f38c5dcad6cf101fff8525e1..3eace15fd28f2c6ad20090306a3e35641f35e5c7 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 @@ -33,23 +33,22 @@ import com.google.inject.Inject; * * @author diewald */ -public class SafetyFunctionArchCreator<C> - extends ComposableCreatorBase<SafetyFunctionArchEncoding<C>> { +public class SafetyFunctionArchCreator extends ComposableCreatorBase<SafetyFunctionArchEncoding> { /** Collection of safety functions present in the system. */ - Collection<ISafetyFunctionAdapter<C>> sfAdapters; + Collection<ISafetyFunctionAdapter<?>> sfAdapters; /** Constructor. */ @Inject - public SafetyFunctionArchCreator(Collection<ISafetyFunctionAdapter<C>> sfAdapters, + public SafetyFunctionArchCreator(Collection<ISafetyFunctionAdapter<?>> sfAdapters, DecoderDependencyGraph execDepGraph) { super(execDepGraph); this.sfAdapters = sfAdapters; } /** {@inheritDoc} */ - @SuppressWarnings({"rawtypes", "unchecked"}) + @SuppressWarnings({"rawtypes"}) @Override - public SafetyFunctionArchEncoding<C> createComposable(FlatGenotypeMap createdGenotypes, + public SafetyFunctionArchEncoding createComposable(FlatGenotypeMap createdGenotypes, FlatPhenotypeMap decodedPhenotypes) { // It is clear that the generic is right. However, the compiler does not get it. Thus, // suppress the corresponding Warnings. 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 83b12ee2b757da8883c88152d8f30b585cffef6d..d2b47b8a749812af25704e8df9977e32e7a09e1d 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 a83a8ec0a92b1ba5445cda875864e4213c22e8ef RED -FailSilentTaskMappingCreator.java 26ad97acfca346207818684919f8d9eee68fca71 RED -FaultDetectionVotingTaskMappingCreator.java 1c66a63552fa766d3763c1a4daf34c8d03b4b3a1 RED +AbstractTaskMappingCreator.java 481bf7cebf384ba705cd5b099c7a3a63878bf3a5 RED +FailSilentTaskMappingCreator.java 76afb8716f870091dc962dcca267665db31dc81d RED +FaultDetectionVotingTaskMappingCreator.java fd0059619804d5e8e07f81fc97e9ba637b42d925 RED TaskMappingCreator.java da026f6e18b7220ccc1acb2ecb640d7ffcd488ea 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 a83a8ec0a92b1ba5445cda875864e4213c22e8ef..481bf7cebf384ba705cd5b099c7a3a63878bf3a5 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 @@ -55,7 +55,7 @@ public class AbstractTaskMappingCreator extends @Override public AbstractTaskMappingEncoding createComposable(FlatGenotypeMap createdGenotypes, FlatPhenotypeMap<Phenotype> decodedPhenotypes) throws ExplorationException { - AbstractTaskGraphEncoding<?, ?> atgEnc = + 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."; // The AbstractTaskMappingEncoding may be NULL to indicate that no previous step produced a 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 26ad97acfca346207818684919f8d9eee68fca71..76afb8716f870091dc962dcca267665db31dc81d 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 @@ -50,7 +50,7 @@ public class FailSilentTaskMappingCreator extends @Override public FailSilentTaskMappingEncoding createComposable(FlatGenotypeMap createdGenotypes, FlatPhenotypeMap<Phenotype> decodedPhenotypes) { - AbstractTaskGraphEncoding<?, ?> atgEnc = + 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 = 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 1c66a63552fa766d3763c1a4daf34c8d03b4b3a1..fd0059619804d5e8e07f81fc97e9ba637b42d925 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 @@ -51,7 +51,7 @@ public class FaultDetectionVotingTaskMappingCreator @Override public FaultDetectionVotingTaskMappingEncoding createComposable( FlatGenotypeMap createdGenotypes, FlatPhenotypeMap<Phenotype> decodedPhenotypes) { - AbstractTaskGraphEncoding<?, ?> atgEnc = + 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 = diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/safetyfunctionarch/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/safetyfunctionarch/.ratings index 5a9feb1bf3b83b3c5dbf62829fe0cf87e356b354..f8f146749732ffc1096ad67bc1f3dedce1264c45 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/safetyfunctionarch/.ratings +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/safetyfunctionarch/.ratings @@ -1,2 +1,2 @@ -SafetyFunctionArchEncoding.java d66e000c4063e5c0938085d73030970695b6478e RED -SafetyFunctionArchEntry.java 745ccb0f4754be1610fdfa4f9cc6947348c6c154 RED +SafetyFunctionArchEncoding.java 7b44d8c7069f7947f34988be7b69210e5e68083a RED +SafetyFunctionArchEntry.java 83b2819b2d749611aed25170e60eee11fc0edd2b RED diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/safetyfunctionarch/SafetyFunctionArchEncoding.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/safetyfunctionarch/SafetyFunctionArchEncoding.java index d66e000c4063e5c0938085d73030970695b6478e..7b44d8c7069f7947f34988be7b69210e5e68083a 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/safetyfunctionarch/SafetyFunctionArchEncoding.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/safetyfunctionarch/SafetyFunctionArchEncoding.java @@ -41,7 +41,7 @@ import org.opt4j.core.Genotype; * * @author diewald */ -public class SafetyFunctionArchEncoding<C> extends PhenotypeBase implements IExplorationEncoding, +public class SafetyFunctionArchEncoding extends PhenotypeBase implements IExplorationEncoding, ComposableGenotype, Cloneable { /** Random generator */ @@ -51,17 +51,17 @@ public class SafetyFunctionArchEncoding<C> extends PhenotypeBase implements IExp * Collection that consists of safety function design entries for each safety function that is * present in the input models. */ - private List<SafetyFunctionArchEntry<C>> safetyFunctionArch = new ArrayList<>(); + private List<SafetyFunctionArchEntry> safetyFunctionArch = new ArrayList<>(); /** * Constructor for creating a {@link SafetyFunctionArchEncoding} with entries for each safety * function defined in the input models. The selected entries can be either {@code randomize}d * or default to a 1oo1 design. */ - public SafetyFunctionArchEncoding(Collection<ISafetyFunctionAdapter<C>> safetyFunctions, + public SafetyFunctionArchEncoding(Collection<ISafetyFunctionAdapter<?>> safetyFunctions, boolean initialize, boolean randomize) { if(initialize) { - for(ISafetyFunctionAdapter<C> currSF : safetyFunctions) { + for(ISafetyFunctionAdapter<?> currSF : safetyFunctions) { if(randomize) { safetyFunctionArch.add(createRandomSFDesign(currSF)); } else { @@ -75,24 +75,22 @@ public class SafetyFunctionArchEncoding<C> extends PhenotypeBase implements IExp * Constructor for creating a {@link SafetyFunctionArchEncoding} with the given encoding. Each * {@link SafetyFunctionArchEntry} will be cloned. */ - public SafetyFunctionArchEncoding(Collection<SafetyFunctionArchEntry<C>> safetyFunctionDesigns) { - for(SafetyFunctionArchEntry<C> entry : safetyFunctionDesigns) { + public SafetyFunctionArchEncoding(Collection<SafetyFunctionArchEntry> safetyFunctionDesigns) { + for(SafetyFunctionArchEntry entry : safetyFunctionDesigns) { this.safetyFunctionArch.add(entry.clone()); } } /** Creates a 1oo1 {@link SafetyFunctionArchEntry}. */ - public SafetyFunctionArchEntry<C> - createDefaultSFDesign(ISafetyFunctionAdapter<C> safetyFunction) { - return new SafetyFunctionArchEntry<C>(safetyFunction, 1, 0, false, false); + public SafetyFunctionArchEntry createDefaultSFDesign(ISafetyFunctionAdapter<?> safetyFunction) { + return new SafetyFunctionArchEntry(safetyFunction, 1, 0, false, false); } /** * Creates a {@link SafetyFunctionArchEntry} with randomized parameters subject to the * limitations defined in the given {@link ISafetyFunctionAdapter}. */ - public SafetyFunctionArchEntry<C> - createRandomSFDesign(ISafetyFunctionAdapter<C> safetyFunction) { + public SafetyFunctionArchEntry createRandomSFDesign(ISafetyFunctionAdapter<?> safetyFunction) { List<SafetyArchitecture> sfArch = new ArrayList<>(safetyFunction.getAllowedSafetyArchitectures()); int randSFArchIdx = rand.nextInt(sfArch.size()); @@ -103,15 +101,15 @@ public class SafetyFunctionArchEncoding<C> extends PhenotypeBase implements IExp boolean diagPresent = isDiagPresentSafetyArch(selectedSFArch).orElse(false); boolean diagUnitConnected = isDiagConnectedSafetyArch(selectedSFArch).orElse(false); - return new SafetyFunctionArchEntry<C>(safetyFunction, selChannelNum, triggerNum, - diagPresent, diagUnitConnected); + return new SafetyFunctionArchEntry(safetyFunction, selChannelNum, triggerNum, diagPresent, + diagUnitConnected); } /** * Adds a {@link SafetyFunctionArchEntry} to the encoding of all safety functions in the * system. */ - public boolean addEntry(SafetyFunctionArchEntry<C> entry) { + public boolean addEntry(SafetyFunctionArchEntry entry) { return safetyFunctionArch.add(entry); } @@ -119,7 +117,7 @@ public class SafetyFunctionArchEncoding<C> extends PhenotypeBase implements IExp * Returns the {@link SafetyFunctionArchEntry} that is located at the given {@code index} of the * encoding. */ - public SafetyFunctionArchEntry<C> getEntry(int index) { + public SafetyFunctionArchEntry getEntry(int index) { if(index < 0 || index >= safetyFunctionArch.size()) { return null; } @@ -130,7 +128,7 @@ public class SafetyFunctionArchEncoding<C> extends PhenotypeBase implements IExp * Returns the {@link SafetyFunctionArchEntry}s that compose {@code this} * {@link SafetyFunctionArchEncoding}. */ - public Collection<SafetyFunctionArchEntry<C>> getAllEntries() { + public Collection<SafetyFunctionArchEntry> getAllEntries() { return safetyFunctionArch; } @@ -138,8 +136,7 @@ public class SafetyFunctionArchEncoding<C> extends PhenotypeBase implements IExp * Returns the {@link SafetyFunctionArchEntry} that represents the chosen design of the given * {@link ISafetyFunctionAdapter}. */ - public Optional<SafetyFunctionArchEntry<C>> - getDesignOf(ISafetyFunctionAdapter<?> safetyFunction) { + public Optional<SafetyFunctionArchEntry> getDesignOf(ISafetyFunctionAdapter<?> safetyFunction) { return safetyFunctionArch.stream() .filter(sfd -> sfd.getSafetyFunctionAdapter() == safetyFunction).findAny(); } @@ -153,18 +150,18 @@ public class SafetyFunctionArchEncoding<C> extends PhenotypeBase implements IExp /** {@inheritDoc} */ @Override public <G extends Genotype> G newInstance() { - Collection<ISafetyFunctionAdapter<C>> sfAdapters = + Collection<ISafetyFunctionAdapter<?>> sfAdapters = safetyFunctionArch.stream().map(sf -> sf.getSafetyFunctionAdapter()) .collect(Collectors.toList()); @SuppressWarnings("unchecked") G sfArchEncoding = - (G)new SafetyFunctionArchEncoding<C>(sfAdapters, true, true); + (G)new SafetyFunctionArchEncoding(sfAdapters, true, true); return sfArchEncoding; } /** {@inheritDoc} */ @Override public Object clone() { - return new SafetyFunctionArchEncoding<C>(safetyFunctionArch); + return new SafetyFunctionArchEncoding(safetyFunctionArch); } /** {@inheritDoc} */ diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/safetyfunctionarch/SafetyFunctionArchEntry.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/safetyfunctionarch/SafetyFunctionArchEntry.java index 745ccb0f4754be1610fdfa4f9cc6947348c6c154..83b2819b2d749611aed25170e60eee11fc0edd2b 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/safetyfunctionarch/SafetyFunctionArchEntry.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/safetyfunctionarch/SafetyFunctionArchEntry.java @@ -28,10 +28,10 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ISafetyFunctionAdapter; * * @author diewald */ -public class SafetyFunctionArchEntry<C> implements Cloneable { +public class SafetyFunctionArchEntry implements Cloneable { /** References the safety function whose design is represented by {@code this} class. */ - private ISafetyFunctionAdapter<C> safetyFunction; + private ISafetyFunctionAdapter<?> safetyFunction; /** Defines the number of (independent) channels. */ private int numChannels = 1; @@ -53,7 +53,7 @@ public class SafetyFunctionArchEntry<C> implements Cloneable { private boolean diagnosticUnitConnected = false; /** Constructor. */ - public SafetyFunctionArchEntry(ISafetyFunctionAdapter<C> safetyFunction, int numChannels, + public SafetyFunctionArchEntry(ISafetyFunctionAdapter<?> safetyFunction, int numChannels, int numTriggerSignals, boolean diagnosisUnitPresent, boolean diagnosticUnitConnected) { this.safetyFunction = safetyFunction; this.numChannels = numChannels; @@ -69,7 +69,7 @@ public class SafetyFunctionArchEntry<C> implements Cloneable { } /** Returns the safety function whose design is represented by {@code this} class. */ - public ISafetyFunctionAdapter<C> getSafetyFunctionAdapter() { + public ISafetyFunctionAdapter<?> getSafetyFunctionAdapter() { return safetyFunction; } @@ -159,8 +159,8 @@ public class SafetyFunctionArchEntry<C> implements Cloneable { /** {@inheritDoc} */ @Override - public SafetyFunctionArchEntry<C> clone() { - return new SafetyFunctionArchEntry<C>(safetyFunction, numChannels, triggerSignalIdx, + public SafetyFunctionArchEntry clone() { + return new SafetyFunctionArchEntry(safetyFunction, numChannels, triggerSignalIdx, diagnosticUnitPresent, diagnosticUnitConnected); } diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/.ratings index 8f88c0bd2f9a511c9b3b847342af6bd5b7f6ea0b..6ac8a86b8553ec9fa8f83eeea80fa6837d4d47ff 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/.ratings +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/.ratings @@ -1,5 +1,5 @@ -AbstractTaskGraphEncoding.java 6877ab11ffa719fc830f7cfc8992c85df9d00531 RED -InstantiatedAcyclicTaskGraphEncoding.java 6457b136cecb40baff385e415e2d1a975f82c090 RED -InstantiatedTaskGraphEncoding.java a97dab2f3695c9d3a4ab62e5fbe062c736c9baaf RED -SafeTaskGraphEncoding.java bf51882e640d22da5e82e2203b29d50beddc7b0e RED -TaskGraphEncoding.java 44dba5f97c80579f31fcb14f0d1fabfa80a6734a RED +AbstractTaskGraphEncoding.java 88b91a2840448563ad33ba82aa7cabac666580a6 RED +InstantiatedAcyclicTaskGraphEncoding.java 850f395330622bffbbaa5ac6e628969880726fe4 RED +InstantiatedTaskGraphEncoding.java 5c778ed0f90cb7356794caaa4ec4ebc67bd40cf0 RED +SafeTaskGraphEncoding.java 31c8db24f2d41118b9d1341ceed7e7d931c0927a RED +TaskGraphEncoding.java 5b6807f5c939987b23fa87988319fd3fdabb0318 RED diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/AbstractTaskGraphEncoding.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/AbstractTaskGraphEncoding.java index 6877ab11ffa719fc830f7cfc8992c85df9d00531..88b91a2840448563ad33ba82aa7cabac666580a6 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/AbstractTaskGraphEncoding.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/AbstractTaskGraphEncoding.java @@ -15,35 +15,36 @@ +--------------------------------------------------------------------------*/ package org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph; -import java.util.Collection; +import java.util.Set; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.genotype.ComposableGenotype; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype; -import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.DefaultTaskGraph; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.TaskGraph; +import com.google.inject.Inject; +import com.google.inject.name.Named; + /** * {@link TaskGraphEncoding} for {@link TaskGraph}s that <i>may</i> contain <i>abstract</i> tasks, * i.e. tasks that need to be instantiated with <i>concrete</i> tasks from a library. * * @author diewald */ -public class AbstractTaskGraphEncoding<G extends ComposableGenotype, C> extends - TaskGraphEncoding<G, C, DefaultTaskGraph<?>> { +public class AbstractTaskGraphEncoding extends TaskGraphEncoding<TaskGraph> { /** Constructor. */ - public AbstractTaskGraphEncoding(Collection<? extends DefaultTaskGraph<?>> originalTaskGraphs, - Double hyperPeriod) { - super((Collection<DefaultTaskGraph<?>>)originalTaskGraphs, hyperPeriod); + @Inject + public AbstractTaskGraphEncoding( + @Named("OriginalTaskGraphs") Set<TaskGraph> originalTaskGraphs, + @Named("HyperPeriod") Double hyperPeriod) { + super(originalTaskGraphs, hyperPeriod); } /** Copy Constructor. See {@link TaskGraphEncoding#TaskGraphEncoding(TaskGraphEncoding)}. */ - public AbstractTaskGraphEncoding(AbstractTaskGraphEncoding<G, C> encoding) { + public AbstractTaskGraphEncoding(AbstractTaskGraphEncoding encoding) { super(encoding); } /** {@inheritDoc} */ - @SuppressWarnings("unchecked") @Override public Class<? extends Phenotype> getPTypeToRegister() { return AbstractTaskGraphEncoding.class; diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/InstantiatedAcyclicTaskGraphEncoding.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/InstantiatedAcyclicTaskGraphEncoding.java index 6457b136cecb40baff385e415e2d1a975f82c090..850f395330622bffbbaa5ac6e628969880726fe4 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/InstantiatedAcyclicTaskGraphEncoding.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/InstantiatedAcyclicTaskGraphEncoding.java @@ -17,11 +17,9 @@ package org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph; import java.util.Collection; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.InstantiatedTaskMappingEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.InstantiatedTaskMappingEntry; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.AcyclicTaskGraph; -import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.DefaultTaskGraph; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.TaskGraph; /** @@ -31,16 +29,16 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.TaskGraph; * * @author diewald */ -public class InstantiatedAcyclicTaskGraphEncoding<T extends InstantiatedTaskMappingEntry, C> - extends TaskGraphEncoding<InstantiatedTaskMappingEncoding<T>, C, AcyclicTaskGraph> { +public class InstantiatedAcyclicTaskGraphEncoding<T extends InstantiatedTaskMappingEntry> extends + TaskGraphEncoding<AcyclicTaskGraph> { + /** Constructor. */ - public InstantiatedAcyclicTaskGraphEncoding(Collection<DefaultTaskGraph<?>> taskGraphs, - Double hyperPeriod) { - super(AcyclicTaskGraph.transformToAcyclicGraphs(taskGraphs), hyperPeriod); + public InstantiatedAcyclicTaskGraphEncoding(Collection<TaskGraph> collection, Double hyperPeriod) { + super(AcyclicTaskGraph.transformToAcyclicGraphs(collection), hyperPeriod); } /** Copy Constructor. See {@link TaskGraphEncoding#TaskGraphEncoding(TaskGraphEncoding)}. */ - public InstantiatedAcyclicTaskGraphEncoding(InstantiatedAcyclicTaskGraphEncoding<T, C> encoding) { + public InstantiatedAcyclicTaskGraphEncoding(InstantiatedAcyclicTaskGraphEncoding<T> encoding) { super(encoding); } diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/InstantiatedTaskGraphEncoding.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/InstantiatedTaskGraphEncoding.java index a97dab2f3695c9d3a4ab62e5fbe062c736c9baaf..5c778ed0f90cb7356794caaa4ec4ebc67bd40cf0 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/InstantiatedTaskGraphEncoding.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/InstantiatedTaskGraphEncoding.java @@ -17,10 +17,8 @@ package org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph; import java.util.Collection; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.InstantiatedTaskMappingEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.InstantiatedTaskMappingEntry; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype; -import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.DefaultTaskGraph; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.TaskGraph; /** @@ -28,16 +26,15 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.TaskGraph; * * @author diewald */ -public class InstantiatedTaskGraphEncoding<T extends InstantiatedTaskMappingEntry, C> extends - TaskGraphEncoding<InstantiatedTaskMappingEncoding<T>, C, DefaultTaskGraph<?>> { +public class InstantiatedTaskGraphEncoding<T extends InstantiatedTaskMappingEntry> extends + TaskGraphEncoding<TaskGraph> { /** Constructor. */ - public InstantiatedTaskGraphEncoding(Collection<DefaultTaskGraph<?>> originalTaskGraphs, - Double hyperPeriod) { - super((Collection<DefaultTaskGraph<?>>)originalTaskGraphs, hyperPeriod); + public InstantiatedTaskGraphEncoding(Collection<TaskGraph> collection, Double hyperPeriod) { + super(collection, hyperPeriod); } /** Copy Constructor. See {@link TaskGraphEncoding#TaskGraphEncoding(TaskGraphEncoding)}. */ - public InstantiatedTaskGraphEncoding(InstantiatedTaskGraphEncoding<T, C> encoding) { + public InstantiatedTaskGraphEncoding(InstantiatedTaskGraphEncoding<T> encoding) { super(encoding); } diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/SafeTaskGraphEncoding.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/SafeTaskGraphEncoding.java index bf51882e640d22da5e82e2203b29d50beddc7b0e..31c8db24f2d41118b9d1341ceed7e7d931c0927a 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/SafeTaskGraphEncoding.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/SafeTaskGraphEncoding.java @@ -16,11 +16,11 @@ package org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph; import java.util.Collection; +import java.util.Set; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.safetyfunctionarch.SafetyFunctionArchEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ITaskAdapter; -import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.DefaultTaskGraph; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.TaskGraph; /** @@ -29,19 +29,18 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.TaskGraph; * * @author diewald */ -public class SafeTaskGraphEncoding<C> extends - AbstractTaskGraphEncoding<SafetyFunctionArchEncoding<C>, C> { +public class SafeTaskGraphEncoding extends AbstractTaskGraphEncoding { /** Collection of task graphs extracted from the input models. */ - Collection<TaskGraph> originalTaskGraphs; + private Collection<TaskGraph> originalTaskGraphs; /** Constructor. */ - public SafeTaskGraphEncoding(Collection<TaskGraph> originalTaskGraphs, Double hyperPeriod) { - super((Collection<? extends DefaultTaskGraph<?>>)originalTaskGraphs, hyperPeriod); + public SafeTaskGraphEncoding(Set<TaskGraph> originalTaskGraphs, Double hyperPeriod) { + super(originalTaskGraphs, hyperPeriod); this.originalTaskGraphs = originalTaskGraphs; } /** Copy Constructor. See {@link TaskGraphEncoding#TaskGraphEncoding(TaskGraphEncoding)}. */ - public SafeTaskGraphEncoding(SafeTaskGraphEncoding<C> encoding) { + public SafeTaskGraphEncoding(SafeTaskGraphEncoding encoding) { super(encoding); } diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/TaskGraphEncoding.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/TaskGraphEncoding.java index 44dba5f97c80579f31fcb14f0d1fabfa80a6734a..5b6807f5c939987b23fa87988319fd3fdabb0318 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/TaskGraphEncoding.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/TaskGraphEncoding.java @@ -22,7 +22,6 @@ import java.util.HashSet; import org.eclipse.emf.ecore.EObject; import org.fortiss.af3.component.model.Component; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.PhenotypeBase; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IExecutionUnitAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ITaskAdapter; @@ -38,8 +37,8 @@ import org.opt4j.core.Genotype; * * @author diewald */ -public class TaskGraphEncoding<G extends Genotype, C, T extends TaskGraph> extends PhenotypeBase - implements IExplorationEncoding, Cloneable { +public class TaskGraphEncoding<T extends TaskGraph> extends PhenotypeBase implements + IExplorationEncoding, Cloneable { /** {@link TaskGraph} that represents the deployable components and their signals. */ protected Collection<T> taskGraphs; @@ -50,13 +49,13 @@ public class TaskGraphEncoding<G extends Genotype, C, T extends TaskGraph> exten * Collection of {@link ITaskAdapter}s that shall be mapped to deployment targets * ({@link IExecutionUnitAdapter}). */ - protected Collection<ITaskAdapter<C>> deployableComponents = new HashSet<>(); + protected Collection<ITaskAdapter<?>> taskSet = new HashSet<>(); /** * Subset of {@link ITaskAdapter}s from the collection of deployable components * that may be replicated. */ - protected Collection<ITaskAdapter<C>> replicableComponents = new HashSet<>(); + protected Collection<ITaskAdapter<?>> replicableTasks = new HashSet<>(); /** * Constructor that initializes {@code this} encoding with the collection of @@ -66,12 +65,11 @@ public class TaskGraphEncoding<G extends Genotype, C, T extends TaskGraph> exten this.taskGraphs = taskGraphs; this.hyperPeriod = hyperPeriod; - this.deployableComponents.clear(); + this.taskSet.clear(); for(TaskGraph tg : taskGraphs) { - @SuppressWarnings("unchecked") Collection<? extends ITaskAdapter<C>> tasks = - (Collection<? extends ITaskAdapter<C>>)tg.getTasks(); - deployableComponents.addAll(tasks); + Collection<? extends ITaskAdapter<?>> tasks = tg.getTasks(); + taskSet.addAll(tasks); } } @@ -79,11 +77,11 @@ public class TaskGraphEncoding<G extends Genotype, C, T extends TaskGraph> exten * Copy constructor that takes an existing {@link TaskGraphEncoding} as input and * generates an equivalent copy. */ - public TaskGraphEncoding(TaskGraphEncoding<G, C, T> encoding) { + public TaskGraphEncoding(TaskGraphEncoding<T> encoding) { this.hyperPeriod = encoding.getHyperPeriod(); taskGraphs.addAll(encoding.getTaskGraphs()); - deployableComponents.addAll(encoding.deployableComponents); - replicableComponents.addAll(encoding.replicableComponents); + taskSet.addAll(encoding.taskSet); + replicableTasks.addAll(encoding.replicableTasks); } /** Returns the collection of {@link TaskGraph}s composing {@code this} encoding. */ @@ -95,7 +93,7 @@ public class TaskGraphEncoding<G extends Genotype, C, T extends TaskGraph> exten * Adds the given {@link ITaskAdapter} to its corresponding {@link TaskGraph} in {@code this} * encoding. */ - public void addTask(ITaskAdapter<C> task) { + public void addTask(ITaskAdapter<?> task) { // TODO: Here, we use the assumption that the given task refers to a task that is also // present in the system model adapter. @@ -105,9 +103,9 @@ public class TaskGraphEncoding<G extends Genotype, C, T extends TaskGraph> exten assert (taskGraph != null) : "The task to be added could be neither found in this encoding, nor the input models."; taskGraph.addTask(task); - deployableComponents.add(task); + taskSet.add(task); if(task.getMinReplication() != task.getMaxReplication()) { - replicableComponents.add(task); + replicableTasks.add(task); } } @@ -115,7 +113,7 @@ public class TaskGraphEncoding<G extends Genotype, C, T extends TaskGraph> exten * Adds all signals defined in the input models for the given {@link ITaskAdapter} which must be * contained in any of the internal {@link TaskGraph}s. */ - public void addSignalsOf(ITaskAdapter<C> task, TaskGraph origTaskGraph) { + public void addSignalsOf(ITaskAdapter<?> task, TaskGraph origTaskGraph) { // The given task must be in the any of the task graphs! T taskGraph = getGraphOf(task, taskGraphs); @@ -142,7 +140,7 @@ public class TaskGraphEncoding<G extends Genotype, C, T extends TaskGraph> exten * Adds the signals of a cloned task by querying the existing signals from the clone's original * task. */ - public void addClonedSignalsOf(ITaskAdapter<C> originalTask, ITaskAdapter<C> clonedTask) { + public void addClonedSignalsOf(ITaskAdapter<?> originalTask, ITaskAdapter<?> clonedTask) { // The given task must be in the any of the task graphs! T taskGraph = getGraphOf(originalTask, taskGraphs); @@ -171,16 +169,16 @@ public class TaskGraphEncoding<G extends Genotype, C, T extends TaskGraph> exten * Clones the given {@link ITaskAdapter} and adds it to the corresponding task * graph and further data structures. */ - public ITaskAdapter<C> cloneTask(ITaskAdapter<C> task) { + public ITaskAdapter<?> cloneTask(ITaskAdapter<?> task) { // Clone the task and add it to the corresponding task graph. TaskGraph taskGraph = getGraphOf(task, taskGraphs); - ITaskAdapter<C> clonedTask = task.clone(); + ITaskAdapter<?> clonedTask = task.clone(); taskGraph.addTask(clonedTask); addClonedSignalsOf(task, clonedTask); // Add the cloned task to the cache sets. - deployableComponents.add(clonedTask); - if(replicableComponents.contains(task)) { - replicableComponents.add(clonedTask); + taskSet.add(clonedTask); + if(replicableTasks.contains(task)) { + replicableTasks.add(clonedTask); } return clonedTask; @@ -194,7 +192,7 @@ public class TaskGraphEncoding<G extends Genotype, C, T extends TaskGraph> exten } /** Whether {@code this} encoding contains the given task. */ - public boolean containsTask(ITaskAdapter<C> task) { + public boolean containsTask(ITaskAdapter<?> task) { return getGraphOf(task, taskGraphs) != null; } @@ -206,12 +204,12 @@ public class TaskGraphEncoding<G extends Genotype, C, T extends TaskGraph> exten * * @returns {@code true} iff a containing {@link TaskGraph} has been found. */ - public boolean removeTask(ITaskAdapter<C> task) { + public boolean removeTask(ITaskAdapter<?> task) { TaskGraph taskGraph = getGraphOf(task, taskGraphs); if(taskGraph != null) { taskGraph.removeTask(task); - deployableComponents.remove(task); - replicableComponents.remove(task); + taskSet.remove(task); + replicableTasks.remove(task); return true; } assert (false); // Never here. @@ -241,8 +239,8 @@ public class TaskGraphEncoding<G extends Genotype, C, T extends TaskGraph> exten * @return The asociated {@link ITaskAdapter}, or {@code null} if none can be * identified. */ - public synchronized ITaskAdapter<C> getDeployableComponentOf(EObject originalEObject) { - for(ITaskAdapter<C> deployableComponentAdapter : deployableComponents) { + public synchronized ITaskAdapter<?> getDeployableComponentOf(EObject originalEObject) { + for(ITaskAdapter<?> deployableComponentAdapter : taskSet) { if(deployableComponentAdapter.getObject() == originalEObject) { return deployableComponentAdapter; } @@ -254,8 +252,8 @@ public class TaskGraphEncoding<G extends Genotype, C, T extends TaskGraph> exten * Returns the deployable (software) components that my be * replicated. May contain "abstract" {@link Component}s. */ - public Collection<ITaskAdapter<C>> getReplicableComponents() { - return replicableComponents; + public Collection<ITaskAdapter<?>> getReplicableComponents() { + return replicableTasks; } /** @@ -263,8 +261,8 @@ public class TaskGraphEncoding<G extends Genotype, C, T extends TaskGraph> exten * only those {@link ITaskAdapter} are searched which can be actually executed on * {@link ExecutionUnit}s, i.e. "abstract" components are not considered. */ - public ITaskAdapter<C> getReplicableDeployableComponentOf(EObject originalEObject) { - for(ITaskAdapter<C> deployableComponentAdapter : replicableComponents) { + public ITaskAdapter<?> getReplicableDeployableComponentOf(EObject originalEObject) { + for(ITaskAdapter<?> deployableComponentAdapter : replicableTasks) { if(deployableComponentAdapter.getObject() == originalEObject) { return deployableComponentAdapter; } @@ -280,13 +278,6 @@ public class TaskGraphEncoding<G extends Genotype, C, T extends TaskGraph> exten /** {@inheritDoc} */ @Override public Object clone() { - return new TaskGraphEncoding<G, C, T>(this); - } - - /** {@inheritDoc} */ - @SuppressWarnings("unchecked") - @Override - public Class<? extends Phenotype> getPTypeToRegister() { - return (Class<? extends Phenotype>)TaskGraphEncoding.class; + return new TaskGraphEncoding<T>(this); } } 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 f05c8e7c5ddf642fd64df0efb2fa4ba6fac627e0..ab8a8b6cb1ae9151033340e290f8b02ec8a6abe7 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 f5d0f55f893f7d5583ff5c12840d5fb4c9add5a9 RED +TaskMappingEncoding.java b944240cb5e8ab19fc773d85e652f2d880d8361f 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 f5d0f55f893f7d5583ff5c12840d5fb4c9add5a9..b944240cb5e8ab19fc773d85e652f2d880d8361f 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 @@ -46,6 +46,7 @@ import org.fortiss.af3.exploration.alg.service.IExplorationEncoding; import org.fortiss.af3.exploration.model.ExplorationConstraint; import org.fortiss.af3.exploration.moea.model.predefined.ComponentMultiAllocationConstraint; import org.fortiss.af3.exploration.moea.model.predefined.ComponentMultiDislocationConstraint; +import org.fortiss.af3.task.model.Task; import org.fortiss.tooling.common.util.LambdaUtils; import com.google.common.collect.HashMultimap; @@ -97,7 +98,7 @@ public abstract class TaskMappingEncoding<S extends ITaskAdapter<?>, T extends T protected Collection<Partition> partitions; /** The input {@link TaskGraphEncoding} that contains the tasks and their signals. */ - protected TaskGraphEncoding<?, ?, ?> tgEncoding; + protected TaskGraphEncoding<?> tgEncoding; /** The input {@link PartitionMappingEncoding}: Targets to deploy tasks. */ protected PartitionMappingEncoding partMappingEncoding; @@ -111,7 +112,7 @@ public abstract class TaskMappingEncoding<S extends ITaskAdapter<?>, T extends T */ @SuppressWarnings("unchecked") public TaskMappingEncoding(PartitionMappingEncoding partMappingEncoding, - TaskGraphEncoding<?, ?, ?> tgEncoding) { + TaskGraphEncoding<?> tgEncoding) { this.tgEncoding = tgEncoding; this.partMappingEncoding = partMappingEncoding; this.tasks = (Collection<S>)tgEncoding.getTasks(); @@ -129,7 +130,7 @@ public abstract class TaskMappingEncoding<S extends ITaskAdapter<?>, T extends T * if no valid allocation targets can be identified for one {@link ITaskAdapter}. */ public TaskMappingEncoding(PartitionMappingEncoding partMappingEncoding, - TaskGraphEncoding<?, ?, ?> tgEncoding, boolean initialize) throws ExplorationException { + TaskGraphEncoding<?> tgEncoding, boolean initialize) throws ExplorationException { this(partMappingEncoding, tgEncoding); if(initialize) { resetEncoding(); @@ -143,7 +144,7 @@ public abstract class TaskMappingEncoding<S extends ITaskAdapter<?>, T extends T * if no valid allocation targets can be identified for one {@link ITaskAdapter}. */ public TaskMappingEncoding(PartitionMappingEncoding partMappingEncoding, - TaskGraphEncoding<?, ?, ?> tgEncoding, + TaskGraphEncoding<?> tgEncoding, TaskMappingEncoding<ITaskAdapter<?>, ?> incompleteEncoding) throws ExplorationException { this(partMappingEncoding, tgEncoding); completeEncoding(incompleteEncoding); @@ -724,7 +725,7 @@ public abstract class TaskMappingEncoding<S extends ITaskAdapter<?>, T extends T } /** Returns all independent {@link DefaultTaskGraph}s contained in this encoding. */ - public TaskGraphEncoding<?, ?, ?> getTaskGraphEncoding() { + public TaskGraphEncoding<?> getTaskGraphEncoding() { return tgEncoding; } 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 30db933ed23ca4aa33164654e1e4c20374c885db..0b39ca83e17aefa7a059939e84a9c1c9783b1ad1 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 d4abec537050aa6a6bad3805d19d5db10cc2418e RED +AbstractTaskMappingEncoding.java fa5ec76217a920b514c7ee255f3ca0b3f0360ae0 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 d4abec537050aa6a6bad3805d19d5db10cc2418e..fa5ec76217a920b514c7ee255f3ca0b3f0360ae0 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,8 +44,7 @@ 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) { + AbstractTaskMappingEncoding(PartitionMappingEncoding partEnc, SafeTaskGraphEncoding tgEncoding) { super(partEnc, tgEncoding); } @@ -56,13 +55,13 @@ public class AbstractTaskMappingEncoding extends * if no valid allocation targets can be identified for one {@link ITaskAdapter}. */ public AbstractTaskMappingEncoding(PartitionMappingEncoding partEnc, - SafeTaskGraphEncoding<?> tgEncoding, boolean initialize) throws ExplorationException { + SafeTaskGraphEncoding tgEncoding, boolean initialize) throws ExplorationException { super(partEnc, tgEncoding, initialize); } /** Copy Constructor. */ public AbstractTaskMappingEncoding(PartitionMappingEncoding partEnc, - TaskGraphEncoding<?, ?, ?> tgEncoding) { + TaskGraphEncoding<?> tgEncoding) { super(partEnc, tgEncoding); } @@ -73,7 +72,7 @@ public class AbstractTaskMappingEncoding extends * if no valid allocation targets can be identified for one {@link ITaskAdapter}. */ public AbstractTaskMappingEncoding(PartitionMappingEncoding partEnc, - AbstractTaskGraphEncoding<?, ?> atgEnc, boolean initialize) throws ExplorationException { + AbstractTaskGraphEncoding atgEnc, boolean initialize) throws ExplorationException { super(partEnc, atgEnc, initialize); } @@ -87,7 +86,7 @@ public class AbstractTaskMappingEncoding extends * if no valid allocation targets can be identified for one {@link ITaskAdapter}. */ public AbstractTaskMappingEncoding(PartitionMappingEncoding partEnc, - AbstractTaskGraphEncoding<?, ?> atgEnc, AbstractTaskMappingEncoding partialEncoding) + AbstractTaskGraphEncoding atgEnc, AbstractTaskMappingEncoding partialEncoding) throws ExplorationException { super(partEnc, atgEnc, partialEncoding); } 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 ba01f626e726707317c9fd264291324f8c43889e..bbd58aa16c293185c11b74b8e3bdfb9ac45a02a2 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 bf7ccbfa67f5f83c0b29175813613841b99f8494 RED -FailSilentTaskMappingEntry.java b73b4242c590b45ad30c482390fee8eaa06179dc RED -FaultDetectionVotingTaskMappingEncoding.java b1b8e16a4286dca3b5d8081f4406b08ed0d3d3eb RED +FailSilentTaskMappingEncoding.java cbd5546ce9cb78fd284464ea07d9be4a68a96006 RED +FailSilentTaskMappingEntry.java 6cc36c6e47786732ffc71c636820a44659917886 RED +FaultDetectionVotingTaskMappingEncoding.java 247891eb76b773dca87017b293fa7f0711781ad1 RED FaultDetectionVotingTaskMappingEntry.java ae401b16a2098ee85809f895c2469f494b6fc279 RED -InstantiatedTaskMappingEncoding.java 009a5a48ac03e206cbe6ba98439455b1c7d2c850 RED +InstantiatedTaskMappingEncoding.java 0900e95fdc40241738762b84810a194ace305da7 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 bf7ccbfa67f5f83c0b29175813613841b99f8494..cbd5546ce9cb78fd284464ea07d9be4a68a96006 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 @@ -39,13 +39,12 @@ public class FailSilentTaskMappingEncoding extends * system model. */ FailSilentTaskMappingEncoding(PartitionMappingEncoding partEnc, - AbstractTaskGraphEncoding<?, ?> tgEncoding) { + AbstractTaskGraphEncoding tgEncoding) { super(partEnc, tgEncoding); } /** Copy Constructor. */ - FailSilentTaskMappingEncoding(PartitionMappingEncoding partEnc, - TaskGraphEncoding<?, ?, ?> tgEncoding) { + FailSilentTaskMappingEncoding(PartitionMappingEncoding partEnc, TaskGraphEncoding<?> tgEncoding) { super(partEnc, tgEncoding); } @@ -57,8 +56,7 @@ public class FailSilentTaskMappingEncoding extends * if no valid allocation targets can be identified for one {@link ITaskAdapter}. */ public FailSilentTaskMappingEncoding(PartitionMappingEncoding partEnc, - AbstractTaskGraphEncoding<?, ?> tgEncoding, boolean initialize) - throws ExplorationException { + AbstractTaskGraphEncoding tgEncoding, boolean initialize) throws ExplorationException { super(partEnc, tgEncoding, initialize); } @@ -67,7 +65,7 @@ public class FailSilentTaskMappingEncoding extends * {@link AbstractTaskMappingEncoding}. */ public FailSilentTaskMappingEncoding(PartitionMappingEncoding partEnc, - AbstractTaskGraphEncoding<?, ?> tgEncoding, AbstractTaskMappingEncoding abstractEncoding) { + AbstractTaskGraphEncoding tgEncoding, AbstractTaskMappingEncoding abstractEncoding) { super(partEnc, tgEncoding, abstractEncoding); } diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FailSilentTaskMappingEntry.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FailSilentTaskMappingEntry.java index b73b4242c590b45ad30c482390fee8eaa06179dc..6cc36c6e47786732ffc71c636820a44659917886 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FailSilentTaskMappingEntry.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FailSilentTaskMappingEntry.java @@ -30,8 +30,7 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ITaskAdapter; public class FailSilentTaskMappingEntry extends InstantiatedTaskMappingEntry implements Cloneable { /** Constructs a mapping entry the represents the mapping to a given deployment target. */ - FailSilentTaskMappingEntry(ITaskAdapter<?> deployableComponent, - Partition deploymentTarget) { + FailSilentTaskMappingEntry(ITaskAdapter<?> deployableComponent, Partition deploymentTarget) { super(deployableComponent, deploymentTarget); } diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FaultDetectionVotingTaskMappingEncoding.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FaultDetectionVotingTaskMappingEncoding.java index b1b8e16a4286dca3b5d8081f4406b08ed0d3d3eb..247891eb76b773dca87017b293fa7f0711781ad1 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FaultDetectionVotingTaskMappingEncoding.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FaultDetectionVotingTaskMappingEncoding.java @@ -38,7 +38,7 @@ public class FaultDetectionVotingTaskMappingEncoding extends * system model. */ FaultDetectionVotingTaskMappingEncoding(PartitionMappingEncoding partEnc, - AbstractTaskGraphEncoding<?, ?> tgEncoding) { + AbstractTaskGraphEncoding tgEncoding) { super(partEnc, tgEncoding); } @@ -50,8 +50,7 @@ public class FaultDetectionVotingTaskMappingEncoding extends * if no valid allocation targets can be identified for one {@link ITaskAdapter}. */ public FaultDetectionVotingTaskMappingEncoding(PartitionMappingEncoding partEnc, - AbstractTaskGraphEncoding<?, ?> tgEncoding, boolean initialize) - throws ExplorationException { + AbstractTaskGraphEncoding tgEncoding, boolean initialize) throws ExplorationException { super(partEnc, tgEncoding, initialize); assert (false) : "Never here any more."; } @@ -61,7 +60,7 @@ public class FaultDetectionVotingTaskMappingEncoding extends * the given {@link AbstractTaskMappingEncoding}. */ public FaultDetectionVotingTaskMappingEncoding(PartitionMappingEncoding partEnc, - AbstractTaskGraphEncoding<?, ?> tgEncoding, AbstractTaskMappingEncoding abstractEncoding) { + AbstractTaskGraphEncoding tgEncoding, AbstractTaskMappingEncoding abstractEncoding) { super(partEnc, tgEncoding, abstractEncoding); } 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 009a5a48ac03e206cbe6ba98439455b1c7d2c850..0900e95fdc40241738762b84810a194ace305da7 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 @@ -46,13 +46,13 @@ public abstract class InstantiatedTaskMappingEncoding<T extends InstantiatedTask * system model. */ protected InstantiatedTaskMappingEncoding(PartitionMappingEncoding partEnc, - AbstractTaskGraphEncoding<?, ?> tgEncoding) { + AbstractTaskGraphEncoding tgEncoding) { super(partEnc, tgEncoding); } /** Copy Constructor. */ protected InstantiatedTaskMappingEncoding(PartitionMappingEncoding partEnc, - TaskGraphEncoding<?, ?, ?> tgEncoding) { + TaskGraphEncoding<?> tgEncoding) { super(partEnc, tgEncoding); } @@ -64,8 +64,7 @@ public abstract class InstantiatedTaskMappingEncoding<T extends InstantiatedTask * if no valid allocation targets can be identified for one {@link ITaskAdapter}. */ public InstantiatedTaskMappingEncoding(PartitionMappingEncoding partEnc, - AbstractTaskGraphEncoding<?, ?> tgEncoding, boolean initialize) - throws ExplorationException { + AbstractTaskGraphEncoding tgEncoding, boolean initialize) throws ExplorationException { super(partEnc, tgEncoding, initialize); } @@ -74,7 +73,7 @@ public abstract class InstantiatedTaskMappingEncoding<T extends InstantiatedTask * given {@link AbstractTaskMappingEncoding}. */ public InstantiatedTaskMappingEncoding(PartitionMappingEncoding partEnc, - AbstractTaskGraphEncoding<?, ?> tgEncoding, AbstractTaskMappingEncoding abstractEncoding) { + AbstractTaskGraphEncoding tgEncoding, AbstractTaskMappingEncoding abstractEncoding) { super(partEnc, tgEncoding); this.constraintMap = abstractEncoding.copyConstraintMap(null); instantiateAbstractEntries(abstractEncoding); 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 3b4fc495bd41f35dfaead69c2ee2015a9c9875cc..04d9ec76289e6c35972b7b9a5c730d70f8279805 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 @@ -2,4 +2,4 @@ ComposableCreator.java 6d2d61205890a2b0b99f41d2caa4debc511c8b4a RED ComposableCreatorBase.java e1a898541dd2b480e6c345ad2429bf93393957e6 RED CompositeCreator.java bb054d281931f461ca67def20360cc767940e204 RED CompositeCreatorBase.java d897947ff0db02ea1cac4034a4912f9afce283ec RED -GuiceCreator.java 34e89e1ed5c8aa411b61682e84be0e9910533b3e RED +GuiceCreator.java 0a5a0c771346775ba21a739ebf8761c17bd78b13 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 34e89e1ed5c8aa411b61682e84be0e9910533b3e..0a5a0c771346775ba21a739ebf8761c17bd78b13 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,7 +15,8 @@ +--------------------------------------------------------------------------*/ package org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.create; -import org.opt4j.core.genotype.IntegerGenotype; +import org.opt4j.core.Genotype; +import org.opt4j.core.genotype.CompositeGenotype; import org.opt4j.core.problem.Creator; /** @@ -23,11 +24,12 @@ import org.opt4j.core.problem.Creator; * * @author diewald */ -public class GuiceCreator implements Creator<IntegerGenotype> { +public class GuiceCreator implements + Creator<CompositeGenotype<Class<? extends Genotype>, ? extends Genotype>> { /** {@inheritDoc} */ @Override - public IntegerGenotype create() { - return new IntegerGenotype(1, 10); + public CompositeGenotype<Class<? extends Genotype>, ? extends Genotype> create() { + return new CompositeGenotype(); } } 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 c19bee17a012987651b2651c2c114b6b4b487995..e6e9b2d5050efe844e7f1a9eaec1b1186bd15fb0 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 @@ -2,5 +2,7 @@ ComposableDecoder.java 0ef247e0e8424968cd8dab8317df0e504c5018d4 RED ComposableDecoderBase.java 7c47b41e609b6911128efa469c2dd65122276bcc RED CompositeDecoder.java 68864146cbd7b0d1444d4157cf88023deb4a21ea RED CompositeDecoderBase.java cc878483ec3dcf3afd60509579c7c17a3433893c RED -GuiceDecoder.java cbdf0f9505a65552dc503c1b92c017deca0ba44e RED -PhenotypeDecoder.java 82766d64d8d6d0aa02078921517848c3585240a6 RED +GuiceDecoder.java d0284d290da2c0248f1a59b654045f5d1042303e 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 cbdf0f9505a65552dc503c1b92c017deca0ba44e..d0284d290da2c0248f1a59b654045f5d1042303e 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,11 +17,15 @@ package org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositege import static org.fortiss.af3.exploration.alg.service.ExplorationServiceManager.getService; +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.phenotype.Phenotype; import org.fortiss.af3.exploration.alg.dse.module.DecoderModule; +import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; import org.fortiss.af3.exploration.alg.service.IExplorationModuleService; import org.opt4j.core.Genotype; +import org.opt4j.core.genotype.CompositeGenotype; import org.opt4j.core.problem.Decoder; import org.opt4j.core.start.Opt4JTask; @@ -38,6 +42,10 @@ import com.google.inject.Provides; */ public class GuiceDecoder extends AbstractModule implements Decoder<Genotype, Phenotype> { + /** SystemModelAdapter containing input parameters. */ + // FIXME: Move to general injector in the ExplorationModule service. + protected SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> sysModel; + /** Resulting phenotype from the decoding phase that is composed of sub-{@link Phenotype}s. */ protected Phenotype composedPhenotype; @@ -53,22 +61,27 @@ public class GuiceDecoder extends AbstractModule implements Decoder<Genotype, Ph protected Injector decodingInjector; /** Reference to the input {@link Genotype}. */ - protected Genotype genotype; + // @ThreadScoped + protected ThreadLocal<CompositeGenotype<Class<? extends Genotype>, ? extends Genotype>> genotype = + new ThreadLocal<>(); - // TODO: Switch from field injections to Constructor injection as far as possible. - // /** Constructor. */ - // @Inject - // public GuiceDecoder(Injector opt4JInjector) { - // decoderInjector = opt4JInjector; - // } + /** Constructor. */ + public GuiceDecoder(SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> sysModel) { + this.sysModel = sysModel; + } /** {@inheritDoc} */ + @SuppressWarnings("unchecked") @Override - @Provides public Phenotype decode(Genotype genotype) { // The decode operations are responsible to add the results of the decode operation to the // parent phenotype. - this.genotype = genotype; + if(!(genotype instanceof CompositeGenotype)) { + throw new DecodingRuntimeException(genotype, this, + "The top-most DSE process decoder requires a CompositeGenotype as input!"); + } + this.genotype + .set((CompositeGenotype<Class<? extends Genotype>, ? extends Genotype>)genotype); // TODO(AD): See configure(): We need a service machenism and user configuration to select // the desired set of activated decoders. decodingInjector = opt4JInjector.createChildInjector(this); @@ -78,15 +91,51 @@ public class GuiceDecoder extends AbstractModule implements Decoder<Genotype, Ph /** Provides the composite {@link Genotype} as required by the Guice framework. */ @Provides - public Genotype getGenotype() { - return genotype; + // @ThreadScoped + public + CompositeGenotype<Class<? extends Genotype>, ? extends Genotype> getGenotype() { + return genotype.get(); + } + + /** Returns the sub-genotype of the given type, or {@code null} if none is found. */ + public <T extends Genotype> T getGenotype(Class<T> genotypeType) { + return getGenotype().get(genotypeType); } /** {@inheritDoc} */ @Override protected void configure() { + // bindScope(ThreadScoped.class, new ThreadScope()); + install(sysModel); + for(DecoderModule<?> module : getService(IExplorationModuleService.class).getDecoders()) { install(module); } } + + /* + * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + * HACKs below! They are used to retrieve the concrete genotypes. Scoping shall resolve the + * problem of Genotypes living in parallel. + * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + */ + /** + * Returns the {@link SafetyFunctionArchEncoding} sub-{@link Genotype} passed to this decoder. + * (Testing!!!) + */ + // TODO: Move to the encoding to render the approach more modular. + @Provides + public SafetyFunctionArchEncoding getSFAEnc() { + return getGenotype(SafetyFunctionArchEncoding.class); + } + + // @Provides + // public SafetyFunctionArchEncoding getSFAEnc() { + // return getGenotype(SafetyFunctionArchEncoding.class); + // } + // + // @Provides + // public SafetyFunctionArchEncoding getSFAEnc() { + // return getGenotype(SafetyFunctionArchEncoding.class); + // } } diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/PhenotypeDecoder.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/PhenotypeDecoder.java index 82766d64d8d6d0aa02078921517848c3585240a6..042d35c9bcba9a2cddc5e82ca5abe6f52438d1c3 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/PhenotypeDecoder.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/PhenotypeDecoder.java @@ -18,7 +18,6 @@ package org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositege import java.util.Collection; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.exception.DecodingException; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.FlatPhenotypeMap; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.problem.CompositeProblemModuleBase; diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/ThreadScope.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/ThreadScope.java new file mode 100644 index 0000000000000000000000000000000000000000..f3a2b90fdbf0b2aabde4112c94623da5c262952b --- /dev/null +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/ThreadScope.java @@ -0,0 +1,137 @@ +/*-------------------------------------------------------------------------+ +| 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.decode; + +import static com.google.common.base.Preconditions.checkState; + +import java.util.Map; + +import com.google.inject.Key; +import com.google.inject.OutOfScopeException; +import com.google.inject.Provider; +import com.google.inject.Scope; +import com.google.inject.Scopes; + +/** + * Scopes a single execution of a block of code. Apply this scope with a + * try/finally block: + * + * <pre> + * <code> + * + * scope.enter(); + * try { + * // explicitly seed some seed objects... + * scope.seed(Key.get(SomeObject.class), someObject); + * // create and access scoped objects + * } finally { + * scope.exit(); + * } + * </code> + * </pre> + * + * The scope can be initialized with one or more seed values by calling + * <code>seed(key, value)</code> before the injector will be called upon to + * provide for this key. A typical use is for a servlet filter to enter/exit the + * scope, representing a Request Scope, and seed HttpServletRequest and + * HttpServletResponse. For each key inserted with seed(), you must include a + * corresponding binding: + * + * <pre> + * <code> + * bind(key) + * .toProvider(SimpleScope.<KeyClass>seededKeyProvider()) + * .in(ScopeAnnotation.class); + * </code> + * </pre> + * + * @author Jesse Wilson + * @author Fedor Karpelevitch + */ +public class ThreadScope implements Scope { + + private static final Provider<Object> SEEDED_KEY_PROVIDER = new Provider<Object>() { + public Object get() { + throw new IllegalStateException("If you got here then it means that" + + " your code asked for scoped object which should have been" + + " explicitly seeded in this scope by calling" + + " SimpleScope.seed(), but was not."); + } + }; + private final ThreadLocal<Map<Key<?>, Object>> values = new ThreadLocal<Map<Key<?>, Object>>(); + + // public void enter() { + // checkState(values.get() == null, "A scoping block is already in progress"); + // values.set(Maps.<Key<?>, Object>newHashMap()); + // } + // + // public void exit() { + // checkState(values.get() != null, "No scoping block in progress"); + // values.remove(); + // } + + public <T> void seed(Key<T> key, T value) { + Map<Key<?>, Object> scopedObjects = getScopedObjectMap(key); + checkState(!scopedObjects.containsKey(key), "A value for the key %s was " + + "already seeded in this scope. Old value: %s New value: %s", key, + scopedObjects.get(key), value); + scopedObjects.put(key, value); + } + + public <T> void seed(Class<T> clazz, T value) { + seed(Key.get(clazz), value); + } + + public <T> Provider<T> scope(final Key<T> key, final Provider<T> unscoped) { + return new Provider<T>() { + public T get() { + Map<Key<?>, Object> scopedObjects = getScopedObjectMap(key); + + @SuppressWarnings("unchecked") T current = (T)scopedObjects.get(key); + if(current == null && !scopedObjects.containsKey(key)) { + current = unscoped.get(); + + // don't remember proxies; these exist only to serve circular dependencies + if(Scopes.isCircularProxy(current)) { + return current; + } + + scopedObjects.put(key, current); + } + return current; + } + }; + } + + private <T> Map<Key<?>, Object> getScopedObjectMap(Key<T> key) { + Map<Key<?>, Object> scopedObjects = values.get(); + if(scopedObjects == null) { + throw new OutOfScopeException("Cannot access " + key + " outside of a scoping block"); + } + return scopedObjects; + } + + /** + * Returns a provider that always throws exception complaining that the object + * in question must be seeded before it can be injected. + * + * @return typed provider + */ + @SuppressWarnings({"unchecked"}) + public static <T> Provider<T> seededKeyProvider() { + return (Provider<T>)SEEDED_KEY_PROVIDER; + } +} diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/ThreadScoped.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/ThreadScoped.java new file mode 100644 index 0000000000000000000000000000000000000000..a8335b0831586ea6ced17a5e7adf2952b72957d9 --- /dev/null +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/ThreadScoped.java @@ -0,0 +1,38 @@ +/*-------------------------------------------------------------------------+ +| 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.decode; + +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.ElementType.TYPE; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + +import com.google.inject.Scope; +import com.google.inject.ScopeAnnotation; + +/** + * Annotation to mark the decoding {@link Scope}. + * + * @author diewald + */ +@Target({TYPE, METHOD}) +@Retention(RUNTIME) +@ScopeAnnotation +public @interface ThreadScoped { + // No impl for annotations... +} diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/exception/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/exception/.ratings index ea6d806fb50d0416bc161f2658cd082a720f7028..afc426e4c2d40e2f1935f6d87a36a4383ecc6412 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/exception/.ratings +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/exception/.ratings @@ -1,3 +1,4 @@ -DecodingException.java 2988884a382981eac51bb42fec30f41d2cc683b6 RED +DecodingException.java 40bb717fbcdfbceabbc0b7610d6c5bb85ec78cc1 YELLOW +DecodingRuntimeException.java b464b624cd1b387210206c53e63c4b367705bde7 YELLOW DependencyException.java b5ebab9ef715091cfe6d998c0acc70658a8e5536 RED MissingDependencyException.java 474cd48820802b026a7109abb2ae56a2ab8eb7b3 RED diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/exception/DecodingException.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/exception/DecodingException.java index 2988884a382981eac51bb42fec30f41d2cc683b6..40bb717fbcdfbceabbc0b7610d6c5bb85ec78cc1 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/exception/DecodingException.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/exception/DecodingException.java @@ -27,39 +27,39 @@ import org.opt4j.core.problem.Decoder; */ public class DecodingException extends ExplorationException { /** Constructor specialized for decoding errors. */ - public DecodingException(Genotype gentotype, Decoder<?, ?> decoder) { - super("Decoding Error: Could not decode " + gentotype + " using the decoder " + decoder + + public DecodingException(Genotype genotype, Decoder<?, ?> decoder) { + super("Decoding Error: Could not decode " + genotype + " using the decoder " + decoder + "."); } /** Constructor specialized for decoding errors. Takes an additional message. */ - public DecodingException(Genotype gentotype, Decoder<?, ?> decoder, String msg) { - super("Decoding Error: Could not decode " + gentotype + " using the decoder " + decoder + + public DecodingException(Genotype genotype, Decoder<?, ?> decoder, String msg) { + super("Decoding Error: Could not decode " + genotype + " using the decoder " + decoder + ". " + msg); } /** Constructor specialized for decoding errors. Takes an additional message. */ - public DecodingException(Genotype gentotype, Decoder<?, ?> decoder, String msg, Exception e) { - super("Decoding Error: Could not decode " + gentotype + " using the decoder " + decoder + + public DecodingException(Genotype genotype, Decoder<?, ?> decoder, String msg, Exception e) { + super("Decoding Error: Could not decode " + genotype + " using the decoder " + decoder + ". " + msg, e); } /** Constructor specialized for decoding errors. */ - public DecodingException(Genotype gentotype, ComposableDecoder<?, ?> decoder) { - super("Decoding Error: Could not decode " + gentotype + " using the decoder " + decoder + + public DecodingException(Genotype genotype, ComposableDecoder<?, ?> decoder) { + super("Decoding Error: Could not decode " + genotype + " using the decoder " + decoder + "."); } /** Constructor specialized for decoding errors. Takes an additional message. */ - public DecodingException(Genotype gentotype, ComposableDecoder<?, ?> decoder, String msg) { - super("Decoding Error: Could not decode " + gentotype + " using the decoder " + decoder + + public DecodingException(Genotype genotype, ComposableDecoder<?, ?> decoder, String msg) { + super("Decoding Error: Could not decode " + genotype + " using the decoder " + decoder + ". " + msg); } /** Constructor specialized for decoding errors. Takes an additional message. */ - public DecodingException(Genotype gentotype, ComposableDecoder<?, ?> decoder, String msg, + public DecodingException(Genotype genotype, ComposableDecoder<?, ?> decoder, String msg, Exception e) { - super("Decoding Error: Could not decode " + gentotype + " using the decoder " + decoder + + super("Decoding Error: Could not decode " + genotype + " using the decoder " + decoder + ". " + msg, e); } } diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/exception/DecodingRuntimeException.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/exception/DecodingRuntimeException.java new file mode 100644 index 0000000000000000000000000000000000000000..b464b624cd1b387210206c53e63c4b367705bde7 --- /dev/null +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/exception/DecodingRuntimeException.java @@ -0,0 +1,66 @@ +/*-------------------------------------------------------------------------+ +| Copyright 2016 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.exception; + +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.decode.ComposableDecoder; +import org.fortiss.af3.exploration.alg.exception.ExplorationRuntimeException; +import org.opt4j.core.Genotype; +import org.opt4j.core.problem.Decoder; + +/** + * Container for exceptions thrown in the decoding steps. + * + * @author diewald + */ +public class DecodingRuntimeException extends ExplorationRuntimeException { + /** Constructor specialized for decoding errors. */ + public DecodingRuntimeException(Genotype genotype, Decoder<?, ?> decoder) { + super("Decoding Error: Could not decode " + genotype + " using the decoder " + decoder + + "."); + } + + /** Constructor specialized for decoding errors. Takes an additional message. */ + public DecodingRuntimeException(Genotype genotype, Decoder<?, ?> decoder, String msg) { + super("Decoding Error: Could not decode " + genotype + " using the decoder " + decoder + + ". " + msg); + } + + /** Constructor specialized for decoding errors. Takes an additional message. */ + public DecodingRuntimeException(Genotype genotype, Decoder<?, ?> decoder, String msg, + Exception e) { + super("Decoding Error: Could not decode " + genotype + " using the decoder " + decoder + + ". " + msg, e); + } + + /** Constructor specialized for decoding errors. */ + public DecodingRuntimeException(Genotype genotype, ComposableDecoder<?, ?> decoder) { + super("Decoding Error: Could not decode " + genotype + " using the decoder " + decoder + + "."); + } + + /** Constructor specialized for decoding errors. Takes an additional message. */ + public DecodingRuntimeException(Genotype genotype, ComposableDecoder<?, ?> decoder, String msg) { + super("Decoding Error: Could not decode " + genotype + " using the decoder " + decoder + + ". " + msg); + } + + /** Constructor specialized for decoding errors. Takes an additional message. */ + public DecodingRuntimeException(Genotype genotype, ComposableDecoder<?, ?> decoder, String msg, + Exception e) { + super("Decoding Error: Could not decode " + genotype + " using the decoder " + decoder + + ". " + msg, e); + } +} diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/phenotype/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/phenotype/.ratings index 5b66f64cb3aaa1de3c11b8e043e7d73c70b5d67a..eeb34295208eaa7e2ad045a2c48ed97698d337f3 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/phenotype/.ratings +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/phenotype/.ratings @@ -1,3 +1,3 @@ -FlatPhenotypeMap.java e14d80c49f974bb9857fe0d2068b39ccee6b0c87 RED +FlatPhenotypeMap.java f29317abac6af034248a1b24dd95a0a330e202ec RED Phenotype.java 724ee55fdbd1a040e4363ec1fe2cb4d9f42b8e55 RED PhenotypeBase.java 0f0fc0300fdad1b3516dab143e657767ddaf36fa RED diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/phenotype/FlatPhenotypeMap.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/phenotype/FlatPhenotypeMap.java index e14d80c49f974bb9857fe0d2068b39ccee6b0c87..f29317abac6af034248a1b24dd95a0a330e202ec 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/phenotype/FlatPhenotypeMap.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/phenotype/FlatPhenotypeMap.java @@ -19,7 +19,6 @@ import java.util.Collection; import java.util.HashMap; import java.util.Map; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.create.InitialEncodingProvider; import org.fortiss.af3.exploration.alg.service.ExplorationEncodingMap; import org.fortiss.af3.exploration.alg.service.IExplorationEncoding; import org.opt4j.core.problem.Creator; @@ -51,8 +50,7 @@ public class FlatPhenotypeMap<T extends Phenotype> extends ExplorationEncodingMa if(IExplorationEncoding.class.isAssignableFrom(subGenotypeClass)) { @SuppressWarnings("unchecked") Class<IExplorationEncoding> inputEncoding = (Class<IExplorationEncoding>)subGenotypeClass; - @SuppressWarnings("unchecked") P encoding = - (P)InitialEncodingProvider.getInstance().getInputEncoding(inputEncoding); + @SuppressWarnings("unchecked") P encoding = null; phenotype = encoding; } } diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/copy/safetyfunctionarch/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/copy/safetyfunctionarch/.ratings index 3a20768d3a0ce810c79d8d4153862a809b9e98d7..bb690714be56fd8376a14cb867f591da5ee4bc0f 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/copy/safetyfunctionarch/.ratings +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/copy/safetyfunctionarch/.ratings @@ -1,2 +1,2 @@ -CopySafetyFunctionArch.java 92c728e3c40e1dde265d43564957d2cd55e7109b RED +CopySafetyFunctionArch.java 93d7b1397d4b8d793c047a8c952b383cf2fe730f RED CopySafetyFunctionArchModule.java ed14d74cc2f945124b7383ef1a1c1262ff546dea RED diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/copy/safetyfunctionarch/CopySafetyFunctionArch.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/copy/safetyfunctionarch/CopySafetyFunctionArch.java index 92c728e3c40e1dde265d43564957d2cd55e7109b..93d7b1397d4b8d793c047a8c952b383cf2fe730f 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/copy/safetyfunctionarch/CopySafetyFunctionArch.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/copy/safetyfunctionarch/CopySafetyFunctionArch.java @@ -23,11 +23,11 @@ import org.opt4j.operators.copy.Copy; * * @author diewald */ -public class CopySafetyFunctionArch implements Copy<SafetyFunctionArchEncoding<?>> { +public class CopySafetyFunctionArch implements Copy<SafetyFunctionArchEncoding> { /** {@inheritDoc} */ @Override - public SafetyFunctionArchEncoding<?> copy(SafetyFunctionArchEncoding<?> other) { - return (SafetyFunctionArchEncoding<?>)other.clone(); + public SafetyFunctionArchEncoding copy(SafetyFunctionArchEncoding other) { + return (SafetyFunctionArchEncoding)other.clone(); } } 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 a8076f4f97de26a379bae51fce51c98ef0979e63..91fd68666a313d20e47f13c8747e44d60c16c865 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 2e49168b8d78cf98669babe400f47e6beb2fcfe5 RED -MutateConnectedDiagnosisPresent.java 9089e7c8c0fdf2f2b2fe3a91495090dcd840efab RED -MutateSafetyArchBase.java 572ca678c91ba6b7288ae672312c89d67e117bd9 RED -MutateSafetyFunctionArchitectureModule.java 005944541da58e07816b67cd7ab15872b7503dfc RED -MutateSafetyTriggerSignalNumber.java 385efb314ad5faabc4a18f25d189a413b6c2ac64 RED +MutateChannelNumber.java f616faa5824fbfef7856192c8d5bd7c389eeb978 RED +MutateConnectedDiagnosisPresent.java 0156e6fbb1774823a5c8a3ee24dea809fd5e44a6 RED +MutateSafetyArchBase.java 29c91b28d8f1bb2e65add4525c6027942fc59a33 RED +MutateSafetyFunctionArchitectureModule.java bb771ba71ab6788b2b6bbf462a7a8da65cab5328 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/MutateChannelNumber.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/safetyarch/MutateChannelNumber.java index 2e49168b8d78cf98669babe400f47e6beb2fcfe5..f616faa5824fbfef7856192c8d5bd7c389eeb978 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/safetyarch/MutateChannelNumber.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/safetyarch/MutateChannelNumber.java @@ -26,14 +26,14 @@ import org.opt4j.operators.mutate.Mutate; * * @author diewald */ -public class MutateChannelNumber<C> extends MutateSafetyArchBase<C> { +public class MutateChannelNumber<C> extends MutateSafetyArchBase { /** {@inheritDoc} */ @Override - public void mutate(SafetyFunctionArchEncoding<C> genotype, double p) { + public void mutate(SafetyFunctionArchEncoding genotype, double p) { // Determine the safety functions that shall be manipulated. - Collection<SafetyFunctionArchEntry<C>> selEntries = selectSafetyFunctions(genotype, p); + Collection<SafetyFunctionArchEntry> selEntries = selectSafetyFunctions(genotype, p); - for(SafetyFunctionArchEntry<C> sfEntry : selEntries) { + for(SafetyFunctionArchEntry sfEntry : selEntries) { int[] allowedChannels = sfEntry.getSafetyFunctionAdapter().getAllowedChannelNumbers(); int selectedChannelIdx = sfEntry.getNumChannels(); if(rand.nextBoolean()) { diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/safetyarch/MutateConnectedDiagnosisPresent.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/safetyarch/MutateConnectedDiagnosisPresent.java index 9089e7c8c0fdf2f2b2fe3a91495090dcd840efab..0156e6fbb1774823a5c8a3ee24dea809fd5e44a6 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/safetyarch/MutateConnectedDiagnosisPresent.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/safetyarch/MutateConnectedDiagnosisPresent.java @@ -27,14 +27,14 @@ import org.opt4j.operators.mutate.Mutate; * * @author diewald */ -public class MutateConnectedDiagnosisPresent<C> extends MutateSafetyArchBase<C> { +public class MutateConnectedDiagnosisPresent extends MutateSafetyArchBase { /** {@inheritDoc} */ @Override - public void mutate(SafetyFunctionArchEncoding<C> genotype, double p) { + public void mutate(SafetyFunctionArchEncoding genotype, double p) { // Determine the safety functions that shall be manipulated. - Collection<SafetyFunctionArchEntry<C>> selEntries = selectSafetyFunctions(genotype, p); + Collection<SafetyFunctionArchEntry> selEntries = selectSafetyFunctions(genotype, p); - for(SafetyFunctionArchEntry<C> sfEntry : selEntries) { + for(SafetyFunctionArchEntry sfEntry : selEntries) { // Toggle the presence of a diagnostic unit for this safety function. This has only an // effect if the selected architecture supports additional diagnostic units. // 2/3 --> equal distribution of choices considering the connection to an output unit. diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/safetyarch/MutateSafetyArchBase.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/safetyarch/MutateSafetyArchBase.java index 572ca678c91ba6b7288ae672312c89d67e117bd9..29c91b28d8f1bb2e65add4525c6027942fc59a33 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/safetyarch/MutateSafetyArchBase.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/safetyarch/MutateSafetyArchBase.java @@ -29,20 +29,20 @@ import org.opt4j.operators.mutate.Mutate; * * @author diewald */ -public abstract class MutateSafetyArchBase<C> extends MutateBase<SafetyFunctionArchEncoding<C>> { +public abstract class MutateSafetyArchBase extends MutateBase<SafetyFunctionArchEncoding> { /** * Selects a collection of {@link SafetyFunctionArchEntry}s from the given * {@link SafetyFunctionArchEncoding} whose element number depends on the given probability * {@code p}. */ - protected Collection<SafetyFunctionArchEntry<C>> - selectSafetyFunctions(SafetyFunctionArchEncoding<C> genotype, double p) { - Collection<SafetyFunctionArchEntry<C>> selEntries = new ArrayList<>(); + protected Collection<SafetyFunctionArchEntry> selectSafetyFunctions( + SafetyFunctionArchEncoding genotype, double p) { + Collection<SafetyFunctionArchEntry> selEntries = new ArrayList<>(); int size = genotype.size(); int idx = rand.nextInt(size); for(int i = 0; i < genotype.size(); i++) { if(idx < p * size) { - SafetyFunctionArchEntry<C> entry = genotype.getEntry(idx); + SafetyFunctionArchEntry entry = genotype.getEntry(idx); if(entry != null) { selEntries.add(entry); } 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 005944541da58e07816b67cd7ab15872b7503dfc..bb771ba71ab6788b2b6bbf462a7a8da65cab5328 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 @@ -30,15 +30,13 @@ import com.google.inject.Module; */ public class MutateSafetyFunctionArchitectureModule extends MutateOperatorModuleBase { /** {@inheritDoc} */ - @SuppressWarnings({"rawtypes", "unchecked"}) + @SuppressWarnings({"rawtypes"}) @Override public void config() { super.config(); addOperatorInstance(SafetyFunctionArchEncoding.class, new MutateChannelNumber()); - addOperatorInstance(SafetyFunctionArchEncoding.class, - new MutateSafetyTriggerSignalNumber()); - addOperatorInstance(SafetyFunctionArchEncoding.class, - new MutateConnectedDiagnosisPresent()); + addOperatorInstance(SafetyFunctionArchEncoding.class, new MutateSafetyTriggerSignalNumber()); + addOperatorInstance(SafetyFunctionArchEncoding.class, new MutateConnectedDiagnosisPresent()); } } diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/safetyarch/MutateSafetyTriggerSignalNumber.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/safetyarch/MutateSafetyTriggerSignalNumber.java index 385efb314ad5faabc4a18f25d189a413b6c2ac64..f3dbe9689e96ae5d8d4934f41123ab2af8d5183f 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/safetyarch/MutateSafetyTriggerSignalNumber.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/safetyarch/MutateSafetyTriggerSignalNumber.java @@ -27,16 +27,17 @@ import org.opt4j.operators.mutate.Mutate; * * @author diewald */ -public class MutateSafetyTriggerSignalNumber<C> extends MutateSafetyArchBase<C> { +public class MutateSafetyTriggerSignalNumber<C> extends MutateSafetyArchBase { /** {@inheritDoc} */ @Override - public void mutate(SafetyFunctionArchEncoding<C> genotype, double p) { + public void mutate(SafetyFunctionArchEncoding genotype, double p) { // Determine the safety functions that shall be manipulated. - Collection<SafetyFunctionArchEntry<C>> selEntries = selectSafetyFunctions(genotype, p); + Collection<SafetyFunctionArchEntry> selEntries = selectSafetyFunctions(genotype, p); - for(SafetyFunctionArchEntry<C> sfEntry : selEntries) { - int[] allowedTriggers = sfEntry.getSafetyFunctionAdapter() - .getAllowedTriggerSignalNumbers(sfEntry.getNumChannels()); + for(SafetyFunctionArchEntry sfEntry : selEntries) { + int[] allowedTriggers = + sfEntry.getSafetyFunctionAdapter().getAllowedTriggerSignalNumbers( + sfEntry.getNumChannels()); int selectedTriggerIdx = sfEntry.getTriggerSignalIdx(); if(rand.nextBoolean()) { // Increase the req. number of trigger for the safety function. 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 aaff7ae70f5c466d0257824a89f474fde2e5b832..85fbc6dc9c1881334aa61a794373f4f12c7e5ed5 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,8 +1,7 @@ -ArchExpSubDecoder.java 8878133e8b65858b4cd7cedd243d49d391066323 RED ArchitectureDecoder.java d067dc995e0895860d98d717647c0f7b061f5908 RED -ArchitectureExplorationProblemModule.java a1c6b8ced3b1bf54ce9d9b957b0f4c80a821bdab RED +ArchitectureExplorationProblemModule.java 957299811d40d0a11126ff4f8eaa45d0cc54af7e RED DseProblemModuleBase.java 0eba41852529e92e7255c7a7d8fce18354facbca RED EvaluatorWrapper.java 3747e5b78b1dcef8e1595c1ae9354e8ef2738e79 RED ExplorationGoalPriorityMultiEvaluator.java 1f6d2aa6ece8acdf4f57face0439f3429ab87329 RED ProblemModuleBase.java 460f7a8a07435eb13634caa9072e425bdf20e399 RED -StrictTTDecoder.java d44d02b5f866717ebaa40a8a1a32225852e56af8 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 a1c6b8ced3b1bf54ce9d9b957b0f4c80a821bdab..957299811d40d0a11126ff4f8eaa45d0cc54af7e 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 @@ -71,7 +71,7 @@ public class ArchitectureExplorationProblemModule // bindProblem(dseFactory.createArchitectureExplorationCreator(), // dseFactory.createArchitectureDecoder(execDepGraph), archEvaluator); - bindProblem(new GuiceCreator(), new GuiceDecoder(), archEvaluator); + bindProblem(new GuiceCreator(), new GuiceDecoder(systemModelAdapter), archEvaluator); // Create/Bind the subproblems of the architectural exploration problem. try { diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/StrictTTDecoder.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/StrictTTDecoder.java index d44d02b5f866717ebaa40a8a1a32225852e56af8..d55ece0076bec24d74fd18dae3e33aaa9d2ac854 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/StrictTTDecoder.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/StrictTTDecoder.java @@ -15,29 +15,23 @@ +--------------------------------------------------------------------------*/ package org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; - import org.fortiss.af3.exploration.alg.dse.TaskMappingFactory; 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.taskgraph.InstantiatedAcyclicTaskGraphEncoding; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph.InstantiatedTaskGraphEncoding; +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.encoding.taskmapping.instantiatedmapping.InstantiatedTaskMappingEntry; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.decode.ComposableDecoderBase; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.exception.DecodingException; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.FlatPhenotypeMap; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.solution.StrictTTSchedule; +import org.fortiss.af3.exploration.alg.dse.module.DecoderModule; +import org.fortiss.af3.exploration.alg.dse.sysmodel.FailSilentExecModelFactory; import org.fortiss.af3.exploration.alg.dse.sysmodel.sched.comm.TDMABusScheduler; import org.fortiss.af3.exploration.alg.dse.sysmodel.sched.proc.EDFSchedulerBase; -import org.fortiss.af3.exploration.moea.model.DseSpecification; import org.opt4j.core.Genotype; -import com.google.inject.Inject; +import com.google.inject.Provides; /** * The Decoder decodes {@link Genotype}s into phenotype objects. @@ -45,7 +39,7 @@ import com.google.inject.Inject; * @author huang */ public class StrictTTDecoder<S extends InstantiatedTaskMappingEntry, T extends InstantiatedTaskMappingEncoding<S>> - extends ComposableDecoderBase<T, StrictTTSchedule<S, T>> implements ArchExpSubDecoder { + extends DecoderModule<StrictTTSchedule<S, T>> { /** Underlying EDF task scheduler */ private EDFSchedulerBase<S, T> simpleEDFScheduler; @@ -57,95 +51,45 @@ public class StrictTTDecoder<S extends InstantiatedTaskMappingEntry, T extends I * run. */ @SuppressWarnings("unchecked") - @Inject - public StrictTTDecoder(DseSpecification explorationDefinition) { - - TaskMappingFactory<?, ?> tmFactory = TaskMappingFactory.getInstance(); - - simpleEDFScheduler = (EDFSchedulerBase<S, T>)tmFactory - .createEDFScheduler(explorationDefinition.getTargetSpecification()); - simpleBusScheduler = - new TDMABusScheduler<S, T>(explorationDefinition.getTargetSpecification()); + public StrictTTDecoder() { + // FIXME: HACK to create the FailSilentTaskMappingFactory. Support for FaultDetection will + // be added again after switching to DI mechanisms completely. + // TaskMappingFactory<?, ?> tmFactory = TaskMappingFactory.getInstance(); + TaskMappingFactory<?, ?> tmFactory = FailSilentExecModelFactory.getInstance(); + simpleEDFScheduler = (EDFSchedulerBase<S, T>)tmFactory.createEDFScheduler(); + simpleBusScheduler = new TDMABusScheduler<S, T>(); } - /** {@inheritDoc} */ - @Override - public StrictTTSchedule<S, T> decodeComposable(T genotype, - FlatPhenotypeMap<Phenotype> phenotypeTypeMap) { - @SuppressWarnings("unchecked") MessageEncoding<S, T> msgEnc = - phenotypeTypeMap.getEncoding(MessageEncoding.class); - assert (msgEnc != null) : "The required message encoding could not be found in the map of already decoded phenotypes."; - @SuppressWarnings("unchecked") InstantiatedAcyclicTaskGraphEncoding<S, ?> acycItgEnc = - phenotypeTypeMap.getEncoding(InstantiatedAcyclicTaskGraphEncoding.class); - assert (acycItgEnc != null) : "The required acyclic and instantiated task graph encoding could not be found in the map of already decoded phenotypes."; - PlatformCommunicationGraphEncoding pcgEncoding = - phenotypeTypeMap.getEncoding(PlatformCommunicationGraphEncoding.class); - PartitionMappingEncoding partEnc = - phenotypeTypeMap.getEncoding(PartitionMappingEncoding.class); - assert (partEnc != null) : "The required partition mapping encoding could not be found in the map of already decoded phenotypes."; + @Provides + public StrictTTSchedule<FailSilentTaskMappingEntry, FailSilentTaskMappingEncoding> decode( + FailSilentTaskMappingEncoding itmEnc, + MessageEncoding<FailSilentTaskMappingEntry, FailSilentTaskMappingEncoding> msgEnc, + InstantiatedAcyclicTaskGraphEncoding<FailSilentTaskMappingEntry> acycItgEnc, + PlatformCommunicationGraphEncoding pcgEncoding, PartitionMappingEncoding partEnc) { + return decode(itmEnc, msgEnc, acycItgEnc, pcgEncoding, partEnc); + } + public StrictTTSchedule<S, T> decode(T itmEnc, MessageEncoding<S, T> msgEnc, + InstantiatedAcyclicTaskGraphEncoding<S> acycItgEnc, + PlatformCommunicationGraphEncoding pcgEncoding, PartitionMappingEncoding partEnc) { // TODO: Externalize the validation such that the encoding is not required to be passed to // the constructor (is there for validation purposes) - StrictTTSchedule<S, T> schedule = new StrictTTSchedule<S, T>(genotype); - simpleEDFScheduler.schedule(acycItgEnc, partEnc, genotype, schedule); - + StrictTTSchedule<S, T> schedule = new StrictTTSchedule<S, T>(itmEnc); + simpleEDFScheduler.schedule(acycItgEnc, partEnc, itmEnc, schedule); assert (schedule.validateSchedule(true)); // TODO: Find out why the message scheduler does not require the task graph. Actually, it // should require it... - simpleBusScheduler.schedule(schedule, msgEnc.getPeriodicMessages(), acycItgEnc, - pcgEncoding); + simpleBusScheduler + .schedule(schedule, msgEnc.getPeriodicMessages(), acycItgEnc, pcgEncoding); assert (schedule.validateSchedule(true)); return schedule; } - /** - * {@inheritDoc} - * - * @throws DecodingException - * see {@link ComposableDecoderBase} - */ - @Override - public StrictTTSchedule<S, T> updateComposable(T inGenotype, StrictTTSchedule<S, T> outGenotype, - FlatPhenotypeMap<Phenotype> decodedPhenotypes) throws DecodingException { - // Not required: The message encoding is a Phenotype only. - return null; - } - - /** {@inheritDoc} */ - @Override - public Collection<Class<?>> getRequiredTypes() { - Collection<Class<?>> reqTypes = new ArrayList<>(); - reqTypes.add(InstantiatedTaskMappingEncoding.class); - reqTypes.add(MessageEncoding.class); - reqTypes.add(PlatformCommunicationGraphEncoding.class); - reqTypes.add(PartitionMappingEncoding.class); - reqTypes.add(InstantiatedAcyclicTaskGraphEncoding.class); - // FIXME: Remove as soon as the evaluators can declare their required Phenotypes!!! (Needed - // for the period evaluator) - reqTypes.add(InstantiatedTaskGraphEncoding.class); - - return reqTypes; - } - - /** {@inheritDoc} */ - @SuppressWarnings("unchecked") - @Override - public Class<StrictTTSchedule<S, T>> getOutputType() { - Class<? super StrictTTSchedule<S, T>> retType = StrictTTSchedule.class; - return (Class<StrictTTSchedule<S, T>>)retType; - } - /** {@inheritDoc} */ @Override - public Collection<Class<?>> getOptionalTypes() { - return Collections.emptySet(); - } - - /** {@inheritDoc} */ - @Override - public Class<?> getPrimaryInputType() { - return InstantiatedTaskMappingEncoding.class; + public StrictTTSchedule<S, T> decode(Genotype genotype) { + return null; } } diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/comm/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/comm/.ratings index f910098ee71d86e6535e84f8620c8440e3e83ad4..96d2ad9c606a2e76a3c187d3a2aa49af55d5fa47 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/comm/.ratings +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/comm/.ratings @@ -1 +1 @@ -MessageDecoder.java 78eda9938a9d176f0e69bcffd4bbec28049db93d RED +MessageDecoder.java 5faf743c30edc661d4f9c4b39483c34a5148a8a9 RED diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/comm/MessageDecoder.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/comm/MessageDecoder.java index 78eda9938a9d176f0e69bcffd4bbec28049db93d..5faf743c30edc661d4f9c4b39483c34a5148a8a9 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/comm/MessageDecoder.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/comm/MessageDecoder.java @@ -15,7 +15,6 @@ +--------------------------------------------------------------------------*/ package org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.comm; -import java.util.ArrayList; import java.util.Collection; import java.util.Map; @@ -23,16 +22,14 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.comm.MessageEn import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.Partition; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.platform.PlatformCommunicationGraphEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph.AbstractTaskGraphEncoding; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph.InstantiatedTaskGraphEncoding; 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.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.decode.ComposableDecoder; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.decode.ComposableDecoderBase; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.exception.DecodingException; -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.DecoderModule; 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.comm.Message; @@ -42,8 +39,9 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.mapping.comm.IMessageRouter. import org.fortiss.af3.exploration.alg.dse.sysmodel.mapping.comm.MessageRouter; import org.jgrapht.DirectedGraph; import org.jgrapht.graph.DefaultEdge; +import org.opt4j.core.Genotype; -import com.google.inject.Inject; +import com.google.inject.Provides; /** * {@link ComposableDecoder} that takes an {@link InstantiatedTaskMappingEncoding} and a) an @@ -53,7 +51,7 @@ import com.google.inject.Inject; * @author diewald */ public class MessageDecoder<S extends TaskMappingEntry<ITaskAdapter<?>, Partition>, T extends TaskMappingEncoding<ITaskAdapter<?>, S>> - extends ComposableDecoderBase<T, MessageEncoding<S, T>> { + extends DecoderModule<MessageEncoding<S, T>> { /** * {@link MessageGenerator} which analyzes an {@link InstantiatedTaskMappingEncoding} and * determines the required {@link Message}s. @@ -64,37 +62,28 @@ public class MessageDecoder<S extends TaskMappingEntry<ITaskAdapter<?>, Partitio protected IMessageRouter messageRouter; /** Default constructor that requires a reference to the input models. */ - @Inject public MessageDecoder() { messageGenerator = new MessageGenerator<S, T>(); messageRouter = new MessageRouter(); } - /** - * {@inheritDoc} - * - * @throws DecodingException - */ - @Override - public MessageEncoding<S, T> decodeComposable(T genotype, - FlatPhenotypeMap<Phenotype> decodedPhenotypes) throws DecodingException { - PlatformCommunicationGraphEncoding pcgEncoding = - decodedPhenotypes.getEncoding(PlatformCommunicationGraphEncoding.class); - assert (pcgEncoding != null) : "The required platform communication graph encoding could not" + - " be found in the map of already decoded phenotypes."; - @SuppressWarnings("unchecked") AbstractTaskGraphEncoding<AbstractTaskMappingEncoding, ?> atgEnc = - decodedPhenotypes.getEncoding(AbstractTaskGraphEncoding.class); - assert (pcgEncoding != null) : "The required atstract task graph encoding encoding could not" + - " be found in the map of already decoded phenotypes."; + @Provides + public MessageEncoding<FailSilentTaskMappingEntry, FailSilentTaskMappingEncoding> decode( + FailSilentTaskMappingEncoding tmEnc, PlatformCommunicationGraphEncoding pcgEnc, + AbstractTaskGraphEncoding atgEnc) throws DecodingException { + return decode(tmEnc, pcgEnc, atgEnc); + } - Collection<Message> generatedMessages = messageGenerator.generateMessages(genotype, atgEnc); + public MessageEncoding<S, T> decode(T tmEnc, PlatformCommunicationGraphEncoding pcgEnc, + AbstractTaskGraphEncoding atgEnc) throws DecodingException { + Collection<Message> generatedMessages = messageGenerator.generateMessages(tmEnc, atgEnc); Map<Message, DirectedGraph<IResourceAdapter<?>, DefaultEdge>> messageRouteMap = - messageRouter.calculateMessageRoutes(generatedMessages, pcgEncoding, + messageRouter.calculateMessageRoutes(generatedMessages, pcgEnc, RoutingStrategy.SHORTEST_PATH); if(messageRouteMap == null) { // At least one *invalid* communication link is required by the given mapping => // infeasible mapping. - throw new DecodingException(genotype, this, + throw new DecodingException(tmEnc, this, "At least one message could not be routed from the sending unit to all its receivers."); } @@ -106,40 +95,10 @@ public class MessageDecoder<S extends TaskMappingEntry<ITaskAdapter<?>, Partitio return new MessageEncoding<>(generatedMessages); } - /** - * {@inheritDoc} - * - * @throws DecodingException - * see {@link ComposableDecoder}. - */ - @Override - public MessageEncoding<S, T> updateComposable(T inGenotype, MessageEncoding<S, T> outGenotype, - FlatPhenotypeMap<Phenotype> decodedPhenotypes) throws DecodingException { - // Not required: The message encoding is a Phenotype only. - // TODO: Throw a decoding exception, instead. - return null; - } - /** {@inheritDoc} */ @Override - public Collection<Class<?>> getRequiredTypes() { - Collection<Class<?>> reqTypes = new ArrayList<>(); - reqTypes.add(InstantiatedTaskMappingEncoding.class); - reqTypes.add(InstantiatedTaskGraphEncoding.class); - reqTypes.add(PlatformCommunicationGraphEncoding.class); - return reqTypes; - } - - /** {@inheritDoc} */ - @SuppressWarnings("rawtypes") - @Override - public Class<MessageEncoding> getOutputType() { - return MessageEncoding.class; - } - - /** {@inheritDoc} */ - @Override - public Class<?> getPrimaryInputType() { - return InstantiatedTaskMappingEncoding.class; + public MessageEncoding<S, T> decode(Genotype genotype) { + // TODO Auto-generated method stub + return null; } } diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatetaskgraph/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatetaskgraph/.ratings index 80c558fe9e638ab1a5290ef75d510533dbb26e45..71055902a70cd2d2ef0b8db007fb54b0aaaca701 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatetaskgraph/.ratings +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatetaskgraph/.ratings @@ -1,2 +1,2 @@ -InstantiatedTaskMappingDecoder.java e73da437e703017adacce54f6778f553180c02b2 RED -InstantiatedTaskMappingDecoderAcyclic.java 979d34e0bfc76cc39ac201b3d9d34500f44ce30d RED +InstantiatedTaskMappingDecoder.java 4738a0c2a31312add96f9ee9425be841038885d9 RED +InstantiatedTaskMappingDecoderAcyclic.java 5a6462fcf57680abe11163e5838aea4c84e03b88 RED diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatetaskgraph/InstantiatedTaskMappingDecoder.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatetaskgraph/InstantiatedTaskMappingDecoder.java index e73da437e703017adacce54f6778f553180c02b2..4738a0c2a31312add96f9ee9425be841038885d9 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatetaskgraph/InstantiatedTaskMappingDecoder.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatetaskgraph/InstantiatedTaskMappingDecoder.java @@ -25,21 +25,21 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.safetyfunction import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.safetyfunctionarch.SafetyFunctionArchEntry; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph.AbstractTaskGraphEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph.InstantiatedTaskGraphEncoding; -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.encoding.taskmapping.instantiatedmapping.InstantiatedTaskMappingEntry; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.decode.ComposableDecoder; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.decode.ComposableDecoderBase; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.exception.DecodingException; -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.DecoderModule; 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.arch.taskgraph.SignalAdapterWeightedEdge; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.TaskGraph; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.TaskGraphInstantiator; +import org.opt4j.core.Genotype; -import com.google.inject.Inject; +import com.google.inject.Provides; /** * {@link ComposableDecoder} that takes an {@link InstantiatedTaskMappingEncoding} as input and @@ -47,30 +47,26 @@ import com.google.inject.Inject; * * @author diewald */ -public class InstantiatedTaskMappingDecoder<T extends InstantiatedTaskMappingEntry, C> extends - ComposableDecoderBase<InstantiatedTaskMappingEncoding<T>, InstantiatedTaskGraphEncoding<T, C>> { - /** Constructs a new decoder to generate {@link InstantiatedTaskGraphEncoding}. */ - @Inject - public InstantiatedTaskMappingDecoder() { +public class InstantiatedTaskMappingDecoder<T extends InstantiatedTaskMappingEntry> extends + DecoderModule<InstantiatedTaskGraphEncoding<T>> { + + @Provides + public InstantiatedTaskGraphEncoding<FailSilentTaskMappingEntry> decode( + FailSilentTaskMappingEncoding itmEnc, AbstractTaskGraphEncoding atgEnc, + SafetyFunctionArchEncoding sfEnc) throws DecodingException { + return decode(itmEnc, atgEnc, sfEnc); } - /** {@inheritDoc} */ - @Override - public InstantiatedTaskGraphEncoding<T, C> decodeComposable( - InstantiatedTaskMappingEncoding<T> genotype, - FlatPhenotypeMap<Phenotype> phenotypeTypeMap) throws DecodingException { - @SuppressWarnings("unchecked") AbstractTaskGraphEncoding<AbstractTaskMappingEncoding, C> atgEnc = - phenotypeTypeMap.getEncoding(AbstractTaskGraphEncoding.class); - assert (atgEnc != null) : "The required abstract task graph encoding could not be found in the map of already decoded phenotypes."; - - SafetyFunctionArchEncoding<?> sfEnc = - phenotypeTypeMap.getEncoding(SafetyFunctionArchEncoding.class); - - Collection<DefaultTaskGraph<?>> tgColl = atgEnc.getTaskGraphs(); - TaskGraphInstantiator<DefaultTaskGraph<?>> tgInstatiator = - new TaskGraphInstantiator<>(tgColl, genotype); - InstantiatedTaskGraphEncoding<T, C> itgEnc = new InstantiatedTaskGraphEncoding<T, C>( - tgInstatiator.createMultipleInstanceTaskGraphs(tgColl), atgEnc.getHyperPeriod()); + public InstantiatedTaskGraphEncoding<T> decode(InstantiatedTaskMappingEncoding<T> itmEnc, + AbstractTaskGraphEncoding atgEnc, SafetyFunctionArchEncoding sfEnc) + throws DecodingException { + Collection<TaskGraph> tgColl = atgEnc.getTaskGraphs(); + TaskGraphInstantiator<TaskGraph> tgInstatiator = + new TaskGraphInstantiator<>(tgColl, itmEnc); + InstantiatedTaskGraphEncoding<T> itgEnc = + new InstantiatedTaskGraphEncoding<T>( + tgInstatiator.createMultipleInstanceTaskGraphs(tgColl), + atgEnc.getHyperPeriod()); if(sfEnc != null) { removeInterSafetyChannelSignals(sfEnc, itgEnc); @@ -86,9 +82,9 @@ public class InstantiatedTaskMappingDecoder<T extends InstantiatedTaskMappingEnt */ // FIXME: also consider other realizing components. // TODO: consider moving this operation - private void removeInterSafetyChannelSignals(SafetyFunctionArchEncoding<?> sfEnc, - InstantiatedTaskGraphEncoding<T, C> itgEnc) throws DecodingException { - for(SafetyFunctionArchEntry<?> sfEntry : sfEnc.getAllEntries()) { + private void removeInterSafetyChannelSignals(SafetyFunctionArchEncoding sfEnc, + InstantiatedTaskGraphEncoding<T> itgEnc) throws DecodingException { + for(SafetyFunctionArchEntry sfEntry : sfEnc.getAllEntries()) { Collection<ITaskAdapter<?>> sfCompAdps = castToRawColl(sfEntry.getSafetyFunctionAdapter().getRealizingComponents()); assert (sfCompAdps.size() > 0); @@ -97,7 +93,7 @@ public class InstantiatedTaskMappingDecoder<T extends InstantiatedTaskMappingEnt // Get the "containing" task graph. We must check all replacement components (instances) // since we don't know which one was instantiated (or it would be more costly to find // out). - DefaultTaskGraph<?> sfTG = null; + TaskGraph sfTG = null; for(ITaskAdapter<?> curSFCompAdp : sfCompAdp.getReplacementComponents()) { sfTG = itgEnc.getTaskGraphOf(curSFCompAdp); if(sfTG != null) { @@ -121,15 +117,18 @@ public class InstantiatedTaskMappingDecoder<T extends InstantiatedTaskMappingEnt ITaskAdapter<?> outputUnit = sfEntry.getSafetyFunctionAdapter().getOutputComponent(); // TODO: only for a single diag unit. - Collection<ITaskAdapter<?>> realizingSFUnits = itgEnc.getTasks().stream() - .filter(d -> sfUnits.contains(d.getReplacedComponent())) - .collect(Collectors.toList()); - Collection<ITaskAdapter<?>> realizingDiagUnits = itgEnc.getTasks().stream() - .filter(d -> diagUnits.contains(d.getReplacedComponent())) - .collect(Collectors.toList()); - Collection<ITaskAdapter<?>> outComps = itgEnc.getTasks().stream() - .filter(d -> d.getObject() == outputUnit.getObject()) - .collect(Collectors.toList()); + Collection<ITaskAdapter<?>> realizingSFUnits = + itgEnc.getTasks().stream() + .filter(d -> sfUnits.contains(d.getReplacedComponent())) + .collect(Collectors.toList()); + Collection<ITaskAdapter<?>> realizingDiagUnits = + itgEnc.getTasks().stream() + .filter(d -> diagUnits.contains(d.getReplacedComponent())) + .collect(Collectors.toList()); + Collection<ITaskAdapter<?>> outComps = + itgEnc.getTasks().stream() + .filter(d -> d.getObject() == outputUnit.getObject()) + .collect(Collectors.toList()); // Pick an sf component instance that is assigned to the current channel. ITaskAdapter<?> currentChannelSFUnit = null; @@ -193,8 +192,7 @@ public class InstantiatedTaskMappingDecoder<T extends InstantiatedTaskMappingEnt * {@link ITaskAdapter} of the currently processed output aggregation * element. */ - private void updateTaskGraph(DefaultTaskGraph<?> sfTG, - Collection<ITaskAdapter<?>> realizingSFUnits, + private void updateTaskGraph(TaskGraph sfTG, Collection<ITaskAdapter<?>> realizingSFUnits, Collection<ITaskAdapter<?>> realizingDiagUnits, Collection<ITaskAdapter<?>> outComps, ITaskAdapter<?> currentChannelSFUnit, ITaskAdapter<?> currentChannelDiagUnit, ITaskAdapter<?> currentChannelOutputUnit) { @@ -230,49 +228,10 @@ public class InstantiatedTaskMappingDecoder<T extends InstantiatedTaskMappingEnt } } - /** - * {@inheritDoc} - * - * @throws DecodingException - * see {@link ComposableDecoder}. - */ - @Override - public InstantiatedTaskGraphEncoding<T, C> updateComposable( - InstantiatedTaskMappingEncoding<T> inGenotype, - InstantiatedTaskGraphEncoding<T, C> outGenotype, - FlatPhenotypeMap<Phenotype> decodedPhenotypes) throws DecodingException { - // Not required: The InstantiatedTaskGraphEncoding is a Phenotype only. - // TODO: Throw a decoding exception, instead. - return null; - } - - /** {@inheritDoc} */ - @Override - public Collection<Class<?>> getRequiredTypes() { - Collection<Class<?>> reqTypes = new ArrayList<>(); - reqTypes.add(InstantiatedTaskMappingEncoding.class); - reqTypes.add(AbstractTaskGraphEncoding.class); - return reqTypes; - } - - /** {@inheritDoc} */ - @Override - public Collection<Class<?>> getOptionalTypes() { - Collection<Class<?>> optTypes = new ArrayList<>(); - optTypes.add(SafetyFunctionArchEncoding.class); - return optTypes; - } - - /** {@inheritDoc} */ - @SuppressWarnings("rawtypes") - @Override - public Class<InstantiatedTaskGraphEncoding> getOutputType() { - return InstantiatedTaskGraphEncoding.class; - } - /** {@inheritDoc} */ @Override - public Class<?> getPrimaryInputType() { - return InstantiatedTaskMappingEncoding.class; + public InstantiatedTaskGraphEncoding<T> decode(Genotype genotype) { + // TODO Auto-generated method stub + return null; } } diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatetaskgraph/InstantiatedTaskMappingDecoderAcyclic.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatetaskgraph/InstantiatedTaskMappingDecoderAcyclic.java index 979d34e0bfc76cc39ac201b3d9d34500f44ce30d..5a6462fcf57680abe11163e5838aea4c84e03b88 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatetaskgraph/InstantiatedTaskMappingDecoderAcyclic.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatetaskgraph/InstantiatedTaskMappingDecoderAcyclic.java @@ -15,22 +15,17 @@ +--------------------------------------------------------------------------*/ package org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.instantiatetaskgraph; -import java.util.ArrayList; -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.encoding.taskgraph.AbstractTaskGraphEncoding; 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.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.encoding.taskmapping.instantiatedmapping.InstantiatedTaskMappingEntry; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.decode.ComposableDecoder; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.decode.ComposableDecoderBase; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.exception.DecodingException; -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.DecoderModule; +import org.opt4j.core.Genotype; -import com.google.inject.Inject; +import com.google.inject.Provides; /** * {@link ComposableDecoder} that takes an {@link InstantiatedTaskMappingEncoding} as input and @@ -38,79 +33,30 @@ import com.google.inject.Inject; * * @author diewald */ -public class InstantiatedTaskMappingDecoderAcyclic<T extends InstantiatedTaskMappingEntry, C> - extends - ComposableDecoderBase<InstantiatedTaskMappingEncoding<T>, InstantiatedAcyclicTaskGraphEncoding<T, C>> { - /** Constructs a new decoder to generate {@link InstantiatedTaskGraphEncoding}. */ - @Inject - public InstantiatedTaskMappingDecoderAcyclic() { +public class InstantiatedTaskMappingDecoderAcyclic<T extends InstantiatedTaskMappingEntry> extends + DecoderModule<InstantiatedAcyclicTaskGraphEncoding<T>> { + + @Provides + public InstantiatedAcyclicTaskGraphEncoding<FailSilentTaskMappingEntry> decodeFailSilent( + AbstractTaskGraphEncoding atgEnc, + InstantiatedTaskGraphEncoding<FailSilentTaskMappingEntry> itgEnc) { + // TODO: Replace with "decode". Fixup type (generic) conversion. + return new InstantiatedAcyclicTaskGraphEncoding<FailSilentTaskMappingEntry>( + itgEnc.getTaskGraphs(), atgEnc.getHyperPeriod()); } - /** {@inheritDoc} */ - @Override - public InstantiatedAcyclicTaskGraphEncoding<T, C> decodeComposable( - InstantiatedTaskMappingEncoding<T> genotype, - FlatPhenotypeMap<Phenotype> phenotypeTypeMap) { - // TODO: automate the retrieval of phenotypes. - @SuppressWarnings("unchecked") AbstractTaskGraphEncoding<InstantiatedTaskMappingEncoding<T>, C> atgEnc = - phenotypeTypeMap.getEncoding(AbstractTaskGraphEncoding.class); - assert (atgEnc != null) : "The required abstract task graph encoding could not be found in the map of already decoded phenotypes."; - - @SuppressWarnings("unchecked") InstantiatedTaskGraphEncoding<T, C> itgEnc = - phenotypeTypeMap.getEncoding(InstantiatedTaskGraphEncoding.class); - assert (itgEnc != null) : "The required abstract task graph encoding could not be found in the map of already decoded phenotypes."; - - InstantiatedAcyclicTaskGraphEncoding<T, C> iAtgEnc = - new InstantiatedAcyclicTaskGraphEncoding<T, C>(itgEnc.getTaskGraphs(), + public InstantiatedAcyclicTaskGraphEncoding<T> decode(AbstractTaskGraphEncoding atgEnc, + InstantiatedTaskGraphEncoding<T> itgEnc) { + InstantiatedAcyclicTaskGraphEncoding<T> iAtgEnc = + new InstantiatedAcyclicTaskGraphEncoding<T>(itgEnc.getTaskGraphs(), atgEnc.getHyperPeriod()); - return iAtgEnc; } - /** - * {@inheritDoc} - * - * @throws DecodingException - * see {@link ComposableDecoder}. - */ - @Override - public InstantiatedAcyclicTaskGraphEncoding<T, C> updateComposable( - InstantiatedTaskMappingEncoding<T> inGenotype, - InstantiatedAcyclicTaskGraphEncoding<T, C> outGenotype, - FlatPhenotypeMap<Phenotype> decodedPhenotypes) throws DecodingException { - // Not required: The InstantiatedTaskGraphEncoding is a Phenotype only. - // TODO: Throw a decoding exception, instead. - return null; - } - - /** {@inheritDoc} */ - @Override - public Collection<Class<?>> getRequiredTypes() { - Collection<Class<?>> reqTypes = new ArrayList<>(); - reqTypes.add(InstantiatedTaskMappingEncoding.class); - reqTypes.add(InstantiatedTaskGraphEncoding.class); - - return reqTypes; - } - - /** {@inheritDoc} */ - @Override - public Collection<Class<?>> getOptionalTypes() { - Collection<Class<?>> optTypes = new ArrayList<>(); - optTypes.add(SafetyFunctionArchEncoding.class); - return optTypes; - } - - /** {@inheritDoc} */ - @SuppressWarnings("rawtypes") - @Override - public Class<InstantiatedAcyclicTaskGraphEncoding> getOutputType() { - return InstantiatedAcyclicTaskGraphEncoding.class; - } - /** {@inheritDoc} */ @Override - public Class<?> getPrimaryInputType() { - return InstantiatedTaskMappingEncoding.class; + public InstantiatedAcyclicTaskGraphEncoding<T> decode(Genotype genotype) { + // TODO Auto-generated method stub + return null; } } diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/partitionmapping/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/partitionmapping/.ratings index 2ae985fac65ccadc8e670bc8d96f4a3957e48ca9..cf38bc17c2e296902320ab33e46af896cf44f537 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/partitionmapping/.ratings +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/partitionmapping/.ratings @@ -1,2 +1 @@ -PartitionMappingDecoderGraph.java 73645b119904fb34c8a1136a7603af8830a94778 RED -PartitionMappingIdentityDecoder.java 964e0e992dd33aeec4ed55a83d9c6c6f7883a7a0 RED +PartitionMappingDecoderGraph.java 7e1578be1cd243b11994085d599310ba669ba263 RED diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/partitionmapping/PartitionMappingDecoderGraph.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/partitionmapping/PartitionMappingDecoderGraph.java index 73645b119904fb34c8a1136a7603af8830a94778..7e1578be1cd243b11994085d599310ba669ba263 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/partitionmapping/PartitionMappingDecoderGraph.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/partitionmapping/PartitionMappingDecoderGraph.java @@ -21,94 +21,86 @@ import java.util.Collection; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.Partition; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.PartitionMappingEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.platform.PlatformCommunicationGraphEncoding; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.decode.ComposableDecoderBase; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.FlatPhenotypeMap; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.ArchExpSubDecoder; +import org.fortiss.af3.exploration.alg.dse.module.DecoderModule; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ICommunicationResourceAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IResourceAdapter; import org.fortiss.tooling.common.util.LambdaUtils; import org.jgrapht.Graphs; import org.jgrapht.graph.DefaultEdge; +import org.opt4j.core.Genotype; +import org.opt4j.core.genotype.CompositeGenotype; + +import com.google.inject.Provides; /** + * Update the {@link PlatformCommunicationGraphEncoding} with potential changes from the partition + * mapping. Partitions are added as leaves to the graph (behind phys. execution units). * * @author diewald */ -public class PartitionMappingDecoderGraph extends - ComposableDecoderBase<PlatformCommunicationGraphEncoding, PlatformCommunicationGraphEncoding> - implements ArchExpSubDecoder { - /** {@inheritDoc} */ - @Override - public PlatformCommunicationGraphEncoding decodeComposable( - PlatformCommunicationGraphEncoding genotype, - FlatPhenotypeMap<Phenotype> decodedPhenotypes) { - PartitionMappingEncoding pmEnc = - decodedPhenotypes.getEncoding(PartitionMappingEncoding.class); - assert (pmEnc != null) : "The required platform communication graph encoding could not" + - " be found in the map of already decoded phenotypes."; +// TODO: DecodeUpdate: We may consider moving the decode method to the creator. +public class PartitionMappingDecoderGraph extends DecoderModule<PlatformCommunicationGraphEncoding> { - for(IResourceAdapter<?> execUnit : genotype.getActualGraph().vertexSet()) { + @Provides + PartitionMappingEncoding getPmEnc( + CompositeGenotype<Class<? extends Genotype>, ? extends Genotype> compGene) { + return compGene.get(PartitionMappingEncoding.class); + } + + @Provides + public PlatformCommunicationGraphEncoding decodeComposable( + PlatformCommunicationGraphEncoding pcmEnc, PartitionMappingEncoding pmEnc) { + for(IResourceAdapter<?> execUnit : pcmEnc.getActualGraph().vertexSet()) { for(IResourceAdapter<?> partition : pmEnc.getRequesters(execUnit)) { - genotype.getActualGraph().addVertex(partition); - genotype.getActualGraph().addEdge(partition, execUnit); - genotype.getActualGraph().addEdge(execUnit, partition); + pcmEnc.getActualGraph().addVertex(partition); + pcmEnc.getActualGraph().addEdge(partition, execUnit); + pcmEnc.getActualGraph().addEdge(execUnit, partition); } } - return genotype; + return pcmEnc; } - /** {@inheritDoc} */ - @Override public PlatformCommunicationGraphEncoding updateComposable( - PlatformCommunicationGraphEncoding inGenotype, - PlatformCommunicationGraphEncoding outGenotype, - FlatPhenotypeMap<Phenotype> decodedPhenotypes) { - PartitionMappingEncoding pmEnc = - decodedPhenotypes.getEncoding(PartitionMappingEncoding.class); - assert (pmEnc != null) : "The required partition mapping encoding could not" + - " be found in the map of already decoded phenotypes."; + PlatformCommunicationGraphEncoding pcmEnc, PartitionMappingEncoding pmEnc) { // Remove non-existing Partitions (from a previous iteration). Collection<IResourceAdapter<?>> removeVertices = new ArrayList<>(); - for(IResourceAdapter<?> resource : inGenotype.getActualGraph().vertexSet()) { + for(IResourceAdapter<?> resource : pcmEnc.getActualGraph().vertexSet()) { if((resource instanceof Partition) && !pmEnc.getRequesters().contains(resource)) { - Collection<DefaultEdge> edgeSet = inGenotype.getActualGraph().edgesOf(resource); - inGenotype.getActualGraph().removeAllEdges(edgeSet); + Collection<DefaultEdge> edgeSet = pcmEnc.getActualGraph().edgesOf(resource); + pcmEnc.getActualGraph().removeAllEdges(edgeSet); removeVertices.add(resource); } } - inGenotype.getActualGraph().removeAllVertices(removeVertices); + pcmEnc.getActualGraph().removeAllVertices(removeVertices); // Add missing Partitions. for(Partition partition : pmEnc.getRequesters()) { - if(!inGenotype.getActualGraph().containsVertex(partition)) { + if(!pcmEnc.getActualGraph().containsVertex(partition)) { // We have only one Partition per entry --> Multiples for task mappings. // TODO: Correct the return type for single and multi returns. IResourceAdapter<?> execUnit = pmEnc.getAllocatedResourcesFor(partition).iterator().next(); - inGenotype.getActualGraph().addVertex(partition); + pcmEnc.getActualGraph().addVertex(partition); // FIXME: HACK!!! Connects the Partitions to the communication resource attached to // the phys exec unit. This is used to avoid larger reworks in the TDMA Message // scheduler. The scheduler must be reconsidered to reflect internal comm. of a // core/processor correctly. Collection<IResourceAdapter<?>> commResources = - Graphs.neighborListOf(inGenotype.getActualGraph(), execUnit); - IResourceAdapter<?> commresource = LambdaUtils - .getFirst(commResources, r -> r instanceof ICommunicationResourceAdapter) - .get(); - inGenotype.getActualGraph().addEdge(partition, commresource); - inGenotype.getActualGraph().addEdge(commresource, partition); + Graphs.neighborListOf(pcmEnc.getActualGraph(), execUnit); + IResourceAdapter<?> commresource = + LambdaUtils.getFirst(commResources, + r -> r instanceof ICommunicationResourceAdapter).get(); + pcmEnc.getActualGraph().addEdge(partition, commresource); + pcmEnc.getActualGraph().addEdge(commresource, partition); } } - return inGenotype; + return pcmEnc; } /** {@inheritDoc} */ @Override - public Collection<Class<?>> getRequiredTypes() { - Collection<Class<?>> reqTypes = new ArrayList<>(); - reqTypes.add(PlatformCommunicationGraphEncoding.class); - reqTypes.add(PartitionMappingEncoding.class); - return reqTypes; + public PlatformCommunicationGraphEncoding decode(Genotype genotype) { + // TODO Auto-generated method stub + return null; } } diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/partitionmapping/PartitionMappingIdentityDecoder.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/partitionmapping/PartitionMappingIdentityDecoder.java deleted file mode 100644 index 964e0e992dd33aeec4ed55a83d9c6c6f7883a7a0..0000000000000000000000000000000000000000 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/partitionmapping/PartitionMappingIdentityDecoder.java +++ /dev/null @@ -1,63 +0,0 @@ -/*-------------------------------------------------------------------------+ -| 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.problem.partitionmapping; - -import java.util.ArrayList; -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.extensions.compositegene.decode.ComposableDecoderBase; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.FlatPhenotypeMap; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.ArchExpSubDecoder; - -/** - * - * @author diewald - */ -public class PartitionMappingIdentityDecoder - extends ComposableDecoderBase<PartitionMappingEncoding, PartitionMappingEncoding> - implements ArchExpSubDecoder { - /** {@inheritDoc} */ - @Override - public PartitionMappingEncoding decodeComposable(PartitionMappingEncoding genotype, - FlatPhenotypeMap<Phenotype> decodedPhenotypes) { - return genotype; - } - - /** {@inheritDoc} */ - @Override - public PartitionMappingEncoding updateComposable(PartitionMappingEncoding inGenotype, - PartitionMappingEncoding outGenotype, FlatPhenotypeMap<Phenotype> decodedPhenotypes) { - return inGenotype; - } - - /** {@inheritDoc} */ - @Override - public Collection<Class<?>> getRequiredTypes() { - Collection<Class<?>> reqTypes = new ArrayList<>(); - reqTypes.add(PartitionMappingEncoding.class); - return reqTypes; - } - - /** {@inheritDoc} */ - @Override - public Collection<Class<?>> getOptionalTypes() { - Collection<Class<?>> optTypes = new ArrayList<>(); - optTypes.add(PartitionMappingEncoding.class); - return optTypes; - } -} diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/.ratings index d486787fa471036493ae4a60895f5f999c18a123..9d13ec3c482d870dc214771346492d62bcff9039 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/.ratings +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/.ratings @@ -1,4 +1,3 @@ -SFEncodingDecoder.java 35536dec62c42b3acfc3a53973e804e238cfdad2 RED -SFGraphDecoder.java 82c9b536a526e0e2b23d35a64124e622e5eedd5a RED -SFMappingConstraintDecoder.java 69b46dc6184f316102df770ebad3814361db6d11 RED -SFMappingDecoder.java 0fe8c6aad79085a5be5ead4c38b21e06095944a9 RED +SFGraphDecoder.java 0b42b83465213eb13ae59765f6bf53c1c8bd3b66 RED +SFMappingConstraintDecoder.java 01e8f450a78ffff9572a7f203b3699cff507e99f RED +SFMappingDecoder.java 8d890da23b7dab19ff11163a79f9ba6a2c0a9a3c RED diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/SFEncodingDecoder.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/SFEncodingDecoder.java deleted file mode 100644 index 35536dec62c42b3acfc3a53973e804e238cfdad2..0000000000000000000000000000000000000000 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/SFEncodingDecoder.java +++ /dev/null @@ -1,86 +0,0 @@ -/*-------------------------------------------------------------------------+ -| Copyright 2016 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.problem.safetyfunction; - -import java.util.ArrayList; -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.decode.ComposableDecoder; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.decode.ComposableDecoderBase; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.exception.DecodingException; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.FlatPhenotypeMap; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.ArchExpSubDecoder; - -/** - * Provides a {@link SafetyFunctionArchEncoding} to the set of {@link Phenotype} types. - * This {@link ComposableDecoder} is an identity operation. - * - * @author diewald - */ -public class SFEncodingDecoder<C> extends - ComposableDecoderBase<SafetyFunctionArchEncoding<C>, SafetyFunctionArchEncoding<C>> - implements ArchExpSubDecoder { - - /** - * {@inheritDoc} - * - * @throws DecodingException - * see {@link ComposableDecoderBase}. - */ - @Override - public SafetyFunctionArchEncoding<C> decodeComposable(SafetyFunctionArchEncoding<C> genotype, - FlatPhenotypeMap<Phenotype> decodedPhenotypes) throws DecodingException { - return genotype; - } - - /** - * {@inheritDoc} - * - * @throws DecodingException - * see {@link ComposableDecoderBase}. - */ - @Override - public SafetyFunctionArchEncoding<C> - updateComposable(SafetyFunctionArchEncoding<C> inGenotype, - SafetyFunctionArchEncoding<C> outGenotype, - FlatPhenotypeMap<Phenotype> decodedPhenotypes) throws DecodingException { - return inGenotype; - } - - /** {@inheritDoc} */ - @Override - public Collection<Class<?>> getRequiredTypes() { - Collection<Class<?>> reqTypes = new ArrayList<>(); - reqTypes.add(SafetyFunctionArchEncoding.class); - return reqTypes; - } - - /** {@inheritDoc} */ - @SuppressWarnings("unchecked") - @Override - public Class<SafetyFunctionArchEncoding<C>> getOutputType() { - Class<? super SafetyFunctionArchEncoding<C>> retType = SafetyFunctionArchEncoding.class; - return (Class<SafetyFunctionArchEncoding<C>>)retType; - } - - /** {@inheritDoc} */ - @Override - public Class<?> getPrimaryInputType() { - return SafetyFunctionArchEncoding.class; - } -} diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/SFGraphDecoder.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/SFGraphDecoder.java index 82c9b536a526e0e2b23d35a64124e622e5eedd5a..0b42b83465213eb13ae59765f6bf53c1c8bd3b66 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/SFGraphDecoder.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/SFGraphDecoder.java @@ -15,26 +15,24 @@ +--------------------------------------------------------------------------*/ package org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.safetyfunction; -import java.util.ArrayList; import java.util.Collection; +import java.util.Set; +import org.eclipse.swt.internal.C; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.safetyfunctionarch.SafetyFunctionArchEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.safetyfunctionarch.SafetyFunctionArchEntry; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph.AbstractTaskGraphEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph.SafeTaskGraphEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph.TaskGraphEncoding; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.abstractmapping.AbstractTaskMappingEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.decode.ComposableDecoder; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.decode.ComposableDecoderBase; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.decode.CompositeDecoder; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.exception.DecodingException; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.FlatPhenotypeMap; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.ArchExpSubDecoder; +import org.fortiss.af3.exploration.alg.dse.module.DecoderModule; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ITaskAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.TaskGraph; +import org.opt4j.core.Genotype; -import com.google.inject.Inject; +import com.google.inject.Provider; +import com.google.inject.Provides; +import com.google.inject.name.Named; /** * {@link ComposableDecoder} that generates {@link ITaskAdapter}s from the @@ -42,36 +40,19 @@ import com.google.inject.Inject; * * @author diewald */ -public class SFGraphDecoder<C> - extends ComposableDecoderBase<SafetyFunctionArchEncoding<C>, SafeTaskGraphEncoding<C>> - implements ArchExpSubDecoder { - /** Task Graphs extracted from the input models. */ - Collection<TaskGraph> origTaskGraphs; - - /** Constructs a new decoder that instantiates {@link AbstractTaskMappingEncoding}. */ - @Inject - public SFGraphDecoder(Collection<TaskGraph> origTaskGraphs) { - this.origTaskGraphs = origTaskGraphs; - } - - /** {@inheritDoc} */ - @Override - public SafeTaskGraphEncoding<C> decodeComposable(SafetyFunctionArchEncoding<C> genotype, - FlatPhenotypeMap<Phenotype> phenotypetypeMap) { - if(genotype == null) { - return null; - } - - @SuppressWarnings("unchecked") AbstractTaskGraphEncoding<AbstractTaskMappingEncoding, C> atgEnc = - phenotypetypeMap.getEncoding(AbstractTaskGraphEncoding.class); - // TODO: we should dynamically retrieve the encoding here, since the statement below assumes - // that this decoding step is performed before others. - // FIXME: Find a way to pass the original taks graph. We might have a circular dependency +public class SFGraphDecoder extends DecoderModule<SafeTaskGraphEncoding> implements + Provider<SafetyFunctionArchEncoding> { + + @Provides + public SafeTaskGraphEncoding decode(SafetyFunctionArchEncoding sfaEnc, + AbstractTaskGraphEncoding atgEnc, + @Named("OriginalTaskGraphs") Set<TaskGraph> origTaskGraphs) { + // FIXME: Find a way to pass the original task graph. We might have a circular dependency // here. - SafeTaskGraphEncoding<C> encoding = - new SafeTaskGraphEncoding<>(origTaskGraphs, atgEnc.getHyperPeriod()); + SafeTaskGraphEncoding encoding = + new SafeTaskGraphEncoding(origTaskGraphs, atgEnc.getHyperPeriod()); - for(SafetyFunctionArchEntry<C> sFAEntry : genotype.getAllEntries()) { + for(SafetyFunctionArchEntry sFAEntry : sfaEnc.getAllEntries()) { boolean diagPresent = sFAEntry.isDiagnosicUnitPresent(); if(!diagPresent && containsDiagUnits(sFAEntry, encoding)) { removeDiagUnits(sFAEntry, encoding); @@ -83,31 +64,19 @@ public class SFGraphDecoder<C> return encoding; } - /** - * {@inheritDoc} - * - * @throws DecodingException - * see {@link CompositeDecoder}. - */ - @Override - public SafeTaskGraphEncoding<C> updateComposable(SafetyFunctionArchEncoding<C> inGenotype, - SafeTaskGraphEncoding<C> outGenotype, FlatPhenotypeMap<Phenotype> decodedPhenotypes) - throws DecodingException { - // Not required: The abstract task graph encoding is a Phenotype only. - // TODO: Throw a decoding exception, instead. - return null; - } - /** * Checks whether the given {@link TaskGraphEncoding} contains diagnostic units from the given * {@link SafetyFunctionArchEntry}. */ - private boolean containsDiagUnits(SafetyFunctionArchEntry<C> sFAEntry, - SafeTaskGraphEncoding<C> encoding) { - Collection<ITaskAdapter<C>> sfComps = - sFAEntry.getSafetyFunctionAdapter().getDiagnosticComponents(); + // TODO: This method should be encapsulated within the SFA entry or the adapter to avoid the raw + // casting here. + private boolean containsDiagUnits(SafetyFunctionArchEntry sFAEntry, + SafeTaskGraphEncoding encoding) { + Collection<ITaskAdapter<?>> sfComps = + (Collection<ITaskAdapter<?>>)(Collection<?>)sFAEntry.getSafetyFunctionAdapter() + .getDiagnosticComponents(); if(!sfComps.isEmpty()) { - return encoding.containsTask(sfComps.stream().findAny().get()); + return encoding.containsTask((ITaskAdapter<C>)sfComps.stream().findAny().get()); } return false; } @@ -116,54 +85,45 @@ public class SFGraphDecoder<C> * Adds the diagnostic units from the {@link SafetyFunctionArchEntry} to the * {@link TaskGraphEncoding}. */ - private void addDiagUnits(SafetyFunctionArchEntry<C> sFAEntry, - SafeTaskGraphEncoding<C> encoding) { - Collection<ITaskAdapter<C>> diagComps = - sFAEntry.getSafetyFunctionAdapter().getDiagnosticComponents(); + private void addDiagUnits(SafetyFunctionArchEntry sFAEntry, SafeTaskGraphEncoding encoding) { + Collection<ITaskAdapter<?>> diagComps = + (Collection<ITaskAdapter<?>>)(Collection<?>)sFAEntry.getSafetyFunctionAdapter() + .getDiagnosticComponents(); addTasks(diagComps, encoding); } /** - * Adds the given collection of {@link ITaskAdapter}s from the - * {@link SafetyFunctionArchEntry} to the {@link TaskGraphEncoding}. + * Adds the given collection of {@link ITaskAdapter}s from the {@link SafetyFunctionArchEntry} + * to the {@link TaskGraphEncoding}. */ - private void addTasks(Collection<ITaskAdapter<C>> tasks, SafeTaskGraphEncoding<C> encoding) { + private void addTasks(Collection<ITaskAdapter<?>> tasks, SafeTaskGraphEncoding encoding) { // Add the Components. tasks.stream().forEach(task -> encoding.addTask(task)); // Add the corresponding signals. - for(ITaskAdapter<C> task : tasks) { + for(ITaskAdapter<?> task : tasks) { TaskGraph tg = encoding.getOriginalTaskGraph(task); encoding.addSignalsOf(task, tg); } } /** Removes the diagnostic units from the {@link TaskGraphEncoding}. */ - private void removeDiagUnits(SafetyFunctionArchEntry<C> sFAEntry, - SafeTaskGraphEncoding<C> encoding) { - Collection<ITaskAdapter<C>> sfComps = - sFAEntry.getSafetyFunctionAdapter().getDiagnosticComponents(); + private void removeDiagUnits(SafetyFunctionArchEntry sFAEntry, SafeTaskGraphEncoding encoding) { + Collection<ITaskAdapter<?>> sfComps = + (Collection<ITaskAdapter<?>>)(Collection<?>)sFAEntry.getSafetyFunctionAdapter() + .getDiagnosticComponents(); sfComps.stream().forEach(t -> encoding.removeTask(t)); } /** {@inheritDoc} */ @Override - public Collection<Class<?>> getRequiredTypes() { - Collection<Class<?>> reqTypes = new ArrayList<>(); - reqTypes.add(SafetyFunctionArchEncoding.class); - return reqTypes; - } - - /** {@inheritDoc} */ - @SuppressWarnings("rawtypes") - @Override - public Class<AbstractTaskGraphEncoding> getOutputType() { - return AbstractTaskGraphEncoding.class; + public SafeTaskGraphEncoding decode(Genotype genotype) { + return null; } /** {@inheritDoc} */ @Override - public Class<?> getPrimaryInputType() { - return AbstractTaskMappingEncoding.class; + public SafetyFunctionArchEncoding get() { + return new SafetyFunctionArchEncoding(null); } } diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/SFMappingConstraintDecoder.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/SFMappingConstraintDecoder.java index 69b46dc6184f316102df770ebad3814361db6d11..01e8f450a78ffff9572a7f203b3699cff507e99f 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/SFMappingConstraintDecoder.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/SFMappingConstraintDecoder.java @@ -24,15 +24,14 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.safetyfunction import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.abstractmapping.AbstractTaskMappingEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.constraint.InternalReplicationConstraint; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.constraint.InternalSeparationConstraint; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.decode.ComposableDecoderBase; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.FlatPhenotypeMap; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.decode.ConstraintGenerationDecoder; +import org.fortiss.af3.exploration.alg.dse.module.DecoderModule; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ISafetyFunctionAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ITaskAdapter; import org.fortiss.af3.platform.hierarchic.model.tile.Tile; +import org.opt4j.core.Genotype; -import com.google.inject.Inject; +import com.google.inject.Provides; /** * Generates allocation and replication constraints for the safety architectures of the safety @@ -40,64 +39,49 @@ import com.google.inject.Inject; * * @author diewald */ -public class SFMappingConstraintDecoder<C> - extends ComposableDecoderBase<SafetyFunctionArchEncoding<C>, AbstractTaskMappingEncoding> +public class SFMappingConstraintDecoder<C> extends DecoderModule<AbstractTaskMappingEncoding> implements ConstraintGenerationDecoder { - /** Constructs a new decoder that instantiates {@link AbstractTaskMappingEncoding}. */ - @Inject - public SFMappingConstraintDecoder() { - } - /** {@inheritDoc} */ - @Override - public AbstractTaskMappingEncoding decodeComposable(SafetyFunctionArchEncoding<C> genotype, - FlatPhenotypeMap<Phenotype> decodedPhenotypes) { - return null; - } - - /** {@inheritDoc} */ - @Override - public AbstractTaskMappingEncoding updateComposable(SafetyFunctionArchEncoding<C> inGenotype, - AbstractTaskMappingEncoding outGenotype, - FlatPhenotypeMap<Phenotype> decodedPhenotypes) { - for(SafetyFunctionArchEntry<C> sFAEntry : inGenotype.getAllEntries()) { + @Provides + public AbstractTaskMappingEncoding updateComposable(SafetyFunctionArchEncoding sfaEnc, + AbstractTaskMappingEncoding atmEnc) { + for(SafetyFunctionArchEntry sFAEntry : sfaEnc.getAllEntries()) { int channelNumber = sFAEntry.getNumChannels(); Collection<InternalReplicationConstraint> replicationConstraints = new HashSet<>(); for(ITaskAdapter<?> comp : sFAEntry.getSafetyFunctionAdapter().getAllComponents()) { - replicationConstraints - .add(new InternalReplicationConstraint(comp, channelNumber, channelNumber)); + replicationConstraints.add(new InternalReplicationConstraint(comp, channelNumber, + channelNumber)); } - outGenotype.replaceConstraints(InternalReplicationConstraint.class, - replicationConstraints); + atmEnc.replaceConstraints(InternalReplicationConstraint.class, replicationConstraints); } - outGenotype.replaceConstraints(InternalSeparationConstraint.class, - createSeparationConstraints(inGenotype)); + atmEnc.replaceConstraints(InternalSeparationConstraint.class, + createSeparationConstraints(sfaEnc)); - return outGenotype; + return atmEnc; } /** * Creates {@link InternalSeparationConstraint}s for the sets of realizing, diagnostic, and * output units of each safety function. */ - private Collection<InternalSeparationConstraint> - createSeparationConstraints(SafetyFunctionArchEncoding<C> sfEnc) { + private Collection<InternalSeparationConstraint> createSeparationConstraints( + SafetyFunctionArchEncoding sfEnc) { Collection<InternalSeparationConstraint> sepConstraints = new HashSet<>(); - for(SafetyFunctionArchEntry<C> sfEntry : sfEnc.getAllEntries()) { - ISafetyFunctionAdapter<C> sfAdp = sfEntry.getSafetyFunctionAdapter(); + for(SafetyFunctionArchEntry sfEntry : sfEnc.getAllEntries()) { + ISafetyFunctionAdapter<?> sfAdp = sfEntry.getSafetyFunctionAdapter(); // TODO: We should not be aware of the Tile type here. // FIXME: We need a "better" machanism than the fault containment region. Also, - sepConstraints.add( - new InternalSeparationConstraint(sfAdp.getRealizingComponents(), Tile.class)); - sepConstraints.add( - new InternalSeparationConstraint(sfAdp.getDiagnosticComponents(), Tile.class)); - sepConstraints.add(new InternalSeparationConstraint( - Arrays.asList(sfAdp.getOutputComponent()), Tile.class)); + sepConstraints.add(new InternalSeparationConstraint(sfAdp.getRealizingComponents(), + Tile.class)); + sepConstraints.add(new InternalSeparationConstraint(sfAdp.getDiagnosticComponents(), + Tile.class)); + sepConstraints.add(new InternalSeparationConstraint(Arrays.asList(sfAdp + .getOutputComponent()), Tile.class)); } return sepConstraints; @@ -105,15 +89,8 @@ public class SFMappingConstraintDecoder<C> /** {@inheritDoc} */ @Override - public Collection<Class<?>> getRequiredTypes() { - Collection<Class<?>> requiredTypes = new HashSet<>(); - requiredTypes.add(SafetyFunctionArchEncoding.class); - return requiredTypes; - } - - /** {@inheritDoc} */ - @Override - public Class<?> getPrimaryInputType() { - return SafetyFunctionArchEncoding.class; + public AbstractTaskMappingEncoding decode(Genotype genotype) { + // TODO Auto-generated method stub + return null; } } diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/SFMappingDecoder.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/SFMappingDecoder.java index 0fe8c6aad79085a5be5ead4c38b21e06095944a9..8d890da23b7dab19ff11163a79f9ba6a2c0a9a3c 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/SFMappingDecoder.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/SFMappingDecoder.java @@ -27,103 +27,81 @@ import java.util.Set; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.comm.constraint.InternalIsolatedCommunicationSet; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.safetyfunctionarch.SafetyFunctionArchEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.safetyfunctionarch.SafetyFunctionArchEntry; -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.decode.ComposableDecoder; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.decode.ComposableDecoderBase; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.exception.DecodingException; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.FlatPhenotypeMap; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.decode.ConstraintGenerationDecoder; +import org.fortiss.af3.exploration.alg.dse.module.DecoderModule; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ITaskAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.mapping.IMappingEntry; import org.fortiss.af3.exploration.alg.exception.ExplorationException; +import org.opt4j.core.Genotype; -import com.google.inject.Inject; +import com.google.inject.Provides; /** * Decodes a {@link SafetyFunctionArchEncoding} into an {@link AbstractTaskMappingEncoding}. * * @author diewald */ -public class SFMappingDecoder<C> - extends ComposableDecoderBase<SafetyFunctionArchEncoding<C>, AbstractTaskMappingEncoding> - implements ConstraintGenerationDecoder { - /** Constructs a new decoder that instantiates {@link AbstractTaskMappingEncoding}. */ - @Inject - public SFMappingDecoder() { - } +public class SFMappingDecoder<C> extends DecoderModule<AbstractTaskMappingEncoding> implements + ConstraintGenerationDecoder { - /** - * {@inheritDoc} - * - * @throws DecodingException - * see {@link ComposableDecoder}. - */ + /** {@inheritDoc} */ @Override - public AbstractTaskMappingEncoding decodeComposable(SafetyFunctionArchEncoding<C> genotype, - FlatPhenotypeMap<Phenotype> decodedPhenotypes) throws DecodingException { - AbstractTaskMappingEncoding atmEnc = - decodedPhenotypes.getEncoding(AbstractTaskMappingEncoding.class); - assert (atmEnc != null) : "The required abstract task mapping encoding could not be found in the map of already decoded phenotypes."; - return updateComposable(genotype, atmEnc, decodedPhenotypes); + public AbstractTaskMappingEncoding decode(Genotype genotype) { + return null; } - /** - * {@inheritDoc} - * - * @throws DecodingException - * see {@link ComposableDecoder}. - */ - @Override - public AbstractTaskMappingEncoding updateComposable(SafetyFunctionArchEncoding<C> inGenotype, - AbstractTaskMappingEncoding outGenotype, FlatPhenotypeMap<Phenotype> decodedPhenotypes) - throws DecodingException { - if(inGenotype == null) { - return null; - } + @Provides + public AbstractTaskMappingEncoding decode(SafetyFunctionArchEncoding sfaEnc, + AbstractTaskMappingEncoding atmEnc) throws DecodingException { // TODO: replace with a dynamic mechanism for the retrieval of deployable components. - for(SafetyFunctionArchEntry<C> sFAEntry : inGenotype.getAllEntries()) { + for(SafetyFunctionArchEntry sFAEntry : sfaEnc.getAllEntries()) { boolean diagPresent = sFAEntry.isDiagnosicUnitPresent(); int channelNumber = sFAEntry.getNumChannels(); - Collection<ITaskAdapter<C>> sfComps = - sFAEntry.getSafetyFunctionAdapter().getRealizingComponents(); - Collection<ITaskAdapter<C>> diagComps = - sFAEntry.getSafetyFunctionAdapter().getDiagnosticComponents(); - ITaskAdapter<C> outComponent = sFAEntry.getSafetyFunctionAdapter().getOutputComponent(); + // TODO: Encapsulate in the encoding / adapter --> Raw cast. + Collection<ITaskAdapter<?>> sfComps = + (Collection<ITaskAdapter<?>>)(Collection<?>)sFAEntry.getSafetyFunctionAdapter() + .getRealizingComponents(); + Collection<ITaskAdapter<?>> diagComps = + (Collection<ITaskAdapter<?>>)(Collection<?>)sFAEntry.getSafetyFunctionAdapter() + .getDiagnosticComponents(); + ITaskAdapter<?> outComponent = sFAEntry.getSafetyFunctionAdapter().getOutputComponent(); // We assume that the entry number must be equal for all realizing components of a // safety function. Collection<AbstractTaskMappingEntry> sfEntries = - outGenotype.getMappingEntriesOf(sfComps.stream().findAny().get()); + atmEnc.getMappingEntriesOf(sfComps.stream().findAny().get()); int entryNumber = sfEntries.size(); // TODO: use a more generic solution to instantiate these tyoes of constraints during // the creation phase. Set<IMappingEntry<?, ?>> existingEntries = new HashSet<>(); - if(outGenotype.getConstraintsOf(InternalIsolatedCommunicationSet.class).isEmpty()) { - for(ITaskAdapter<C> comp : sFAEntry.getSafetyFunctionAdapter().getAllComponents()) { + if(atmEnc.getConstraintsOf(InternalIsolatedCommunicationSet.class).isEmpty()) { + for(ITaskAdapter<?> comp : sFAEntry.getSafetyFunctionAdapter().getAllComponents()) { Collection<AbstractTaskMappingEntry> curEntry = - outGenotype.getMappingEntriesOf(comp); + atmEnc.getMappingEntriesOf(comp); assert (curEntry.size() <= 1); existingEntries.addAll(curEntry); } - outGenotype.putConstraint(InternalIsolatedCommunicationSet.class, + atmEnc.putConstraint(InternalIsolatedCommunicationSet.class, new InternalIsolatedCommunicationSet(existingEntries)); } // In case that diagnostic units are not present in the *previous* encoding, we need to // add some more. Collection<AbstractTaskMappingEntry> diagEntries = - outGenotype.getMappingEntriesOf(diagComps.stream().findAny().get()); + atmEnc.getMappingEntriesOf(diagComps.stream().findAny().get()); if(diagPresent && diagEntries != null && diagEntries.isEmpty()) { try { - addMissingDiagUnits(outGenotype, diagComps, entryNumber); + addMissingDiagUnits(atmEnc, diagComps, entryNumber); } catch(ExplorationException e) { - throw new DecodingException(inGenotype, this, + throw new DecodingException( + sfaEnc, + this, "Error adding diagnostic components to match the number of safety channels.", e); } @@ -133,40 +111,40 @@ public class SFMappingDecoder<C> for(int i = entryNumber; i < channelNumber; i++) { try { Set<IMappingEntry<?, ?>> createdEntries = new HashSet<>(); - createdEntries.addAll(addSFComponents(outGenotype, sfComps)); + createdEntries.addAll(addSFComponents(atmEnc, sfComps)); if(diagPresent) { - createdEntries.addAll(addSFComponents(outGenotype, diagComps)); + createdEntries.addAll(addSFComponents(atmEnc, diagComps)); } // TODO: for each channel, the output component is "replicated" here. - createdEntries - .addAll(addSFComponents(outGenotype, Arrays.asList(outComponent))); + createdEntries.addAll(addSFComponents(atmEnc, Arrays.asList(outComponent))); - outGenotype.putConstraint(InternalIsolatedCommunicationSet.class, + atmEnc.putConstraint(InternalIsolatedCommunicationSet.class, new InternalIsolatedCommunicationSet(createdEntries)); } catch(ExplorationException e) { - throw new DecodingException(inGenotype, this, + throw new DecodingException( + sfaEnc, + this, "Error adding safety components to match the number of safety channels.", null); } } - List<InternalIsolatedCommunicationSet> isoCommSet = new ArrayList<>( - outGenotype.getConstraintsOf(InternalIsolatedCommunicationSet.class)); + List<InternalIsolatedCommunicationSet> isoCommSet = + new ArrayList<>(atmEnc.getConstraintsOf(InternalIsolatedCommunicationSet.class)); for(int i = entryNumber - 1; i > channelNumber; i--) { Collection<IMappingEntry<?, ?>> rmEntries = isoCommSet.get(i).getIsolatedCommunicationSet(); - removeSFEntries(outGenotype, rmEntries); - removeMatchingConstraint(outGenotype, - getFirst(rmEntries, (s) -> true).orElse(null)); + removeSFEntries(atmEnc, rmEntries); + removeMatchingConstraint(atmEnc, getFirst(rmEntries, (s) -> true).orElse(null)); } if(!diagPresent) { // If no diagnostic unit is present in the encoding, remove its entire task. - removeDiagUnits(outGenotype, diagComps); + removeDiagUnits(atmEnc, diagComps); } } - return outGenotype; + return atmEnc; } /** @@ -174,13 +152,13 @@ public class SFMappingDecoder<C> * the encoding previously did not contain diagnostic units. * * @throws ExplorationException - * if no valid allocation targets can be identified for one - * {@link ITaskAdapter}. + * if no valid allocation targets can be identified for one {@link ITaskAdapter}. */ private void addMissingDiagUnits(AbstractTaskMappingEncoding outGenotype, - Collection<ITaskAdapter<C>> diagComps, int entryNumber) throws ExplorationException { - List<InternalIsolatedCommunicationSet> isoComm = new ArrayList<>( - outGenotype.getConstraintsOf(InternalIsolatedCommunicationSet.class)); + Collection<ITaskAdapter<?>> diagComps, int entryNumber) throws ExplorationException { + List<InternalIsolatedCommunicationSet> isoComm = + new ArrayList<>( + outGenotype.getConstraintsOf(InternalIsolatedCommunicationSet.class)); for(int i = 0; i < entryNumber; i++) { Set<IMappingEntry<?, ?>> createdEntries = addSFComponents(outGenotype, diagComps); InternalIsolatedCommunicationSet curConstr = isoComm.get(i); @@ -190,7 +168,7 @@ public class SFMappingDecoder<C> /** Entirely removes the diagnostic units of a safety function from a given mapping. */ private void removeDiagUnits(AbstractTaskMappingEncoding outGenotype, - Collection<ITaskAdapter<C>> diagComps) { + Collection<ITaskAdapter<?>> diagComps) { for(ITaskAdapter<?> diagComp : diagComps) { Collection<AbstractTaskMappingEntry> removedEntries = outGenotype.removeTask(diagComp); Collection<InternalIsolatedCommunicationSet> isoCommConstrs = @@ -204,18 +182,16 @@ public class SFMappingDecoder<C> } /** - * Adds one random entry to the task mapping for each of the given - * {@link ITaskAdapter}s. + * Adds one random entry to the task mapping for each of the given {@link ITaskAdapter}s. * * @throws ExplorationException - * if no valid allocation targets can be identified for one - * {@link ITaskAdapter}. + * if no valid allocation targets can be identified for one {@link ITaskAdapter}. */ private Set<IMappingEntry<?, ?>> addSFComponents(AbstractTaskMappingEncoding outGenotype, - Collection<ITaskAdapter<C>> sfComps) throws ExplorationException { + Collection<ITaskAdapter<?>> sfComps) throws ExplorationException { Set<IMappingEntry<?, ?>> createdEntries = new HashSet<>(); if(sfComps != null) { - for(ITaskAdapter<C> curSFComp : sfComps) { + for(ITaskAdapter<?> curSFComp : sfComps) { createdEntries.add(outGenotype.createAndAddRandomEntry(curSFComp)); } } @@ -261,20 +237,4 @@ public class SFMappingDecoder<C> assert rmConstr != null; outGenotype.getConstraintsOf(InternalIsolatedCommunicationSet.class).remove(rmConstr); } - - /** {@inheritDoc} */ - @Override - public Collection<Class<?>> getRequiredTypes() { - Collection<Class<?>> reqTypes = new ArrayList<>(); - reqTypes.add(SafetyFunctionArchEncoding.class); - reqTypes.add(AbstractTaskGraphEncoding.class); - reqTypes.add(AbstractTaskMappingEncoding.class); - return reqTypes; - } - - /** {@inheritDoc} */ - @Override - public Class<?> getPrimaryInputType() { - return AbstractTaskMappingEncoding.class; - } } diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/.ratings index 05e34d61403edce325bd14f8f5f72fddb5806c9c..b31ab89928f4e8b7789d3847eec8a4601a436b2d 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/.ratings +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/.ratings @@ -1,2 +1,2 @@ -AbstractTaskMappingIdentityDecoder.java 35871c7a2d43f7645282a75507f0d2276a53dbc4 RED -TaskMappingDecoderBase.java f75f02c16f7b9b9eb16fa9935f904bde9eaf293c RED +AbstractTaskMappingIdentityDecoder.java 78febd451216d4635c565b352c4c9e895334ff2f RED +TaskMappingDecoderBase.java 38993e58fbb58bb577827079cacf04d487670713 RED diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/AbstractTaskMappingIdentityDecoder.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/AbstractTaskMappingIdentityDecoder.java index 35871c7a2d43f7645282a75507f0d2276a53dbc4..78febd451216d4635c565b352c4c9e895334ff2f 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/AbstractTaskMappingIdentityDecoder.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/AbstractTaskMappingIdentityDecoder.java @@ -15,17 +15,12 @@ +--------------------------------------------------------------------------*/ package org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.taskmapping; -import java.util.ArrayList; -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.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.decode.ComposableDecoder; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.FlatPhenotypeMap; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.ArchExpSubDecoder; +import org.opt4j.core.Genotype; /** * Provides a {@link AbstractTaskMappingEncoding} to the set of {@link Phenotype} types. @@ -37,52 +32,17 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.ArchExpSubDecod // decoder anymore. We'd need a clearer concept when to use which operators anyways (Dependent on // the selected features of the DSE). public class AbstractTaskMappingIdentityDecoder extends - TaskMappingDecoderBase<AbstractTaskMappingEntry, AbstractTaskMappingEncoding, AbstractTaskMappingEncoding> - implements ArchExpSubDecoder { - /** {@inheritDoc} */ - @Override - public AbstractTaskMappingEncoding decodeComposable(AbstractTaskMappingEncoding genotype, - FlatPhenotypeMap<Phenotype> decodedPhenotypes) { - return genotype; - } + TaskMappingDecoderBase<AbstractTaskMappingEntry, AbstractTaskMappingEncoding> { - /** {@inheritDoc} */ - @Override - public AbstractTaskMappingEncoding updateComposable(AbstractTaskMappingEncoding inGenotype, - AbstractTaskMappingEncoding outGenotype, - FlatPhenotypeMap<Phenotype> decodedPhenotypes) { - PartitionMappingEncoding pmEncoding = - decodedPhenotypes.getEncoding(PartitionMappingEncoding.class); - assert (pmEncoding != null); - inGenotype.updatePartitionMapping(pmEncoding); - return alignWithResourceModifications(inGenotype, decodedPhenotypes); - } - - /** {@inheritDoc} */ - @Override - public Collection<Class<?>> getRequiredTypes() { - Collection<Class<?>> reqTypes = new ArrayList<>(); - reqTypes.add(AbstractTaskMappingEncoding.class); - reqTypes.add(PartitionMappingEncoding.class); - return reqTypes; - } - - /** {@inheritDoc} */ - @Override - public Collection<Class<?>> getOptionalTypes() { - Collection<Class<?>> optTypes = new ArrayList<>(); - return optTypes; - } - - /** {@inheritDoc} */ - @Override - public Class<AbstractTaskMappingEncoding> getOutputType() { - return AbstractTaskMappingEncoding.class; + // FIXME: Update the mapping. --> Provides + public AbstractTaskMappingEncoding decode(AbstractTaskMappingEncoding atmEnc, + PartitionMappingEncoding partEnc) { + return alignWithResourceModifications(atmEnc, partEnc); } /** {@inheritDoc} */ @Override - public Class<?> getPrimaryInputType() { - return AbstractTaskMappingEncoding.class; + public AbstractTaskMappingEncoding decode(Genotype genotype) { + return null; } } diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/TaskMappingDecoderBase.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/TaskMappingDecoderBase.java index f75f02c16f7b9b9eb16fa9935f904bde9eaf293c..38993e58fbb58bb577827079cacf04d487670713 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/TaskMappingDecoderBase.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/TaskMappingDecoderBase.java @@ -22,9 +22,7 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmappi import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.PartitionMappingEncoding; 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.decode.ComposableDecoderBase; -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.DecoderModule; 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.exception.ExplorationException; @@ -33,8 +31,8 @@ import org.fortiss.af3.exploration.alg.exception.ExplorationException; * * @author diewald */ -public abstract class TaskMappingDecoderBase<S extends TaskMappingEntry<ITaskAdapter<?>, Partition>, T extends TaskMappingEncoding<ITaskAdapter<?>, S>, P extends Phenotype> - extends ComposableDecoderBase<T, P> { +public abstract class TaskMappingDecoderBase<S extends TaskMappingEntry<ITaskAdapter<?>, Partition>, T extends TaskMappingEncoding> + extends DecoderModule<T> { /** * Reallocates the {@link IResourceAdapter}s if the set of {@link IResourceAdapter}s was changed @@ -42,22 +40,19 @@ public abstract class TaskMappingDecoderBase<S extends TaskMappingEntry<ITaskAda * * @param taskMapping * {@link TaskMappingEncoding} to adapt. - * @param decodedPhenotypes - * {@link Phenotype} set required to gather the alignment information, .e.g., - * resource encodings. + * @param partEnc + * Mapping of Partitions to cores etc. * @return Aligned {@link TaskMappingEncoding}. */ - protected T alignWithResourceModifications(T taskMapping, - FlatPhenotypeMap<Phenotype> decodedPhenotypes) { - PartitionMappingEncoding pmEncoding = - decodedPhenotypes.getEncoding(PartitionMappingEncoding.class); - assert (pmEncoding != null); - + @SuppressWarnings("unchecked") + protected T alignWithResourceModifications(T taskMapping, PartitionMappingEncoding partEnc) { Collection<S> relocateEntries = new ArrayList<>(); - Collection<IResourceAdapter<?>> existingPartitions = pmEncoding.getResources(); - for(S mappingEntry : taskMapping.getMappingEntries()) { - if(!existingPartitions.contains(mappingEntry.getTarget())) { - relocateEntries.add(mappingEntry); + Collection<IResourceAdapter<?>> existingPartitions = partEnc.getResources(); + // FIXME: Hack to get rid of compilation errors when registering the + // InstantiatedTaskMappingDecoder. + for(Object mappingEntry : taskMapping.getMappingEntries()) { + if(!existingPartitions.contains(((S)mappingEntry).getTarget())) { + relocateEntries.add((S)mappingEntry); } } diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/instantiate/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/instantiate/.ratings index 4147f4f35a372529dd1b083e81a81915c15e4ec9..04941aa3c53d2f7ab0ed33f06c8c5f61f857a269 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/instantiate/.ratings +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/instantiate/.ratings @@ -1,4 +1,3 @@ -AbstractTaskMappingDecoder.java 85d46ecd859052c487f31e47065375ae423e50ff RED -FailSilentAbstractTaskMappingDecoder.java ef6d7055ee2ea70a74bea696903162e917c2b010 RED -FaultDetectionVotingAbstractTaskMappingDecoder.java 9e8a9713ed2270229b27897b089078a57493b317 RED -TaskInstanceResourceAlignmentDecoder.java fe8b789f3a0185585a90cf1882fd3983453b4a0d RED +FailSilentAbstractTaskMappingDecoder.java 40acf470cbc4f47ca0593e75a2aa060d67b04db4 RED +FaultDetectionVotingAbstractTaskMappingDecoder.java fe6777288a89b1ca3e5eaf842653fbc768016a08 RED +TaskInstanceResourceAlignmentDecoder.java 8567290ebc74927263f5265f44d7acdcbf99797f RED diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/instantiate/FailSilentAbstractTaskMappingDecoder.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/instantiate/FailSilentAbstractTaskMappingDecoder.java index ef6d7055ee2ea70a74bea696903162e917c2b010..40acf470cbc4f47ca0593e75a2aa060d67b04db4 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/instantiate/FailSilentAbstractTaskMappingDecoder.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/instantiate/FailSilentAbstractTaskMappingDecoder.java @@ -20,16 +20,10 @@ import static org.fortiss.tooling.common.util.LambdaUtils.filterSet; import java.util.ArrayList; 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.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.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.extensions.compositegene.decode.ComposableDecoder; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.exception.DecodingException; -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.DecoderModule; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ITaskAdapter; import org.opt4j.core.Genotype; @@ -46,52 +40,29 @@ import com.google.inject.Provides; public class FailSilentAbstractTaskMappingDecoder extends DecoderModule<FailSilentTaskMappingEncoding> { - /** - * Input mapping of partitions to executions units. This step maps to partitions encoded here. - * Additionally, information about the phys. executor may be required for smart mapping - * decisions. - */ - // @Inject - // PartitionMappingEncoding partEnc; - - /** {@inheritDoc} */ + // TODO: Abstract to the AbstractTaskMappingDecoder. + // FIXME: Handle the case where no previous FailSilentTaskMappingEncoding exists. @Provides public FailSilentTaskMappingEncoding decode(AbstractTaskMappingEncoding atmEnc, - AbstractTaskGraphEncoding<?, ?> atgEnc, PartitionMappingEncoding partEnc) { - return null; - // return new FailSilentTaskMappingEncoding(partEnc, atgEnc, atmEnc); - } - - // TODO: Abstract to the AbstractTaskMappingDecoder. - /** - * {@inheritDoc} - * - * @throws DecodingException - * see {@link ComposableDecoder}. - */ - public FailSilentTaskMappingEncoding - updateComposable(AbstractTaskMappingEncoding inGenotype, - FailSilentTaskMappingEncoding outGenotype, - FlatPhenotypeMap<Phenotype> decodedPhenotypes) throws DecodingException { - outGenotype.replaceConstraints(inGenotype.getConstraints()); + FailSilentTaskMappingEncoding fstmEnc) { + fstmEnc.replaceConstraints(atmEnc.getConstraints()); - for(ITaskAdapter<?> comp : inGenotype.getRequesters()) { - Collection<AbstractTaskMappingEntry> abstrEntries = - inGenotype.getMappingEntriesOf(comp); + for(ITaskAdapter<?> comp : atmEnc.getRequesters()) { + Collection<AbstractTaskMappingEntry> abstrEntries = atmEnc.getMappingEntriesOf(comp); Collection<FailSilentTaskMappingEntry> instEntries; if(comp.isInstantiationRequired()) { instEntries = - filterSet(outGenotype.getMappingEntries(), e -> e.getSource() + filterSet(fstmEnc.getMappingEntries(), e -> e.getSource() .getReplacedComponent() == comp); } else { - instEntries = outGenotype.getMappingEntriesOf(comp); + instEntries = fstmEnc.getMappingEntriesOf(comp); } // Missing Associations between instantiated and abstract entries indicate the need to // create or remove corresp. entries. for(AbstractTaskMappingEntry abstrEntry : abstrEntries) { if(abstrEntry.getAssociatedElement().isEmpty()) { - outGenotype.createAndAddEntry(abstrEntry); + fstmEnc.createAndAddEntry(abstrEntry); } } @@ -101,28 +72,28 @@ public class FailSilentAbstractTaskMappingDecoder extends rmEntries.add(instEntry); } } - rmEntries.forEach(e -> outGenotype.removeEntry(e)); + rmEntries.forEach(e -> fstmEnc.removeEntry(e)); } // Remove all tasks that are present in the output encoding but not in the input encoding. Collection<ITaskAdapter<?>> rmTasks = new ArrayList<>(); - for(ITaskAdapter<?> comp : outGenotype.getRequesters()) { + for(ITaskAdapter<?> comp : fstmEnc.getRequesters()) { ITaskAdapter<?> rmComponent = comp; if(comp.isInstantiation()) { comp = comp.getReplacedComponent(); } - if(!inGenotype.getRequesters().contains(comp)) { + if(!atmEnc.getRequesters().contains(comp)) { rmTasks.add(rmComponent); } } - rmTasks.forEach(e -> outGenotype.removeTask(e)); + rmTasks.forEach(e -> fstmEnc.removeTask(e)); - for(FailSilentTaskMappingEntry entry : outGenotype.getMappingEntries()) { + for(FailSilentTaskMappingEntry entry : fstmEnc.getMappingEntries()) { entry.resetTarget(entry.getAssociatedElement(AbstractTaskMappingEntry.class) .getTarget()); } - return outGenotype; + return fstmEnc; } /** {@inheritDoc} */ diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/instantiate/FaultDetectionVotingAbstractTaskMappingDecoder.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/instantiate/FaultDetectionVotingAbstractTaskMappingDecoder.java index 9e8a9713ed2270229b27897b089078a57493b317..fe6777288a89b1ca3e5eaf842653fbc768016a08 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/instantiate/FaultDetectionVotingAbstractTaskMappingDecoder.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/instantiate/FaultDetectionVotingAbstractTaskMappingDecoder.java @@ -20,8 +20,6 @@ import static org.fortiss.tooling.common.util.LambdaUtils.filterSet; import java.util.ArrayList; 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.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.encoding.taskmapping.instantiatedmapping.FaultDetectionVotingTaskMappingEncoding; @@ -34,8 +32,6 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ITaskAdapter; import org.opt4j.core.Genotype; import org.opt4j.core.problem.Decoder; -import com.google.inject.Provides; - /** * {@link Decoder} for instantiating an {@link AbstractTaskMappingEncoding} to a * {@link FaultDetectionVotingTaskMappingEncoding}. @@ -43,22 +39,20 @@ import com.google.inject.Provides; * @author diewald */ // FIXME: The type hierarchy and naming of the classes is extremely confusing. FIX ASAP! +// FIXME: Currently disabled (no provides method). There seems to a conflict in the type resolution +// of the InstantiatedTaskMappingEncoding with the current notion of FailSilent FaultDections Task +// representations. public class FaultDetectionVotingAbstractTaskMappingDecoder extends DecoderModule<FaultDetectionVotingTaskMappingEncoding> { - /** {@inheritDoc} */ - @Provides - public FaultDetectionVotingTaskMappingEncoding decode(AbstractTaskMappingEncoding atmEnc, - AbstractTaskGraphEncoding<?, ?> atgEnc, PartitionMappingEncoding partEnc) { - return new FaultDetectionVotingTaskMappingEncoding(partEnc, atgEnc, atmEnc); - } + // /** {@inheritDoc} */ + // @Provides + // public FaultDetectionVotingTaskMappingEncoding decode(AbstractTaskMappingEncoding atmEnc, + // AbstractTaskGraphEncoding atgEnc, PartitionMappingEncoding partEnc) { + // // return new FaultDetectionVotingTaskMappingEncoding(partEnc, atgEnc, atmEnc); + // return null; + // } - /** - * {@inheritDoc} - * - * @throws DecodingException - * see {@link DecodingException}. - */ public FaultDetectionVotingTaskMappingEncoding updateComposable( AbstractTaskMappingEncoding inGenotype, FaultDetectionVotingTaskMappingEncoding outGenotype, diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/instantiate/TaskInstanceResourceAlignmentDecoder.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/instantiate/TaskInstanceResourceAlignmentDecoder.java index fe8b789f3a0185585a90cf1882fd3983453b4a0d..8567290ebc74927263f5265f44d7acdcbf99797f 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/instantiate/TaskInstanceResourceAlignmentDecoder.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/instantiate/TaskInstanceResourceAlignmentDecoder.java @@ -15,61 +15,31 @@ +--------------------------------------------------------------------------*/ package org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.taskmapping.instantiate; -import java.util.ArrayList; -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.taskmapping.instantiatedmapping.InstantiatedTaskMappingEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.InstantiatedTaskMappingEntry; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.FlatPhenotypeMap; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.taskmapping.TaskMappingDecoderBase; +import org.opt4j.core.Genotype; +import org.opt4j.core.optimizer.Operator; /** + * Aligns mappings of instantiated tasks with the partition mapping that may have been modified by + * {@link Operator}s. * * @author diewald */ public class TaskInstanceResourceAlignmentDecoder extends - TaskMappingDecoderBase<InstantiatedTaskMappingEntry, InstantiatedTaskMappingEncoding<InstantiatedTaskMappingEntry>, InstantiatedTaskMappingEncoding<InstantiatedTaskMappingEntry>> { - - /** {@inheritDoc} */ - @Override - public InstantiatedTaskMappingEncoding<InstantiatedTaskMappingEntry> decodeComposable( - InstantiatedTaskMappingEncoding<InstantiatedTaskMappingEntry> genotype, - FlatPhenotypeMap<Phenotype> decodedPhenotypes) { - PartitionMappingEncoding pmEncoding = - decodedPhenotypes.getEncoding(PartitionMappingEncoding.class); - assert (pmEncoding != null); - genotype.updatePartitionMapping(pmEncoding); - return genotype; - } - - /** {@inheritDoc} */ - @Override - public InstantiatedTaskMappingEncoding<InstantiatedTaskMappingEntry> updateComposable( - InstantiatedTaskMappingEncoding<InstantiatedTaskMappingEntry> inGenotype, - InstantiatedTaskMappingEncoding<InstantiatedTaskMappingEntry> outGenotype, - FlatPhenotypeMap<Phenotype> decodedPhenotypes) { - PartitionMappingEncoding pmEncoding = - decodedPhenotypes.getEncoding(PartitionMappingEncoding.class); - assert (pmEncoding != null); - inGenotype.updatePartitionMapping(pmEncoding); - return alignWithResourceModifications(inGenotype, decodedPhenotypes); - } + TaskMappingDecoderBase<InstantiatedTaskMappingEntry, InstantiatedTaskMappingEncoding> { - /** {@inheritDoc} */ - @Override - public Collection<Class<?>> getRequiredTypes() { - Collection<Class<?>> reqTypes = new ArrayList<>(); - reqTypes.add(InstantiatedTaskMappingEncoding.class); - reqTypes.add(PartitionMappingEncoding.class); - return reqTypes; - } + // @Provides + // public InstantiatedTaskMappingEncoding<InstantiatedTaskMappingEntry> updateComposable( + // InstantiatedTaskMappingEncoding<InstantiatedTaskMappingEntry> itmEnc, + // PartitionMappingEncoding partEnc) { + // return alignWithResourceModifications(itmEnc, partEnc); + // } /** {@inheritDoc} */ @Override - public Collection<Class<?>> getOptionalTypes() { - Collection<Class<?>> optTypes = new ArrayList<>(); - return optTypes; + public InstantiatedTaskMappingEncoding<InstantiatedTaskMappingEntry> decode(Genotype genotype) { + return null; } } diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/.ratings index 8d8579e6733faee8ebbced39c1ab7213ddf9c128..dc7f46b666fc17e8d3258f3016226de927f2b6f1 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/.ratings +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/.ratings @@ -1,10 +1,10 @@ ComponentMultiAllocationConstraintEvaluator.java 1c3d042eaaec011bd4d2daaa20e3decf8a273c0a RED ComponentMultiDislocationConstraintEvaluator.java 851d415151da11a72f1b0b708ec264dfe97f6928 RED ConstraintEvaluatorBase.java 390219c84242650b2c5ed3732499a77ce815a552 RED -DeadlineConstraintEvaluator.java dfe69382d843405eb1c9626c578f04a8c141b49c RED +DeadlineConstraintEvaluator.java c13c1393352adee2d6772216521fb2afd498392c RED IConstraintEvaluator.java dc8c058ba3fa6dccd03f082970890f53174375fc RED MappingEvaluatorConstraint.java 9e704335297e306d32ad777e12df978e60e67ab4 RED NoEmptyPartitionConstraintEvaluator.java ef3e421ba61f9d69834189aa1d72d85e3587e391 RED -PeriodConstraintEvaluator.java 10830bfc9386df4a9617914a4830637f3fdb90ae RED +PeriodConstraintEvaluator.java d991cda903374a4f27c1e9b0f78e164832139892 RED SafetyIntegrityLevelConstraintEvaluator.java fce18765a86640032e7135cdefc98eee9702366c RED SameSilInPartitionConstraintEvaluator.java 6ae270852cc66f603004ed1718406c7ff88f744d RED diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/DeadlineConstraintEvaluator.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/DeadlineConstraintEvaluator.java index dfe69382d843405eb1c9626c578f04a8c141b49c..c13c1393352adee2d6772216521fb2afd498392c 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/DeadlineConstraintEvaluator.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/DeadlineConstraintEvaluator.java @@ -71,10 +71,10 @@ public class DeadlineConstraintEvaluator<S extends InstantiatedTaskMappingEntry, sourceDeployableComponent = new ArrayList<>(); targetDeployableComponent = new ArrayList<>(); - sourceDeployableComponent - .add(systemModelAdapter.getDeployableComponentOf(optGoal.getStartComponent())); - targetDeployableComponent.add( - systemModelAdapter.getDeployableComponentOf(explorationTarget.getEndComponent())); + sourceDeployableComponent.add(systemModelAdapter.getDeployableComponentOf(optGoal + .getStartComponent())); + targetDeployableComponent.add(systemModelAdapter.getDeployableComponentOf(explorationTarget + .getEndComponent())); deadline = explorationTarget.getDeadline(); @@ -114,7 +114,7 @@ public class DeadlineConstraintEvaluator<S extends InstantiatedTaskMappingEntry, public DoubleValue evaluateGoal(StrictTTSchedule<S, T> schedule, FlatPhenotypeMap<Phenotype> phenotypeTypeMap, ClassToInstanceMap<EObject> transformedModels) { - @SuppressWarnings("unchecked") InstantiatedAcyclicTaskGraphEncoding<S, ?> acycItgEnc = + InstantiatedAcyclicTaskGraphEncoding<S> acycItgEnc = phenotypeTypeMap.getEncoding(InstantiatedAcyclicTaskGraphEncoding.class); assert (acycItgEnc != null) : "The required acyclic and instantiated task graph encoding could not be found in the map of already decoded phenotypes."; @@ -132,11 +132,13 @@ public class DeadlineConstraintEvaluator<S extends InstantiatedTaskMappingEntry, // the start time is the release time of this iteration, which is the beginning // of the period // double start = i * tg.getPeriod(); - ITaskAdapter<?> earliestComp = sourceDeployableComponent.stream() - .min(Comparator.comparing(t -> schedule.getFirstStartTime(t, j))).get(); + ITaskAdapter<?> earliestComp = + sourceDeployableComponent.stream() + .min(Comparator.comparing(t -> schedule.getFirstStartTime(t, j))).get(); double start = schedule.getFirstStartTime(earliestComp, i); - ITaskAdapter<?> latestComp = targetDeployableComponent.stream() - .min(Comparator.comparing(t -> schedule.getLastEndTime(t, j))).get(); + ITaskAdapter<?> latestComp = + targetDeployableComponent.stream() + .min(Comparator.comparing(t -> schedule.getLastEndTime(t, j))).get(); double end = schedule.getLastEndTime(latestComp, i); double latency = end - start; @@ -166,8 +168,7 @@ public class DeadlineConstraintEvaluator<S extends InstantiatedTaskMappingEntry, // TODO: AD: is this check really required here? Shouldn't this be done by the // inputvalidator? if(explorationTarget.getStartComponent() == null || - explorationTarget.getEndComponent() == null || - explorationTarget.getDeadline() <= 0) { + explorationTarget.getEndComponent() == null || explorationTarget.getDeadline() <= 0) { return false; } diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/PeriodConstraintEvaluator.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/PeriodConstraintEvaluator.java index 10830bfc9386df4a9617914a4830637f3fdb90ae..d991cda903374a4f27c1e9b0f78e164832139892 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/PeriodConstraintEvaluator.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/PeriodConstraintEvaluator.java @@ -65,7 +65,7 @@ public class PeriodConstraintEvaluator<S extends InstantiatedTaskMappingEntry, T public DoubleValue evaluateGoal(StrictTTSchedule<S, T> schedule, FlatPhenotypeMap<Phenotype> phenotypeTypeMap, ClassToInstanceMap<EObject> transformedModels) { - @SuppressWarnings("unchecked") InstantiatedTaskGraphEncoding<S, ?> itgEnc = + InstantiatedTaskGraphEncoding<S> itgEnc = phenotypeTypeMap.getEncoding(InstantiatedTaskGraphEncoding.class); assert (itgEnc != null) : "The required instantiated task graph encoding could not be found in the map of phenotypes."; InstantiatedTaskMappingEncoding<?> itmEnc = @@ -80,8 +80,7 @@ public class PeriodConstraintEvaluator<S extends InstantiatedTaskMappingEntry, T TaskGraph taskGraph = itgEnc.getTaskGraphOf(deployableComponent); // we need to check each iteration in the hyper period if(taskGraph != null) { - for(int i = 0; i < systemModelAdapter.getHyperPeriod() / - taskGraph.getPeriod(); i++) { + for(int i = 0; i < systemModelAdapter.getHyperPeriod() / taskGraph.getPeriod(); i++) { double periodEnd = (i + 1) * taskGraph.getPeriod(); double end = schedule.getLastEndTime(deployableComponent, i); if(end > periodEnd) { diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/.ratings index cec4a3b6c77ff46a747db91becf3b62e1e03c8d0..b1ab31c36177774288004d8840ec5464a3616f1d 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/.ratings +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/.ratings @@ -1,5 +1,5 @@ EnergyObjectiveEvaluator.java 55b55ad26c1ab1ec6511615678df01f08b4927b7 RED -FailSilentReliabilityEvaluator.java b3167361dc95242d6a3bedff716890d70be12622 RED -FaultDetectionVotingReliabilityEvaluator.java f855845cbea8a2aaba5481b3769f6b00d8683480 RED +FailSilentReliabilityEvaluator.java 8cf419d991d2cbd9c8fae1e93aa0a5d72620d7cf RED +FaultDetectionVotingReliabilityEvaluator.java 8df68773fb9a63c224981c6aae13178937585d80 RED MappingEvaluatorObjective.java 17a9b315ed0385a1dca2a753118cae0e5f42af2b RED -ReliabilityEvaluatorBase.java 303e2f735ec79e533522e1cfedc6b568ce5352d8 RED +ReliabilityEvaluatorBase.java 0112a1349d4b23a58b28c49b3b8679c2e22c0423 RED diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/FailSilentReliabilityEvaluator.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/FailSilentReliabilityEvaluator.java index b3167361dc95242d6a3bedff716890d70be12622..8cf419d991d2cbd9c8fae1e93aa0a5d72620d7cf 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/FailSilentReliabilityEvaluator.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/FailSilentReliabilityEvaluator.java @@ -24,7 +24,7 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.in import org.fortiss.af3.exploration.alg.dse.backend.opt4j.solution.StrictTTSchedule; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ITaskAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; -import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.DefaultTaskGraph; +import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.TaskGraph; import org.fortiss.af3.exploration.alg.service.IExplorationTargetEvaluator; import org.fortiss.af3.exploration.moea.model.predefined.FailureMinObjective; import org.fortiss.af3.exploration.moea.model.predefined.FailureType; @@ -48,7 +48,7 @@ public class FailSilentReliabilityEvaluator extends @Override protected double evaluateInternal( StrictTTSchedule<FailSilentTaskMappingEntry, FailSilentTaskMappingEncoding> schedule, - FailSilentTaskMappingEncoding itmEnc, DefaultTaskGraph<?> taskGraph, + FailSilentTaskMappingEncoding itmEnc, TaskGraph taskGraph, FailureType failureProbabilityType) { // for the StrictTTFaileSilence model, no sdc could occur @@ -102,7 +102,8 @@ public class FailSilentReliabilityEvaluator extends /** {@inheritDoc} */ @Override - public IExplorationTargetEvaluator<StrictTTSchedule<FailSilentTaskMappingEntry, FailSilentTaskMappingEncoding>, Double, FailureMinObjective> + public + IExplorationTargetEvaluator<StrictTTSchedule<FailSilentTaskMappingEntry, FailSilentTaskMappingEncoding>, Double, FailureMinObjective> createEvaluator(SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter, FailureMinObjective explorationTarget) throws InstantiationException { try { diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/FaultDetectionVotingReliabilityEvaluator.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/FaultDetectionVotingReliabilityEvaluator.java index f855845cbea8a2aaba5481b3769f6b00d8683480..8df68773fb9a63c224981c6aae13178937585d80 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/FaultDetectionVotingReliabilityEvaluator.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/FaultDetectionVotingReliabilityEvaluator.java @@ -38,7 +38,8 @@ import org.fortiss.af3.exploration.moea.model.predefined.FailureType; * * @author huang */ -public class FaultDetectionVotingReliabilityEvaluator extends +public class FaultDetectionVotingReliabilityEvaluator + extends ReliabilityEvaluatorBase<FaultDetectionVotingTaskMappingEntry, FaultDetectionVotingTaskMappingEncoding> { /** Helper class to save the reliability information */ @@ -55,8 +56,8 @@ public class FaultDetectionVotingReliabilityEvaluator extends /** Constructs a new {@link ReliabilityMeasure} (initialized to all zero). */ public ReliabilityMeasure() { - this(new Apfloat(0, FP_PRECISION), new Apfloat(0, FP_PRECISION), - new Apfloat(0, FP_PRECISION)); + this(new Apfloat(0, FP_PRECISION), new Apfloat(0, FP_PRECISION), new Apfloat(0, + FP_PRECISION)); } /** Constructs a new {@link ReliabilityMeasure} (initialized to user supplied values) */ @@ -108,7 +109,7 @@ public class FaultDetectionVotingReliabilityEvaluator extends null; /** Last task graph */ - private DefaultTaskGraph<?> lastTaskGraph = null; + private TaskGraph lastTaskGraph = null; /** Last analysis result */ private ReliabilityMeasure lastResult = null; @@ -128,10 +129,12 @@ public class FaultDetectionVotingReliabilityEvaluator extends * voting). */ @Override - public double evaluateInternal( - StrictTTSchedule<FaultDetectionVotingTaskMappingEntry, FaultDetectionVotingTaskMappingEncoding> schedule, - FaultDetectionVotingTaskMappingEncoding itmEnc, DefaultTaskGraph<?> taskGraph, - FailureType failureProbabilityType) { + public + double + evaluateInternal( + StrictTTSchedule<FaultDetectionVotingTaskMappingEntry, FaultDetectionVotingTaskMappingEncoding> schedule, + FaultDetectionVotingTaskMappingEncoding itmEnc, TaskGraph taskGraph, + FailureType failureProbabilityType) { // TODO: Implement this caching in a safer way, and potentially extend it to other cases. // first of all, see if the scenario was just analyzed @@ -189,8 +192,7 @@ public class FaultDetectionVotingReliabilityEvaluator extends /** Entry point for task analysis */ private ReliabilityMeasure taskAnalysis(ITaskAdapter<?> deployableComponent, - DefaultTaskGraph<?> taskgraph, - Collection<FaultDetectionVotingTaskMappingEntry> mappings) { + TaskGraph taskgraph, Collection<FaultDetectionVotingTaskMappingEntry> mappings) { ReliabilityMeasure rm = new ReliabilityMeasure(); ActorAnalysisNode start = new ActorAnalysisNode(); @@ -203,19 +205,22 @@ public class FaultDetectionVotingReliabilityEvaluator extends /** Analyzes the reliability of a task. */ private void taskAnalysis(ITaskAdapter<?> deployableComponent, ActorAnalysisNode current, - DefaultTaskGraph<?> taskgraph, ReliabilityMeasure rm, + TaskGraph taskgraph, ReliabilityMeasure rm, List<FaultDetectionVotingTaskMappingEntry> mappings) { // the start node if(current.level < 0) { - ActorAnalysisNode suc = new ActorAnalysisNode(current, 1, new Apfloat(1, FP_PRECISION), - current.level + 1); + ActorAnalysisNode suc = + new ActorAnalysisNode(current, 1, new Apfloat(1, FP_PRECISION), + current.level + 1); taskAnalysis(deployableComponent, suc, taskgraph, rm, mappings); - ActorAnalysisNode due = new ActorAnalysisNode(current, 0, new Apfloat(1, FP_PRECISION), - current.level + 1); + ActorAnalysisNode due = + new ActorAnalysisNode(current, 0, new Apfloat(1, FP_PRECISION), + current.level + 1); taskAnalysis(deployableComponent, due, taskgraph, rm, mappings); - ActorAnalysisNode sdc = new ActorAnalysisNode(current, -1, new Apfloat(1, FP_PRECISION), - current.level + 1); + ActorAnalysisNode sdc = + new ActorAnalysisNode(current, -1, new Apfloat(1, FP_PRECISION), + current.level + 1); taskAnalysis(deployableComponent, sdc, taskgraph, rm, mappings); } else { // compute the local probabilities @@ -262,14 +267,17 @@ public class FaultDetectionVotingReliabilityEvaluator extends } } else { // create the children - ActorAnalysisNode suc = new ActorAnalysisNode(current, 1, - current.probability.multiply(localPr), current.level + 1); + ActorAnalysisNode suc = + new ActorAnalysisNode(current, 1, current.probability.multiply(localPr), + current.level + 1); taskAnalysis(deployableComponent, suc, taskgraph, rm, mappings); - ActorAnalysisNode due = new ActorAnalysisNode(current, 0, - current.probability.multiply(localPr), current.level + 1); + ActorAnalysisNode due = + new ActorAnalysisNode(current, 0, current.probability.multiply(localPr), + current.level + 1); taskAnalysis(deployableComponent, due, taskgraph, rm, mappings); - ActorAnalysisNode sdc = new ActorAnalysisNode(current, -1, - current.probability.multiply(localPr), current.level + 1); + ActorAnalysisNode sdc = + new ActorAnalysisNode(current, -1, current.probability.multiply(localPr), + current.level + 1); taskAnalysis(deployableComponent, sdc, taskgraph, rm, mappings); } } @@ -284,7 +292,7 @@ public class FaultDetectionVotingReliabilityEvaluator extends * Defines the reliability value assigned to the logical components. * @return {@link ReliabilityMeasure} for the given {@link TaskGraph}. */ - private ReliabilityMeasure appAnalysis(DefaultTaskGraph<?> tg, + private ReliabilityMeasure appAnalysis(TaskGraph tg, Map<ITaskAdapter<?>, ReliabilityMeasure> actorReliabilities) { ReliabilityMeasure rm = new ReliabilityMeasure(); @@ -306,8 +314,8 @@ public class FaultDetectionVotingReliabilityEvaluator extends } /** Computes the success probability of a task */ - private static Apfloat - computeTaskSuc(Map<ITaskAdapter<?>, ReliabilityMeasure> actorReliabilities) { + private static Apfloat computeTaskSuc( + Map<ITaskAdapter<?>, ReliabilityMeasure> actorReliabilities) { // SUC: the task is successful, iff all actors are successful Apfloat taskSuc = new Apfloat(1, FP_PRECISION); for(ITaskAdapter<?> deployableComponent : actorReliabilities.keySet()) { @@ -377,7 +385,8 @@ public class FaultDetectionVotingReliabilityEvaluator extends /** {@inheritDoc} */ @Override - public IExplorationTargetEvaluator<StrictTTSchedule<FaultDetectionVotingTaskMappingEntry, FaultDetectionVotingTaskMappingEncoding>, Double, FailureMinObjective> + public + IExplorationTargetEvaluator<StrictTTSchedule<FaultDetectionVotingTaskMappingEntry, FaultDetectionVotingTaskMappingEncoding>, Double, FailureMinObjective> createEvaluator(SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter, FailureMinObjective explorationTarget) throws InstantiationException { try { diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/ReliabilityEvaluatorBase.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/ReliabilityEvaluatorBase.java index 303e2f735ec79e533522e1cfedc6b568ce5352d8..0112a1349d4b23a58b28c49b3b8679c2e22c0423 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/ReliabilityEvaluatorBase.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/ReliabilityEvaluatorBase.java @@ -28,7 +28,6 @@ import org.apfloat.FixedPrecisionApfloatHelper; import org.eclipse.emf.ecore.EObject; import org.fortiss.af3.component.model.Component; 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.instantiatedmapping.InstantiatedTaskMappingEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.InstantiatedTaskMappingEntry; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.FlatPhenotypeMap; @@ -39,7 +38,6 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IExecutionUnitAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IResourceAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ITaskAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; -import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.DefaultTaskGraph; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.TaskGraph; import org.fortiss.af3.exploration.alg.dse.sysmodel.faultmodel.FaultDetector; import org.fortiss.af3.exploration.moea.model.predefined.FailureMinObjective; @@ -55,8 +53,7 @@ import com.google.common.collect.ClassToInstanceMap; * @author huang */ public abstract class ReliabilityEvaluatorBase<S extends InstantiatedTaskMappingEntry, T extends InstantiatedTaskMappingEncoding<S>> - extends - ExplorationTargetEvaluatorBase<StrictTTSchedule<S, T>, Double, FailureMinObjective> { + extends ExplorationTargetEvaluatorBase<StrictTTSchedule<S, T>, Double, FailureMinObjective> { /** Precision of floating point values */ protected final static int FP_PRECISION = 50; @@ -66,8 +63,8 @@ public abstract class ReliabilityEvaluatorBase<S extends InstantiatedTaskMapping new HashMap<ITaskAdapter<?>, Map<IExecutionUnitAdapter<?>, Apfloat>>(); /** Helper required to perform {@link org.apfloat.Apfloat}-based calculations. */ - private FixedPrecisionApfloatHelper apfloatHelper = - new FixedPrecisionApfloatHelper(FP_PRECISION); + private FixedPrecisionApfloatHelper apfloatHelper = new FixedPrecisionApfloatHelper( + FP_PRECISION); /** * References the "target" {@link Component} in the original input model. This is the @@ -185,8 +182,8 @@ public abstract class ReliabilityEvaluatorBase<S extends InstantiatedTaskMapping } if(!targetsToBeRemoved.isEmpty()) { - System.out.println( - "WARNING: ignoring the following mapping locations due to lack of reliability annotation:"); + System.out + .println("WARNING: ignoring the following mapping locations due to lack of reliability annotation:"); for(IExecutionUnitAdapter<?> deploymentTarget : targetsToBeRemoved) { systemModelAdapter.getDeploymentTargets().remove(deploymentTarget); System.out.print(deploymentTarget.getName() + ","); @@ -221,7 +218,7 @@ public abstract class ReliabilityEvaluatorBase<S extends InstantiatedTaskMapping public DoubleValue evaluateGoal(StrictTTSchedule<S, T> schedule, FlatPhenotypeMap<Phenotype> phenotypeTypeMap, ClassToInstanceMap<EObject> transformedModels) { - @SuppressWarnings("unchecked") AbstractTaskGraphEncoding<AbstractTaskMappingEncoding, ?> atgEnc = + AbstractTaskGraphEncoding atgEnc = phenotypeTypeMap.getEncoding(AbstractTaskGraphEncoding.class); assert (atgEnc != null) : "The required abstract task graph encoding could not be found in the map of phenotypes."; @SuppressWarnings("unchecked") T itmEnc = @@ -246,7 +243,7 @@ public abstract class ReliabilityEvaluatorBase<S extends InstantiatedTaskMapping * If the failure probability is 0, -100 is returned to avoid log(0). */ protected abstract double evaluateInternal(StrictTTSchedule<S, T> schedule, T itmEnc, - DefaultTaskGraph<?> taskGraph, FailureType failureProbabilityType); + TaskGraph taskGraph, FailureType failureProbabilityType); /** * {@inheritDoc} @@ -299,9 +296,9 @@ public abstract class ReliabilityEvaluatorBase<S extends InstantiatedTaskMapping taskmap.put(deploymentTarget, reliability); Apfloat one = new Apfloat(1, FP_PRECISION); NumberFormat formatter = new DecimalFormat("0.######E0"); - System.out.println( - "Task " + deployableComponent.getName() + " on " + deploymentTarget.getName() + - " : " + formatter.format(one.subtract(reliability).doubleValue())); + System.out.println("Task " + deployableComponent.getName() + " on " + + deploymentTarget.getName() + " : " + + formatter.format(one.subtract(reliability).doubleValue())); } /** @@ -327,13 +324,15 @@ public abstract class ReliabilityEvaluatorBase<S extends InstantiatedTaskMapping protected Apfloat getComponentFailureRate(ITaskAdapter<?> deployableComponent, IExecutionUnitAdapter<?> deploymentTarget) { if(deployableComponent.getObject() instanceof EObject) { - deployableComponent = systemModelAdapter - .getRealizeableDeployableComponentOf((EObject)deployableComponent.getObject()); + deployableComponent = + systemModelAdapter + .getRealizeableDeployableComponentOf((EObject)deployableComponent + .getObject()); if(componentReliability.get(deployableComponent) != null && componentReliability.get(deployableComponent).get(deploymentTarget) != null) { Apfloat one = new Apfloat(1, FP_PRECISION); - return one.subtract( - componentReliability.get(deployableComponent).get(deploymentTarget)); + return one.subtract(componentReliability.get(deployableComponent).get( + deploymentTarget)); } } return null; diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/safety/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/safety/.ratings index 7aaa8c3281291841a7bf6bc3907b515140eaec68..731ce5fa3e14f9481657c62876e5bf6553670053 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/safety/.ratings +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/safety/.ratings @@ -1,2 +1,2 @@ -SafetyChannelPortReplicator.java 5990480f0a7fc3ee1671ab71cf6a650aeb4e7dce RED -SafetyDiagUnitRemover.java b1a08fa29528ef5df0c21f47161173cf65b94554 RED +SafetyChannelPortReplicator.java bb3a2ea361002d67baacb7aaf411e4733a887505 RED +SafetyDiagUnitRemover.java 5148abab7b56dae7d9ac6123de9d7ed4307dfd05 RED diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/safety/SafetyChannelPortReplicator.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/safety/SafetyChannelPortReplicator.java index 5990480f0a7fc3ee1671ab71cf6a650aeb4e7dce..bb3a2ea361002d67baacb7aaf411e4733a887505 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/safety/SafetyChannelPortReplicator.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/safety/SafetyChannelPortReplicator.java @@ -71,11 +71,10 @@ public class SafetyChannelPortReplicator extends TransformationModuleBase<Compon ITransformationModule.TransformationState state, TransformationContext context, ExplorationTransformationInputs inputs, SubClassToInstanceMap<N> transformedModels, EObject outputModel) { - @SuppressWarnings("unchecked") SafetyFunctionArchEncoding<Component> sfaEnc = - inputs.getEncoding(SafetyFunctionArchEncoding.class); + SafetyFunctionArchEncoding sfaEnc = inputs.getEncoding(SafetyFunctionArchEncoding.class); Collection<Component> sfComponents = new HashSet<>(); - for(SafetyFunctionArchEntry<Component> sfaEntry : sfaEnc.getAllEntries()) { + for(SafetyFunctionArchEntry sfaEntry : sfaEnc.getAllEntries()) { Collection<ITaskAdapter<Component>> entryCompAdps = sfaEntry.getSafetyFunctionAdapter().getAllComponents(); entryCompAdps.forEach(c -> sfComponents.add(c.getObject())); @@ -86,8 +85,8 @@ public class SafetyChannelPortReplicator extends TransformationModuleBase<Compon Collection<InputPort> connectedInputPorts = new HashSet<>(); for(OutputPort curOutPort : sfOutPorts) { - curOutPort.getOutgoingChannels() - .forEach(ch -> connectedInputPorts.add((InputPort)ch.getTarget())); + curOutPort.getOutgoingChannels().forEach( + ch -> connectedInputPorts.add((InputPort)ch.getTarget())); } Collection<InputPort> nonSfInputPorts = @@ -99,8 +98,9 @@ public class SafetyChannelPortReplicator extends TransformationModuleBase<Compon List<Channel> incomingChannels = inPort.getIncomingChannels(); for(int chIdx = 1; chIdx < incomingChannels.size(); chIdx++) { char suffix = (char)(chIdx - 1 + 'a'); - InputPort genPort = replicateInputPortAndAttach(inPort, inPort.getComponent(), - inPort.getName() + "_" + suffix); + InputPort genPort = + replicateInputPortAndAttach(inPort, inPort.getComponent(), + inPort.getName() + "_" + suffix); Channel curCh = incomingChannels.get(chIdx); curCh.setTarget(genPort); InputPort origPort = (InputPort)genToOrigAssocMap.get(inPort); diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/safety/SafetyDiagUnitRemover.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/safety/SafetyDiagUnitRemover.java index b1a08fa29528ef5df0c21f47161173cf65b94554..5148abab7b56dae7d9ac6123de9d7ed4307dfd05 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/safety/SafetyDiagUnitRemover.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/safety/SafetyDiagUnitRemover.java @@ -96,14 +96,13 @@ public class SafetyDiagUnitRemover extends TransformationModuleBase<ComponentArc "Could not retrieve the generated Component Architecture."); } - @SuppressWarnings("unchecked") SafetyFunctionArchEncoding<Component> sfaEnc = - inputs.getEncoding(SafetyFunctionArchEncoding.class); + SafetyFunctionArchEncoding sfaEnc = inputs.getEncoding(SafetyFunctionArchEncoding.class); if(sfaEnc == null) { throw new TransformationModuleException(this, "A SafetyFunctionArchEncoding is required for this module to operate properly."); } - for(SafetyFunctionArchEntry<Component> sfaEntry : sfaEnc.getAllEntries()) { + for(SafetyFunctionArchEntry sfaEntry : sfaEnc.getAllEntries()) { if(!sfaEntry.isDiagnosicUnitPresent()) { for(ITaskAdapter<Component> diagCompAdp : sfaEntry.getSafetyFunctionAdapter() .getDiagnosticComponents()) { @@ -116,10 +115,10 @@ public class SafetyDiagUnitRemover extends TransformationModuleBase<ComponentArc // Get all channels connected to the current diagnostic Component. Collection<Channel> genChannels = new ArrayList<>(); - ((Component)genDiagComponent).getInputPorts() - .forEach(p -> genChannels.addAll(p.getIncomingChannels())); - ((Component)genDiagComponent).getOutputPorts() - .forEach(p -> genChannels.addAll(p.getOutgoingChannels())); + ((Component)genDiagComponent).getInputPorts().forEach( + p -> genChannels.addAll(p.getIncomingChannels())); + ((Component)genDiagComponent).getOutputPorts().forEach( + p -> genChannels.addAll(p.getOutgoingChannels())); // Remove all ports from Components which are connected to the diagnostic // Component. Can be included if needed. NOTE: Instantiated components will // introduce the "same" Port again. 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 8678ff5d29425f2e46928a9a52c607cefe0255d2..3d0f9a8a656d566aa64d79fdcf82ceac1fa63d9e 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 45d74ef3ed0bc01f51ff912a67f8e163199b73cc RED -FaultDetectionVotingExecModelFactory.java 5f0f357388b614c1671879742ff46fe64f15a2b9 RED +FailSilentExecModelFactory.java 5811c8cba759f3e7ca5809e6021a64f4a5188788 RED +FaultDetectionVotingExecModelFactory.java 0d0d9cf608f95f1dfe3afd653049ae2f3bb19d5a 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 45d74ef3ed0bc01f51ff912a67f8e163199b73cc..5811c8cba759f3e7ca5809e6021a64f4a5188788 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 @@ -45,11 +45,9 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ITaskAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.sched.proc.EDFSchedulerBase; import org.fortiss.af3.exploration.alg.dse.sysmodel.sched.proc.FailSilentEDFScheduler; -import org.fortiss.af3.exploration.model.ExplorationSpecification; import org.fortiss.af3.exploration.model.ExplorationTarget; import org.fortiss.af3.exploration.model.time.DeadlineConstraint; import org.fortiss.af3.exploration.model.time.PeriodConstraint; -import org.fortiss.af3.exploration.moea.model.DseSpecification; import org.fortiss.af3.exploration.moea.model.predefined.ComponentMultiAllocationConstraint; import org.fortiss.af3.exploration.moea.model.predefined.ComponentMultiDislocationConstraint; import org.fortiss.af3.exploration.moea.model.predefined.FailureMinObjective; @@ -134,7 +132,7 @@ public class FailSilentExecModelFactory extends @Override // TODO: identify why a warning is generated here. public - InstantiatedTaskMappingDecoderAcyclic<FailSilentTaskMappingEntry, FailSilentTaskMappingEncoding> + InstantiatedTaskMappingDecoderAcyclic<FailSilentTaskMappingEntry> createAbstractToAcyclicTaskGraphDecoder() { return new InstantiatedTaskMappingDecoderAcyclic(); } @@ -149,9 +147,8 @@ public class FailSilentExecModelFactory extends /** {@inheritDoc} */ @Override public StrictTTDecoder<FailSilentTaskMappingEntry, FailSilentTaskMappingEncoding> - createStrictTTDecoder(DseSpecification explorationDefinition) { - return new StrictTTDecoder<FailSilentTaskMappingEntry, FailSilentTaskMappingEncoding>( - explorationDefinition); + createStrictTTDecoder() { + return new StrictTTDecoder<FailSilentTaskMappingEntry, FailSilentTaskMappingEncoding>(); } /** @@ -159,8 +156,8 @@ public class FailSilentExecModelFactory extends * given execution model */ @Override - public EDFSchedulerBase<?, ?> createEDFScheduler(ExplorationSpecification expSpec) { - return new FailSilentEDFScheduler(expSpec); + public EDFSchedulerBase<?, ?> createEDFScheduler() { + return new FailSilentEDFScheduler(); } /* Construct Evaluators for Optimization Goals. */ 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 5f0f357388b614c1671879742ff46fe64f15a2b9..0d0d9cf608f95f1dfe3afd653049ae2f3bb19d5a 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 @@ -45,11 +45,9 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ITaskAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.sched.proc.EDFSchedulerBase; import org.fortiss.af3.exploration.alg.dse.sysmodel.sched.proc.FaultDetectionVotingEDFScheduler; -import org.fortiss.af3.exploration.model.ExplorationSpecification; import org.fortiss.af3.exploration.model.ExplorationTarget; import org.fortiss.af3.exploration.model.time.DeadlineConstraint; import org.fortiss.af3.exploration.model.time.PeriodConstraint; -import org.fortiss.af3.exploration.moea.model.DseSpecification; import org.fortiss.af3.exploration.moea.model.predefined.ComponentMultiAllocationConstraint; import org.fortiss.af3.exploration.moea.model.predefined.ComponentMultiDislocationConstraint; import org.fortiss.af3.exploration.moea.model.predefined.FailureMinObjective; @@ -141,7 +139,7 @@ public class FaultDetectionVotingExecModelFactory @Override // TODO: identify why a warning is generated here. public - InstantiatedTaskMappingDecoderAcyclic<FaultDetectionVotingTaskMappingEntry, FaultDetectionVotingTaskMappingEncoding> + InstantiatedTaskMappingDecoderAcyclic<FaultDetectionVotingTaskMappingEntry> createAbstractToAcyclicTaskGraphDecoder() { return new InstantiatedTaskMappingDecoderAcyclic(); } @@ -158,15 +156,14 @@ public class FaultDetectionVotingExecModelFactory @Override public StrictTTDecoder<FaultDetectionVotingTaskMappingEntry, FaultDetectionVotingTaskMappingEncoding> - createStrictTTDecoder(DseSpecification explorationDefinition) { - return new StrictTTDecoder<FaultDetectionVotingTaskMappingEntry, FaultDetectionVotingTaskMappingEncoding>( - explorationDefinition); + createStrictTTDecoder() { + return new StrictTTDecoder<FaultDetectionVotingTaskMappingEntry, FaultDetectionVotingTaskMappingEncoding>(); } /** {@inheritDoc} */ @Override - public EDFSchedulerBase<?, ?> createEDFScheduler(ExplorationSpecification expSpec) { - return new FaultDetectionVotingEDFScheduler(expSpec); + public EDFSchedulerBase<?, ?> createEDFScheduler() { + return new FaultDetectionVotingEDFScheduler(); } /* Construct Evaluators for Optimization Goals. */ 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 7152e0ce76d9e553da0b413f51ae61b05823bf14..4bf577b83bb6458749270d3f0c6d42ed082eb0c3 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 @@ -9,9 +9,9 @@ IPlatformArchitectureAdapter.java 399d3cdff468c5ac95ca4cf6f17caabdeb2fef16 RED IRequestAdapter.java d9298837caf9e15971471aae0bb567e416e82a41 RED IResourceAdapter.java 4d41218b96f25daedad66098250baf622a3f89b3 RED IResourceConnectionAdapter.java 67d0a7f54de3e3fe21532fc33f6b853eb844b993 RED -ISafetyFunctionAdapter.java 503745b2c45c19995f37b10e8d640aeca06d5154 RED +ISafetyFunctionAdapter.java 6a16258729ba9dff91c35285d18bc06cc99a713a RED ISignalAdapter.java 2bdb578564cf1d3351c99811c9090e2e9bd70715 RED ITaskAdapter.java 0f8c8699bb48e609211713aef6a7e1e82a00c963 RED ITransmissionUnitAdapter.java 217aca158641261dc8035805f341fe4c4c527a36 RED InternalComponentParameters.java cd5eea4ddf104c4cb3c4521d3256566812876027 RED -SystemModelAdapter.java f92341ec7813ad4301b0f3abc084b3dbc6f8055f RED +SystemModelAdapter.java 28bf6b9de321f56d14bad7d8f362fe30e28d2fae RED diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/ISafetyFunctionAdapter.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/ISafetyFunctionAdapter.java index 503745b2c45c19995f37b10e8d640aeca06d5154..6a16258729ba9dff91c35285d18bc06cc99a713a 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/ISafetyFunctionAdapter.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/ISafetyFunctionAdapter.java @@ -17,6 +17,7 @@ package org.fortiss.af3.exploration.alg.dse.sysmodel.arch; import java.util.Collection; +import org.fortiss.af3.component.model.Component; import org.fortiss.af3.safety.model.SafetyArchitecture; /** @@ -42,20 +43,26 @@ public interface ISafetyFunctionAdapter<T> { * Returns the collection of {@link ITaskAdapter}s that are realizing diagnostic * functions of the actual safety function. */ - Collection<ITaskAdapter<T>> getDiagnosticComponents(); + // FIXME: intermediate HACK. For back-transformations, the AF3 adapters should be used which + // contain information about the concrete model types. + Collection<ITaskAdapter<Component>> getDiagnosticComponents(); /** * Returns the {@link ITaskAdapter} that generates the output signal of the * safety functions, i.e. a voter or HW interfacing component. */ + // FIXME: intermediate HACK. For back-transformations, the AF3 adapters should be used which + // contain information about the concrete model types. // TODO: extend to collection. - ITaskAdapter<T> getOutputComponent(); + ITaskAdapter<Component> getOutputComponent(); /** - * Returns the collection of all {@link ITaskAdapter}s that represent - * {@code this} safety function. + * Returns the collection of all {@link ITaskAdapter}s that represent {@code this} safety + * function. */ - Collection<ITaskAdapter<T>> getAllComponents(); + // FIXME: intermediate HACK. For back-transformations, the AF3 adapters should be used which + // contain information about the concrete model types. + Collection<ITaskAdapter<Component>> getAllComponents(); /** * Returns the collection of {@link SafetyArchitecture}s that may be used to implement 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 f92341ec7813ad4301b0f3abc084b3dbc6f8055f..28bf6b9de321f56d14bad7d8f362fe30e28d2fae 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 @@ -33,18 +33,13 @@ import java.util.stream.Collectors; import org.eclipse.emf.ecore.EObject; import org.fortiss.af3.component.model.Component; import org.fortiss.af3.component.model.ComponentArchitecture; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.create.InitialEncodingProvider; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.platform.PlatformCommunicationGraphEncoding; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph.AbstractTaskGraphEncoding; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.abstractmapping.AbstractTaskMappingEncoding; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IResourceConnectionAdapter.ConnectionType; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.AcyclicTaskGraph; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.DefaultTaskGraph; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.SignalAdapterWeightedEdge; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.TaskGraph; import org.fortiss.af3.exploration.alg.exception.InvalidTimingModelException; -import org.fortiss.af3.exploration.alg.service.IExplorationEncoding; import org.fortiss.af3.platform.model.ExecutionUnit; import org.fortiss.af3.platform.model.IPlatformArchitectureElement; import org.fortiss.af3.platform.model.IPlatformCommunicationResource; @@ -57,17 +52,19 @@ import org.fortiss.tooling.base.model.element.IHierarchicElement; import org.fortiss.tooling.base.model.element.IModelElement; import org.jgrapht.Graphs; import org.jgrapht.alg.ConnectivityInspector; -import org.opt4j.core.Genotype; import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; +import com.google.inject.AbstractModule; +import com.google.inject.Provides; +import com.google.inject.name.Named; /** * Adapter to the system model used as input for the DSE which is created for a specific DSE run. * * @author barner, huang */ -public class SystemModelAdapter<C, E, SO, SI, G, TR, M> { +public class SystemModelAdapter<C, E, SO, SI, G, TR, M> extends AbstractModule { /** * Constant defining the allowed tolerance for the calculation of the greatest common divisor @@ -94,8 +91,8 @@ public class SystemModelAdapter<C, E, SO, SI, G, TR, M> { * Look up table to determine the input/output directions of {@link IConnector} types of the * target {@link PlatformArchitecture}. */ - protected Map<Class<? extends IConnector>, ConnectionType> connectionTypeLUT = - Collections.emptyMap(); + protected Map<Class<? extends IConnector>, ConnectionType> connectionTypeLUT = Collections + .emptyMap(); /** * Deployable software components that may be replicated (per default: all @{code @@ -160,7 +157,7 @@ public class SystemModelAdapter<C, E, SO, SI, G, TR, M> { protected PlatformCommunicationGraphEncoding platformCommunicationGraph; /** The set of independent {@link DefaultTaskGraph}s derived from the logical architecture. */ - protected Collection<TaskGraph> taskGraphs; + protected Set<TaskGraph> taskGraphs; /** * The set of independent directed acyclic {@link DefaultTaskGraph}s derived from the logical @@ -229,7 +226,7 @@ public class SystemModelAdapter<C, E, SO, SI, G, TR, M> { // - Print some debugging output // - Determine the hyper-period of all {@link TaskGraph}s contained in this {@link // SystemModelAdapter}. - taskGraphs = new ArrayList<TaskGraph>(); + taskGraphs = new HashSet<TaskGraph>(); acyclicTaskGraphs = new ArrayList<>(); // Temporary task graph: add vertices (= software components / tasks that need to be mapped @@ -249,8 +246,9 @@ public class SystemModelAdapter<C, E, SO, SI, G, TR, M> { tasksInGraph = registerTaskGraphsForTasks(taskGraphs); // Construct an Directed Acyclic TaskGraph (e.g., utilized in scheduling). - acyclicTaskGraphs = taskGraphs.stream().map(tg -> new AcyclicTaskGraph(tg)) - .collect(Collectors.toList()); + acyclicTaskGraphs = + taskGraphs.stream().map(tg -> new AcyclicTaskGraph(tg)) + .collect(Collectors.toList()); componentInAcyclicGraph = registerTaskGraphsForTasks(acyclicTaskGraphs); // Print some debugging output: print the taskgraphs and display them in a dialog. @@ -273,9 +271,9 @@ public class SystemModelAdapter<C, E, SO, SI, G, TR, M> { * @throws InvalidTimingModelException * if the periods for a single task graph cannot be set up. */ - private Collection<TaskGraph> createDefaultTaskGraphs(TaskGraph monolithicTaskGraph) + private Set<TaskGraph> createDefaultTaskGraphs(TaskGraph monolithicTaskGraph) throws InvalidTimingModelException { - Collection<TaskGraph> independentTaskGraphs = new ArrayList<>(); + Set<TaskGraph> independentTaskGraphs = new HashSet<>(); // Compute vertex sets of maximum connected components of temporary task graph ConnectivityInspector<ITaskAdapter<?>, SignalAdapterWeightedEdge> ci = new ConnectivityInspector<ITaskAdapter<?>, SignalAdapterWeightedEdge>( @@ -297,22 +295,6 @@ public class SystemModelAdapter<C, E, SO, SI, G, TR, M> { return independentTaskGraphs; } - /** - * Creates the initial set of encodings that can be constructed from the input system models. - * While {@link Genotype}s and {@link Phenotype}s have a special meaning in the optimizers' - * context, {@link IExplorationEncoding}s are "only" system abstraction without any of the - * aforementioned meanings. - */ - @SuppressWarnings("unchecked") - protected void createInitialEncodings() { - InitialEncodingProvider initEncProvider = InitialEncodingProvider.getInstance(); - initEncProvider.clearEncodings(); - - initEncProvider.registerInputEncoding( - new AbstractTaskGraphEncoding<AbstractTaskMappingEncoding, C>( - (Collection<? extends DefaultTaskGraph<?>>)getTaskGraphs(), hyperPeriod)); - } - /** * Adds the given collection of {@link ISafetyFunctionAdapter}s to {@code this} * {@link SystemModelAdapter} that represents the input system models. In contrast to other @@ -349,8 +331,8 @@ public class SystemModelAdapter<C, E, SO, SI, G, TR, M> { // TODO: Here, we know that the IDeployableCOmponentAdapters are constructed using Components. // However, we should try to avoid the "SuppressWarnings". @SuppressWarnings("unchecked") - private <T extends TaskGraph> Map<ITaskAdapter<C>, T> - registerTaskGraphsForTasks(Collection<T> graphs) { + private <T extends TaskGraph> Map<ITaskAdapter<C>, T> registerTaskGraphsForTasks( + Collection<T> graphs) { Map<ITaskAdapter<C>, T> componentToGraphMap = new HashMap<ITaskAdapter<C>, T>(); for(T taskGraph : graphs) { @@ -387,8 +369,8 @@ public class SystemModelAdapter<C, E, SO, SI, G, TR, M> { */ private <T extends TaskGraph> void printAndDisplayTaskGraphs(Collection<T> taskGraphs) { for(T taskGraph : taskGraphs) { - System.out.println( - "Application " + taskGraph + ":" + " period = " + taskGraph.getPeriod()); + System.out.println("Application " + taskGraph + ":" + " period = " + + taskGraph.getPeriod()); System.out.println(taskGraph); System.out.println(""); @@ -544,9 +526,9 @@ public class SystemModelAdapter<C, E, SO, SI, G, TR, M> { * Returns the {@link ISafetyFunctionAdapter}s constructed from the safety functions that are * present in the input models. */ - public Collection<ISafetyFunctionAdapter<C>> getSafetyFunctionAdapters() { + public Collection<ISafetyFunctionAdapter<?>> getSafetyFunctionAdapters() { if(safetyFunctionAdapters != null) { - return safetyFunctionAdapters; + return (Collection<ISafetyFunctionAdapter<?>>)(Collection<?>)safetyFunctionAdapters; } return Collections.emptySet(); } @@ -578,7 +560,9 @@ public class SystemModelAdapter<C, E, SO, SI, G, TR, M> { * Returns all independent {@link DefaultTaskGraph}s contained in this * {@link SystemModelAdapter}. */ - public Collection<? extends TaskGraph> getTaskGraphs() { + @Provides + @Named("OriginalTaskGraphs") + public Set<TaskGraph> getTaskGraphs() { return taskGraphs; } @@ -607,9 +591,8 @@ public class SystemModelAdapter<C, E, SO, SI, G, TR, M> { } /** - * Returns the {@link ISignalAdapter}s "emitted" by the given - * {@link ITaskAdapter}. Returns an empty collection if the given - * {@link ITaskAdapter} does not emit anything. + * Returns the {@link ISignalAdapter}s "emitted" by the given {@link ITaskAdapter}. Returns an + * empty collection if the given {@link ITaskAdapter} does not emit anything. */ public Collection<ISignalAdapter<SO, ?>> getEmmittedMessages(ITaskAdapter<?> sender) { // TODO: use another representation ro make an access via the reference obsolete @@ -625,6 +608,8 @@ public class SystemModelAdapter<C, E, SO, SI, G, TR, M> { * Returns the hyper period of all tasks in the system, i.e. the hyper-period of all independent * {@link DefaultTaskGraph}s. */ + @Provides + @Named("HyperPeriod") public Double getHyperPeriod() { return hyperPeriod; } @@ -680,9 +665,9 @@ public class SystemModelAdapter<C, E, SO, SI, G, TR, M> { // This section handles the traversal between the elements of the same platform // architecture. - targetConnectors.addAll( - seekIntraPlatformTargetConnectors(sourceConnector, possibleTargetConnectors, - visitedTargetConnectors, nextTargetConnector, af3DeploymentTargets)); + targetConnectors.addAll(seekIntraPlatformTargetConnectors(sourceConnector, + possibleTargetConnectors, visitedTargetConnectors, nextTargetConnector, + af3DeploymentTargets)); visitedTargetConnectors.add(nextTargetConnector); } @@ -743,8 +728,9 @@ public class SystemModelAdapter<C, E, SO, SI, G, TR, M> { // Do not traverse back (to same connector) & not to the same IHierarchicElement. if(!visitedTargetConnectors.contains(connectorTgt) && tgtElement != sourceConnector.getOwner()) { - if(tgtElement instanceof IPlatformArchitectureElement && isValidConnectionTarget( - (IPlatformArchitectureElement)tgtElement, deploymentTargets)) { + if(tgtElement instanceof IPlatformArchitectureElement && + isValidConnectionTarget((IPlatformArchitectureElement)tgtElement, + deploymentTargets)) { targetConnectors.add(connectorTgt); } else if(tgtElement == connectorSrc.getOwner().getContainer() && !(nextTargetConnector instanceof IPlatformExport)) { diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/af3/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/af3/.ratings index 7c71b98c20002ad6a5f08b7fc64326dbdb10b984..b1b7315c8bbff57157cc210da70c17c83bb5f147 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/af3/.ratings +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/af3/.ratings @@ -8,6 +8,6 @@ AF3RequestAdapter.java c859ff360212cdab994895ee84390a235922c3cf RED AF3ResourceAdapter.java ca6c78c2cffe0e7c2d28990138e309b851a192d7 RED AF3ResourceConnectionAdapter.java 56a9eb31aa8a64702bf82b5c072ccdc3cd32bf53 RED AF3SignalAdapter.java 7d124a5c25b8267fa3be16d897253252f96c21c7 RED -AF3SystemModelAdapter.java 07b8ad0613452cd08b3ef588b7de3c9cbfb3021e RED +AF3SystemModelAdapter.java ce9ac0d795ddba5ad77903215560689f732a82dc RED AF3TaskAdapter.java 4ee4e1bcf1f4780f0a4f069d1a0bcf177a241dc7 RED AF3TransmissionUnitAdapter.java 41e176391fbb7577fc63b790d3f508d8eeffc445 RED diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/af3/AF3SystemModelAdapter.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/af3/AF3SystemModelAdapter.java index 07b8ad0613452cd08b3ef588b7de3c9cbfb3021e..ce9ac0d795ddba5ad77903215560689f732a82dc 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/af3/AF3SystemModelAdapter.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/af3/AF3SystemModelAdapter.java @@ -84,7 +84,8 @@ import com.google.common.collect.Multimap; * * @author diewald */ -public class AF3SystemModelAdapter extends +public class AF3SystemModelAdapter + extends SystemModelAdapter<Task, ExecutionUnit, TaskOutputPort, TaskInputPort, GatewayUnit, TransmissionUnit, MemoryUnit> { /** @@ -105,8 +106,8 @@ public class AF3SystemModelAdapter extends /** Cache the Annotation View's update status. */ private boolean annotationUpdateEnabled; - public static Map<Class<? extends IConnector>, ConnectionType> connectionTypeLUT = - Collections.unmodifiableMap(new HashMap<Class<? extends IConnector>, ConnectionType>() { + public static Map<Class<? extends IConnector>, ConnectionType> connectionTypeLUT = Collections + .unmodifiableMap(new HashMap<Class<? extends IConnector>, ConnectionType>() { { } }); @@ -118,19 +119,20 @@ public class AF3SystemModelAdapter extends Optional<ComponentToTaskAllocationEntry> anyEntry = getFirst(componentTaskAllocs.getEntries()); if(!anyEntry.isPresent()) { - throw new Exception("The set of component to task allocations is empty." + - " It is needed by the DSE. Exiting."); + throw new Exception("The set of component to task allocations is empty." + + " It is needed by the DSE. Exiting."); } Optional<IModelElement> anyComponent = getFirst(anyEntry.get().getSourceElements()); if(!anyComponent.isPresent()) { - throw new Exception("At least one task is not associated with a Component." + - " It is needed by the DSE. Exiting."); + throw new Exception("At least one task is not associated with a Component." + + " It is needed by the DSE. Exiting."); } ComponentArchitecture compArch = getFirstParentWithType(anyComponent.get(), ComponentArchitecture.class); this.logicalArchitecture = new AF3LogicalArchitectureAdapter(compArch); - PlatformArchitecture platArch = getFirstParentWithType( - getFirst(execUnits.getEntries()).orElse(null), PlatformArchitecture.class); + PlatformArchitecture platArch = + getFirstParentWithType(getFirst(execUnits.getEntries()).orElse(null), + PlatformArchitecture.class); this.platformArchitecture = new AF3PlatformArchitectureAdapter(platArch); // End: Porting code. @@ -168,18 +170,15 @@ public class AF3SystemModelAdapter extends setupEmittedMessages(); - // Create the initial encodings that can already be constructed from the input models. - createInitialEncodings(); - // Re-enable annotation view updates. setUpdateEnabled(annotationUpdateEnabled); } /** * Creates a collection of {@link ITaskAdapter}s that are available to - * instantiate other "abstract" {@link ITaskAdapter}s. Only those - * {@link ITaskAdapter}s which are referenced by {@link Component}s of the input - * {@link ComponentArchitecture} are included in the collection. + * instantiate other "abstract" {@link ITaskAdapter}s. Only those {@link ITaskAdapter}s which + * are referenced by {@link Component}s of the input {@link ComponentArchitecture} are included + * in the collection. */ // TODO(#3264) // private Multimap<Component, ITaskAdapter<Component>> createComponentReplacementAdapters( @@ -257,8 +256,8 @@ public class AF3SystemModelAdapter extends * * @throws Exception */ - private Collection<ISignalAdapter<TaskOutputPort, TaskInputPort>> - createSignalAdapters(SuperSet<Signal> signals) throws Exception { + private Collection<ISignalAdapter<TaskOutputPort, TaskInputPort>> createSignalAdapters( + SuperSet<Signal> signals) throws Exception { // TODO: We could also use the signals directly, but that affects the rest of the DSE. Thus // this change needs to be considered thoroughly and requires (maybe) large changes. Collection<ISignalAdapter<TaskOutputPort, TaskInputPort>> rval = new ArrayList<>(); @@ -369,8 +368,8 @@ public class AF3SystemModelAdapter extends * * @throws Exception */ - private Collection<IMemoryUnitAdapter<MemoryUnit>> - createMemoryUnits(PlatformArchitecture platformArchitecture) throws Exception { + private Collection<IMemoryUnitAdapter<MemoryUnit>> createMemoryUnits( + PlatformArchitecture platformArchitecture) throws Exception { Collection<IMemoryUnitAdapter<MemoryUnit>> rval = new ArrayList<IMemoryUnitAdapter<MemoryUnit>>(); for(MemoryUnit currentMemoryUnit : getChildrenWithType(platformArchitecture, @@ -407,8 +406,8 @@ public class AF3SystemModelAdapter extends * @throws Exception */ // TODO(#3262): Also power here... - private Collection<IGatewayUnitAdapter<GatewayUnit>> - createGatewayUnits(PlatformArchitecture platformArchitecture) throws Exception { + private Collection<IGatewayUnitAdapter<GatewayUnit>> createGatewayUnits( + PlatformArchitecture platformArchitecture) throws Exception { Collection<IGatewayUnitAdapter<GatewayUnit>> rval = new ArrayList<IGatewayUnitAdapter<GatewayUnit>>(); @@ -426,13 +425,13 @@ public class AF3SystemModelAdapter extends * @throws Exception */ // TODO(#3262): Also power, here. - private Collection<ITransmissionUnitAdapter<TransmissionUnit>> - createTransmissionUnits(PlatformArchitecture platformArchitecture) throws Exception { + private Collection<ITransmissionUnitAdapter<TransmissionUnit>> createTransmissionUnits( + PlatformArchitecture platformArchitecture) throws Exception { Collection<ITransmissionUnitAdapter<TransmissionUnit>> rval = new ArrayList<ITransmissionUnitAdapter<TransmissionUnit>>(); - for(TransmissionUnit transmissionUnit : EcoreUtils.getChildrenWithType(platformArchitecture, - TransmissionUnit.class)) { + for(TransmissionUnit transmissionUnit : EcoreUtils.getChildrenWithType( + platformArchitecture, TransmissionUnit.class)) { rval.add(new AF3TransmissionUnitAdapter(transmissionUnit)); } return rval; @@ -523,7 +522,8 @@ public class AF3SystemModelAdapter extends */ // TODO: Refactor this method to use the static methods from the AF3Utils class instead. private void determineNextConnectionTargets(LinkedList<IConnector> deployableConnectors, - Collection<IConnector> visitedConnectors, Collection<IHierarchicElement> targetElements, + Collection<IConnector> visitedConnectors, + Collection<IHierarchicElement> targetElements, Collection<ExecutionUnit> af3DeploymentTargets) { for(IHierarchicElement targetElement : targetElements) { if(targetElement instanceof IPlatformResource && @@ -644,8 +644,7 @@ public class AF3SystemModelAdapter extends * matching {@link Deployment} to the given list. */ private void addMatchingParameterDeploymentTo(Set<Deployment> paramDeployments, - ComponentArchitecture componentArchitecture, - PlatformArchitecture platformArchitecture) { + ComponentArchitecture componentArchitecture, PlatformArchitecture platformArchitecture) { List<Deployment> matchingDeployments = getDeploymentsWithParametersOf(componentArchitecture, platformArchitecture); if(matchingDeployments != null && matchingDeployments.size() > 0) { @@ -659,8 +658,8 @@ public class AF3SystemModelAdapter extends * Returns the set of {@link ComponentArchitecture}s that contain the referenced * {@link Component}s given by the {@code replacementComponents} map. */ - private Set<ComponentArchitecture> - getReferencedCompArchs(Multimap<Component, Component> replacementComponents) { + private Set<ComponentArchitecture> getReferencedCompArchs( + Multimap<Component, Component> replacementComponents) { Set<ComponentArchitecture> referencedCompArchs = new HashSet<ComponentArchitecture>(); for(Component diverseComponent : replacementComponents.values()) { ComponentArchitecture diversityCompArch = @@ -691,7 +690,9 @@ public class AF3SystemModelAdapter extends } assert (executionUnitAdapter == null) : "No IExecutionUnitAdapter found for the ExecutionUnit " + - af3ExecutionUnit.getName() + "(ID: " + af3ExecutionUnit.getId() + + af3ExecutionUnit.getName() + + "(ID: " + + af3ExecutionUnit.getId() + "). Every AF3-ExecutionUnit should have a IExecutionUnitAdapter equivalent."; return executionUnitAdapter; diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/taskgraph/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/taskgraph/.ratings index 94515c542c3b4f364f69ded4bf1d794d7395c3e5..5ca24ee72f1df65da78dfc1c699955135370c1d0 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/taskgraph/.ratings +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/taskgraph/.ratings @@ -1,5 +1,5 @@ AcyclicTaskGraph.java 51100f233b5f74b041e90567792cc6749323bb82 RED DefaultTaskGraph.java d93154c7edf376e60e46f5f3b164bfa7d939b959 RED SignalAdapterWeightedEdge.java b40989eecb8e94357476bfc5c7e9ef7e59013c9e RED -TaskGraph.java 27fdf1acbbc10d47db9a4a7f20eaa7525a599aa9 RED +TaskGraph.java f57b7d2fea23de276dad9334370b7007efa3f591 RED TaskGraphInstantiator.java 1f8a218f8c4ad885ca7d7d9560932f0f6a063a7b RED diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/taskgraph/TaskGraph.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/taskgraph/TaskGraph.java index 27fdf1acbbc10d47db9a4a7f20eaa7525a599aa9..f57b7d2fea23de276dad9334370b7007efa3f591 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/taskgraph/TaskGraph.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/taskgraph/TaskGraph.java @@ -61,14 +61,14 @@ public interface TaskGraph { Set<ITaskAdapter<?>> getTasks(); /** - * Checks whether {@code this} {@link TaskGraph} contains the given - * {@link ITaskAdapter} or an instance of it. + * Checks whether {@code this} {@link TaskGraph} contains the given {@link ITaskAdapter} or an + * instance of it. */ boolean containsTask(ITaskAdapter<?> task); /** - * Checks whether {@code this} {@link TaskGraph} contains any of the given - * {@link ITaskAdapter}s. + * Checks whether {@code this} {@link TaskGraph} contains any of the given {@link ITaskAdapter} + * s. */ boolean containsAnyTaskOf(Collection<ITaskAdapter<?>> taskSet); @@ -112,6 +112,11 @@ public interface TaskGraph { /** Registers a fault detector for a given task. */ void addFaultDetector(ITaskAdapter<?> deployableComponent, FaultDetector faultDetector); + /** Returns the fault detector corresponding to the given Task and ID. */ + // TODO: Remove, bad design. Fault detectors are tasks and should be added in a decoder to + // another phenotype. + FaultDetector getFaultDetector(ITaskAdapter<?> task, int id); + /** Returns a random fault detector index / ID for the given task. */ int getRandomFaultDetectorId(ITaskAdapter<?> deployableComponent); } diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/comm/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/comm/.ratings index 6f62fe77b75bd999f31626543f2011aea63b198d..556bab8b7d4549fd53310cac26b0e4876b9354c2 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/comm/.ratings +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/comm/.ratings @@ -1,2 +1,2 @@ Message.java d4b5432ef03c3630ad1cbb8bd12b867a851f1559 RED -MessageGenerator.java 13d7678c5043b61a3306ffc50f8af97842ae0817 RED +MessageGenerator.java 133db9b92b2ed440d0f0309e748d459940d17b42 RED diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/comm/MessageGenerator.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/comm/MessageGenerator.java index 13d7678c5043b61a3306ffc50f8af97842ae0817..133db9b92b2ed440d0f0309e748d459940d17b42 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/comm/MessageGenerator.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/comm/MessageGenerator.java @@ -26,7 +26,6 @@ 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.TaskMappingEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.TaskMappingEntry; -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.encoding.taskmapping.instantiatedmapping.InstantiatedTaskMappingEntry; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IExecutionUnitAdapter; @@ -47,8 +46,7 @@ public class MessageGenerator<S extends TaskMappingEntry<ITaskAdapter<?>, Partit * Generates messages from the given {#link encoding}. This methods evaluates the {#link * encoding} */ - public Collection<Message> generateMessages(T encoding, - AbstractTaskGraphEncoding<AbstractTaskMappingEncoding, ?> atgEnc) { + public Collection<Message> generateMessages(T encoding, AbstractTaskGraphEncoding atgEnc) { Collection<Message> generatedMessages = new HashSet<Message>(); // TODO: represent the signals in the task graph: do not use the systemModelAdapter here. @@ -61,8 +59,7 @@ public class MessageGenerator<S extends TaskMappingEntry<ITaskAdapter<?>, Partit TaskGraph tg = atgEnc.getTaskGraphOf(senderComponent); - @SuppressWarnings("unchecked") Collection<ISignalAdapter<?, ?>> emittedMessages = - new ArrayList<>(); + Collection<ISignalAdapter<?, ?>> emittedMessages = new ArrayList<>(); tg.getGraph().outgoingEdgesOf(senderComponent) .forEach(e -> emittedMessages.add(e.getSignalAdapter())); @@ -78,9 +75,10 @@ public class MessageGenerator<S extends TaskMappingEntry<ITaskAdapter<?>, Partit // generic type reflection will be required! Collection<S> mappingEntriesOfSuccesors = getSuccessorMappingEntries(encoding, currentMessageAdapter); - Message generatedMessage = generateMessageForSenderEntry(currentMessageAdapter, - (InstantiatedTaskMappingEntry)entry, mappingEntriesOfSuccesors, - allIsoCommConstr, otherIsoCommConstr); + Message generatedMessage = + generateMessageForSenderEntry(currentMessageAdapter, + (InstantiatedTaskMappingEntry)entry, mappingEntriesOfSuccesors, + allIsoCommConstr, otherIsoCommConstr); if(generatedMessage != null) { generatedMessages.add(generatedMessage); } @@ -94,8 +92,8 @@ public class MessageGenerator<S extends TaskMappingEntry<ITaskAdapter<?>, Partit * Creates a {@link Collection} which contains all {@link IMappingEntry}s that are causally * depend on the given sender {@link ITaskAdapter}. */ - private Collection<S> getSuccessorMappingEntries(T encoding, - ISignalAdapter<?, ?> emittedMessage) { + private Collection<S> + getSuccessorMappingEntries(T encoding, ISignalAdapter<?, ?> emittedMessage) { Collection<S> mappingEntriesOfSuccesors = new HashSet<S>(); Collection<ITaskAdapter<?>> realSuccessorComponents = new HashSet<>(); @@ -111,8 +109,9 @@ public class MessageGenerator<S extends TaskMappingEntry<ITaskAdapter<?>, Partit } for(ITaskAdapter<?> successorComponent : realSuccessorComponents) { - Collection<ITaskAdapter<?>> encComps = filterSet(encoding.getRequesters(), - c -> c.getObject() == successorComponent.getObject()); + Collection<ITaskAdapter<?>> encComps = + filterSet(encoding.getRequesters(), + c -> c.getObject() == successorComponent.getObject()); for(ITaskAdapter<?> encComp : encComps) { mappingEntriesOfSuccesors.addAll(encoding.getMappingEntriesOf(encComp)); } @@ -158,9 +157,9 @@ public class MessageGenerator<S extends TaskMappingEntry<ITaskAdapter<?>, Partit * Returns whether the given {@link IMappingEntry} is included in any of the given * {@link InternalIsolatedCommunicationSet}s. */ - private boolean isPartOfIsolationCommConstraint( - Collection<InternalIsolatedCommunicationSet> isoComm, - InstantiatedTaskMappingEntry entry) { + private boolean + isPartOfIsolationCommConstraint(Collection<InternalIsolatedCommunicationSet> isoComm, + InstantiatedTaskMappingEntry entry) { AbstractTaskMappingEntry actualEntry = entry.getAssociatedElement(AbstractTaskMappingEntry.class); @@ -177,8 +176,8 @@ public class MessageGenerator<S extends TaskMappingEntry<ITaskAdapter<?>, Partit * Returns a collection of all {@link InternalIsolatedCommunicationSet} constraints that do not * include the given {@link IMappingEntry}. */ - private Collection<InternalIsolatedCommunicationSet> - getOtherIsolationCommConstraints(T outGenotype, S entry) { + private Collection<InternalIsolatedCommunicationSet> getOtherIsolationCommConstraints( + T outGenotype, S entry) { // TODO: here we use the knowledge that we have instantiated task mapping entries. IMappingEntry<?, ?> actualEntry = entry.getAssociatedElement(AbstractTaskMappingEntry.class); diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/.ratings index e8d483c7ac38361fd611edb7ed86fd49d0916091..f5ec5ddc26775bd11a005fee3a5c6be9e1a3515f 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/.ratings +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/.ratings @@ -1,2 +1,2 @@ ScheduleRuntimeException.java 88fefc07c8fdffc468fb8b49ccc4a38864823277 RED -SchedulerBase.java e6e6cde677b0435fd247b80efd8cd9c662a2ba51 RED +SchedulerBase.java 0420f98eacc569e8d3c83408326be98bc2a7c0cc RED diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/SchedulerBase.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/SchedulerBase.java index e6e6cde677b0435fd247b80efd8cd9c662a2ba51..0420f98eacc569e8d3c83408326be98bc2a7c0cc 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/SchedulerBase.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/SchedulerBase.java @@ -18,10 +18,8 @@ package org.fortiss.af3.exploration.alg.dse.sysmodel.sched; import java.util.Collection; import java.util.HashMap; import java.util.Map; -import java.util.stream.Collectors; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ITaskAdapter; -import org.fortiss.af3.exploration.model.ExplorationSpecification; import org.fortiss.af3.exploration.model.ExplorationTarget; import org.fortiss.af3.exploration.model.time.DeadlineConstraint; @@ -44,10 +42,11 @@ public class SchedulerBase { protected Map<DeadlineConstraint, ITaskAdapter<?>> deadlineTargetComponent; /** Constructs a scheduler for a given input model. */ - public SchedulerBase(ExplorationSpecification expSpec) { - this.deadlines = - expSpec.getTargets().stream().filter(t -> (t instanceof DeadlineConstraint)) - .map(DeadlineConstraint.class::cast).collect(Collectors.toList()); + // TODO: Readd deadline constraints. + public SchedulerBase() { + // this.deadlines = + // expSpec.getTargets().stream().filter(t -> (t instanceof DeadlineConstraint)) + // .map(DeadlineConstraint.class::cast).collect(Collectors.toList()); componentDeadlineSourceMap = new HashMap<ITaskAdapter<?>, DeadlineConstraint>(); deadlineTargetComponent = new HashMap<DeadlineConstraint, ITaskAdapter<?>>(); @@ -56,10 +55,8 @@ public class SchedulerBase { } /** - * Creates two maps that - * <li>relate a {@link ITaskAdapter} which is defined as - * the "source" of a deadline to its {@link DeadlineConstraint} and - * <li>a map that relates + * Creates two maps that <li>relate a {@link ITaskAdapter} which is defined as the "source" of a + * deadline to its {@link DeadlineConstraint} and <li>a map that relates * {@link DeadlineConstraint}s with its "target" {@link ITaskAdapter}s. */ // private void createComponentDeadlineMap() { diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/comm/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/comm/.ratings index 1ab65ac657b91454b4095d566800988fefd16e95..0ae5ff5229c06a583edb6eeebca2c1f0c32b18f6 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/comm/.ratings +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/comm/.ratings @@ -1 +1 @@ -TDMABusScheduler.java 20b532bc5028b4ab0e117f12001d9138b4ee00d8 RED +TDMABusScheduler.java 17daaf222cd6923b20b8091a38a02c9f081b8585 RED diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/comm/TDMABusScheduler.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/comm/TDMABusScheduler.java index 20b532bc5028b4ab0e117f12001d9138b4ee00d8..17daaf222cd6923b20b8091a38a02c9f081b8585 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/comm/TDMABusScheduler.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/comm/TDMABusScheduler.java @@ -48,7 +48,6 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.comm.Message; import org.fortiss.af3.exploration.alg.dse.sysmodel.mapping.comm.IMessageRouter; import org.fortiss.af3.exploration.alg.dse.sysmodel.mapping.comm.ShortestPathRouter; import org.fortiss.af3.exploration.alg.dse.sysmodel.sched.SchedulerBase; -import org.fortiss.af3.exploration.model.ExplorationSpecification; import org.jgrapht.DirectedGraph; import org.jgrapht.Graphs; import org.jgrapht.graph.DefaultEdge; @@ -72,14 +71,13 @@ public class TDMABusScheduler<S extends InstantiatedTaskMappingEntry, T extends private IMessageRouter messageRouter; /** Constructs a {@link TDMABusScheduler} for a given input model. */ - public TDMABusScheduler(ExplorationSpecification expSpec) { - super(expSpec); + public TDMABusScheduler() { this.messageRouter = new ShortestPathRouter(); } /** Add simple TDMA bus schedule / communication time to a pure task schedule. */ public void schedule(StrictTTSchedule<S, T> schedule, Collection<Message> generatedMessages, - InstantiatedAcyclicTaskGraphEncoding<S, ?> acycItgEnc, + InstantiatedAcyclicTaskGraphEncoding<S> acycItgEnc, PlatformCommunicationGraphEncoding pcgEncoding) { Multimap<TimeSlot, Message> emitableMessagesPerSlot = HashMultimap.create(); Map<TimeSlot, Integer> reqRecvMsgsPerSlot = new HashMap<TimeSlot, Integer>(); @@ -159,8 +157,7 @@ public class TDMABusScheduler<S extends InstantiatedTaskMappingEntry, T extends messageGraph.edgesOf(currentMessage.getSenderTimeSlot().getResource()); // Here, we assume that a message may have only one source element. This assumption fits // to multi-cast messaging and the principle how new messages are generated. - assert senderResourceEdges - .size() == 1 : "Each message must have exactly one source slot!"; + assert senderResourceEdges.size() == 1 : "Each message must have exactly one source slot!"; ICommunicationResourceAdapter<?> communicationResource = (ICommunicationResourceAdapter<?>)messageGraph .getEdgeTarget(senderResourceEdges.iterator().next()); @@ -183,13 +180,15 @@ public class TDMABusScheduler<S extends InstantiatedTaskMappingEntry, T extends // Determine and generate successor messages from the current one. // TODO: remove dependency on the TimeSlot Collection<TimeSlot> reachedReceiverSlots = new HashSet<TimeSlot>(); - Collection<Message> succMessages = generateSuccessorMessages(schedule, currentMessage, - messageGraph, communicationResource, communicationSlot, messageRoutes, - reqRecvMsgsPerSlot, reachedReceiverSlots); + Collection<Message> succMessages = + generateSuccessorMessages(schedule, currentMessage, messageGraph, + communicationResource, communicationSlot, messageRoutes, + reqRecvMsgsPerSlot, reachedReceiverSlots); messageReadyQueue.addAll(succMessages); // The ready and release queues are updated for the next iteration. - List<TimeSlot> readySenderSlots = findNextSenderSlots(reachedReceiverSlots, - reqRecvMsgsPerSlot, emitableMessagesPerSlot); + List<TimeSlot> readySenderSlots = + findNextSenderSlots(reachedReceiverSlots, reqRecvMsgsPerSlot, + emitableMessagesPerSlot); updateMessageQueues(readySenderSlots, emitableMessagesPerSlot, messageReleaseQueue, messageReadyQueue); } @@ -292,8 +291,8 @@ public class TDMABusScheduler<S extends InstantiatedTaskMappingEntry, T extends messageRouter.getRemainingMessageGraphs(currentMessage, communicationResource, currentMessageGraph); // Generate a new message for each direct successor in the communication graph. - for(IResourceAdapter<?> nextCommunicationResource : Graphs - .successorListOf(currentMessageGraph, communicationResource)) { + for(IResourceAdapter<?> nextCommunicationResource : Graphs.successorListOf( + currentMessageGraph, communicationResource)) { // Check, if a new message is required, i.e. the current direct successor is no receiver // of the message. if(!currentMessageReceiverResources.contains(nextCommunicationResource)) { @@ -310,8 +309,9 @@ public class TDMABusScheduler<S extends InstantiatedTaskMappingEntry, T extends // Finally, generate the message. if(!successorReceiverSlots.isEmpty()) { - Message successorMessage = new Message(currentMessage.getSignalAdapter(), - communicationSlot, successorReceiverSlots); + Message successorMessage = + new Message(currentMessage.getSignalAdapter(), communicationSlot, + successorReceiverSlots); generatedMessages.add(successorMessage); messageRoutes.put(successorMessage, successorRoute); } @@ -428,16 +428,18 @@ public class TDMABusScheduler<S extends InstantiatedTaskMappingEntry, T extends // time is added to avoid time slots with a duration of zero. double resourceWCTT = 0.0; if(communicationResource instanceof ITransmissionUnitAdapter) { - resourceWCTT = ((ITransmissionUnitAdapter<?>)communicationResource) - .getTransmissionDuration(message.getMessageSize() / bitsPerMByte); + resourceWCTT = + ((ITransmissionUnitAdapter<?>)communicationResource) + .getTransmissionDuration(message.getMessageSize() / bitsPerMByte); } else if(communicationResource instanceof IGatewayUnitAdapter) { resourceWCTT = ((IGatewayUnitAdapter<?>)communicationResource).getWCFT(); } // resourceWCTT = Math.max(resourceWCTT, minTransmissionDuration); // Create a new slot for the message. - TimeSlot communicationSlot = new TimeSlot(message, communicationResource, messageStartTime, - messageStartTime + resourceWCTT); + TimeSlot communicationSlot = + new TimeSlot(message, communicationResource, messageStartTime, messageStartTime + + resourceWCTT); // Insert the created slot into the schedule of the communication resource. if(schedule.getResourceSchedule(communicationResource) != null) { @@ -545,8 +547,9 @@ public class TDMABusScheduler<S extends InstantiatedTaskMappingEntry, T extends // to shifting other TimeSlots on the same resource. if(shiftTime > 0) { // Shift slots of causality violating slot. - HashSet<TimeSlot> shiftedSlots = shiftResourceSlots(successorSlot, shiftTime, - schedule.getResourceSchedule(successorSlot.getResource())); + HashSet<TimeSlot> shiftedSlots = + shiftResourceSlots(successorSlot, shiftTime, + schedule.getResourceSchedule(successorSlot.getResource())); assert (schedule.getResourceSchedule(successorSlot.getResource()) .validateResourceSchedule()); diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/proc/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/proc/.ratings index 53bbb73e4a6efdfddcefd705960ed7cfbb9fa7b3..a32ee0965e667e07fc6f1575050f5884d3f563bc 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/proc/.ratings +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/proc/.ratings @@ -1,3 +1,3 @@ -EDFSchedulerBase.java a8da54ef6ed72e0b7c13f21910e4d148f918d2a1 RED -FailSilentEDFScheduler.java 6dcfc322b509231a9d621c8f6277ee411df59c5f RED -FaultDetectionVotingEDFScheduler.java af93ad1d506c88e5969dfde32523e0bd5956bc2b RED +EDFSchedulerBase.java 3122fc970dc82626d8b03da92053a0e01730d212 RED +FailSilentEDFScheduler.java fad92e0152096cbb980d94aba1cab2d0ac9887a5 RED +FaultDetectionVotingEDFScheduler.java e94d4042ebf5f909048e6eabd23eed52b98ad2f1 RED diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/proc/EDFSchedulerBase.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/proc/EDFSchedulerBase.java index a8da54ef6ed72e0b7c13f21910e4d148f918d2a1..3122fc970dc82626d8b03da92053a0e01730d212 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/proc/EDFSchedulerBase.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/proc/EDFSchedulerBase.java @@ -46,7 +46,6 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.TaskGraph; import org.fortiss.af3.exploration.alg.dse.sysmodel.sched.ScheduleRuntimeException; import org.fortiss.af3.exploration.alg.dse.sysmodel.sched.SchedulerBase; import org.fortiss.af3.exploration.alg.dse.sysmodel.sched.comm.TDMABusScheduler; -import org.fortiss.af3.exploration.model.ExplorationSpecification; import org.fortiss.af3.exploration.model.time.DeadlineConstraint; import org.jgrapht.Graphs; import org.jgrapht.traverse.TopologicalOrderIterator; @@ -207,13 +206,13 @@ public abstract class EDFSchedulerBase<S extends InstantiatedTaskMappingEntry, T * References the {@link TaskMappingEncoding} for which {@code this} {@link Comparator} is * defined. */ - private InstantiatedAcyclicTaskGraphEncoding<S, ?> acycItgEnc; + private InstantiatedAcyclicTaskGraphEncoding<S> acycItgEnc; /** * Constructs a {@link SchedulingObjectComparator} which is subject to the given * {@link TaskMappingEncoding}. */ - SchedulingObjectComparator(InstantiatedAcyclicTaskGraphEncoding<S, ?> acycItgEnc) { + SchedulingObjectComparator(InstantiatedAcyclicTaskGraphEncoding<S> acycItgEnc) { this.acycItgEnc = acycItgEnc; } @@ -242,24 +241,19 @@ public abstract class EDFSchedulerBase<S extends InstantiatedTaskMappingEntry, T // TODO: This used to be based on TaskGraph.index. Check if the implementation based // on the {@link TaskGraph}s {@link #hashCode} is also correct. - return Integer.compare( - acycItgEnc.getTaskGraphOf(obj1.deployableComponent).hashCode(), - acycItgEnc.getTaskGraphOf(obj2.deployableComponent).hashCode()); + return Integer + .compare(acycItgEnc.getTaskGraphOf(obj1.deployableComponent).hashCode(), + acycItgEnc.getTaskGraphOf(obj2.deployableComponent).hashCode()); } } } - /** Constructs a simple EDF scheduler for a given exploration run */ - public EDFSchedulerBase(ExplorationSpecification expSpec) { - super(expSpec); - } - /** * Creates and returns a release queue for the given {@link TaskMappingEncoding}. A release * queue contains those {@link SchedulingObject}s which remain to be scheduled. */ - private synchronized SortedSet<SchedulingObject> - createReleaseQueue(InstantiatedAcyclicTaskGraphEncoding<S, ?> acycItgEnc) { + private synchronized SortedSet<SchedulingObject> createReleaseQueue( + InstantiatedAcyclicTaskGraphEncoding<S> acycItgEnc) { SchedulingObjectComparator EDFTopologicalComparator = new SchedulingObjectComparator(acycItgEnc); TreeSet<SchedulingObject> releaseQueue = @@ -279,13 +273,14 @@ public abstract class EDFSchedulerBase<S extends InstantiatedTaskMappingEntry, T double releasetime = i * taskGraph.getPeriod(); double effectiveDeadline = releasetime + taskGraph.getPeriod(); - SchedulingObject sobject = new SchedulingObject(EDFTopologicalComparator, - deployableComponent, releasetime, effectiveDeadline); + SchedulingObject sobject = + new SchedulingObject(EDFTopologicalComparator, deployableComponent, + releasetime, effectiveDeadline); // set the topological index sobject.index = index++; // add the predecessor list - for(SignalAdapterWeightedEdge edge : taskGraph.getGraph() - .incomingEdgesOf(deployableComponent)) { + for(SignalAdapterWeightedEdge edge : taskGraph.getGraph().incomingEdgesOf( + deployableComponent)) { ITaskAdapter<?> sourceComponent = taskGraph.getGraph().getEdgeSource(edge); // look into the previous allocated scheduling objects for(SchedulingObject pred : localReleaseQueue) { @@ -323,7 +318,7 @@ public abstract class EDFSchedulerBase<S extends InstantiatedTaskMappingEntry, T * <li>the tasks within the task graph are scheduled according to topological order</li> * </ul> */ - public void schedule(InstantiatedAcyclicTaskGraphEncoding<S, ?> acycItgEnc, + public void schedule(InstantiatedAcyclicTaskGraphEncoding<S> acycItgEnc, PartitionMappingEncoding partEnc, T taskMapping, StrictTTSchedule<S, T> schedule) { SortedSet<SchedulingObject> releaseQueue = createReleaseQueue(acycItgEnc); // Create copy of release queue @@ -369,8 +364,9 @@ public abstract class EDFSchedulerBase<S extends InstantiatedTaskMappingEntry, T while(!readyQueue.isEmpty()) { // Add and resort ready queue acc. to deadlines (they can appear dynamically after the // execution of another component) - Collection<ITaskAdapter<?>> componentsWithDeadlines = Sets.intersection( - schedulingComponentMap.keySet(), componentDeadlineSourceMap.keySet()); + Collection<ITaskAdapter<?>> componentsWithDeadlines = + Sets.intersection(schedulingComponentMap.keySet(), + componentDeadlineSourceMap.keySet()); if(!componentsWithDeadlines.isEmpty()) { for(ITaskAdapter<?> currentDeadlineComponent : componentsWithDeadlines) { // Retrieve the IDeployableComponentAdapter that is the target of the current @@ -404,15 +400,17 @@ public abstract class EDFSchedulerBase<S extends InstantiatedTaskMappingEntry, T // Pick first task in the ready queue... SchedulingObject schedulingObject = readyQueue.first(); // ...and schedule it - Apfloat finishTime = scheduleObject(schedulingObject, acycItgEnc, partEnc, taskMapping, - schedule, currenttimes, mappingEntryToTimeSlot, generatedTimeSlots); + Apfloat finishTime = + scheduleObject(schedulingObject, acycItgEnc, partEnc, taskMapping, schedule, + currenttimes, mappingEntryToTimeSlot, generatedTimeSlots); // Check if any successor becomes ready List<SchedulingObject> toBeRemoved = new ArrayList<SchedulingObject>(); for(SchedulingObject object : releaseQueueLocal) { if(object.predecessors.contains(schedulingObject)) { - object.ready = (object.ready > finishTime.doubleValue() ? object.ready - : finishTime.doubleValue()); + object.ready = + (object.ready > finishTime.doubleValue() ? object.ready : finishTime + .doubleValue()); object.unscheduledPredecessors.remove(schedulingObject); if(object.unscheduledPredecessors.isEmpty()) { toBeRemoved.add(object); @@ -429,8 +427,8 @@ public abstract class EDFSchedulerBase<S extends InstantiatedTaskMappingEntry, T for(SchedulingObject schObj : releaseQueueLocal) { Double compPeriod = schObj.deployableComponent.getPeriod(); if(compPeriod != null) { - throw new RuntimeException( - "The Components " + releaseQueueLocal + " were not scheduled..."); + throw new RuntimeException("The Components " + releaseQueueLocal + + " were not scheduled..."); } } } @@ -441,7 +439,7 @@ public abstract class EDFSchedulerBase<S extends InstantiatedTaskMappingEntry, T /** Inserts a single {@link SchedulingObject} into the {@link StrictTTSchedule} */ private Apfloat scheduleObject(SchedulingObject schedulingObject, - InstantiatedAcyclicTaskGraphEncoding<S, ?> acycItgEnc, PartitionMappingEncoding partEnc, + InstantiatedAcyclicTaskGraphEncoding<S> acycItgEnc, PartitionMappingEncoding partEnc, T encoding, StrictTTSchedule<S, T> schedule, Map<IExecutionUnitAdapter<?>, Apfloat> currentTimeMap, Map<S, TimeSlot> mappingEntryToTimeSlot, @@ -478,8 +476,9 @@ public abstract class EDFSchedulerBase<S extends InstantiatedTaskMappingEntry, T } // Add execution time - Apfloat deployableComponentExecutionTime = getExecutionTime(encoding, acycItgEnc, - schedulingObject.deployableComponent, entry); + Apfloat deployableComponentExecutionTime = + getExecutionTime(encoding, acycItgEnc, schedulingObject.deployableComponent, + entry); if(deployableComponentExecutionTime.compareTo(Apcomplex.ZERO) == -1) { throw new ScheduleRuntimeException(schedule, "Could not determine the runtime execution time for the Component " + @@ -500,9 +499,10 @@ public abstract class EDFSchedulerBase<S extends InstantiatedTaskMappingEntry, T // Build time slot long iteration = java.lang.Math.round(schedulingObject.release / taskGraph.getPeriod()); iteration = iteration >= 0 ? iteration : 0; - TimeSlot deployableComponentSlot = schedule.createTimeSlot(entry, partition, - predecessorSlots, startTime.floatValue(), - deployableComponentEndTime.floatValue(), iteration); + TimeSlot deployableComponentSlot = + schedule.createTimeSlot(entry, partition, predecessorSlots, + startTime.floatValue(), deployableComponentEndTime.floatValue(), + iteration); // Register the generated TimeSlot at its predecessors. for(SchedulingObject predecessor : schedulingObject.getPredecessors()) { @@ -521,9 +521,10 @@ public abstract class EDFSchedulerBase<S extends InstantiatedTaskMappingEntry, T // the current deployableComponentSlot. // Add the information about the sender and the receiver TimeSlots which contain the // start and end times of the Message. - Apfloat delay = registerIncomingMessagesWithSchedule(encoding, acycItgEnc, schedule, - mappingEntryToTimeSlot, schedulingObject.deployableComponent, startTime, - entry.getTarget(), iteration, deployableComponentSlot); + Apfloat delay = + registerIncomingMessagesWithSchedule(encoding, acycItgEnc, schedule, + mappingEntryToTimeSlot, schedulingObject.deployableComponent, + startTime, entry.getTarget(), iteration, deployableComponentSlot); deployableComponentSlot.shift(delay.floatValue()); deployableComponentEndTime = @@ -544,7 +545,7 @@ public abstract class EDFSchedulerBase<S extends InstantiatedTaskMappingEntry, T /** Returns the execution time for the given {@link ITaskAdapter}. */ protected abstract Apfloat getExecutionTime( TaskMappingEncoding<?, ? extends TaskMappingEntry<?, ?>> encoding, - InstantiatedAcyclicTaskGraphEncoding<S, ?> acycItgEnc, + InstantiatedAcyclicTaskGraphEncoding<S> acycItgEnc, ITaskAdapter<?> deployableComponent, S entry); /** @@ -561,7 +562,7 @@ public abstract class EDFSchedulerBase<S extends InstantiatedTaskMappingEntry, T * communication, etc. */ protected abstract Apfloat registerIncomingMessagesWithSchedule(T encoding, - InstantiatedAcyclicTaskGraphEncoding<S, ?> acycItgEnc, StrictTTSchedule<S, T> schedule, + InstantiatedAcyclicTaskGraphEncoding<S> acycItgEnc, StrictTTSchedule<S, T> schedule, Map<S, TimeSlot> mappingEntryToTimeSlot, ITaskAdapter<?> deployableComponent, Apfloat starttime, IExecutionUnitAdapter<?> deploymentTarget, long iteration, TimeSlot slot); diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/proc/FailSilentEDFScheduler.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/proc/FailSilentEDFScheduler.java index 6dcfc322b509231a9d621c8f6277ee411df59c5f..fad92e0152096cbb980d94aba1cab2d0ac9887a5 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/proc/FailSilentEDFScheduler.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/proc/FailSilentEDFScheduler.java @@ -28,20 +28,14 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.solution.StrictTTSchedu import org.fortiss.af3.exploration.alg.dse.backend.opt4j.solution.TimeSlot; 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.model.ExplorationSpecification; /** * Base class for EDF task schedulers * * @author huang, barner */ -public class FailSilentEDFScheduler - extends EDFSchedulerBase<FailSilentTaskMappingEntry, FailSilentTaskMappingEncoding> { - - /** Constructs a simple EDF scheduler for a given exploration run */ - public FailSilentEDFScheduler(ExplorationSpecification expSpec) { - super(expSpec); - } +public class FailSilentEDFScheduler extends + EDFSchedulerBase<FailSilentTaskMappingEntry, FailSilentTaskMappingEncoding> { /** * Returns the execution time for the current @@ -51,17 +45,16 @@ public class FailSilentEDFScheduler @Override protected Apfloat getExecutionTime( TaskMappingEncoding<?, ? extends TaskMappingEntry<?, ?>> encoding, - InstantiatedAcyclicTaskGraphEncoding<FailSilentTaskMappingEntry, ?> acycItgEnc, - ITaskAdapter<?> deployableComponent, FailSilentTaskMappingEntry entry) { - Apfloat executiontime = - new Apfloat(deployableComponent.getWcet(entry.getTarget()), DOUBLE_PRECISION); + InstantiatedAcyclicTaskGraphEncoding<FailSilentTaskMappingEntry> acycItgEnc, + ITaskAdapter<?> task, FailSilentTaskMappingEntry entry) { + Apfloat executiontime = new Apfloat(task.getWcet(entry.getTarget()), DOUBLE_PRECISION); return executiontime; } /** {@inheritDoc} */ @Override protected Apfloat registerIncomingMessagesWithSchedule(FailSilentTaskMappingEncoding encoding, - InstantiatedAcyclicTaskGraphEncoding<FailSilentTaskMappingEntry, ?> acycItgEnc, + InstantiatedAcyclicTaskGraphEncoding<FailSilentTaskMappingEntry> acycItgEnc, StrictTTSchedule<FailSilentTaskMappingEntry, FailSilentTaskMappingEncoding> schedule, Map<FailSilentTaskMappingEntry, TimeSlot> mappingEntryToTimeSlot, ITaskAdapter<?> deployableComponent, Apfloat starttime, diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/proc/FaultDetectionVotingEDFScheduler.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/proc/FaultDetectionVotingEDFScheduler.java index af93ad1d506c88e5969dfde32523e0bd5956bc2b..e94d4042ebf5f909048e6eabd23eed52b98ad2f1 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/proc/FaultDetectionVotingEDFScheduler.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/proc/FaultDetectionVotingEDFScheduler.java @@ -30,21 +30,16 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ITaskAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.AcyclicTaskGraph; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.SignalAdapterWeightedEdge; import org.fortiss.af3.exploration.alg.dse.sysmodel.faultmodel.FaultDetector; -import org.fortiss.af3.exploration.model.ExplorationSpecification; /** * Base class for EDF task schedulers * * @author huang, barner */ -public class FaultDetectionVotingEDFScheduler extends +public class FaultDetectionVotingEDFScheduler + extends EDFSchedulerBase<FaultDetectionVotingTaskMappingEntry, FaultDetectionVotingTaskMappingEncoding> { - /** Constructs a simple EDF scheduler for a given exploration run */ - public FaultDetectionVotingEDFScheduler(ExplorationSpecification expSpec) { - super(expSpec); - } - /** * {@inheritDoc}. * <p> @@ -54,13 +49,15 @@ public class FaultDetectionVotingEDFScheduler extends * </p> */ @Override - protected Apfloat registerIncomingMessagesWithSchedule( - FaultDetectionVotingTaskMappingEncoding encoding, - InstantiatedAcyclicTaskGraphEncoding<FaultDetectionVotingTaskMappingEntry, ?> acycItgEnc, - StrictTTSchedule<FaultDetectionVotingTaskMappingEntry, FaultDetectionVotingTaskMappingEncoding> schedule, - Map<FaultDetectionVotingTaskMappingEntry, TimeSlot> mappingEntryToTimeSlot, - ITaskAdapter<?> receiver, Apfloat deployableComponentStartTime, - IExecutionUnitAdapter<?> deploymentTarget, long iteration, TimeSlot slot) { + protected + Apfloat + registerIncomingMessagesWithSchedule( + FaultDetectionVotingTaskMappingEncoding encoding, + InstantiatedAcyclicTaskGraphEncoding<FaultDetectionVotingTaskMappingEntry> acycItgEnc, + StrictTTSchedule<FaultDetectionVotingTaskMappingEntry, FaultDetectionVotingTaskMappingEncoding> schedule, + Map<FaultDetectionVotingTaskMappingEntry, TimeSlot> mappingEntryToTimeSlot, + ITaskAdapter<?> receiver, Apfloat deployableComponentStartTime, + IExecutionUnitAdapter<?> deploymentTarget, long iteration, TimeSlot slot) { Apfloat voterDelay = new Apfloat(0, DOUBLE_PRECISION); @@ -91,9 +88,10 @@ public class FaultDetectionVotingEDFScheduler extends // TODO: Create a class that represents voters similar to // IDeployableComponentAdapter. - @SuppressWarnings("unused") TimeSlot voterSlot = schedule.createVoterSlot(null, - deploymentTarget, deployableComponentStartTime.add(voterDelay).floatValue(), - tempTimp.floatValue(), iteration); + @SuppressWarnings("unused") TimeSlot voterSlot = + schedule.createVoterSlot(null, deploymentTarget, + deployableComponentStartTime.add(voterDelay).floatValue(), + tempTimp.floatValue(), iteration); } } return voterDelay; @@ -103,7 +101,7 @@ public class FaultDetectionVotingEDFScheduler extends @Override protected Apfloat getExecutionTime( TaskMappingEncoding<?, ? extends TaskMappingEntry<?, ?>> encoding, - InstantiatedAcyclicTaskGraphEncoding<FaultDetectionVotingTaskMappingEntry, ?> acycItgEnc, + InstantiatedAcyclicTaskGraphEncoding<FaultDetectionVotingTaskMappingEntry> acycItgEnc, ITaskAdapter<?> deployableComponent, FaultDetectionVotingTaskMappingEntry entry) { // Base execution time @@ -111,8 +109,9 @@ public class FaultDetectionVotingEDFScheduler extends new Apfloat(deployableComponent.getWcet(entry.getTarget()), DOUBLE_PRECISION); // Scale with fault-detector overhead - FaultDetector detector = acycItgEnc.getTaskGraphOf(deployableComponent) - .getFaultDetector(deployableComponent, entry.getFaultDetectorID()); + FaultDetector detector = + acycItgEnc.getTaskGraphOf(deployableComponent).getFaultDetector( + deployableComponent, entry.getFaultDetectorID()); Apfloat overhead = new Apfloat(1.0 + detector.getOverhead(), DOUBLE_PRECISION); executionTime = executionTime.multiply(overhead); diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/exception/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/exception/.ratings index 2bfbaaec8b4619178a6a6ff122570dd2ba230143..76d2a5599469e6686f78b55b34f1db4a005514cd 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/exception/.ratings +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/exception/.ratings @@ -1,7 +1,8 @@ ConstraintGenerationException.java ea88d94abb652ec0c5788cb9f9856b866e7abf09 YELLOW ExplorationException.java 34ce8eafde9abc9daa19a102a4015500101e58a1 YELLOW +ExplorationRuntimeException.java 9c461aa7fe1fdafa3bef739a8025215270e4b34a YELLOW ExplorationServiceException.java 94202232e25ac039ebcad0ee977e37c5a317111a YELLOW -ExplorationServiceRuntimeException.java 05f0851a3a233aeeec551d90b8c8b155daca2781 YELLOW +ExplorationServiceRuntimeException.java 92e5f474c68852819921a2c4110a13568609f385 YELLOW InvalidModelException.java f5ef624ea79418ee5f6bc6acea9126094ec27c49 YELLOW InvalidPlatformModelException.java b0e93b8e9b703dc33825c71d7bc542abda83a2ef YELLOW InvalidTimingModelException.java 014945b26fffef745844be500ef4c2efe0bc9a27 YELLOW diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/ArchExpSubDecoder.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/exception/ExplorationRuntimeException.java similarity index 67% rename from org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/ArchExpSubDecoder.java rename to org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/exception/ExplorationRuntimeException.java index 8878133e8b65858b4cd7cedd243d49d391066323..9c461aa7fe1fdafa3bef739a8025215270e4b34a 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/ArchExpSubDecoder.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/exception/ExplorationRuntimeException.java @@ -1,5 +1,5 @@ /*-------------------------------------------------------------------------+ -| Copyright 2015 fortiss GmbH | +| Copyright 2016 fortiss GmbH | | | | Licensed under the Apache License, Version 2.0 (the "License"); | | you may not use this file except in compliance with the License. | @@ -13,17 +13,22 @@ | See the License for the specific language governing permissions and | | limitations under the License. | +--------------------------------------------------------------------------*/ -package org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem; - -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.genotype.ComposableGenotype; -import org.opt4j.core.problem.Decoder; +package org.fortiss.af3.exploration.alg.exception; /** - * Marker interface for {@link Decoder}s of {@link ComposableGenotype}s of an architectural - * exploration problem. + * General DSE Exception. * * @author diewald */ -public interface ArchExpSubDecoder { - // Marker interface. +public class ExplorationRuntimeException extends RuntimeException { + + /** General DSE exception taking an error message. */ + public ExplorationRuntimeException(String message) { + super("DSE: " + message); + } + + /** General DSE exception taking an error message and an wrapped exception. */ + public ExplorationRuntimeException(String message, Exception e) { + super("DSE: " + message, e); + } } diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/exception/ExplorationServiceRuntimeException.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/exception/ExplorationServiceRuntimeException.java index 05f0851a3a233aeeec551d90b8c8b155daca2781..92e5f474c68852819921a2c4110a13568609f385 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/exception/ExplorationServiceRuntimeException.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/exception/ExplorationServiceRuntimeException.java @@ -23,7 +23,7 @@ import org.fortiss.af3.exploration.alg.service.IExplorationService; * * @author diewald */ -public class ExplorationServiceRuntimeException extends RuntimeException { +public class ExplorationServiceRuntimeException extends ExplorationRuntimeException { /** * Constructs an {@link ExplorationServiceRuntimeException} with information about the failed @@ -31,7 +31,7 @@ public class ExplorationServiceRuntimeException extends RuntimeException { */ public ExplorationServiceRuntimeException(Class<? extends IExplorationService> serviceType, String msg) { - super("DSE: " + serviceType.getSimpleName() + " failed: " + msg); + super(serviceType.getSimpleName() + " failed: " + msg); } /** @@ -40,6 +40,6 @@ public class ExplorationServiceRuntimeException extends RuntimeException { */ public ExplorationServiceRuntimeException(Class<? extends IExplorationService> serviceType, String msg, Exception e) { - super("DSE: " + serviceType.getSimpleName() + " failed: " + msg, e); + super(serviceType.getSimpleName() + " failed: " + msg, e); } } 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 e1f985076793f2b0890aea9f1f5cfe4b28efffbf..69b7bd7cd989e858d6bae5070f8624436c7d6115 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 b5a218e998e1827242023d0c6ed9a85f04f5f490 YELLOW +ExplorationModuleService.java ce426b60fed15b3532f0bfd04d25fb1ec777b93d RED 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 b5a218e998e1827242023d0c6ed9a85f04f5f490..ce426b60fed15b3532f0bfd04d25fb1ec777b93d 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 @@ -32,6 +32,8 @@ import org.fortiss.tooling.kernel.introspection.IIntrospectionItem; import org.opt4j.core.Genotype; import org.opt4j.core.problem.Decoder; +import com.google.common.collect.ClassToInstanceMap; +import com.google.common.collect.MutableClassToInstanceMap; import com.google.inject.AbstractModule; import com.google.inject.Guice; import com.google.inject.Injector; @@ -61,7 +63,8 @@ public class ExplorationModuleService implements IExplorationModuleService { * References all registered exploration modules. Differing between {@link Genotype}s, * {@link Decoder}s etc. is currently not needed. */ - private Set<AbstractModule> registeredExpModules = new HashSet<>(); + private ClassToInstanceMap<AbstractModule> registeredExpModules = MutableClassToInstanceMap + .create(); /** Holds the instance of the evaluation service. */ private volatile static ExplorationModuleService INSTANCE; @@ -96,6 +99,7 @@ public class ExplorationModuleService implements IExplorationModuleService { @Override public <G extends Genotype> void registerVariable(Class<G> genotype, CreatorModule<G> creator, OperatorModule<G> operator) { + // Input check: Allow only fully specified variable registrations. if(genotype == null) { throw new ExplorationServiceRuntimeException(getClass(), "The passed genotype is null!"); } else if(creator == null) { @@ -104,14 +108,29 @@ public class ExplorationModuleService implements IExplorationModuleService { throw new ExplorationServiceRuntimeException(getClass(), "The passed operator is null!"); } + // Input check: Register modules only once. + @SuppressWarnings("unchecked") Class<CreatorModule<G>> creatorClass = + (Class<CreatorModule<G>>)creator.getClass(); + if(registeredExpModules.getInstance(creatorClass) != null) { + throw new ExplorationServiceRuntimeException(getClass(), "The module " + + creatorClass.getSimpleName() + " has already been registered!"); + } + @SuppressWarnings("unchecked") Class<OperatorModule<G>> operatorClass = + (Class<OperatorModule<G>>)operator.getClass(); + if(registeredExpModules.getInstance(operatorClass) != null) { + throw new ExplorationServiceRuntimeException(getClass(), "The module " + + operatorClass.getSimpleName() + " has already been registered!"); + } + genotypes.add(genotype); - registeredExpModules.add(creator); - registeredExpModules.add(operator); + registeredExpModules.putInstance(creatorClass, creator); + registeredExpModules.putInstance(operatorClass, operator); } /** {@inheritDoc} */ @Override public <P extends Phenotype> void registerProblem(Class<P> phenotype, DecoderModule<P> decoder) { + // Input check: Allow only fully specified variable registrations. if(phenotype == null) { throw new ExplorationServiceRuntimeException(getClass(), "The passed phenotype is null!"); @@ -119,46 +138,63 @@ public class ExplorationModuleService implements IExplorationModuleService { throw new ExplorationServiceRuntimeException(getClass(), "The passed decoder is null!"); } + // Input check: Register modules only once. + @SuppressWarnings("unchecked") Class<DecoderModule<P>> decoderClass = + (Class<DecoderModule<P>>)decoder.getClass(); + if(registeredExpModules.getInstance(decoderClass) != null) { + throw new ExplorationServiceRuntimeException(getClass(), "The module " + + decoderClass.getSimpleName() + " has already been registered!"); + } + phenotypes.add(phenotype); - registeredExpModules.add(decoder); + registeredExpModules.putInstance(decoderClass, decoder); } /** {@inheritDoc} */ @Override public void registerEvaluator(EvaluatorModule<Phenotype> evaluator) { + // Input check: Allow only fully specified variable registrations. if(evaluator == null) { throw new ExplorationServiceRuntimeException(getClass(), "The passed evaluator is null!"); } - registeredExpModules.add(evaluator); + // Input check: Register modules only once. + @SuppressWarnings("unchecked") Class<EvaluatorModule<Phenotype>> evaluatorClass = + (Class<EvaluatorModule<Phenotype>>)evaluator.getClass(); + if(registeredExpModules.getInstance(evaluatorClass) != null) { + throw new ExplorationServiceRuntimeException(getClass(), "The module " + + evaluatorClass.getSimpleName() + " has already been registered!"); + } + + registeredExpModules.putInstance(evaluatorClass, evaluator); } /** {@inheritDoc} */ @Override public Set<CreatorModule<?>> getCreators() { - return registeredExpModules.stream().filter(m -> m instanceof CreatorModule) + return registeredExpModules.values().stream().filter(m -> m instanceof CreatorModule) .map(CreatorModule.class::cast).collect(Collectors.toSet()); } /** {@inheritDoc} */ @Override public Set<OperatorModule<?>> getOperators() { - return registeredExpModules.stream().filter(m -> m instanceof OperatorModule) + return registeredExpModules.values().stream().filter(m -> m instanceof OperatorModule) .map(OperatorModule.class::cast).collect(Collectors.toSet()); } /** {@inheritDoc} */ @Override public Set<DecoderModule<?>> getDecoders() { - return registeredExpModules.stream().filter(m -> m instanceof DecoderModule) + return registeredExpModules.values().stream().filter(m -> m instanceof DecoderModule) .map(DecoderModule.class::cast).collect(Collectors.toSet()); } /** {@inheritDoc} */ @Override public Set<EvaluatorModule<?>> getEvaluators() { - return registeredExpModules.stream().filter(m -> m instanceof EvaluatorModule) + return registeredExpModules.values().stream().filter(m -> m instanceof EvaluatorModule) .map(EvaluatorModule.class::cast).collect(Collectors.toSet()); } diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/util/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/util/.ratings index 2ac7d817f183475be3f7ea759d258d8551be6dbb..707cffe050c98001d35b966799fe1f3c2ac7eee9 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/util/.ratings +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/util/.ratings @@ -1,4 +1,4 @@ -AF3Utils.java f372a35e0c0197ba8c18fdef66fe7e5ab468acc0 RED +AF3Utils.java a7269b4db6db75c4d3332c46fa62b7597711507b RED DesignSpaceExplorationModelElementFactory.java bc6a6462bb655f3709afbc6b0c50ccd4f9764b5d RED ExplorationAlgDebugUtils.java acdb59e8a413c89e26f91b8829149afcb8328600 RED ExplorationAlgUtils.java 3ae0811b433c0be37af094086aff720cb42ea862 RED diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/util/AF3Utils.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/util/AF3Utils.java index f372a35e0c0197ba8c18fdef66fe7e5ab468acc0..a7269b4db6db75c4d3332c46fa62b7597711507b 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/util/AF3Utils.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/util/AF3Utils.java @@ -98,7 +98,7 @@ public class AF3Utils { * {@link SafetyFunctionArchEntry} to be translated. * @return The encoded {@link SafetyArchitecture}, or {@code null} if no matching enum is found. */ - public static SafetyArchitecture getSFArchFromEntry(SafetyFunctionArchEntry<?> sfaEntry) { + public static SafetyArchitecture getSFArchFromEntry(SafetyFunctionArchEntry sfaEntry) { int channelNum = sfaEntry.getNumChannels(); int triggerNum = sfaEntry.getNumTriggerSignal(); boolean diagnosisPresent = sfaEntry.isDiagnosicUnitPresent();