diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/.ratings index a9a36071f285f95e75a8e400ffa5d44bc303c9f0..6278617d23fcaedad5c5f13dc764edf214ef6962 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/.ratings +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/.ratings @@ -1,6 +1,6 @@ CompositeExplorationSolution.java 528283a3dd57500539b2e11dd3d3eb35512de9b8 RED -DSEFactory.java 99d95694fc552ded4321753cfe76028650633c98 RED +DSEFactory.java e8a221bb175a30be7d4e780c58c2ba809980c47b RED Explorer.java 367aeeeeb26d22791c640e1b74c0af43277a3037 RED ImplicitExplorationTargetFactory.java 7ce651a2161c71a2a90acf0f32b1e50ee23f160f RED SolutionQuantification.java efd31f192c3adbf1a4434452a19eb836a17390e2 RED -TaskMappingFactory.java 046f25f5bc491dd0e775b680fce497b34ddc64e0 RED +TaskMappingFactory.java f8f5541a563b46050daaf1c6a854c233e90792f7 RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/DSEFactory.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/DSEFactory.java index cf96120a41a9be8910898f3e09755f24d1414ebe..fae01031651707e756ab95311533ab3f282a4d18 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/DSEFactory.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/DSEFactory.java @@ -26,6 +26,7 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.create.ArchitectureExpl import org.fortiss.af3.exploration.alg.dse.backend.opt4j.create.safetyfunctionarch.SafetyFunctionArchCreator; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.create.taskmapping.AbstractTaskMappingCreator; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.create.taskmapping.TaskMappingCreator; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.Partition; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.safetyfunctionarch.SafetyFunctionArchEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.TaskMappingEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.TaskMappingEntry; @@ -274,13 +275,18 @@ public class DSEFactory { * @throws UnsupportedDataTypeException * if the given {@link ExecutionModel} is not "wrapped" to factory in this method. */ - public TaskMappingFactory<? extends TaskMappingEntry, ? extends TaskMappingEncoding<?>> + public <S extends TaskMappingEntry<?, Partition>> + TaskMappingFactory<?, ? extends TaskMappingEncoding<?, S>> createTaskMappingFactory(ExecutionModel execModel) throws UnsupportedDataTypeException { + // TODO: Remove the error-prone casting. Remove the differentiation between the failure + // modes here as well? switch(execModel) { case TT_FAIL_SILENCE: - return FailSilentExecModelFactory.getInstance(); + return (TaskMappingFactory<?, ? extends TaskMappingEncoding<?, S>>)FailSilentExecModelFactory + .getInstance(); case TT_FAULT_DETECTION_VOTING: - return FaultDetectionVotingExecModelFactory.getInstance(); + return (TaskMappingFactory<?, ? extends TaskMappingEncoding<?, S>>)FaultDetectionVotingExecModelFactory + .getInstance(); default: throw new UnsupportedDataTypeException( "Cannot create a factory for the execution model " + execModel.getName() + diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/TaskMappingFactory.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/TaskMappingFactory.java index f4da0fa2ad01175a0327bb1752ba31b3b22ed686..0815c8897837e8c5ef154047f1a89b9e85439537 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/TaskMappingFactory.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/TaskMappingFactory.java @@ -154,7 +154,7 @@ public abstract class TaskMappingFactory<S extends InstantiatedTaskMappingEntry, * the system model deduced from the logical and technical architecture * @return Mutation Operator for Allocations. */ - public MutateAllocation<? extends TaskMappingEntry, ? extends TaskMappingEncoding<?>> + public MutateAllocation<? extends TaskMappingEntry<?, ?>, ? extends TaskMappingEncoding<?, ?>> createMutateAllocationOperator( SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter) { throw new UnsupportedOperationException(SCHED_NOT_IMPL_MSG); diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/.ratings index 1e3974d43d5d7cac142983a44eab7f6fcf2d755c..c7b17b8424252d2ea6d76aeab93acbe35cab06fd 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/.ratings +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/.ratings @@ -1,3 +1,3 @@ Opt4JExplorationSolutionSet.java fd1ca946198990604ea7a521e9d0335bef4ad8e1 RED -Opt4JExplorerBackend.java 461b9a02d7549f775c5e44d6c9e804841b0d1b8c RED +Opt4JExplorerBackend.java b647535f92ebdf1e428757f6fe1e918964feb4f2 RED Opt4JSingleExplorationSolution.java 6086e36a5b48b9f3ea68b6e50e2ac20758942d0a RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/Opt4JExplorerBackend.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/Opt4JExplorerBackend.java index 4fafb37f95eecf22941d01cd889013cf6a615a37..fcc00dfbc6f79c6629eb77798ded1d80243d4966 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/Opt4JExplorerBackend.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/Opt4JExplorerBackend.java @@ -35,6 +35,7 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.operator.copy.taskmappi import org.fortiss.af3.exploration.alg.dse.backend.opt4j.operator.crossover.CrossoverAbstractTaskMappingModule; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.operator.crossover.NopCrossoverInstantiatedTaskMappingModule; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.operator.crossover.NopCrossoverSFArchModule; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.operator.mutate.partitionmapping.PartitionMappingModule; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.operator.mutate.safetyarch.MutateSafetyFunctionArchitectureModule; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.operator.mutate.taskinstantiation.MutateTaskInstanceModule; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.operator.mutate.taskmapping.MutateTaskMappingModule; @@ -179,6 +180,9 @@ public class Opt4JExplorerBackend extends ExplorerBackendBase<EAOptimizer> { modules.add(sfArchModule); } + // Partition Exploration + modules.add(new PartitionMappingModule(systemModelAdapter)); + // Task instantiation MutateTaskInstanceModule mutateInstanceModule = new MutateTaskInstanceModule(systemModelAdapter); diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/partitionmapping/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/partitionmapping/.ratings new file mode 100644 index 0000000000000000000000000000000000000000..eb213614bbe296005a54e5caad43d3a440dc94c6 --- /dev/null +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/partitionmapping/.ratings @@ -0,0 +1 @@ +PartitionMappingCreator.java 9c831443bf9cdc547dede8df28dcaf8cfac3ab55 RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/partitionmapping/PartitionMappingCreator.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/partitionmapping/PartitionMappingCreator.java new file mode 100644 index 0000000000000000000000000000000000000000..2e175344ebc6f860f9b2c1b7939477a84d7365e2 --- /dev/null +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/partitionmapping/PartitionMappingCreator.java @@ -0,0 +1,67 @@ +/*-------------------------------------------------------------------------+ +| Copyright 2017 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.partitionmapping; + +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.MappingEncoding.CREATE_STARTEGY; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.PartitionMappingEncoding; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.create.ComposableCreatorBase; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.genotype.FlatGenotypeMap; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.graph.DecoderDependencyGraph; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.FlatPhenotypeMap; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype; +import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; +import org.fortiss.af3.exploration.alg.dse.sysmodel.random.RandomExploration; +import org.fortiss.af3.exploration.alg.service.IExplorationEncoding; +import org.opt4j.core.problem.Creator; + +/** + * {@link Creator} for {@link PartitionMappingEncoding}s. + * + * @author diewald + */ +public class PartitionMappingCreator extends ComposableCreatorBase<PartitionMappingEncoding> { + + /** Constructor. */ + public PartitionMappingCreator(SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, + DecoderDependencyGraph depGraph) { + super(systemModelAdapter, depGraph); + } + + /** {@inheritDoc} */ + @Override + public PartitionMappingEncoding createComposable(FlatGenotypeMap createdGenotypes, + FlatPhenotypeMap<Phenotype> decodedPhenotypes) { + // TODO In order to correctly choose the create strategy here, we'd need to know the + // population size. For now, we assume an initial population size of 25. + final int INIT_POP_SIZE = 25; + // "Probability distribution" for the strategy selection: | 1 | 23 | 1 | ==> 25 + int strategySelIdx = RandomExploration.getInstance().nextInt(INIT_POP_SIZE); + switch(strategySelIdx) { + case 0: + return new PartitionMappingEncoding(systemModelAdapter, CREATE_STARTEGY.MIN_SET); + case 24: + return new PartitionMappingEncoding(systemModelAdapter, CREATE_STARTEGY.MAX_SET); + default: + return new PartitionMappingEncoding(systemModelAdapter, CREATE_STARTEGY.RANDOM_SET); + } + } + + /** {@inheritDoc} */ + @Override + public Class<? extends IExplorationEncoding> getCreatedEncodingType() { + return PartitionMappingEncoding.class; + } +} diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/safetyfunctionarch/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/safetyfunctionarch/.ratings index 13b6c990bb74ef096ae48cc2814f843a949e27f5..f218e2be02612f87ea97dfa3e69f7fc4d6fbc54b 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/safetyfunctionarch/.ratings +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/safetyfunctionarch/.ratings @@ -1 +1 @@ -SafetyFunctionArchCreator.java ca96b21266c0b68224256a309d788cbc047c1035 RED +SafetyFunctionArchCreator.java 8727cb4ecce45135ad5f6815d2dd0cb4c700b1ce RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/safetyfunctionarch/SafetyFunctionArchCreator.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/safetyfunctionarch/SafetyFunctionArchCreator.java index bd94fc7afca10fa2d24b80eb5361d14c55a07f77..ef4f39b8627fb0269d32a3c1116cfe06d9eff3d0 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/safetyfunctionarch/SafetyFunctionArchCreator.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/safetyfunctionarch/SafetyFunctionArchCreator.java @@ -54,7 +54,7 @@ public class SafetyFunctionArchCreator<C> /** {@inheritDoc} */ @Override - public Class<? extends IExplorationEncoding> getCreatedEncoding() { + public Class<? extends IExplorationEncoding> getCreatedEncodingType() { return SafetyFunctionArchEncoding.class; } } diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/.ratings index ce09d471115989bce50e17ede1703440edd15ca9..5abce2de645eb8126d7b1f7dbac9d7309191fc6f 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/.ratings +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/.ratings @@ -1,4 +1,4 @@ -AbstractTaskMappingCreator.java 3afa3eb3db97f94f11466f558321350ff960930a RED -FailSilentTaskMappingCreator.java eff6f7b5161ecfd749b60eab11c96ac6639e79f7 RED -FaultDetectionVotingTaskMappingCreator.java 2be9871421a7a11d81a628b1ba7215074c5cf955 RED -TaskMappingCreator.java 956021f12777f0269b87adf762bb06aeb4551e75 RED +AbstractTaskMappingCreator.java 6c3f2cd98a2d40f6fc0e1dbfca0ce3cddc5a7961 RED +FailSilentTaskMappingCreator.java 6aa1828a87ab6bdaa8077101e004fe4ddddd8a7f RED +FaultDetectionVotingTaskMappingCreator.java 2cc96c6197eaafa803b9794246ff40346802342a RED +TaskMappingCreator.java d39c3554074646dfe9acc343c268baacd2960027 RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/AbstractTaskMappingCreator.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/AbstractTaskMappingCreator.java index 130c80c586cdabf852ea22412e7cf6f66a691d14..ec847aee3799ef15d45494ed025c656116b5f296 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/AbstractTaskMappingCreator.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/AbstractTaskMappingCreator.java @@ -15,6 +15,7 @@ +--------------------------------------------------------------------------*/ package org.fortiss.af3.exploration.alg.dse.backend.opt4j.create.taskmapping; +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; @@ -38,8 +39,8 @@ import com.google.inject.Inject; * * @author diewald */ -public class AbstractTaskMappingCreator extends - TaskMappingCreator<AbstractTaskMappingEntry, AbstractTaskMappingEncoding> { +public class AbstractTaskMappingCreator + extends TaskMappingCreator<AbstractTaskMappingEntry, AbstractTaskMappingEncoding> { /** Constructor */ @Inject @@ -66,12 +67,14 @@ public class AbstractTaskMappingCreator extends // partial mapping. AbstractTaskMappingEncoding atmEnc = createdGenotypes.get(AbstractTaskMappingEncoding.class); - return new AbstractTaskMappingEncoding(dse, systemModelAdapter, atgEnc, atmEnc); + PartitionMappingEncoding partEnc = createdGenotypes.get(PartitionMappingEncoding.class); + assert (partEnc != null) : "The required partition mapping encoding could not be found in the map of already decoded phenotypes."; + return new AbstractTaskMappingEncoding(dse, systemModelAdapter, partEnc, atgEnc, atmEnc); } /** {@inheritDoc} */ @Override - public Class<? extends IExplorationEncoding> getCreatedEncoding() { + public Class<? extends IExplorationEncoding> getCreatedEncodingType() { return AbstractTaskMappingEncoding.class; } } diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/FailSilentTaskMappingCreator.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/FailSilentTaskMappingCreator.java index 8786f15e0a377b06e6f6d24da8500f7e16300cd3..aff9d2125ef003cf90f6e209030c76e283890c1b 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/FailSilentTaskMappingCreator.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/FailSilentTaskMappingCreator.java @@ -15,6 +15,7 @@ +--------------------------------------------------------------------------*/ package org.fortiss.af3.exploration.alg.dse.backend.opt4j.create.taskmapping; +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.instantiatedmapping.FailSilentTaskMappingEncoding; @@ -35,8 +36,8 @@ import com.google.inject.Inject; * * @author diewald */ -public class FailSilentTaskMappingCreator extends - TaskMappingCreator<FailSilentTaskMappingEntry, FailSilentTaskMappingEncoding> { +public class FailSilentTaskMappingCreator + extends TaskMappingCreator<FailSilentTaskMappingEntry, FailSilentTaskMappingEncoding> { /** * Constructs a task mapping creator for a given DSE specification and input model @@ -59,13 +60,15 @@ public class FailSilentTaskMappingCreator extends AbstractTaskMappingEncoding atmEnc = createdGenotypes.get(AbstractTaskMappingEncoding.class); assert (atmEnc != null) : "The required abstract task mapping encoding could not be found in the map of already decoded phenotypes."; - return new FailSilentTaskMappingEncoding(dse, systemModelAdapter, atgEnc, atmEnc); + PartitionMappingEncoding partEnc = createdGenotypes.get(PartitionMappingEncoding.class); + assert (partEnc != null) : "The required partition mapping encoding could not be found in the map of already decoded phenotypes."; + return new FailSilentTaskMappingEncoding(dse, systemModelAdapter, partEnc, atgEnc, atmEnc); } // TODO: remove this method: use the identifier from the encoding, instead. /** {@inheritDoc} */ @Override - public Class<? extends IExplorationEncoding> getCreatedEncoding() { + public Class<? extends IExplorationEncoding> getCreatedEncodingType() { return InstantiatedTaskMappingEncoding.class; } } diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/FaultDetectionVotingTaskMappingCreator.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/FaultDetectionVotingTaskMappingCreator.java index a5ef3dba627811d75bf64c67cbd55d698fbecd2c..2181f0737dd920b27bd717b8c002d276c3ccb1a0 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/FaultDetectionVotingTaskMappingCreator.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/FaultDetectionVotingTaskMappingCreator.java @@ -15,6 +15,7 @@ +--------------------------------------------------------------------------*/ package org.fortiss.af3.exploration.alg.dse.backend.opt4j.create.taskmapping; +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.instantiatedmapping.FaultDetectionVotingTaskMappingEncoding; @@ -35,8 +36,7 @@ import com.google.inject.Inject; * * @author diewald */ -public class FaultDetectionVotingTaskMappingCreator - extends +public class FaultDetectionVotingTaskMappingCreator extends TaskMappingCreator<FaultDetectionVotingTaskMappingEntry, FaultDetectionVotingTaskMappingEncoding> { /** @@ -60,12 +60,15 @@ public class FaultDetectionVotingTaskMappingCreator AbstractTaskMappingEncoding atmEnc = createdGenotypes.get(AbstractTaskMappingEncoding.class); assert (atmEnc != null) : "The required abstract task mapping encoding could not be found in the map of already decoded phenotypes."; - return new FaultDetectionVotingTaskMappingEncoding(dse, systemModelAdapter, atgEnc, atmEnc); + PartitionMappingEncoding partEnc = createdGenotypes.get(PartitionMappingEncoding.class); + assert (partEnc != null) : "The required partition mapping encoding could not be found in the map of already decoded phenotypes."; + return new FaultDetectionVotingTaskMappingEncoding(dse, systemModelAdapter, partEnc, atgEnc, + atmEnc); } /** {@inheritDoc} */ @Override - public Class<? extends IExplorationEncoding> getCreatedEncoding() { + public Class<? extends IExplorationEncoding> getCreatedEncodingType() { return InstantiatedTaskMappingEncoding.class; } } diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/TaskMappingCreator.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/TaskMappingCreator.java index 2bb56f8330fef36baa95a2813c29a5e415752c1c..1b5994e05159fe718838e3f42e691f80590c3108 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/TaskMappingCreator.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/TaskMappingCreator.java @@ -15,10 +15,12 @@ +--------------------------------------------------------------------------*/ package org.fortiss.af3.exploration.alg.dse.backend.opt4j.create.taskmapping; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.Partition; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.TaskMappingEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.TaskMappingEntry; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.create.ComposableCreatorBase; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.graph.DecoderDependencyGraph; +import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IDeployableComponentAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; import org.fortiss.af3.exploration.moea.model.DseSpecification; import org.opt4j.core.Genotype; @@ -32,7 +34,7 @@ import com.google.inject.Inject; * @author huang */ -public abstract class TaskMappingCreator<S extends TaskMappingEntry, T extends TaskMappingEncoding<?>> +public abstract class TaskMappingCreator<S extends TaskMappingEntry<IDeployableComponentAdapter<?>, Partition>, T extends TaskMappingEncoding<IDeployableComponentAdapter<?>, S>> extends ComposableCreatorBase<T> { /** DSE specification. */ diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/.ratings index 98e649ffd4da3b071b68322bf98c9332ff98999c..eb47cb8ca83aad42d5da801e4dcfca05dddee997 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/.ratings +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/.ratings @@ -1,3 +1,4 @@ ArchExpSubEncoding.java 60e13a2cb13bb36e9f8f7149f322dbed5398eafb RED ArchitectureExplorationEncoding.java e7ff265079ae5838bf84abf9d05712409031a970 RED -MappingEncoding.java 3902cc66c2fe02952ae162cf9f98e4e319922dd0 RED +MappingEncoding.java f7db94bf2af8dd5817ad564135d226301c6b41d5 RED +MappingEntryBase.java f173c8ee60dd175e9bc1240d1e1cc14d46d24d69 RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/MappingEncoding.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/MappingEncoding.java index 3d961eeac726f26f60b77606d82cb9f6bb22dd59..044eecaf018eda1b5396169559e93f723909a71b 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/MappingEncoding.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/MappingEncoding.java @@ -15,16 +15,92 @@ +--------------------------------------------------------------------------*/ package org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.TaskMappingEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.ComposablePhenotype; +import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IRequestAdapter; +import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IResourceAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.mapping.IMappingEncoding; +import org.fortiss.af3.exploration.alg.dse.sysmodel.mapping.IMappingEntry; import org.opt4j.core.Genotype; +import com.google.common.collect.ArrayListMultimap; +import com.google.common.collect.LinkedListMultimap; +import com.google.common.collect.ListMultimap; + /** * Marker interface for porting: Genotypes which allocate one request to a resource. * * @author diewald */ -public interface MappingEncoding<G extends Genotype> - extends ComposablePhenotype<G>, IMappingEncoding { - // Marker interface for porting. +public abstract class MappingEncoding<G extends Genotype, S extends IRequestAdapter<?>, T extends IResourceAdapter<?>, M extends IMappingEntry<S, T>> + implements ComposablePhenotype<G>, IMappingEncoding<S, T, M>, Cloneable { + + /** + * Allocation map + * <ul> + * <li>key: The Requester (e.g., task)</li> + * <li>value: The target resource (e.g., cores)</li> + * <li>Multiple entry in the list represent redundant mapping</li> + */ + protected ListMultimap<S, M> allocationMap = LinkedListMultimap.create(); + + public enum CREATE_STARTEGY { + MIN_SET, RANDOM_SET, MAX_SET + } + + /** + * Creates a copy of the internal allocation map of {@code this} {@link TaskMappingEncoding}. + */ + public ListMultimap<S, M> copyAllocationMap(Map<M, M> copyAssocMap) { + ListMultimap<S, M> copiedMap = ArrayListMultimap.create(); + for(Entry<S, M> tmEntry : allocationMap.entries()) { + @SuppressWarnings("unchecked") M mappingEntry = (M)tmEntry.getValue().clone(); + copiedMap.put(tmEntry.getKey(), mappingEntry); + copyAssocMap.put(tmEntry.getValue(), mappingEntry); + } + return copiedMap; + } + + /** {@inheritDoc} */ + @Override + public synchronized Collection<T> getAllocatedResourcesFor(S requester) { + Collection<T> allocatedResourcesForRequester = new ArrayList<>(); + for(IMappingEntry<S, T> currentMappingEntry : allocationMap.get(requester)) { + allocatedResourcesForRequester.add(currentMappingEntry.getTarget()); + } + return allocatedResourcesForRequester; + } + + /** {@inheritDoc} */ + @Override + public List<M> getMappingEntriesOf(S source) { + return allocationMap.get(source); + } + + /** {@inheritDoc} */ + @Override + public boolean containsEntry(M entry) { + return allocationMap.containsValue(entry); + } + + /** {@inheritDoc} */ + @Override + public Collection<M> getMappingEntries() { + return allocationMap.values(); + } + + /** {@inheritDoc} */ + @Override + public Collection<S> getRequesters() { + return allocationMap.keySet(); + } + + @Override + public abstract MappingEncoding<G, S, T, M> clone(); } diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/MappingEntryBase.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/MappingEntryBase.java new file mode 100644 index 0000000000000000000000000000000000000000..5c618d4eb7e35323bc0b476e140f5b2ea32b43c0 --- /dev/null +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/MappingEntryBase.java @@ -0,0 +1,84 @@ +/*-------------------------------------------------------------------------+ +| Copyright 2017 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.encoding; + +import java.util.Collection; + +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.TaskMappingEntry; +import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IDeployableComponentAdapter; +import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IRequestAdapter; +import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IResourceAdapter; +import org.fortiss.af3.exploration.alg.dse.sysmodel.mapping.IMappingEntry; + +import com.google.common.collect.ClassToInstanceMap; +import com.google.common.collect.MutableClassToInstanceMap; + +/** + * + * @author diewald + */ +public abstract class MappingEntryBase<S extends IRequestAdapter<?>, T extends IResourceAdapter<?>> + implements IMappingEntry<S, T>, Cloneable { + /** Deployment target to which task is mapped */ + protected T target; + + /** {@link IDeployableComponentAdapter} that is "realized" by this {@link TaskMappingEntry}. */ + protected S source; + + /** Associated {@link IMappingEntry}s that were generated during the DSE process. */ + protected ClassToInstanceMap<IMappingEntry<S, T>> associatedEntries = + MutableClassToInstanceMap.create(); + + /** {@inheritDoc} */ + @Override + public S getSource() { + return source; + } + + /** {@inheritDoc} */ + @Override + public T getTarget() { + return target; + } + + /** {@inheritDoc} */ + @SuppressWarnings("unchecked") + @Override + public void addAssociatedElement(IMappingEntry<S, T> assocEntry) { + associatedEntries.put((Class<IMappingEntry<S, T>>)assocEntry.getClass(), assocEntry); + } + + /** {@inheritDoc} */ + @Override + public void rmAssociatedElement(IMappingEntry<S, T> entry) { + associatedEntries.remove(entry.getClass()); + } + + /** {@inheritDoc} */ + @Override + public Collection<IMappingEntry<S, T>> getAssociatedElement() { + return associatedEntries.values(); + } + + /** {@inheritDoc} */ + @Override + public <U extends IMappingEntry<S, T>> U getAssociatedElement(Class<U> type) { + return associatedEntries.getInstance(type); + } + + @Override + public abstract IMappingEntry<S, T> clone(); +} diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/comm/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/comm/.ratings index 5e99674e1cc884d11c6c087bc9babe8c8928142f..612a4bf21af6f7983059ffd3f9e82d7067954f04 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/comm/.ratings +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/comm/.ratings @@ -1 +1 @@ -MessageEncoding.java 43b80e6e3d26c01f73ac493062a646026279c61d RED +MessageEncoding.java 07156d0dd672656302f8d1eac27018ed32e718d1 RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/comm/MessageEncoding.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/comm/MessageEncoding.java index 2fc244e3795fae220cbdc9a35153ad1f37b6b2fa..f4a8178ebbb12fde9ad3c2b5d1a7191ea388c28b 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/comm/MessageEncoding.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/comm/MessageEncoding.java @@ -19,9 +19,11 @@ import static org.fortiss.tooling.common.util.LambdaUtils.filterSet; 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.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.phenotype.ComposablePhenotype; +import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IDeployableComponentAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.comm.Message; import org.fortiss.af3.exploration.alg.service.IExplorationEncoding; import org.fortiss.af3.exploration.backend.IDseInputContainer.SignalType; @@ -32,7 +34,7 @@ import org.fortiss.af3.exploration.backend.IDseInputContainer.SignalType; * * @author diewald */ -public class MessageEncoding<S extends TaskMappingEntry, T extends TaskMappingEncoding<S>> +public class MessageEncoding<S extends TaskMappingEntry<IDeployableComponentAdapter<?>, Partition>, T extends TaskMappingEncoding<IDeployableComponentAdapter<?>, S>> implements IExplorationEncoding, ComposablePhenotype<T> { /** Contains the set of generated messages. */ diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/partitionmapping/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/partitionmapping/.ratings new file mode 100644 index 0000000000000000000000000000000000000000..09929aba858e0c92c43b11c0d98276f6fbce63f7 --- /dev/null +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/partitionmapping/.ratings @@ -0,0 +1,3 @@ +Partition.java 3f643bea0eb26cb7528b7dbcae6b957cac081125 RED +PartitionMappingEncoding.java 91d0233fc1e2301b40cc955defa82dafadc724df RED +PartitionMappingEntry.java 16130a3bd2f157c4f5f5ef6cb91d1b72137f0acd RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/partitionmapping/Partition.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/partitionmapping/Partition.java new file mode 100644 index 0000000000000000000000000000000000000000..3de4054feb21632b1cc2988b3bb77e2a3bdb14bc --- /dev/null +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/partitionmapping/Partition.java @@ -0,0 +1,61 @@ +/*-------------------------------------------------------------------------+ +| Copyright 2017 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.encoding.partitionmapping; + +import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IExecutionUnitAdapter; +import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IRequestAdapter; + +/** + * Represents partitions executed by a hypervisor running on physical execution units. + * The current implementation as an IExecutionUnitAdapter is a HACK to make the + * PartitionMappingEncoding compatible with the TaskMappingEncoding. This should be refactored ASAP. + * + * @author diewald + */ +public class Partition implements IExecutionUnitAdapter<Partition>, IRequestAdapter<Partition> { + + /** {@inheritDoc} */ + @Override + public boolean isVirtual() { + return true; + } + + /** {@inheritDoc} */ + @Override + public Double getFailureRate() { + return 0.0; + } + + /** {@inheritDoc} */ + @Override + public String getName() { + // No associated Object with a name at the moment. + return toString(); + } + + /** {@inheritDoc} */ + @Override + public Partition getObject() { + // TODO No associated Object with a name at the moment. + return null; + } + + /** {@inheritDoc} */ + @Override + public double getSafeFailureFraction() { + return 0.0; + } +} diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/partitionmapping/PartitionMappingEncoding.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/partitionmapping/PartitionMappingEncoding.java new file mode 100644 index 0000000000000000000000000000000000000000..fb22cc96b117aa611f718a48b1a57d96d4088699 --- /dev/null +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/partitionmapping/PartitionMappingEncoding.java @@ -0,0 +1,146 @@ +/*-------------------------------------------------------------------------+ +| Copyright 2017 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.encoding.partitionmapping; + +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.MappingEncoding; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.genotype.ComposableGenotype; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.ComposablePhenotype; +import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IExecutionUnitAdapter; +import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IResourceAdapter; +import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; +import org.fortiss.af3.exploration.alg.dse.sysmodel.random.RandomExploration; + +import com.google.common.collect.ArrayListMultimap; +import com.google.common.collect.ListMultimap; + +/** + * Encoding that maps partition, which host tasks, to execution units. Typically, these are cores. + * The encoding is essentially a two-dimensional table. + * + * @author diewald + */ +public class PartitionMappingEncoding extends + MappingEncoding<PartitionMappingEncoding, Partition, IExecutionUnitAdapter<?>, PartitionMappingEntry> + implements ComposableGenotype, Cloneable { + /** The allocation table. */ + private ListMultimap<IResourceAdapter<?>, Partition> allocationTable = + ArrayListMultimap.create(); + + private Collection<? extends IResourceAdapter<?>> targetSet; + + /** Constructor. */ + // TODO: The strategy can be replaced by lambdas for a cleaner design. + public PartitionMappingEncoding(SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, + CREATE_STARTEGY strategy) { + // Number of tasks to deploy + // TODO: This does not consider task replicas yet. + int taskNum = systemModelAdapter.getDeployableComponents().size(); + targetSet = systemModelAdapter.getDeploymentTargets(); + if(strategy == CREATE_STARTEGY.MIN_SET) { + for(IResourceAdapter<?> target : targetSet) { + allocationTable.put(target, new Partition()); + } + } else if(strategy == CREATE_STARTEGY.RANDOM_SET) { + for(IResourceAdapter<?> target : targetSet) { + int randMaxPartitions = RandomExploration.getInstance().nextInt(taskNum); + for(int i = 0; i < randMaxPartitions; ++i) { + allocationTable.put(target, new Partition()); + } + } + } else if(strategy == CREATE_STARTEGY.MAX_SET) { + for(IResourceAdapter<?> target : targetSet) { + for(int i = 0; i < taskNum; ++i) { + allocationTable.put(target, new Partition()); + } + } + } + } + + /** Prototype Constructor. */ + private PartitionMappingEncoding() { + // Prototype for newInstance(). + } + + public Collection<IResourceAdapter<?>> getResources() { + return allocationTable.keySet(); + } + + public List<Partition> getRequesters(IResourceAdapter<?> resource) { + return allocationTable.get(resource); + } + + /** Creates a {@link Partition} that is allocated to the given {@link IResourceAdapter}. */ + public void createPartition(IResourceAdapter<?> resource) { + allocationTable.put(resource, new Partition()); + } + + /** Removes a random {@link Partition} allocation to the given {@link IResourceAdapter}. */ + public void removeRandomPartition(IResourceAdapter<?> resource) { + List<Partition> partitions = allocationTable.get(resource); + int randIdx = RandomExploration.getInstance().nextInt(partitions.size()); + Partition rmPartition = partitions.get(randIdx); + removePartition(resource, rmPartition); + } + + /** Removes the given {@link Partition} allocation to the given {@link IResourceAdapter}. */ + public void removePartition(IResourceAdapter<?> resource, Partition partition) { + allocationTable.remove(resource, partition); + } + + /** {@inheritDoc} */ + @Override + public int size() { + return allocationTable.keySet().size(); + } + + /** {@inheritDoc} */ + @SuppressWarnings("unchecked") + @Override + public PartitionMappingEncoding newInstance() { + return new PartitionMappingEncoding(); + } + + /** {@inheritDoc} */ + @Override + public Class<? extends ComposableGenotype> getGTypeToRegister() { + return getClass(); + } + + /** {@inheritDoc} */ + @Override + public Class<? extends ComposablePhenotype<?>> getPTypeToRegister() { + return getClass(); + } + + /** {@inheritDoc} */ + @Override + public PartitionMappingEncoding clone() { + PartitionMappingEncoding clonedEncoding = new PartitionMappingEncoding(); + + Map<PartitionMappingEntry, PartitionMappingEntry> copyAssocMap = new HashMap<>(); + clonedEncoding.allocationMap = copyAllocationMap(copyAssocMap); + + // TODO: Implement a generic version of the assoc Map copy and call it here. + // TODO: Implement a generic clone version, that can be called from here. + + return clonedEncoding; + } +} diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/partitionmapping/PartitionMappingEntry.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/partitionmapping/PartitionMappingEntry.java new file mode 100644 index 0000000000000000000000000000000000000000..b9a9289f12e0055900ff9e694e46fcd97c72c349 --- /dev/null +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/partitionmapping/PartitionMappingEntry.java @@ -0,0 +1,34 @@ +/*-------------------------------------------------------------------------+ +| Copyright 2017 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.encoding.partitionmapping; + +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.MappingEntryBase; +import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IExecutionUnitAdapter; +import org.fortiss.af3.exploration.alg.dse.sysmodel.mapping.IMappingEntry; + +/** + * + * @author diewald + */ +public class PartitionMappingEntry extends MappingEntryBase<Partition, IExecutionUnitAdapter<?>> { + + /** {@inheritDoc} */ + @Override + public IMappingEntry<Partition, IExecutionUnitAdapter<?>> clone() { + // TODO Auto-generated method stub + return null; + } +} diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/.ratings index 9c9a39f76728cfcc1a4e5cdbe12d0a53d5d9b264..d6ba481e3fe673b3ccce8f660295ed8fc493e484 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/.ratings +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/.ratings @@ -1,2 +1,2 @@ -TaskMappingEncoding.java 63e7c46c9e87d75607485c038a334451b3377da8 RED -TaskMappingEntry.java 85323fa9744439fd16f0cc26f2561240301a294a RED +TaskMappingEncoding.java f2cc21b6294896288c9bfe70870bf38d0b30cb71 RED +TaskMappingEntry.java 83535c1ad58bc3016f2d9fe409d5b1f80394b501 RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/TaskMappingEncoding.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/TaskMappingEncoding.java index da1abb1b58b03838505806930f6684176e29ef8a..690e2fc5a2f04e8dc85263bb71046f93a32b4e1f 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/TaskMappingEncoding.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/TaskMappingEncoding.java @@ -16,7 +16,6 @@ package org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping; -import static org.fortiss.af3.exploration.alg.util.ExplorationAlgUtils.castToRawColl; import static org.fortiss.tooling.kernel.utils.EcoreUtils.getChildrenWithType; import java.util.ArrayList; @@ -33,14 +32,16 @@ import org.eclipse.emf.ecore.EObject; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.ArchExpSubEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.MappingEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.comm.constraint.InternalIsolatedCommunicationSet; +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.taskgraph.TaskGraphEncoding; 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.genotype.ComposableGenotype; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.CompositePhenotype; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.encoding.ConstrainedEncoding; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IDeployableComponentAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IExecutionUnitAdapter; -import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IRequestAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IResourceAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.DefaultTaskGraph; @@ -49,16 +50,14 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.mapping.IMappingEntry; import org.fortiss.af3.exploration.alg.dse.sysmodel.random.RandomExploration; import org.fortiss.af3.exploration.alg.exception.ExplorationException; import org.fortiss.af3.exploration.alg.service.IExplorationEncoding; -import org.fortiss.af3.exploration.alg.util.ExplorationAlgDebugUtils; import org.fortiss.af3.exploration.model.ExplorationConstraint; import org.fortiss.af3.exploration.moea.model.DseSpecification; import org.fortiss.af3.exploration.moea.model.predefined.ComponentMultiAllocationConstraint; import org.fortiss.af3.exploration.moea.model.predefined.ComponentMultiDislocationConstraint; import org.fortiss.af3.platform.model.ExecutionUnit; +import org.fortiss.tooling.common.util.LambdaUtils; -import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.HashMultimap; -import com.google.common.collect.ListMultimap; import com.google.common.collect.Multimap; /** @@ -66,9 +65,13 @@ import com.google.common.collect.Multimap; * * @author huang */ -public abstract class TaskMappingEncoding<T extends TaskMappingEntry> - implements IMappingEncoding, ComposableGenotype, MappingEncoding, ArchExpSubEncoding, - IExplorationEncoding, ConstrainedEncoding, Cloneable { +// TODO: The CompositePhenotype is not typed correctly: An additional Type parameter would be needed +// for the subclass of TaskMappingEncoding and passed to the CompositePhenotype. +public abstract class TaskMappingEncoding<S extends IDeployableComponentAdapter<?>, T extends TaskMappingEntry<S, Partition>> + extends MappingEncoding<TaskMappingEncoding<S, T>, S, Partition, T> + implements IMappingEncoding<S, Partition, T>, ComposableGenotype, + CompositePhenotype<TaskMappingEncoding<S, T>>, ArchExpSubEncoding, IExplorationEncoding, + ConstrainedEncoding, Cloneable { /** Random generator */ private RandomExploration rand = RandomExploration.getInstance(); @@ -106,19 +109,13 @@ public abstract class TaskMappingEncoding<T extends TaskMappingEntry> * Collection of deployable {@link IDeployableComponentAdapter}s represented by {@code this} * mapping. */ - protected Collection<IDeployableComponentAdapter<?>> deployableComponents; + protected Collection<S> deployableComponents; /** The input {@link TaskGraphEncoding} that contains the tasks and their signals. */ protected TaskGraphEncoding<?, ?, ?> tgEncoding; - /** - * Allocation map - * <ul> - * <li>key: the software component (task)</li> - * <li>value: the set of hardware components (cores)</li> - * <li>Multiple entry in the list represent redundant mapping</li> - */ - protected ListMultimap<IDeployableComponentAdapter<?>, T> allocationMap; + /** The input {@link PartitionMappingEncoding}: Targets to deploy tasks. */ + protected PartitionMappingEncoding partMappingEncoding; /** Ratio between the generation of RoundRobin based and pure random mapping generation. */ private final double fixToRandomRatio = 0.25; @@ -129,12 +126,12 @@ public abstract class TaskMappingEncoding<T extends TaskMappingEntry> */ public TaskMappingEncoding(DseSpecification dse, SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, - TaskGraphEncoding<?, ?, ?> tgEncoding) { + PartitionMappingEncoding partMappingEncoding, TaskGraphEncoding<?, ?, ?> tgEncoding) { this.dse = dse; this.systemModelAdapter = systemModelAdapter; this.tgEncoding = tgEncoding; - this.deployableComponents = castToRawColl(tgEncoding.getDeployableComponents()); - allocationMap = ArrayListMultimap.create(); + this.partMappingEncoding = partMappingEncoding; + this.deployableComponents = (Collection<S>)tgEncoding.getDeployableComponents(); disallowedAllocations = createDisallowedAllocationMap(); allowedAllocations = createAllowedAllocationMap(); @@ -151,7 +148,7 @@ public abstract class TaskMappingEncoding<T extends TaskMappingEntry> public TaskMappingEncoding(DseSpecification dse, SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, boolean initialize) throws ExplorationException { - this(dse, systemModelAdapter, new TaskGraphEncoding<>(systemModelAdapter)); + this(dse, systemModelAdapter, null, new TaskGraphEncoding<>(systemModelAdapter)); if(initialize) { resetEncoding(); } @@ -166,8 +163,9 @@ public abstract class TaskMappingEncoding<T extends TaskMappingEntry> */ public TaskMappingEncoding(DseSpecification dse, SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, - TaskGraphEncoding<?, ?, ?> tgEncoding, boolean initialize) throws ExplorationException { - this(dse, systemModelAdapter, tgEncoding); + PartitionMappingEncoding partMappingEncoding, TaskGraphEncoding<?, ?, ?> tgEncoding, + boolean initialize) throws ExplorationException { + this(dse, systemModelAdapter, partMappingEncoding, tgEncoding); if(initialize) { resetEncoding(); } @@ -182,9 +180,10 @@ public abstract class TaskMappingEncoding<T extends TaskMappingEntry> */ public TaskMappingEncoding(DseSpecification dse, SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, - TaskGraphEncoding<?, ?, ?> tgEncoding, TaskMappingEncoding<?> incompleteEncoding) + PartitionMappingEncoding partMappingEncoding, TaskGraphEncoding<?, ?, ?> tgEncoding, + TaskMappingEncoding<IDeployableComponentAdapter<?>, ?> incompleteEncoding) throws ExplorationException { - this(dse, systemModelAdapter, tgEncoding); + this(dse, systemModelAdapter, partMappingEncoding, tgEncoding); completeEncoding(incompleteEncoding); } @@ -196,7 +195,7 @@ public abstract class TaskMappingEncoding<T extends TaskMappingEntry> * {@link TaskMappingEntry} to be added to the allocation table. */ protected void addAllocation(T entry) { - allocationMap.put(entry.getDeployableComponent(), entry); + allocationMap.put(entry.getSource(), entry); referencedByMap.putAll(entry, entry.getAssociatedElement()); } @@ -382,16 +381,16 @@ public abstract class TaskMappingEncoding<T extends TaskMappingEntry> * @throws ExplorationException * if no valid allocation targets can be identified. */ - public void completeEncoding(TaskMappingEncoding<?> incompleteEncoding) + public void completeEncoding(TaskMappingEncoding<?, ?> incompleteEncoding) throws ExplorationException { - ArrayList<IDeployableComponentAdapter<?>> allocComponents = new ArrayList<>(); + ArrayList<S> allocComponents = new ArrayList<>(); allocComponents.addAll(deployableComponents); if(incompleteEncoding != null) { - allocComponents.removeAll(incompleteEncoding.getDeployedComponents()); + allocComponents.removeAll(incompleteEncoding.getRequesters()); - incompleteEncoding.getMappingEntries().forEach( - e -> addAllocation(createEntry(e.getDeployableComponent(), e.getTarget()))); + incompleteEncoding.getMappingEntries() + .forEach(e -> addAllocation(createEntry(e.getSource(), e.getTarget()))); } createEncoding(allocComponents); @@ -419,23 +418,25 @@ public abstract class TaskMappingEncoding<T extends TaskMappingEntry> * @throws ExplorationException * if no valid allocation targets can be identified. */ - protected void createEncoding(Collection<IDeployableComponentAdapter<?>> allocatableComponents) - throws ExplorationException { + protected void createEncoding(Collection<S> allocatableComponents) throws ExplorationException { double selRandOrFixedInit = rand.nextDouble(); List<IExecutionUnitAdapter<?>> execTargets = new ArrayList<>(systemModelAdapter.getDeploymentTargets()); int roundRobinAllocIdx = rand.nextInt(execTargets.size()); - List<IDeployableComponentAdapter<?>> compColl = new ArrayList<>(allocatableComponents); + List<S> compColl = new ArrayList<>(allocatableComponents); if(selRandOrFixedInit < fixToRandomRatio) { Collections.shuffle(compColl); } - for(IDeployableComponentAdapter<?> deployableComponent : compColl) { - List<IExecutionUnitAdapter<?>> validExecTargets = execTargets; + for(S deployableComponent : compColl) { + List<Partition> validExecTargets = new ArrayList<>(); if(allowedAllocations.containsKey(deployableComponent)) { - validExecTargets = allowedAllocations.get(deployableComponent).stream() - .collect(Collectors.toList()); + List<IExecutionUnitAdapter<?>> physicalExecTargets = allowedAllocations + .get(deployableComponent).stream().collect(Collectors.toList()); + for(IExecutionUnitAdapter<?> physExecUnit : physicalExecTargets) { + validExecTargets.addAll(partMappingEncoding.getRequesters(physExecUnit)); + } } if(selRandOrFixedInit < fixToRandomRatio) { @@ -453,9 +454,10 @@ public abstract class TaskMappingEncoding<T extends TaskMappingEntry> } } - if(!ExplorationAlgDebugUtils.checkTaskMappingForSFConsistency(this)) { - System.out.println("Error."); - } + // TODO: Readd check with flag. + // if(!ExplorationAlgDebugUtils.checkTaskMappingForSFConsistency(this)) { + // System.out.println("Error."); + // } } /** @@ -463,7 +465,7 @@ public abstract class TaskMappingEncoding<T extends TaskMappingEntry> * is mapped to a deployment target. */ protected abstract T createEntry(IDeployableComponentAdapter<?> deployableComponent, - IExecutionUnitAdapter<?> deploymentTarget); + Partition deploymentTarget); /** * Creates a {@link TaskMappingEntry} and adds it to {@code this} mapping. The given @@ -475,7 +477,8 @@ public abstract class TaskMappingEncoding<T extends TaskMappingEntry> * {@link TaskMappingEntry}. * @return The created {@link TaskMappingEntry}. */ - public <S extends TaskMappingEntry> T createAndAddEntry(S allocEntry) { + public <S extends TaskMappingEntry<IDeployableComponentAdapter<?>, Partition>> T + createAndAddEntry(S allocEntry) { T newEntry = createEntry(allocEntry); addAllocation(newEntry); return newEntry; @@ -500,18 +503,16 @@ public abstract class TaskMappingEncoding<T extends TaskMappingEntry> * @throws ExplorationException * if no valid allocation targets can be identified. */ - public T createRandomEntry(IDeployableComponentAdapter<?> deployableComponent, - List<IExecutionUnitAdapter<?>> deploymentTargets) throws ExplorationException { - IExecutionUnitAdapter<?> target = null; + public T createRandomEntry(S deployableComponent, List<Partition> deploymentTargets) + throws ExplorationException { + Partition target = null; // Select from remaining allowed deployment targets if no set of desired deployment targets // is given if(deploymentTargets == null || deploymentTargets.isEmpty()) { - deploymentTargets = new ArrayList<IExecutionUnitAdapter<?>>(); - if(allowedAllocations.containsKey(deployableComponent)) { - deploymentTargets.addAll(allowedAllocations.get(deployableComponent)); - } else { - deploymentTargets.addAll(systemModelAdapter.getDeploymentTargets()); + deploymentTargets = new ArrayList<Partition>(); + for(IResourceAdapter<?> physResource : allowedAllocations.get(deployableComponent)) { + deploymentTargets.addAll(partMappingEncoding.getRequesters(physResource)); } } @@ -545,8 +546,7 @@ public abstract class TaskMappingEncoding<T extends TaskMappingEntry> * @throws ExplorationException * if no valid allocation targets can be identified. */ - public T createRandomEntry(IDeployableComponentAdapter<?> deployableComponent) - throws ExplorationException { + public T createRandomEntry(S deployableComponent) throws ExplorationException { return createRandomEntry(deployableComponent, null); } @@ -558,8 +558,7 @@ public abstract class TaskMappingEncoding<T extends TaskMappingEntry> * @throws ExplorationException * if no valid allocation targets can be identified. */ - public T createAndAddRandomEntry(IDeployableComponentAdapter<?> deployableComponent) - throws ExplorationException { + public T createAndAddRandomEntry(S deployableComponent) throws ExplorationException { T entry = createRandomEntry(deployableComponent, null); addAllocation(entry); return entry; @@ -567,7 +566,7 @@ public abstract class TaskMappingEncoding<T extends TaskMappingEntry> /** Removes the given {@code entry} of the given {@code task} from the mapping. */ public void removeEntry(T entry) { - allocationMap.remove(entry.getDeployableComponent(), entry); + allocationMap.remove(entry.getSource(), entry); referencedByMap.get(entry).forEach(e -> e.rmAssociatedElement(entry)); } @@ -575,9 +574,9 @@ public abstract class TaskMappingEncoding<T extends TaskMappingEntry> * Removes a randomly selected entry of the given {@link IDeployableComponentAdapter} from the * mapping. */ - public T removeRandomEntry(IDeployableComponentAdapter<?> deployableComponent) { + public T removeRandomEntry(S deployableComponent) { List<T> entries = new ArrayList<>(); - entries.addAll(allocationMap.get(deployableComponent)); + entries.addAll((Collection<? extends T>)allocationMap.get(deployableComponent)); int idx = rand.nextInt(entries.size()); T rmEntry = entries.get(idx); removeEntry(rmEntry); @@ -588,7 +587,7 @@ public abstract class TaskMappingEncoding<T extends TaskMappingEntry> * Removes the given {@link IDeployableComponentAdapter} and, consequently, all associated * entries from the mapping. */ - public Collection<T> removeTask(IDeployableComponentAdapter<?> deployableComponent) { + public Collection<T> removeTask(S deployableComponent) { for(T entry : allocationMap.get(deployableComponent)) { referencedByMap.get(entry).forEach(e -> e.rmAssociatedElement(entry)); } @@ -612,7 +611,7 @@ public abstract class TaskMappingEncoding<T extends TaskMappingEntry> * @param deployableComponent * Deployable component for which fixed deployment is to be generated for */ - public void generateFixedDeployment(IDeployableComponentAdapter<?> deployableComponent) { + public void generateFixedDeployment(S deployableComponent) { Collection<ComponentMultiAllocationConstraint> constraints = dse.getTargetSpecification() .getTargets().stream() .filter(t -> (t instanceof ComponentMultiAllocationConstraint)) @@ -620,11 +619,11 @@ public abstract class TaskMappingEncoding<T extends TaskMappingEntry> for(ComponentMultiAllocationConstraint cons : constraints) { if(cons.getComponent() == deployableComponent.getObject()) { removeTask(deployableComponent); - List<IExecutionUnitAdapter<?>> execList = + List<IExecutionUnitAdapter<?>> physExecList = new ArrayList<>(systemModelAdapter.getDeploymentTargets()); - execList = execList.stream() - .filter(e -> cons.getExecutionUnits().contains(e.getObject())) - .collect(Collectors.toList()); + List<Partition> execList = new ArrayList<>(); + LambdaUtils.forEach(physExecList, e -> execList + .addAll(partMappingEncoding.getRequesters((IResourceAdapter<?>)e))); int allocIdx = 0; for(int i = 0; i < deployableComponent.getMaxReplication(); i++) { allocIdx = rand.nextInt(execList.size()); @@ -643,8 +642,7 @@ public abstract class TaskMappingEncoding<T extends TaskMappingEntry> * @throws ExplorationException * if no valid allocation targets can be identified. */ - private void generateRandomDeployment(IDeployableComponentAdapter<?> deployableComponent) - throws ExplorationException { + private void generateRandomDeployment(S deployableComponent) throws ExplorationException { // TODO: Model degree of admissible redundancy as a constraint? int min = deployableComponent.getMinReplication(); int max = deployableComponent.getMaxReplication(); @@ -672,115 +670,22 @@ public abstract class TaskMappingEncoding<T extends TaskMappingEntry> Optional<InternalSeparationConstraint> relevantSepConstraint = sepConstraints.stream() .filter(c -> c.getRequesterSet().contains(deployableComponent)).findAny(); - if(relevantSepConstraint.isPresent()) { - // TODO: consider the separation level in the selection of forbidden deployment targets. - Collection<IMappingEntry> existingEntries = getIMappingEntriesOf(deployableComponent); - existingEntries.forEach(e -> rval.add(e.getTarget())); - } - - if(rval != null) { - return rval; - } - return Collections.emptySet(); - } - - /** Returns the deployable components that are mapped in this {@link TaskMappingEncoding} */ - @Override - public Collection<IDeployableComponentAdapter<?>> getDeployedComponents() { - return allocationMap.keySet(); - } - - /** {@inheritDoc} */ - @SuppressWarnings("unchecked") - @Override - public Collection<IMappingEntry> - getIMappingEntriesOf(IDeployableComponentAdapter<?> deployableComponent) { - return (Collection<IMappingEntry>)allocationMap.get(deployableComponent); - } + // TODO: Reinclude for the safety exploration. + // if(relevantSepConstraint.isPresent()) { + // // TODO: consider the separation level in the selection of forbidden deployment targets. + // Collection<IMappingEntry> existingEntries = getIMappingEntriesOf(deployableComponent); + // existingEntries.forEach(e -> rval.add(e.getTarget())); + // } - /** Returns the deployment target to which a given deployable component has been assigned */ - @SuppressWarnings("unchecked") - @Override - public Collection<IMappingEntry> getIMappingEntries() { - return (Collection<IMappingEntry>)allocationMap.values(); - } - - /** {@inheritDoc} */ - @Override - public boolean containsEntry(IMappingEntry entry) { - return allocationMap.containsValue(entry); - } - - /** Returns the deployment target to which a given deployable component has been assigned */ - public Collection<T> getMappingEntries() { - return allocationMap.values(); - } - - /** - * Returns the deployment target to which a given deployable component has been assigned. - * - * @returns {@code null} if no entry in the allocation table is found. - */ - public List<T> getMappingEntriesOf(IDeployableComponentAdapter<?> deployableComponent) { - return allocationMap.get(deployableComponent); - } - - /** - * Returns the collection of {@link IExecutionUnitAdapter}s onto which the given - * {@link IDeployableComponentAdapter} is allocated to. - */ - public Collection<IExecutionUnitAdapter<?>> - getMappingTargetsOf(IDeployableComponentAdapter<?> deployableComponent) { - Collection<IExecutionUnitAdapter<?>> executionTargets = - new HashSet<IExecutionUnitAdapter<?>>(); - for(IMappingEntry currentEntry : getMappingEntriesOf(deployableComponent)) { - executionTargets.add(currentEntry.getTarget()); - } - return executionTargets; - } - - /** - * Returns the deployment targets to which a given deployable component has been assigned - * (similar to {#link getAssignedDeploymentTargets( - * IDeployableComponentAdapter)} - */ - @Override - public synchronized Collection<IResourceAdapter<?>> - getAllocatedResourcesFor(IRequestAdapter<?> deployableComponent) { - if(!(deployableComponent instanceof IDeployableComponentAdapter<?>)) { - return null; - } - - Collection<IResourceAdapter<?>> allocatedResourcesForRequester = - new ArrayList<IResourceAdapter<?>>(); - for(IMappingEntry currentMappingEntry : allocationMap - .get((IDeployableComponentAdapter<?>)deployableComponent)) { - allocatedResourcesForRequester.add(currentMappingEntry.getTarget()); - } - return allocatedResourcesForRequester; + return rval; } /** Assigns deployment targets to a deployable component */ - public void setAssignedResources(IDeployableComponentAdapter<?> deployableComponent, - List<T> deploymentTargets) { + public void setAssignedResources(S deployableComponent, List<T> deploymentTargets) { removeTask(deployableComponent); deploymentTargets.forEach(e -> addAllocation(e)); } - /** - * Creates a copy of the internal allocation map of {@code this} {@link TaskMappingEncoding}. - */ - public ListMultimap<IDeployableComponentAdapter<?>, T> - copyAllocationMap(Map<T, T> copyAssocMap) { - ListMultimap<IDeployableComponentAdapter<?>, T> copiedMap = ArrayListMultimap.create(); - for(Entry<IDeployableComponentAdapter<?>, T> tmEntry : allocationMap.entries()) { - @SuppressWarnings("unchecked") T mappingEntry = (T)tmEntry.getValue().clone(); - copiedMap.put(tmEntry.getKey(), mappingEntry); - copyAssocMap.put(tmEntry.getValue(), mappingEntry); - } - return copiedMap; - } - /** * Creates a copy of the internal constraint map of {@code this} {@link TaskMappingEncoding}. */ @@ -819,7 +724,7 @@ public abstract class TaskMappingEncoding<T extends TaskMappingEntry> public String toString() { String str = ""; - for(IDeployableComponentAdapter<?> deployableComponent : allocationMap.keySet()) { + for(S deployableComponent : allocationMap.keySet()) { str += "Mapping: " + deployableComponent.getName() + " -> " + "{"; if(allocationMap.get(deployableComponent) != null) { @@ -840,18 +745,12 @@ public abstract class TaskMappingEncoding<T extends TaskMappingEntry> return tgEncoding; } - /** - * Returns the task allocation map - */ - public Map<IDeployableComponentAdapter<?>, Collection<T>> getAllocationMap() { - return allocationMap.asMap(); - } - - /** - * Returns the task allocation multimap. - */ - public Multimap<IDeployableComponentAdapter<?>, T> getAllocationMultiMap() { - return allocationMap; + public List<Partition> + getAllowedPartitionTargets(List<IExecutionUnitAdapter<?>> physExecUnits) { + List<Partition> execList = new ArrayList<>(); + LambdaUtils.forEach(physExecUnits, + e -> execList.addAll(partMappingEncoding.getRequesters((IResourceAdapter<?>)e))); + return execList; } /** @@ -861,11 +760,4 @@ public abstract class TaskMappingEncoding<T extends TaskMappingEntry> public int size() { return allocationMap.size(); } - - /** {@inheritDoc} */ - @Override - public Object clone() { - throw new UnsupportedOperationException( - "The clone operation MUST be implemented in the concrete classes of the TaskMappingEncoding. Otherwise, the algorithm does not operate as expected!"); - } } diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/TaskMappingEntry.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/TaskMappingEntry.java index 94c9390e2348736516e3008878b5201687241b51..4f4ca6345654759a9f18718e2f33db422fa55cbe 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/TaskMappingEntry.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/TaskMappingEntry.java @@ -15,14 +15,11 @@ +--------------------------------------------------------------------------*/ package org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping; -import java.util.Collection; - +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.MappingEntryBase; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IDeployableComponentAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IExecutionUnitAdapter; -import org.fortiss.af3.exploration.alg.dse.sysmodel.mapping.IMappingEntry; - -import com.google.common.collect.ClassToInstanceMap; -import com.google.common.collect.MutableClassToInstanceMap; +import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IRequestAdapter; +import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IResourceAdapter; /** * Base class for {@link TaskMappingEntry}s representing the one allocation of an @@ -30,27 +27,18 @@ import com.google.common.collect.MutableClassToInstanceMap; * * @author barner */ -public abstract class TaskMappingEntry implements IMappingEntry { - /** Deployment target to which task is mapped */ - private IExecutionUnitAdapter<?> target; - - /** {@link IDeployableComponentAdapter} that is "realized" by this {@link TaskMappingEntry}. */ - protected IDeployableComponentAdapter<?> deploymentSource; - - /** Associated {@link IMappingEntry}s that were generated during the DSE process. */ - private ClassToInstanceMap<IMappingEntry> associatedEntries = - MutableClassToInstanceMap.create(); +public abstract class TaskMappingEntry<S extends IRequestAdapter<?>, T extends IResourceAdapter<?>> + extends MappingEntryBase<S, T> { /** Constructs a mapping entry the represents the mapping to a given deployment target. */ - protected TaskMappingEntry(IDeployableComponentAdapter<?> deployableComponent, - IExecutionUnitAdapter<?> target) { - this.deploymentSource = deployableComponent; + protected TaskMappingEntry(S deployableComponent, T target) { + this.source = deployableComponent; this.target = target; } /** {@inheritDoc} */ @Override - public IExecutionUnitAdapter<?> getTarget() { + public T getTarget() { return target; } @@ -61,41 +49,17 @@ public abstract class TaskMappingEntry implements IMappingEntry { * @param target * {@link IExecutionUnitAdapter} defining the allocation target. */ - public void resetTarget(IExecutionUnitAdapter<?> target) { + public void resetTarget(T target) { this.target = target; } /** {@inheritDoc} */ @Override - public IDeployableComponentAdapter<?> getDeployableComponent() { - return deploymentSource; - } - - /** {@inheritDoc} */ - @Override - public void addAssociatedElement(IMappingEntry assocEntry) { - associatedEntries.put(assocEntry.getClass(), assocEntry); - } - - /** {@inheritDoc} */ - @Override - public void rmAssociatedElement(IMappingEntry entry) { - associatedEntries.remove(entry.getClass()); - } - - /** {@inheritDoc} */ - @Override - public Collection<IMappingEntry> getAssociatedElement() { - return associatedEntries.values(); - } - - /** {@inheritDoc} */ - @Override - public <T extends IMappingEntry> T getAssociatedElement(Class<T> type) { - return associatedEntries.getInstance(type); + public S getSource() { + return source; } /** {@inheritDoc} */ @Override - public abstract TaskMappingEntry clone(); + public abstract TaskMappingEntry<S, T> clone(); } diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/abstractmapping/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/abstractmapping/.ratings index fb1f1ae776596b80c6d8c29067a6c81bb291c942..df46f858d95e1c2ac5f040af713dfbb6c0392d8c 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/abstractmapping/.ratings +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/abstractmapping/.ratings @@ -1,2 +1,2 @@ -AbstractTaskMappingEncoding.java 3c2bb2a8862aa9db67d83ec7b1372a580a087a4e RED -AbstractTaskMappingEntry.java cdaa531e62a88ccbd0644e2737b71526fde682d1 RED +AbstractTaskMappingEncoding.java 08b8a85ba4b9bf9a375f80c7852a3d2e9990c1e7 RED +AbstractTaskMappingEntry.java b039009446aa861a4a13fa4ceb479a4ca9818045 RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/abstractmapping/AbstractTaskMappingEncoding.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/abstractmapping/AbstractTaskMappingEncoding.java index d5cef0b5237562068e149eda07296a563d430da7..b2ae690110e9261733592a4e04a7f9ac28a83237 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/abstractmapping/AbstractTaskMappingEncoding.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/abstractmapping/AbstractTaskMappingEncoding.java @@ -16,8 +16,14 @@ package org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.abstractmapping; import java.util.HashMap; +import java.util.Iterator; +import java.util.List; import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; +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.taskgraph.AbstractTaskGraphEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph.SafeTaskGraphEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.TaskMappingEncoding; @@ -25,7 +31,6 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.Ta import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.genotype.ComposableGenotype; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.ComposablePhenotype; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IDeployableComponentAdapter; -import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IExecutionUnitAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; import org.fortiss.af3.exploration.alg.exception.ExplorationException; import org.fortiss.af3.exploration.moea.model.DseSpecification; @@ -37,7 +42,8 @@ import org.opt4j.core.Genotype; * * @author diewald */ -public class AbstractTaskMappingEncoding extends TaskMappingEncoding<AbstractTaskMappingEntry> { +public class AbstractTaskMappingEncoding + extends TaskMappingEncoding<IDeployableComponentAdapter<?>, AbstractTaskMappingEntry> { /** * Constructor that is initialized with a reference to the DSE specification and the input @@ -45,8 +51,8 @@ public class AbstractTaskMappingEncoding extends TaskMappingEncoding<AbstractTas */ AbstractTaskMappingEncoding(DseSpecification dse, SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, - SafeTaskGraphEncoding<?> tgEncoding) { - super(dse, systemModelAdapter, tgEncoding); + PartitionMappingEncoding partEnc, SafeTaskGraphEncoding<?> tgEncoding) { + super(dse, systemModelAdapter, partEnc, tgEncoding); } /** @@ -58,8 +64,9 @@ public class AbstractTaskMappingEncoding extends TaskMappingEncoding<AbstractTas */ public AbstractTaskMappingEncoding(DseSpecification dse, SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, - SafeTaskGraphEncoding<?> tgEncoding, boolean initialize) throws ExplorationException { - super(dse, systemModelAdapter, tgEncoding, initialize); + PartitionMappingEncoding partEnc, SafeTaskGraphEncoding<?> tgEncoding, + boolean initialize) throws ExplorationException { + super(dse, systemModelAdapter, partEnc, tgEncoding, initialize); } /** @@ -76,7 +83,7 @@ public class AbstractTaskMappingEncoding extends TaskMappingEncoding<AbstractTas } /** - * Constructor that optionally initializes the encoding to a random encoding + * Constructor for UPDATES. * * @throws ExplorationException * if no valid allocation targets can be identified for one @@ -84,30 +91,32 @@ public class AbstractTaskMappingEncoding extends TaskMappingEncoding<AbstractTas */ public AbstractTaskMappingEncoding(DseSpecification dse, SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, - AbstractTaskGraphEncoding<?, ?> atgEnc, boolean initialize) - throws ExplorationException { - super(dse, systemModelAdapter, atgEnc, initialize); + PartitionMappingEncoding partEnc, AbstractTaskGraphEncoding<?, ?> atgEnc, + boolean initialize) throws ExplorationException { + super(dse, systemModelAdapter, partEnc, atgEnc, initialize); } /** * Constructor that generated a new {@link AbstractTaskMappingEncoding} preserving the * allocations from the given {@code partialEncoding}. * + * Constructor for UPDATES. + * * @throws ExplorationException * if no valid allocation targets can be identified for one * {@link IDeployableComponentAdapter}. */ public AbstractTaskMappingEncoding(DseSpecification dse, SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, - AbstractTaskGraphEncoding<?, ?> atgEnc, AbstractTaskMappingEncoding partialEncoding) - throws ExplorationException { - super(dse, systemModelAdapter, atgEnc, partialEncoding); + PartitionMappingEncoding partEnc, AbstractTaskGraphEncoding<?, ?> atgEnc, + AbstractTaskMappingEncoding partialEncoding) throws ExplorationException { + super(dse, systemModelAdapter, partEnc, atgEnc, partialEncoding); } /** {@inheritDoc} */ @Override public AbstractTaskMappingEntry createEntry(IDeployableComponentAdapter<?> deployableComponent, - IExecutionUnitAdapter<?> deploymentTarget) { + Partition deploymentTarget) { // Request not needed to construct a {@link FailSilentTaskMappingEncoding} if(deploymentTarget == null) { return null; @@ -119,8 +128,9 @@ public class AbstractTaskMappingEncoding extends TaskMappingEncoding<AbstractTas /** {@inheritDoc} */ @Override protected <S extends TaskMappingEntry> AbstractTaskMappingEntry createEntry(S allocEntry) { - return new AbstractTaskMappingEntry(allocEntry.getDeployableComponent(), - allocEntry.getTarget()); + // TODO: Remove the ugly casts. + return new AbstractTaskMappingEntry((IDeployableComponentAdapter<?>)allocEntry.getSource(), + (Partition)allocEntry.getTarget()); } /** {@inheritDoc} */ @@ -137,7 +147,7 @@ public class AbstractTaskMappingEncoding extends TaskMappingEncoding<AbstractTas /** {@inheritDoc} */ @Override - public Object clone() { + public AbstractTaskMappingEncoding clone() { AbstractTaskMappingEncoding clonedEncoding; try { clonedEncoding = new AbstractTaskMappingEncoding(dse, systemModelAdapter, false); @@ -150,7 +160,7 @@ public class AbstractTaskMappingEncoding extends TaskMappingEncoding<AbstractTas clonedEncoding.allocationMap = copyAllocationMap(copyAssocMap); clonedEncoding.constraintMap = copyConstraintMap(copyAssocMap); - clonedEncoding.getDeployedComponents().forEach(c -> c.updateInstatiationData()); + clonedEncoding.getRequesters().forEach(c -> c.updateInstatiationData()); return clonedEncoding; } @@ -164,6 +174,44 @@ public class AbstractTaskMappingEncoding extends TaskMappingEncoding<AbstractTas @SuppressWarnings("unchecked") @Override public Class<? extends ComposablePhenotype<?>> getPTypeToRegister() { - return (Class<? extends ComposablePhenotype<?>>)AbstractTaskMappingEncoding.class; + return AbstractTaskMappingEncoding.class; + } + + /** {@inheritDoc} */ + @Override + public <GT extends Genotype, CP extends ComposablePhenotype<GT>> CP + getSubPhenotype(Class<CP> subPhenotype) { + // TODO Auto-generated method stub + return null; + } + + /** {@inheritDoc} */ + @Override + public <GT extends Genotype, CP extends ComposablePhenotype<GT>> void + putSubPhenotype(Class<CP> subGenotype, CP curPhenotype) { + // TODO Auto-generated method stub + + } + + /** {@inheritDoc} */ + @Override + public List<ComposablePhenotype<? extends Genotype>> getSubPhenotypes() { + // TODO Auto-generated method stub + return null; + } + + /** {@inheritDoc} */ + @Override + public Set<Class<? extends ComposablePhenotype<? extends Genotype>>> keySet() { + // TODO Auto-generated method stub + return null; + } + + /** {@inheritDoc} */ + @Override + public Iterator<Entry<Class<? extends ComposablePhenotype<? extends Genotype>>, ComposablePhenotype<? extends Genotype>>> + iterator() { + // TODO Auto-generated method stub + return null; } } diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/abstractmapping/AbstractTaskMappingEntry.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/abstractmapping/AbstractTaskMappingEntry.java index a2443fb8c55f21baded28b124b7cd4b36a5e0c09..1cbda8460312a423b0740a7a73c12af511b7088c 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/abstractmapping/AbstractTaskMappingEntry.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/abstractmapping/AbstractTaskMappingEntry.java @@ -15,9 +15,9 @@ +--------------------------------------------------------------------------*/ package org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.abstractmapping; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.Partition; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.TaskMappingEntry; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IDeployableComponentAdapter; -import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IExecutionUnitAdapter; /** * {@link TaskMappingEntry} whose referenced {@link IDeployableComponentAdapter} may require @@ -25,18 +25,19 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IExecutionUnitAdapter; * * @author diewald */ -public class AbstractTaskMappingEntry extends TaskMappingEntry implements Cloneable { +public class AbstractTaskMappingEntry + extends TaskMappingEntry<IDeployableComponentAdapter<?>, Partition> implements Cloneable { /** Constructs a mapping entry the represents the mapping to a given deployment target. */ public AbstractTaskMappingEntry(IDeployableComponentAdapter<?> deployableComponent, - IExecutionUnitAdapter<?> deploymentTarget) { + Partition deploymentTarget) { super(deployableComponent, deploymentTarget); } /** {@inheritDoc} */ @Override public AbstractTaskMappingEntry clone() { - return new AbstractTaskMappingEntry(getDeployableComponent(), getTarget()); + return new AbstractTaskMappingEntry(getSource(), getTarget()); } /** {@inheritDoc} */ diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/.ratings index c81decb01a476760d239fba71bd2c4b0255813cf..c529c99bdd9f0e7f58d07675e69732c47b23fdc9 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/.ratings +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/.ratings @@ -1,6 +1,6 @@ -FailSilentTaskMappingEncoding.java ad1c0eb9db77712128aa47a2ecc8a90721f099a1 RED -FailSilentTaskMappingEntry.java 435b3a8b9ae5cf180707958aa5df81d74a7d6f2f RED -FaultDetectionVotingTaskMappingEncoding.java 1f6f2cfc1382d054c022a607e88e9471893a7121 RED -FaultDetectionVotingTaskMappingEntry.java 6e0e0bb80e3ee225cfb8e50bb212ebbfdd9cbd0f RED -InstantiatedTaskMappingEncoding.java 88862b6e5960cbd5be316d409621ac22c288ed78 RED -InstantiatedTaskMappingEntry.java d0d09aaeffabbeede9424e1eaad94dac43e345da RED +FailSilentTaskMappingEncoding.java a792b00025cd97aaef95e76c79563240df23ae00 RED +FailSilentTaskMappingEntry.java 61bdca6fdc8f36e3e82755af639fc27ab83b2ec6 RED +FaultDetectionVotingTaskMappingEncoding.java 8fb17ee77def5375fdc2630b7a28cf2b8fbf55ed RED +FaultDetectionVotingTaskMappingEntry.java bb0c1531a1173c58f07e67c41de8919fb9ad55f8 RED +InstantiatedTaskMappingEncoding.java 5b91552c0185414270ad0993dac1aac68834399f RED +InstantiatedTaskMappingEntry.java 1bb380c1f473bb9d8db1b831037e5185818bd74e RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FailSilentTaskMappingEncoding.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FailSilentTaskMappingEncoding.java index 63988fe914cbe094540fb67be793ed1a1b09caa3..dcfe74af5ccdd9b02a394e8b438cba3b0583e4a5 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FailSilentTaskMappingEncoding.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FailSilentTaskMappingEncoding.java @@ -16,15 +16,23 @@ package org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping; +import java.util.Iterator; +import java.util.List; +import java.util.Map.Entry; +import java.util.Set; + +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.taskgraph.AbstractTaskGraphEncoding; 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.extensions.compositegene.phenotype.ComposablePhenotype; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IDeployableComponentAdapter; -import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IExecutionUnitAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; import org.fortiss.af3.exploration.alg.exception.ExplorationException; import org.fortiss.af3.exploration.moea.model.DseSpecification; +import org.opt4j.core.Genotype; /** * Problem encoding consisting of redundant {@link TaskMappingEntry}s with fail-silent assumption. @@ -40,8 +48,8 @@ public class FailSilentTaskMappingEncoding */ FailSilentTaskMappingEncoding(DseSpecification dse, SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, - AbstractTaskGraphEncoding<?, ?> tgEncoding) { - super(dse, systemModelAdapter, tgEncoding); + PartitionMappingEncoding partEnc, AbstractTaskGraphEncoding<?, ?> tgEncoding) { + super(dse, systemModelAdapter, partEnc, tgEncoding); } // TODO: Check whether the two constructors below are actually needed. @@ -54,9 +62,9 @@ public class FailSilentTaskMappingEncoding */ public FailSilentTaskMappingEncoding(DseSpecification dse, SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, - AbstractTaskGraphEncoding<?, ?> tgEncoding, boolean initialize) - throws ExplorationException { - super(dse, systemModelAdapter, tgEncoding, initialize); + PartitionMappingEncoding partEnc, AbstractTaskGraphEncoding<?, ?> tgEncoding, + boolean initialize) throws ExplorationException { + super(dse, systemModelAdapter, partEnc, tgEncoding, initialize); } /** @@ -78,16 +86,15 @@ public class FailSilentTaskMappingEncoding */ public FailSilentTaskMappingEncoding(DseSpecification dse, SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, - AbstractTaskGraphEncoding<?, ?> tgEncoding, + PartitionMappingEncoding partEnc, AbstractTaskGraphEncoding<?, ?> tgEncoding, AbstractTaskMappingEncoding abstractEncoding) { - super(dse, systemModelAdapter, tgEncoding, abstractEncoding); + super(dse, systemModelAdapter, partEnc, tgEncoding, abstractEncoding); } /** {@inheritDoc} */ @Override public FailSilentTaskMappingEntry createEntry( - IDeployableComponentAdapter<?> deployableComponent, - IExecutionUnitAdapter<?> deploymentTarget) { + IDeployableComponentAdapter<?> deployableComponent, Partition deploymentTarget) { // Request not needed to construct a {@link FailSilentTaskMappingEncoding} if(deploymentTarget == null) { return null; @@ -116,7 +123,7 @@ public class FailSilentTaskMappingEncoding /** {@inheritDoc} */ @Override - public Object clone() { + public FailSilentTaskMappingEncoding clone() { // TODO: Here, we should maintain the mapping. FailSilentTaskMappingEncoding clonedEncoding; try { @@ -127,4 +134,42 @@ public class FailSilentTaskMappingEncoding } return clonedEncoding; } + + /** {@inheritDoc} */ + @Override + public <GT extends Genotype, CP extends ComposablePhenotype<GT>> CP + getSubPhenotype(Class<CP> subPhenotype) { + // TODO Auto-generated method stub + return null; + } + + /** {@inheritDoc} */ + @Override + public <GT extends Genotype, CP extends ComposablePhenotype<GT>> void + putSubPhenotype(Class<CP> subGenotype, CP curPhenotype) { + // TODO Auto-generated method stub + + } + + /** {@inheritDoc} */ + @Override + public List<ComposablePhenotype<? extends Genotype>> getSubPhenotypes() { + // TODO Auto-generated method stub + return null; + } + + /** {@inheritDoc} */ + @Override + public Set<Class<? extends ComposablePhenotype<? extends Genotype>>> keySet() { + // TODO Auto-generated method stub + return null; + } + + /** {@inheritDoc} */ + @Override + public Iterator<Entry<Class<? extends ComposablePhenotype<? extends Genotype>>, ComposablePhenotype<? extends Genotype>>> + iterator() { + // TODO Auto-generated method stub + return null; + } } diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FailSilentTaskMappingEntry.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FailSilentTaskMappingEntry.java index f8f68a0c8789187aef12cb378fcc5e205826fa71..0244614dfe9f3b82398a969ee9c8b804620bfe7e 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FailSilentTaskMappingEntry.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FailSilentTaskMappingEntry.java @@ -15,11 +15,11 @@ +--------------------------------------------------------------------------*/ package org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.Partition; 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.sysmodel.arch.IDeployableComponentAdapter; -import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IExecutionUnitAdapter; /** * {@link TaskMappingEntry} used for encoding redundant {@link FailSilentTaskMappingEncoding}s (with @@ -31,7 +31,7 @@ public class FailSilentTaskMappingEntry extends InstantiatedTaskMappingEntry imp /** Constructs a mapping entry the represents the mapping to a given deployment target. */ FailSilentTaskMappingEntry(IDeployableComponentAdapter<?> deployableComponent, - IExecutionUnitAdapter<?> deploymentTarget) { + Partition deploymentTarget) { super(deployableComponent, deploymentTarget); } @@ -47,7 +47,7 @@ public class FailSilentTaskMappingEntry extends InstantiatedTaskMappingEntry imp /** {@inheritDoc} */ @Override public FailSilentTaskMappingEntry clone() { - return new FailSilentTaskMappingEntry(getDeployableComponent(), getTarget()); + return new FailSilentTaskMappingEntry(getSource(), getTarget()); } /** {@inheritDoc} */ diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FaultDetectionVotingTaskMappingEncoding.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FaultDetectionVotingTaskMappingEncoding.java index 628291ac421ae5382ef1b18e2cd4dd207379c193..a6f89aae97ccc08a7136035a664fd239af80d100 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FaultDetectionVotingTaskMappingEncoding.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FaultDetectionVotingTaskMappingEncoding.java @@ -15,16 +15,24 @@ +--------------------------------------------------------------------------*/ package org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping; +import java.util.Iterator; +import java.util.List; +import java.util.Map.Entry; +import java.util.Set; + +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.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.extensions.compositegene.phenotype.ComposablePhenotype; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IDeployableComponentAdapter; -import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IExecutionUnitAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; import org.fortiss.af3.exploration.alg.exception.ExplorationException; import org.fortiss.af3.exploration.moea.model.DseSpecification; +import org.opt4j.core.Genotype; /** * Problem encoding of redundant {@link TaskMappingEncoding}s with fault detection and voting. @@ -40,8 +48,8 @@ public class FaultDetectionVotingTaskMappingEncoding extends */ FaultDetectionVotingTaskMappingEncoding(DseSpecification dse, SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, - AbstractTaskGraphEncoding<?, ?> tgEncoding) { - super(dse, systemModelAdapter, tgEncoding); + PartitionMappingEncoding partEnc, AbstractTaskGraphEncoding<?, ?> tgEncoding) { + super(dse, systemModelAdapter, partEnc, tgEncoding); } // TODO: Check whether the two constructors below are actually needed. @@ -54,9 +62,9 @@ public class FaultDetectionVotingTaskMappingEncoding extends */ public FaultDetectionVotingTaskMappingEncoding(DseSpecification dse, SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, - AbstractTaskGraphEncoding<?, ?> tgEncoding, boolean initialize) - throws ExplorationException { - super(dse, systemModelAdapter, tgEncoding, initialize); + PartitionMappingEncoding partEnc, AbstractTaskGraphEncoding<?, ?> tgEncoding, + boolean initialize) throws ExplorationException { + super(dse, systemModelAdapter, partEnc, tgEncoding, initialize); assert (false) : "Never here any more."; } @@ -80,16 +88,15 @@ public class FaultDetectionVotingTaskMappingEncoding extends */ public FaultDetectionVotingTaskMappingEncoding(DseSpecification dse, SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, - AbstractTaskGraphEncoding<?, ?> tgEncoding, + PartitionMappingEncoding partEnc, AbstractTaskGraphEncoding<?, ?> tgEncoding, AbstractTaskMappingEncoding abstractEncoding) { - super(dse, systemModelAdapter, tgEncoding, abstractEncoding); + super(dse, systemModelAdapter, partEnc, tgEncoding, abstractEncoding); } /** {@inheritDoc} */ @Override public FaultDetectionVotingTaskMappingEntry createEntry( - IDeployableComponentAdapter<?> deployableComponent, - IExecutionUnitAdapter<?> deploymentTarget) { + IDeployableComponentAdapter<?> deployableComponent, Partition deploymentTarget) { if(deployableComponent == null || deploymentTarget == null) { return null; } @@ -123,7 +130,7 @@ public class FaultDetectionVotingTaskMappingEncoding extends * {@inheritDoc} */ @Override - public Object clone() { + public FaultDetectionVotingTaskMappingEncoding clone() { // TODO: Here, we should maintain the mapping. FaultDetectionVotingTaskMappingEncoding clonedEncoding = null; try { @@ -135,4 +142,42 @@ public class FaultDetectionVotingTaskMappingEncoding extends } return clonedEncoding; } + + /** {@inheritDoc} */ + @Override + public <GT extends Genotype, CP extends ComposablePhenotype<GT>> CP + getSubPhenotype(Class<CP> subPhenotype) { + // TODO Auto-generated method stub + return null; + } + + /** {@inheritDoc} */ + @Override + public <GT extends Genotype, CP extends ComposablePhenotype<GT>> void + putSubPhenotype(Class<CP> subGenotype, CP curPhenotype) { + // TODO Auto-generated method stub + + } + + /** {@inheritDoc} */ + @Override + public List<ComposablePhenotype<? extends Genotype>> getSubPhenotypes() { + // TODO Auto-generated method stub + return null; + } + + /** {@inheritDoc} */ + @Override + public Set<Class<? extends ComposablePhenotype<? extends Genotype>>> keySet() { + // TODO Auto-generated method stub + return null; + } + + /** {@inheritDoc} */ + @Override + public Iterator<Entry<Class<? extends ComposablePhenotype<? extends Genotype>>, ComposablePhenotype<? extends Genotype>>> + iterator() { + // TODO Auto-generated method stub + return null; + } } diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FaultDetectionVotingTaskMappingEntry.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FaultDetectionVotingTaskMappingEntry.java index 4eba3d336081d18c0b62c1867a4e6c31b29b45d7..1c12e844ed7304450f704e92e0d97815b725c579 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FaultDetectionVotingTaskMappingEntry.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FaultDetectionVotingTaskMappingEntry.java @@ -15,11 +15,11 @@ +--------------------------------------------------------------------------*/ package org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.Partition; 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.sysmodel.arch.IDeployableComponentAdapter; -import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IExecutionUnitAdapter; /** * {@link TaskMappingEntry} used for encoding redundant @@ -27,8 +27,8 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IExecutionUnitAdapter; * * @author barner */ -public class FaultDetectionVotingTaskMappingEntry extends InstantiatedTaskMappingEntry implements - Cloneable { +public class FaultDetectionVotingTaskMappingEntry extends InstantiatedTaskMappingEntry + implements Cloneable { /** Fault detector ID */ // TODO: Investigate use of IDs in reliability analysis. private int faultDetectorID; @@ -38,7 +38,7 @@ public class FaultDetectionVotingTaskMappingEntry extends InstantiatedTaskMappin * specifies the ID of the used fault detector */ public FaultDetectionVotingTaskMappingEntry(IDeployableComponentAdapter<?> deployableComponent, - IExecutionUnitAdapter<?> target, int i) { + Partition target, int i) { super(deployableComponent, target); faultDetectorID = i; } @@ -63,8 +63,7 @@ public class FaultDetectionVotingTaskMappingEntry extends InstantiatedTaskMappin /** {@inheritDoc} */ @Override public FaultDetectionVotingTaskMappingEntry clone() { - return new FaultDetectionVotingTaskMappingEntry(getDeployableComponent(), getTarget(), - faultDetectorID); + return new FaultDetectionVotingTaskMappingEntry(getSource(), getTarget(), faultDetectorID); } /** {@inheritDoc} */ diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/InstantiatedTaskMappingEncoding.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/InstantiatedTaskMappingEncoding.java index 1158d1f3002e38c24ea37623d07fa246d7647186..d89ea96309f76aefaa9bada3421fe78360e215d8 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/InstantiatedTaskMappingEncoding.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/InstantiatedTaskMappingEncoding.java @@ -17,6 +17,7 @@ package org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.i 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.TaskMappingEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.abstractmapping.AbstractTaskMappingEncoding; @@ -39,7 +40,7 @@ import org.opt4j.core.Genotype; * @author diewald */ public abstract class InstantiatedTaskMappingEncoding<T extends InstantiatedTaskMappingEntry> - extends TaskMappingEncoding<T> { + extends TaskMappingEncoding<IDeployableComponentAdapter<?>, T> { /** * Constructor that is initialized with a reference to the DSE specification and the input @@ -47,8 +48,8 @@ public abstract class InstantiatedTaskMappingEncoding<T extends InstantiatedTask */ protected InstantiatedTaskMappingEncoding(DseSpecification dse, SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, - AbstractTaskGraphEncoding<?, ?> tgEncoding) { - super(dse, systemModelAdapter, tgEncoding); + PartitionMappingEncoding partEnc, AbstractTaskGraphEncoding<?, ?> tgEncoding) { + super(dse, systemModelAdapter, partEnc, tgEncoding); } // TODO: Check whether the two constructors below are actually needed. @@ -61,9 +62,9 @@ public abstract class InstantiatedTaskMappingEncoding<T extends InstantiatedTask */ public InstantiatedTaskMappingEncoding(DseSpecification dse, SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, - AbstractTaskGraphEncoding<?, ?> tgEncoding, boolean initialize) - throws ExplorationException { - super(dse, systemModelAdapter, tgEncoding, initialize); + PartitionMappingEncoding partEnc, AbstractTaskGraphEncoding<?, ?> tgEncoding, + boolean initialize) throws ExplorationException { + super(dse, systemModelAdapter, partEnc, tgEncoding, initialize); } /** @@ -85,9 +86,9 @@ public abstract class InstantiatedTaskMappingEncoding<T extends InstantiatedTask */ public InstantiatedTaskMappingEncoding(DseSpecification dse, SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, - AbstractTaskGraphEncoding<?, ?> tgEncoding, + PartitionMappingEncoding partEnc, AbstractTaskGraphEncoding<?, ?> tgEncoding, AbstractTaskMappingEncoding abstractEncoding) { - super(dse, systemModelAdapter, tgEncoding); + super(dse, systemModelAdapter, partEnc, tgEncoding); this.constraintMap = abstractEncoding.copyConstraintMap(null); instantiateAbstractEntries(abstractEncoding); } @@ -127,13 +128,6 @@ public abstract class InstantiatedTaskMappingEncoding<T extends InstantiatedTask return super.getDisAllowedAllocations(deployableComponent); } - /** {@inheritDoc} */ - @Override - public Object clone() { - throw new UnsupportedOperationException( - "The clone operation MUST be implemented in the concrete classes of the InstantiatedTaskMappingEncoding. Otherwise, the algorithm does not operate as expected!"); - } - /** {@inheritDoc} */ @Override public Class<? extends ComposableGenotype> getGTypeToRegister() { diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/InstantiatedTaskMappingEntry.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/InstantiatedTaskMappingEntry.java index 2880eef93ce40a9b29b9324459048812f26a5978..66230a4d6ea6fe48eb9ca5f291358ac10ee0f104 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/InstantiatedTaskMappingEntry.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/InstantiatedTaskMappingEntry.java @@ -18,11 +18,11 @@ package org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.i import java.util.ArrayList; 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.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.sysmodel.arch.IDeployableComponentAdapter; -import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IExecutionUnitAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.random.RandomExploration; /** @@ -31,11 +31,12 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.random.RandomExploration; * * @author diewald */ -public abstract class InstantiatedTaskMappingEntry extends TaskMappingEntry implements Cloneable { +public abstract class InstantiatedTaskMappingEntry + extends TaskMappingEntry<IDeployableComponentAdapter<?>, Partition> implements Cloneable { /** Constructs a mapping entry the represents the mapping to a given deployment target. */ public InstantiatedTaskMappingEntry(IDeployableComponentAdapter<?> deployableComponent, - IExecutionUnitAdapter<?> deploymentTarget) { + Partition deploymentTarget) { super(deployableComponent, deploymentTarget); } @@ -47,13 +48,13 @@ public abstract class InstantiatedTaskMappingEntry extends TaskMappingEntry impl * {@link IDeployableComponentAdapter}. */ public InstantiatedTaskMappingEntry(AbstractTaskMappingEntry abstractEntry) { - this(abstractEntry.getDeployableComponent(), abstractEntry.getTarget()); + this(abstractEntry.getSource(), abstractEntry.getTarget()); addAssociatedElement(abstractEntry); abstractEntry.addAssociatedElement(this); - if(deploymentSource.isInstantiationRequired()) { - IDeployableComponentAdapter<?> abstractComponent = deploymentSource; - deploymentSource = pickRandomReplacementComponent(deploymentSource); - deploymentSource.setReplacedComponent(abstractComponent); + if(source.isInstantiationRequired()) { + IDeployableComponentAdapter<?> abstractComponent = source; + source = pickRandomReplacementComponent(source); + source.setReplacedComponent(abstractComponent); } } @@ -67,9 +68,9 @@ public abstract class InstantiatedTaskMappingEntry extends TaskMappingEntry impl * {@code null} is returned if the given {@link IDeployableComponentAdapter} does not require * instantiation or no "replacement components were defined. */ - public IDeployableComponentAdapter<?> pickRandomReplacementComponent( - IDeployableComponentAdapter<?> abstractComponent) { - if(!deploymentSource.isInstantiationRequired()) { + public IDeployableComponentAdapter<?> + pickRandomReplacementComponent(IDeployableComponentAdapter<?> abstractComponent) { + if(!source.isInstantiationRequired()) { return null; } diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/create/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/create/.ratings index 470021b4abddf0e7e065902ad154eb2b7957a93e..a3edbd75730efdfb5b1005aa9bcd260353d8c693 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/create/.ratings +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/create/.ratings @@ -1,4 +1,4 @@ -ComposableCreator.java cd9c6cb7087d42e8b24ad53601e683f0d557d56f RED -ComposableCreatorBase.java 5b3e9f56d5be8108c461df516cbe55a0b332c42c RED +ComposableCreator.java 14cb174847cd3a0882bc4fd17cf8cbe18b2b7f36 RED +ComposableCreatorBase.java 0364eb1b0251e1548111be3d24207f21e92d0ea6 RED CompositeCreator.java 65ab9f283191b081e40e8587431fd0a95f1daca6 RED -CompositeCreatorBase.java 9745357269c56c95fed0b92b8eb702f0834fe3fa RED +CompositeCreatorBase.java ce0a74a4b8acf68069534443468f4995a091139e RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/create/ComposableCreator.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/create/ComposableCreator.java index 9a3919f4f00f78fd7335859ef5db8d5f02239821..5b5a4e83dad89aae34cb00fc89904c8bd955e101 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/create/ComposableCreator.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/create/ComposableCreator.java @@ -116,5 +116,5 @@ public interface ComposableCreator<G extends ComposableGenotype> { G genotype, FlatPhenotypeMap<Phenotype> decodedPhenotypes) throws DecodingException; /** Returns the type of the created {@link IExplorationEncoding} / {@link Genotype}. */ - Class<? extends IExplorationEncoding> getCreatedEncoding(); + Class<? extends IExplorationEncoding> getCreatedEncodingType(); } diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/create/ComposableCreatorBase.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/create/ComposableCreatorBase.java index a8c656768facb11a1aa86ff328c6ec2a18eb6be7..f9c8b7b5cbb1bd827c44a2da87655cf768b334d2 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/create/ComposableCreatorBase.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/create/ComposableCreatorBase.java @@ -33,6 +33,7 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegen import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.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.sysmodel.arch.IDeployableComponentAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; import org.fortiss.af3.exploration.alg.service.IExplorationEncoding; import org.fortiss.af3.exploration.alg.util.ExplorationAlgDebugUtils; @@ -45,8 +46,8 @@ import org.opt4j.core.problem.Decoder; * * @author diewald */ -public abstract class ComposableCreatorBase<G extends ComposableGenotype> implements - ComposableCreator<G> { +public abstract class ComposableCreatorBase<G extends ComposableGenotype> + implements ComposableCreator<G> { /** References the input models */ protected SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter; @@ -113,13 +114,13 @@ public abstract class ComposableCreatorBase<G extends ComposableGenotype> implem intermediatePhenos.addAll(decodedPhenotypes); @SuppressWarnings("unchecked") Optional<? extends ComposableDecoder<G, P>> idDecoder = - (Optional<? extends ComposableDecoder<G, P>>)subDecoders - .stream() - .filter(d -> Arrays.asList(genotype.getClass()).containsAll( - d.getRequiredTypes())).findAny(); + (Optional<? extends ComposableDecoder<G, P>>)subDecoders.stream().filter( + d -> Arrays.asList(genotype.getClass()).containsAll(d.getRequiredTypes())) + .findAny(); for(ComposableDecoder<G, ? extends ComposablePhenotype<G>> decoder : subDecoders) { - if(!isHybridPhenoRequiredAndCreated(createdGenotypeTypeSet, decoder.getRequiredTypes()) || + if(!isHybridPhenoRequiredAndCreated(createdGenotypeTypeSet, + decoder.getRequiredTypes()) || Genotype.class.isAssignableFrom(decoder.getOutputType())) { continue; } @@ -144,8 +145,8 @@ public abstract class ComposableCreatorBase<G extends ComposableGenotype> implem if(decPhenotype != null) { if(decPhenotype instanceof TaskMappingEncoding && - !ExplorationAlgDebugUtils - .checkTaskMappingForSFConsistency((TaskMappingEncoding<?>)decPhenotype)) { + !ExplorationAlgDebugUtils.checkTaskMappingForSFConsistency( + (TaskMappingEncoding<IDeployableComponentAdapter<?>, ?>)decPhenotype)) { // TODO: Remove this debug code. Is an Exception required instead? System.out.println("Error."); } @@ -175,9 +176,7 @@ public abstract class ComposableCreatorBase<G extends ComposableGenotype> implem /** {@inheritDoc} */ @Override - public - <P extends ComposablePhenotype<G>> - FlatPhenotypeMap<Phenotype> + public <P extends ComposablePhenotype<G>> FlatPhenotypeMap<Phenotype> identityDecodeCreatedGenotype(G genotype, FlatPhenotypeMap<Phenotype> decodedPhenotypes) throws DecodingException { FlatPhenotypeMap<Phenotype> phenotypes = @@ -189,10 +188,9 @@ public abstract class ComposableCreatorBase<G extends ComposableGenotype> implem // If an identity decoder is present, execute it before any other decoder to ensure all // required data is available to the decoders. @SuppressWarnings("unchecked") Optional<? extends ComposableDecoder<G, P>> idDecoder = - (Optional<? extends ComposableDecoder<G, P>>)subDecoders - .stream() - .filter(d -> Arrays.asList(genotype.getClass()).containsAll( - d.getRequiredTypes())).findAny(); + (Optional<? extends ComposableDecoder<G, P>>)subDecoders.stream().filter( + d -> Arrays.asList(genotype.getClass()).containsAll(d.getRequiredTypes())) + .findAny(); if(idDecoder.isPresent()) { P decPhenotype = idDecoder.get().decodeComposable(genotype, intermediatePhenos); if(decPhenotype == null) { diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/create/CompositeCreatorBase.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/create/CompositeCreatorBase.java index 7fd8c53d3ad44c5e20b52040cb03c60a96fc13a7..afe74ae692324b190a3db4bd0a5efc6a2f4cdb0e 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/create/CompositeCreatorBase.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/create/CompositeCreatorBase.java @@ -113,7 +113,7 @@ public abstract class CompositeCreatorBase<G extends CompositeGenotype<Class<? e @SuppressWarnings("unchecked") ComposableCreator<N> curCastedCreator = (ComposableCreator<N>)curCreator; @SuppressWarnings("unchecked") Class<P> createdType = - (Class<P>)curCreator.getCreatedEncoding(); + (Class<P>)curCreator.getCreatedEncodingType(); N curGenotype = subGenotype; if(!subGenotypeClass.equals(createdType)) { @SuppressWarnings("unchecked") N castedCurGenotype = diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/graph/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/graph/.ratings index f1c3df36900c49a2c88cee40d96b52969b591826..f66a02fd4ada571cf38f2fbc510c312e3720a7cf 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/graph/.ratings +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/graph/.ratings @@ -1,2 +1,2 @@ -DecoderDependencyGraph.java 6fb00c0c57d1da052b5193f029408c561fc1e2a6 RED +DecoderDependencyGraph.java 9d2cb0db817f2372d675caba7e2e3128ded00b45 RED DecoderEdge.java 364767c6d4b15b02830e1c58a47f28f6e3bf3fcb RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/graph/DecoderDependencyGraph.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/graph/DecoderDependencyGraph.java index aed571b32bde74eba331e43d12ca24853dd68fd1..bcfe90be039864e74690a21b9d2d6a4dea872d84 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/graph/DecoderDependencyGraph.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/graph/DecoderDependencyGraph.java @@ -64,7 +64,7 @@ public class DecoderDependencyGraph if(!dependencyDagGraph .containsVertex((Class<? extends IExplorationEncoding>)reqEnc) && !registeredCreators.stream().anyMatch( - c -> c.getCreatedEncoding().equals(reqEnc)) && + c -> c.getCreatedEncodingType().equals(reqEnc)) && !sysModelEncodings.contains(reqEnc)) { throw new MissingDependencyException(dec, (Class<? extends IExplorationEncoding>)reqEnc, ""); diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/copy/partitionmapping/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/copy/partitionmapping/.ratings new file mode 100644 index 0000000000000000000000000000000000000000..de77162afd62be1bd2ae76dda7e228d9bb0a19eb --- /dev/null +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/copy/partitionmapping/.ratings @@ -0,0 +1,2 @@ +CopyPartitionMapping.java d70d75d2c4ad2e31461d3735ccb12087aa9eff10 RED +CopyPartitionMappingModule.java 679212216ca3f9ae3fbeeaeeeeb5813dc762952d RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/copy/partitionmapping/CopyPartitionMapping.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/copy/partitionmapping/CopyPartitionMapping.java new file mode 100644 index 0000000000000000000000000000000000000000..2a5e12e6093bcc4e25ad8c3a32a7abd2ce72bc40 --- /dev/null +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/copy/partitionmapping/CopyPartitionMapping.java @@ -0,0 +1,33 @@ +/*-------------------------------------------------------------------------+ +| Copyright 2014 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.operator.copy.partitionmapping; + +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.opt4j.operators.copy.Copy; + +/** + * Operator that creates copies of a {@link TaskMappingEncoding}s. + * + * @author huang + */ +public class CopyPartitionMapping implements Copy<PartitionMappingEncoding> { + /** {@inheritDoc} */ + @Override + public PartitionMappingEncoding copy(PartitionMappingEncoding other) { + return ((PartitionMappingEncoding)other).clone(); + } +} diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/copy/partitionmapping/CopyPartitionMappingModule.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/copy/partitionmapping/CopyPartitionMappingModule.java new file mode 100644 index 0000000000000000000000000000000000000000..3e2539c219d0ec618ee4b155bbcb910e48520672 --- /dev/null +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/copy/partitionmapping/CopyPartitionMappingModule.java @@ -0,0 +1,32 @@ +/*-------------------------------------------------------------------------+ +| Copyright 2014 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.operator.copy.partitionmapping; + +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.TaskMappingEncoding; +import org.opt4j.operators.copy.CopyModule; + +/** + * Opt4J module for the general copy operator of {@link TaskMappingEncoding}s. + * + * @author huang + */ +public class CopyPartitionMappingModule extends CopyModule { + /** {@inheritDoc} */ + @Override + protected void config() { + addOperator(CopyPartitionMapping.class); + } +} diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/copy/taskmapping/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/copy/taskmapping/.ratings index 3bdeb5b8664327cc0b1af51385535bd9ee3374d9..5ed817869cd8b641af62643740f1aa8d71f60754 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/copy/taskmapping/.ratings +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/copy/taskmapping/.ratings @@ -1,3 +1,3 @@ CopyAbstractTaskMapping.java edbd8e4cc926cf2e055e024011ce67c009fe0d8b RED -CopyInstanceTaskMapping.java 2a29909a2c3d4130a9b5ed7dabc23804267effaf RED +CopyInstanceTaskMapping.java 902538ef9927500d5e16ff8b50364560bed10a6b RED CopyTaskMappingModule.java 4904f2062265901c4a9d070449a06d40f6c054a4 RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/copy/taskmapping/CopyInstanceTaskMapping.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/copy/taskmapping/CopyInstanceTaskMapping.java index 70370a580f690be95ed7f4329bffcb3b2ab99087..9a7cf966b8b63ff2f82131ac803ce604564722b2 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/copy/taskmapping/CopyInstanceTaskMapping.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/copy/taskmapping/CopyInstanceTaskMapping.java @@ -26,8 +26,9 @@ import org.opt4j.operators.copy.Copy; */ public class CopyInstanceTaskMapping implements Copy<InstantiatedTaskMappingEncoding<?>> { /** {@inheritDoc} */ + @SuppressWarnings("rawtypes") @Override public InstantiatedTaskMappingEncoding<?> copy(InstantiatedTaskMappingEncoding<?> other) { - return (InstantiatedTaskMappingEncoding<?>)other.clone(); + return (InstantiatedTaskMappingEncoding)other.clone(); } } diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/crossover/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/crossover/.ratings index 548fa1707d186ff5aa038a632eda35d7780fc576..dbbda0b305935adb5022caa17ddb9d4365f7ae50 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/crossover/.ratings +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/crossover/.ratings @@ -1,8 +1,8 @@ CrossoverAbstractTaskMappingModule.java db35eba8d31ba9c7054174d97990a70fdef2e8ab RED -CrossoverAllocationBase.java a50c7c5d81ae8ce4f548ac022a8222e1fb89c0d6 RED +CrossoverAllocationBase.java f4253fb477d11ef8071ded1084b3ba4a8536a71d RED CrossoverOperatorModuleBase.java 03f237eba55f15043082bb1f5cc47f052cb24d33 RED -CrossoverRandManyAllocation.java 0b6dca5762d61d9beb4d51874a54f4d6a363318a RED -CrossoverSingleAllocation.java ab5f486daba37ba00da19756806ab6e257982546 RED +CrossoverRandManyAllocation.java b24cef44f25dfed6429e933281b8da3be681580c RED +CrossoverSingleAllocation.java 1f4607e9a03f9627b56d4a04b7dcde0c37bf460f RED NopCrossover.java 70500c9db651250298c97e261e4f8a0d8b6941e3 RED NopCrossoverInstantiatedTaskMappingModule.java 95156489b862633b428a87df2ae51aa304c7f6f1 RED NopCrossoverSFArchModule.java 65379d3a5e26993de3cb72856e0e66b645e8b064 RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/crossover/CrossoverAllocationBase.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/crossover/CrossoverAllocationBase.java index 97f9450507b099398ae0e8850fa8ad953bfe9faa..3aeb5e2b704b6bb53758ff77fe19b2dd36788985 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/crossover/CrossoverAllocationBase.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/crossover/CrossoverAllocationBase.java @@ -22,6 +22,7 @@ import java.util.ArrayList; import java.util.List; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.comm.constraint.InternalIsolatedCommunicationSet; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.Partition; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.TaskMappingEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.TaskMappingEntry; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IDeployableComponentAdapter; @@ -41,7 +42,7 @@ import com.google.common.collect.HashBiMap; * @author huang * @author diewald */ -public abstract class CrossoverAllocationBase<S extends TaskMappingEntry, T extends TaskMappingEncoding<S>> +public abstract class CrossoverAllocationBase<S extends TaskMappingEntry<IDeployableComponentAdapter<?>, Partition>, T extends TaskMappingEncoding<IDeployableComponentAdapter<?>, S>> implements Crossover<T> { /** Reference to the {@link SystemModelAdapter} which handles the input models. */ @@ -80,12 +81,10 @@ public abstract class CrossoverAllocationBase<S extends TaskMappingEntry, T exte int sizeDiff = max(size1, size2) - min(size1, size2); int offset = rand.nextInt(sizeDiff + 1); for(int i = 0; i < min(size1, size2); i++) { - S elem1 = - size1 > size2 ? newAssignedResources1.get(i + offset) : newAssignedResources1 - .get(i); - S elem2 = - size2 > size1 ? newAssignedResources2.get(i + offset) : newAssignedResources2 - .get(i); + S elem1 = size1 > size2 ? newAssignedResources1.get(i + offset) + : newAssignedResources1.get(i); + S elem2 = size2 > size1 ? newAssignedResources2.get(i + offset) + : newAssignedResources2.get(i); swapMap.put(elem1, elem2); if(size1 > size2) { newAssignedResources1.set(i + offset, elem2); diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/crossover/CrossoverRandManyAllocation.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/crossover/CrossoverRandManyAllocation.java index 6b4704ac9773d0c1d8f7b8286316621064f10630..e5dd97810201b81a0acf7477fea33b23bec60e44 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/crossover/CrossoverRandManyAllocation.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/crossover/CrossoverRandManyAllocation.java @@ -15,6 +15,7 @@ +--------------------------------------------------------------------------*/ package org.fortiss.af3.exploration.alg.dse.backend.opt4j.operator.crossover; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.Partition; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.TaskMappingEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.TaskMappingEntry; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IDeployableComponentAdapter; @@ -30,7 +31,7 @@ import org.opt4j.operators.crossover.Pair; * @author huang * @author diewald */ -public class CrossoverRandManyAllocation<S extends TaskMappingEntry, T extends TaskMappingEncoding<S>> +public class CrossoverRandManyAllocation<S extends TaskMappingEntry<IDeployableComponentAdapter<?>, Partition>, T extends TaskMappingEncoding<IDeployableComponentAdapter<?>, S>> extends CrossoverAllocationBase<S, T> { /** Constructor that allows to set the cross-over rate */ @@ -45,7 +46,7 @@ public class CrossoverRandManyAllocation<S extends TaskMappingEntry, T extends T @SuppressWarnings("unchecked") T newEncoding1 = (T)encoding1.clone(); @SuppressWarnings("unchecked") T newEncoding2 = (T)encoding2.clone(); - for(IDeployableComponentAdapter<?> deployableComponent : encoding1.getDeployedComponents()) { + for(IDeployableComponentAdapter<?> deployableComponent : encoding1.getRequesters()) { if(rand.nextDouble() < rate) { crossoverAllocation(deployableComponent, newEncoding1, newEncoding2); } @@ -53,9 +54,9 @@ public class CrossoverRandManyAllocation<S extends TaskMappingEntry, T extends T // Check whether the a modification happened, if not enforce one. if(newEncoding1 == encoding1 || newEncoding1 == encoding2) { - int randomIdx = encoding1.getDeployedComponents().toArray().length - 1; + int randomIdx = encoding1.getRequesters().toArray().length - 1; IDeployableComponentAdapter<?> randomlySelectedComponent = - (IDeployableComponentAdapter<?>)encoding1.getDeployedComponents().toArray()[randomIdx]; + (IDeployableComponentAdapter<?>)encoding1.getRequesters().toArray()[randomIdx]; crossoverAllocation(randomlySelectedComponent, newEncoding1, newEncoding2); } diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/crossover/CrossoverSingleAllocation.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/crossover/CrossoverSingleAllocation.java index fdeba39511bda1c8148e4db53d3d61d836d35bca..6def3c5e6dbde476501a42d8bb145f1bdd122054 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/crossover/CrossoverSingleAllocation.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/crossover/CrossoverSingleAllocation.java @@ -15,6 +15,7 @@ +--------------------------------------------------------------------------*/ package org.fortiss.af3.exploration.alg.dse.backend.opt4j.operator.crossover; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.Partition; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.TaskMappingEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.TaskMappingEntry; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IDeployableComponentAdapter; @@ -29,7 +30,7 @@ import org.opt4j.operators.crossover.Pair; * * @author diewald */ -public class CrossoverSingleAllocation<S extends TaskMappingEntry, T extends TaskMappingEncoding<S>> +public class CrossoverSingleAllocation<S extends TaskMappingEntry<IDeployableComponentAdapter<?>, Partition>, T extends TaskMappingEncoding<IDeployableComponentAdapter<?>, S>> extends CrossoverAllocationBase<S, T> { /** Constructor that allows to set the cross-over rate */ @@ -44,10 +45,10 @@ public class CrossoverSingleAllocation<S extends TaskMappingEntry, T extends Tas @SuppressWarnings("unchecked") T newEncoding1 = (T)encoding1.clone(); @SuppressWarnings("unchecked") T newEncoding2 = (T)encoding2.clone(); - int deplCompSize = encoding1.getDeployedComponents().toArray().length; + int deplCompSize = encoding1.getRequesters().toArray().length; int randomIdx = rand.nextInt(deplCompSize - 1); IDeployableComponentAdapter<?> randomlySelectedComponent = - (IDeployableComponentAdapter<?>)encoding1.getDeployedComponents().toArray()[randomIdx]; + (IDeployableComponentAdapter<?>)encoding1.getRequesters().toArray()[randomIdx]; // TODO: Improve Crossover operator to respect allocation constraints. // boolean didCrossover = false; diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/partitionmapping/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/partitionmapping/.ratings new file mode 100644 index 0000000000000000000000000000000000000000..19f115e01bff1ba36421ed45ccc9b6602cac8447 --- /dev/null +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/partitionmapping/.ratings @@ -0,0 +1,4 @@ +MutatePartitionBase.java 739af618e683706a4550a162813a987219176a11 RED +MutatePartitionDecrement.java 741a0280e5e65d5360dba834e926cc879b9bd94a RED +MutatePartitionIncrement.java e550d00c767f2350b7b6f7d664d3b7766e71059c RED +PartitionMappingModule.java 379d07cd5495d4ddc657269a85962d95fde1287c RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/partitionmapping/MutatePartitionBase.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/partitionmapping/MutatePartitionBase.java new file mode 100644 index 0000000000000000000000000000000000000000..e983d69f5a64ac1d0eacb9d9d8d13ba332fa8aaa --- /dev/null +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/partitionmapping/MutatePartitionBase.java @@ -0,0 +1,56 @@ +/*-------------------------------------------------------------------------+ +| Copyright 2017 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.operator.mutate.partitionmapping; + +import java.util.Collection; +import java.util.function.Consumer; +import java.util.function.Function; + +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.PartitionMappingEncoding; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.operator.mutate.MutateBase; +import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IResourceAdapter; +import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; + +/** + * Base class for the mutation functions operating on the Partition to ExecutionUnit mapping, e.g. + * cores. + * + * @author diewald + */ +public abstract class MutatePartitionBase extends MutateBase<PartitionMappingEncoding> { + /** Elements to which other elements may be allocated. */ + private Collection<IResourceAdapter<?>> allocationTargets; + + /** Defines the rate at which mutations shall happen: Typically 1 / size of the gene. */ + private double rate; + + /** Constructor. */ + public MutatePartitionBase(SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter) { + super(systemModelAdapter); + // TODO: The statement below hard-wires the module. + this.allocationTargets.addAll(systemModelAdapter.getDeploymentTargets()); + this.rate = 1 / allocationTargets.size(); + } + + /** Applies the given mutation {@link Function} to the allocation targets. */ + protected <R> void mutate(Consumer<IResourceAdapter<?>> manipulationFct) { + for(IResourceAdapter<?> resource : allocationTargets) { + if(rand.nextDouble() < rate) { + manipulationFct.accept(resource); + } + } + } +} diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/partitionmapping/MutatePartitionDecrement.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/partitionmapping/MutatePartitionDecrement.java new file mode 100644 index 0000000000000000000000000000000000000000..a22acd63fb772a2454c285f1200a7491789fd6f5 --- /dev/null +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/partitionmapping/MutatePartitionDecrement.java @@ -0,0 +1,46 @@ +/*-------------------------------------------------------------------------+ +| Copyright 2017 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.operator.mutate.partitionmapping; + +import java.util.function.Consumer; +import java.util.stream.Stream; + +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.PartitionMappingEncoding; +import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IResourceAdapter; +import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; + +/** + * Mutation operator that randomly selects resources from which to remove a random partition. The + * rate is designed such that one resource is selected in average. + * + * @author diewald + */ +public class MutatePartitionDecrement extends MutatePartitionBase { + + /** Constructor. */ + public MutatePartitionDecrement(SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter) { + super(systemModelAdapter); + } + + /** {@inheritDoc} */ + @Override + public void mutate(PartitionMappingEncoding genotype, double p) { + Consumer<IResourceAdapter<?>> remove = (res) -> genotype.removeRandomPartition(res); + Stream<IResourceAdapter<?>> resStream = genotype.getResources().stream(); + resStream.filter((res) -> rand.nextDouble() < p).forEach(remove); + } + +} diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/partitionmapping/MutatePartitionIncrement.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/partitionmapping/MutatePartitionIncrement.java new file mode 100644 index 0000000000000000000000000000000000000000..e1625d6f521f03547b4e13d972b8708547446010 --- /dev/null +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/partitionmapping/MutatePartitionIncrement.java @@ -0,0 +1,46 @@ +/*-------------------------------------------------------------------------+ +| Copyright 2017 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.operator.mutate.partitionmapping; + +import java.util.function.Consumer; +import java.util.stream.Stream; + +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.PartitionMappingEncoding; +import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IResourceAdapter; +import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; + +/** + * Mutation operator that randomly selects resources for which to create a partition. The + * rate is designed such that one resource is selected in average. + * + * @author diewald + */ +public class MutatePartitionIncrement extends MutatePartitionBase { + + /** Constructor. */ + public MutatePartitionIncrement(SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter) { + super(systemModelAdapter); + } + + /** {@inheritDoc} */ + @Override + public void mutate(PartitionMappingEncoding genotype, double p) { + Consumer<IResourceAdapter<?>> create = (res) -> genotype.createPartition(res); + Stream<IResourceAdapter<?>> resStream = genotype.getResources().stream(); + resStream.filter((res) -> rand.nextDouble() < p).forEach(create); + } + +} diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/partitionmapping/PartitionMappingModule.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/partitionmapping/PartitionMappingModule.java new file mode 100644 index 0000000000000000000000000000000000000000..186360b7d693cd3097558391f3f67128be9af278 --- /dev/null +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/partitionmapping/PartitionMappingModule.java @@ -0,0 +1,45 @@ +/*-------------------------------------------------------------------------+ +| Copyright 2017 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.operator.mutate.partitionmapping; + +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.PartitionMappingEncoding; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.operator.mutate.MutateOperatorModuleBase; +import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; + +/** + * + * @author diewald + */ +public class PartitionMappingModule extends MutateOperatorModuleBase { + /** Representation of input system */ + private SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter; + + /** Constructor where the input system model has to be specified. */ + public PartitionMappingModule(SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter) { + this.systemModelAdapter = systemModelAdapter; + } + + /** {@inheritDoc} */ + @Override + public void config() { + super.config(); + + addOperatorInstance(PartitionMappingEncoding.class, + new MutatePartitionDecrement(systemModelAdapter)); + addOperatorInstance(PartitionMappingEncoding.class, + new MutatePartitionIncrement(systemModelAdapter)); + } +} diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/taskmapping/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/taskmapping/.ratings index 8854afbbb26255b45933f2bf6e09b7030eb55405..a638b0cb36dee4c365cdb4f3c67c6c6163b40006 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/taskmapping/.ratings +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/taskmapping/.ratings @@ -1,6 +1,6 @@ -MutateAllocation.java 61d5e7d78fe5e140364273f1384278fb37ad7896 RED -MutateRedundancy.java 14b611eef209bbee745f888fa57fad0284acb2be RED -MutateRedundancyDecrement.java 72e48041593f80558be59c43da0a80b87d65df45 RED -MutateRedundancyIncrement.java b25ce62578f289b9496a60d45c9f59217a99b248 RED -MutateTaskMappingModule.java f83c4c5526781cfd40442c697e8125b1d1dd2a9e RED -MutateTasksBase.java 3f76321cad681dc48632aff0ed206857e8a86441 RED +MutateAllocation.java 4be3752ce942ef18fdf362d8b96b5947a0edc68a RED +MutateRedundancy.java 05466c1910bdf50c849cf22f8e668426e6fad0d3 RED +MutateRedundancyDecrement.java 3a000150f2e86902b9ce85c7672884e94fa19cc4 RED +MutateRedundancyIncrement.java f6093ed138ecc6a6cd3282df8440f8fcdb40aa53 RED +MutateTaskMappingModule.java 22c97eb8bd2dbf8a5a9eae145010f4fa14932c8c RED +MutateTasksBase.java f0d224a24113d04b3f60a749f74b8aa5a9349204 RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/taskmapping/MutateAllocation.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/taskmapping/MutateAllocation.java index 03089666593b0b017e7ef44b584a67a5dae2f201..e596d41f721615f4c99b43c32c64ba866e700d48 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/taskmapping/MutateAllocation.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/taskmapping/MutateAllocation.java @@ -21,6 +21,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.List; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.Partition; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.TaskMappingEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.TaskMappingEntry; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IDeployableComponentAdapter; @@ -34,7 +35,7 @@ import org.fortiss.af3.exploration.alg.exception.ExplorationException; * * @author huang */ -public class MutateAllocation<S extends TaskMappingEntry, T extends TaskMappingEncoding<S>> +public class MutateAllocation<S extends TaskMappingEntry<IDeployableComponentAdapter<?>, Partition>, T extends TaskMappingEncoding<IDeployableComponentAdapter<?>, S>> extends MutateTasksBase<S, T> { /** Constructs a new allocation mutation operator for a given exploration run */ @@ -51,7 +52,7 @@ public class MutateAllocation<S extends TaskMappingEntry, T extends TaskMappingE checkReplicationCount(encoding); Collection<IDeployableComponentAdapter<?>> encDeplComponents = - new ArrayList<>(encoding.getDeployedComponents()); + new ArrayList<>(encoding.getRequesters()); for(IDeployableComponentAdapter<?> deployableComponent : encDeplComponents) { if(rand.nextDouble() < rate) { Collection<S> assignedResources = encoding.getMappingEntriesOf(deployableComponent); @@ -95,7 +96,8 @@ public class MutateAllocation<S extends TaskMappingEntry, T extends TaskMappingE IDeployableComponentAdapter<?> deployableComponent) throws ExplorationException { // The assigned resources must be an indexed list, such that randomly determined allocations // can be directly removed using a random number generator. - List<S> assignedResources = encoding.getMappingEntriesOf(deployableComponent); + List<S> assignedResources = + new ArrayList<>(encoding.getMappingEntriesOf(deployableComponent)); if(assignedResources.isEmpty()) { return; } @@ -107,13 +109,15 @@ public class MutateAllocation<S extends TaskMappingEntry, T extends TaskMappingE // This respects {@link ExcludeDeploymentConstraint}s. if(encoding.hasLimitedDeployment(deployableComponent)) { - List<IExecutionUnitAdapter<?>> targets = + List<IExecutionUnitAdapter<?>> physExecUnits = new ArrayList<>(encoding.getAllowedAllocations(deployableComponent)); + List<Partition> targets = encoding.getAllowedPartitionTargets(physExecUnits); int selExecU = max(0, rand.nextInt(targets.size()) - 1); selectedEntry.resetTarget(targets.get(selExecU)); } else { - List<IExecutionUnitAdapter<?>> targets = + List<IExecutionUnitAdapter<?>> physExecUnits = new ArrayList<>(systemModelAdapter.getDeploymentTargets()); + List<Partition> targets = encoding.getAllowedPartitionTargets(physExecUnits); int selExecU = max(0, rand.nextInt(targets.size()) - 1); selectedEntry.resetTarget(targets.get(selExecU)); } diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/taskmapping/MutateRedundancy.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/taskmapping/MutateRedundancy.java index cdca219977907049f34885a0591d765cc6fa7109..1bd4f9bf7a61675a3c90a50b081c7905ae8a3313 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/taskmapping/MutateRedundancy.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/taskmapping/MutateRedundancy.java @@ -18,6 +18,7 @@ package org.fortiss.af3.exploration.alg.dse.backend.opt4j.operator.mutate.taskma import java.util.Collection; import java.util.Optional; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.Partition; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.TaskMappingEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.TaskMappingEntry; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.constraint.InternalReplicationConstraint; @@ -30,7 +31,7 @@ import org.fortiss.af3.exploration.alg.exception.ExplorationException; * * @author huang */ -public abstract class MutateRedundancy<S extends TaskMappingEntry, T extends TaskMappingEncoding<S>> +public abstract class MutateRedundancy<S extends TaskMappingEntry<IDeployableComponentAdapter<?>, Partition>, T extends TaskMappingEncoding<IDeployableComponentAdapter<?>, S>> extends MutateTasksBase<S, T> { /** Constructs a new redundancy mutation operator for a given exploration run */ @@ -41,13 +42,13 @@ public abstract class MutateRedundancy<S extends TaskMappingEntry, T extends Tas /** {@inheritDoc} */ @Override public void mutate(T encoding, double rate) { - for(IDeployableComponentAdapter<?> deployableComponent : encoding.getDeployedComponents()) { + for(IDeployableComponentAdapter<?> deployableComponent : encoding.getRequesters()) { if(rand.nextDouble() < rate) { // TODO: remove filter for fixed Deployment: It is not needed. // No replication for Components with a fixed Deployment & Components which shall // not be replicated (see the SystemModelAdapter). - if(!encoding.hasLimitedDeployment(deployableComponent) && - systemModelAdapter.getReplicableComponents().contains(deployableComponent)) { + if(!encoding.hasLimitedDeployment(deployableComponent) && systemModelAdapter + .getReplicableComponents().contains(deployableComponent)) { // TODO: Model minimum and maximum replication count as constraint? // Do the actual mutation of the allocation of the current request @@ -56,11 +57,10 @@ public abstract class MutateRedundancy<S extends TaskMappingEntry, T extends Tas int maxReplication = deployableComponent.getMaxReplication(); Collection<InternalReplicationConstraint> replConstraints = encoding.getConstraintsOf(InternalReplicationConstraint.class); - Optional<InternalReplicationConstraint> curReplConstraint = - replConstraints - .stream() - .filter(c -> c.getReplicationObject() == deployableComponent) - .findAny(); + Optional<InternalReplicationConstraint> curReplConstraint = replConstraints + .stream() + .filter(c -> c.getReplicationObject() == deployableComponent) + .findAny(); if(curReplConstraint.isPresent()) { minReplication = curReplConstraint.get().getMin(); maxReplication = curReplConstraint.get().getMax(); diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/taskmapping/MutateRedundancyDecrement.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/taskmapping/MutateRedundancyDecrement.java index 008fd31d1657a8f4dd2716c1fabdcf830275bf58..83d53e4638959e764d12d18242c87ef01198bd0a 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/taskmapping/MutateRedundancyDecrement.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/taskmapping/MutateRedundancyDecrement.java @@ -17,6 +17,7 @@ package org.fortiss.af3.exploration.alg.dse.backend.opt4j.operator.mutate.taskma import java.util.List; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.Partition; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.TaskMappingEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.TaskMappingEntry; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IDeployableComponentAdapter; @@ -27,7 +28,7 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; * * @author huang */ -public class MutateRedundancyDecrement<S extends TaskMappingEntry, T extends TaskMappingEncoding<S>> +public class MutateRedundancyDecrement<S extends TaskMappingEntry<IDeployableComponentAdapter<?>, Partition>, T extends TaskMappingEncoding<IDeployableComponentAdapter<?>, S>> extends MutateRedundancy<S, T> { /** Constructs a new decrement redundancy mutation operator for a given exploration run */ diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/taskmapping/MutateRedundancyIncrement.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/taskmapping/MutateRedundancyIncrement.java index 80a06ea7528c68e73552f553ef9f2bba7d350ea2..a19a8eecf21575eb5b1c45b5725ee285900c8326 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/taskmapping/MutateRedundancyIncrement.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/taskmapping/MutateRedundancyIncrement.java @@ -18,6 +18,7 @@ package org.fortiss.af3.exploration.alg.dse.backend.opt4j.operator.mutate.taskma import java.util.Collection; import org.conqat.lib.commons.collections.CollectionUtils; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.Partition; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.TaskMappingEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.TaskMappingEntry; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IDeployableComponentAdapter; @@ -29,7 +30,7 @@ import org.fortiss.af3.exploration.alg.exception.ExplorationException; * * @author huang */ -public class MutateRedundancyIncrement<S extends TaskMappingEntry, T extends TaskMappingEncoding<S>> +public class MutateRedundancyIncrement<S extends TaskMappingEntry<IDeployableComponentAdapter<?>, Partition>, T extends TaskMappingEncoding<IDeployableComponentAdapter<?>, S>> extends MutateRedundancy<S, T> { /** Constructs a new increment redundancy mutation operator for a given exploration run */ public MutateRedundancyIncrement(SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter) { @@ -53,8 +54,8 @@ public class MutateRedundancyIncrement<S extends TaskMappingEntry, T extends Tas // The following code ensures an equal distribution of temporal and spatial replication if(rand.nextBoolean()) { assignedResources.add(encoding.createRandomEntry(deployableComponent, - CollectionUtils.asRandomAccessList(encoding - .getMappingTargetsOf(deployableComponent)))); + CollectionUtils.asRandomAccessList( + encoding.getAllocatedResourcesFor(deployableComponent)))); } else { assignedResources.add(encoding.createRandomEntry(deployableComponent)); } diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/taskmapping/MutateTaskMappingModule.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/taskmapping/MutateTaskMappingModule.java index 5d83b0c6fac342a53dc97daebef4fb88ddd39e54..ffa7e5af48040496e6822dd50319a53f153cf398 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/taskmapping/MutateTaskMappingModule.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/taskmapping/MutateTaskMappingModule.java @@ -44,7 +44,7 @@ public class MutateTaskMappingModule extends MutateOperatorModuleBase { @Override public void config() { super.config(); - TaskMappingFactory<? extends TaskMappingEntry, ? extends TaskMappingEncoding<?>> tmFactory = + TaskMappingFactory<? extends TaskMappingEntry<?, ?>, ? extends TaskMappingEncoding<?, ?>> tmFactory = TaskMappingFactory.getInstance(); addOperatorInstance(AbstractTaskMappingEncoding.class, diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/taskmapping/MutateTasksBase.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/taskmapping/MutateTasksBase.java index 98e1c8e707ed28bc2316310d5f37125f5b616af6..10598f170088f7981f759094515235f97d5b6b18 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/taskmapping/MutateTasksBase.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/taskmapping/MutateTasksBase.java @@ -15,9 +15,11 @@ +--------------------------------------------------------------------------*/ package org.fortiss.af3.exploration.alg.dse.backend.opt4j.operator.mutate.taskmapping; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.Partition; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.TaskMappingEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.TaskMappingEntry; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.operator.mutate.MutateBase; +import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IDeployableComponentAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; /** @@ -25,7 +27,7 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; * * @author huang */ -public abstract class MutateTasksBase<S extends TaskMappingEntry, T extends TaskMappingEncoding<S>> +public abstract class MutateTasksBase<S extends TaskMappingEntry<IDeployableComponentAdapter<?>, Partition>, T extends TaskMappingEncoding<IDeployableComponentAdapter<?>, S>> extends MutateBase<T> { /** Constructor. */ diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/comm/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/comm/.ratings index 82ac342f2de4604ad3a0599ab3940fe8b87a9278..10249da84343948cbd87a101f5c968dbf4c5dd42 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/comm/.ratings +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/comm/.ratings @@ -1 +1 @@ -MessageDecoder.java 576270e33f07854bfd8b4a9395c1e4407aec0ca7 RED +MessageDecoder.java e893d02f24db27df9752ee65e19dcf8f135f5d56 RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/comm/MessageDecoder.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/comm/MessageDecoder.java index 252c55fcb2871f6398ad6b4d5d8066aa17b309db..b1128015052d2b98a348f80f3614c444ba16c052 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/comm/MessageDecoder.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/comm/MessageDecoder.java @@ -22,6 +22,7 @@ import java.util.Map; 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.Partition; 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; @@ -31,6 +32,7 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegen 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.sysmodel.arch.IDeployableComponentAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IResourceAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.comm.Message; @@ -48,8 +50,8 @@ import com.google.inject.Inject; * * @author diewald */ -public class MessageDecoder<S extends TaskMappingEntry, T extends TaskMappingEncoding<S>> extends - ComposableDecoderBase<T, MessageEncoding<S, T>> { +public class MessageDecoder<S extends TaskMappingEntry<IDeployableComponentAdapter<?>, Partition>, T extends TaskMappingEncoding<IDeployableComponentAdapter<?>, S>> + extends ComposableDecoderBase<T, MessageEncoding<S, T>> { /** References the input system models. */ protected SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter; diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatemapping/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatemapping/.ratings index 62d65f2ed78edb973eeb30ca63c9b68052d4733e..c3a5110277a1a8b8ff773a4e9b33772d862c2f9c 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatemapping/.ratings +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatemapping/.ratings @@ -1,3 +1,3 @@ -AbstractTaskMappingDecoder.java 952c7d51b051e6b44186368cca8941b511fd321c RED -FailSilentAbstractTaskMappingDecoder.java 340c2875b24b70e3a45691dde3d4f24119b9b31c RED -FaultDetectionVotingAbstractTaskMappingDecoder.java 25ca678adeb9acfb20dda931c763c89a8145f153 RED +AbstractTaskMappingDecoder.java 56d2d2f6edc999d0e802bc5f4e7e470307456a08 RED +FailSilentAbstractTaskMappingDecoder.java f1a6618527b827342f4886e685a5abbb898eb205 RED +FaultDetectionVotingAbstractTaskMappingDecoder.java cf6444e5c9ccf0b20365a2b55774d932a881712a RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatemapping/AbstractTaskMappingDecoder.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatemapping/AbstractTaskMappingDecoder.java index a4ceca52c9a1dca6e4e0a288f359e5877838c3b0..2eb9f2fbb3c5fbc6537d069af86e138ea46bf8ea 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatemapping/AbstractTaskMappingDecoder.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatemapping/AbstractTaskMappingDecoder.java @@ -18,6 +18,7 @@ package org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.instantiatemap 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.instantiatedmapping.InstantiatedTaskMappingEncoding; @@ -59,6 +60,7 @@ public abstract class AbstractTaskMappingDecoder<S extends InstantiatedTaskMappi Collection<Class<?>> reqTypes = new ArrayList<>(); reqTypes.add(AbstractTaskMappingEncoding.class); reqTypes.add(AbstractTaskGraphEncoding.class); + reqTypes.add(PartitionMappingEncoding.class); return reqTypes; } diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatemapping/FailSilentAbstractTaskMappingDecoder.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatemapping/FailSilentAbstractTaskMappingDecoder.java index 0877622e393d63e8af2e35ed9fe6fd98bf15a810..897e427645239764a01a35b63e31162551523fd8 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatemapping/FailSilentAbstractTaskMappingDecoder.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatemapping/FailSilentAbstractTaskMappingDecoder.java @@ -20,6 +20,7 @@ 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; @@ -57,8 +58,11 @@ public class FailSilentAbstractTaskMappingDecoder extends AbstractTaskGraphEncoding<?, ?> 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."; - return new FailSilentTaskMappingEncoding(explorationDefinition, systemModelAdapter, atgEnc, - genotype); + PartitionMappingEncoding partEnc = + phenotypeTypeMap.getEncoding(PartitionMappingEncoding.class); + assert (partEnc != null) : "The required partition mapping encoding could not be found in the map of already decoded phenotypes."; + return new FailSilentTaskMappingEncoding(explorationDefinition, systemModelAdapter, partEnc, + atgEnc, genotype); } // TODO: Abstract to the AbstractTaskMappingDecoder. @@ -69,20 +73,18 @@ public class FailSilentAbstractTaskMappingDecoder extends * see {@link ComposableDecoder}. */ @Override - public FailSilentTaskMappingEncoding - updateComposable(AbstractTaskMappingEncoding inGenotype, - FailSilentTaskMappingEncoding outGenotype, - FlatPhenotypeMap<Phenotype> decodedPhenotypes) throws DecodingException { + public FailSilentTaskMappingEncoding updateComposable(AbstractTaskMappingEncoding inGenotype, + FailSilentTaskMappingEncoding outGenotype, + FlatPhenotypeMap<Phenotype> decodedPhenotypes) throws DecodingException { outGenotype.replaceConstraints(inGenotype.getConstraints()); - for(IDeployableComponentAdapter<?> comp : inGenotype.getDeployedComponents()) { + for(IDeployableComponentAdapter<?> comp : inGenotype.getRequesters()) { Collection<AbstractTaskMappingEntry> abstrEntries = inGenotype.getMappingEntriesOf(comp); Collection<FailSilentTaskMappingEntry> instEntries; if(comp.isInstantiationRequired()) { - instEntries = - filterSet(outGenotype.getMappingEntries(), e -> e.getDeployableComponent() - .getReplacedComponent() == comp); + instEntries = filterSet(outGenotype.getMappingEntries(), + e -> e.getSource().getReplacedComponent() == comp); } else { instEntries = outGenotype.getMappingEntriesOf(comp); } @@ -106,20 +108,20 @@ public class FailSilentAbstractTaskMappingDecoder extends // Remove all tasks that are present in the output encoding but not in the input encoding. Collection<IDeployableComponentAdapter<?>> rmTasks = new ArrayList<>(); - for(IDeployableComponentAdapter<?> comp : outGenotype.getDeployedComponents()) { + for(IDeployableComponentAdapter<?> comp : outGenotype.getRequesters()) { IDeployableComponentAdapter<?> rmComponent = comp; if(comp.isInstantiation()) { comp = comp.getReplacedComponent(); } - if(!inGenotype.getDeployedComponents().contains(comp)) { + if(!inGenotype.getRequesters().contains(comp)) { rmTasks.add(rmComponent); } } rmTasks.forEach(e -> outGenotype.removeTask(e)); for(FailSilentTaskMappingEntry entry : outGenotype.getMappingEntries()) { - entry.resetTarget(entry.getAssociatedElement(AbstractTaskMappingEntry.class) - .getTarget()); + entry.resetTarget( + entry.getAssociatedElement(AbstractTaskMappingEntry.class).getTarget()); } return outGenotype; diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatemapping/FaultDetectionVotingAbstractTaskMappingDecoder.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatemapping/FaultDetectionVotingAbstractTaskMappingDecoder.java index 9eebfa441b36961189e8085466d6f3e1e52fe5c8..66bab92a69e3bd41fc8c14794cb72a8a6b9308fd 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatemapping/FaultDetectionVotingAbstractTaskMappingDecoder.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatemapping/FaultDetectionVotingAbstractTaskMappingDecoder.java @@ -20,6 +20,7 @@ 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; @@ -39,8 +40,7 @@ import org.opt4j.core.problem.Decoder; * * @author diewald */ -public class FaultDetectionVotingAbstractTaskMappingDecoder - extends +public class FaultDetectionVotingAbstractTaskMappingDecoder extends AbstractTaskMappingDecoder<FaultDetectionVotingTaskMappingEntry, FaultDetectionVotingTaskMappingEncoding> { /** Constructor. */ @@ -58,8 +58,11 @@ public class FaultDetectionVotingAbstractTaskMappingDecoder AbstractTaskGraphEncoding<?, ?> 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."; + PartitionMappingEncoding partEnc = + phenotypeTypeMap.getEncoding(PartitionMappingEncoding.class); + assert (partEnc != null) : "The required partition mapping encoding could not be found in the map of already decoded phenotypes."; return new FaultDetectionVotingTaskMappingEncoding(explorationDefinition, - systemModelAdapter, atgEnc, genotype); + systemModelAdapter, partEnc, atgEnc, genotype); } /** @@ -75,14 +78,13 @@ public class FaultDetectionVotingAbstractTaskMappingDecoder FlatPhenotypeMap<Phenotype> decodedPhenotypes) throws DecodingException { outGenotype.replaceConstraints(inGenotype.getConstraints()); - for(IDeployableComponentAdapter<?> comp : inGenotype.getDeployedComponents()) { + for(IDeployableComponentAdapter<?> comp : inGenotype.getRequesters()) { Collection<AbstractTaskMappingEntry> abstrEntries = inGenotype.getMappingEntriesOf(comp); Collection<FaultDetectionVotingTaskMappingEntry> instEntries; if(comp.isInstantiationRequired()) { - instEntries = - filterSet(outGenotype.getMappingEntries(), e -> e.getDeployableComponent() - .getReplacedComponent() == comp); + instEntries = filterSet(outGenotype.getMappingEntries(), + e -> e.getSource().getReplacedComponent() == comp); } else { instEntries = outGenotype.getMappingEntriesOf(comp); } @@ -106,20 +108,20 @@ public class FaultDetectionVotingAbstractTaskMappingDecoder // Remove all tasks that are present in the output encoding but not in the input encoding. Collection<IDeployableComponentAdapter<?>> rmTasks = new ArrayList<>(); - for(IDeployableComponentAdapter<?> comp : outGenotype.getDeployedComponents()) { + for(IDeployableComponentAdapter<?> comp : outGenotype.getRequesters()) { IDeployableComponentAdapter<?> rmComponent = comp; if(comp.isInstantiation()) { comp = comp.getReplacedComponent(); } - if(!inGenotype.getDeployedComponents().contains(comp)) { + if(!inGenotype.getRequesters().contains(comp)) { rmTasks.add(rmComponent); } } rmTasks.forEach(e -> outGenotype.removeTask(e)); for(FaultDetectionVotingTaskMappingEntry entry : outGenotype.getMappingEntries()) { - entry.resetTarget(entry.getAssociatedElement(AbstractTaskMappingEntry.class) - .getTarget()); + entry.resetTarget( + entry.getAssociatedElement(AbstractTaskMappingEntry.class).getTarget()); } return outGenotype; diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/.ratings index 116e19453bd0c115ca0115e452d432cba5cd97ca..52d49b4dd86fc166dc3aac105730f6c4a030d942 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/.ratings +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/.ratings @@ -1 +1 @@ -AbstractTaskMappingIdentityDecoder.java 26751f010c5b011dcf5822fcdd790eff4143189d RED +AbstractTaskMappingIdentityDecoder.java 4b452975b3da72fb535a9e67013d45f9494e9203 RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/AbstractTaskMappingIdentityDecoder.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/AbstractTaskMappingIdentityDecoder.java index 4dc933fb54001dab2eece3d35415cd426556a8fd..1726e6d8ddc8f3a56df166f9814b3f06c9100857 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/AbstractTaskMappingIdentityDecoder.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/AbstractTaskMappingIdentityDecoder.java @@ -18,6 +18,7 @@ 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.extensions.compositegene.decode.ComposableDecoder; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.decode.ComposableDecoderBase; @@ -32,9 +33,9 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.ArchExpSubDecod * * @author diewald */ -public class AbstractTaskMappingIdentityDecoder extends - ComposableDecoderBase<AbstractTaskMappingEncoding, AbstractTaskMappingEncoding> implements - ArchExpSubDecoder { +public class AbstractTaskMappingIdentityDecoder + extends ComposableDecoderBase<AbstractTaskMappingEncoding, AbstractTaskMappingEncoding> + implements ArchExpSubDecoder { /** {@inheritDoc} */ @Override @@ -46,7 +47,8 @@ public class AbstractTaskMappingIdentityDecoder extends /** {@inheritDoc} */ @Override public AbstractTaskMappingEncoding updateComposable(AbstractTaskMappingEncoding inGenotype, - AbstractTaskMappingEncoding outGenotype, FlatPhenotypeMap<Phenotype> decodedPhenotypes) { + AbstractTaskMappingEncoding outGenotype, + FlatPhenotypeMap<Phenotype> decodedPhenotypes) { return inGenotype; } @@ -62,6 +64,7 @@ public class AbstractTaskMappingIdentityDecoder extends @Override public Collection<Class<?>> getOptionalTypes() { Collection<Class<?>> optTypes = new ArrayList<>(); + optTypes.add(PartitionMappingEncoding.class); return optTypes; } diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/solution/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/solution/.ratings index ba9a1d830baecfdcb26d1baa36d0645fff9c87d0..9537295392acfaf402279e213ce562cc68ef0ef5 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/solution/.ratings +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/solution/.ratings @@ -2,5 +2,5 @@ ArchExpSubSolution.java 3bb56206fe70f19f7cb6aee575eba552ce9bbc4e RED ArchitectureSolution.java 8ba40ce339c4195641ed1b67c79718e297d66e4c RED IExplorationSolution.java a6153937197358907ceec46606a7f28620c26f2b RED IScheduleSolution.java 989614e232dcc1d4ade33ea2a76e90b514f175d7 RED -StrictTTSchedule.java 04bf3217ff1a5a75e8f3581dacf3aabebaffc428 RED -TimeSlot.java 572449f7241b83c846716aaf225e17a4f21c35d5 RED +StrictTTSchedule.java 65d194e0783917ecd6f103c8997ab65e88ef0c4a RED +TimeSlot.java a394badca1460454c91e0d82b0d124f8b2a2ebcf RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/solution/StrictTTSchedule.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/solution/StrictTTSchedule.java index a0aaf87deaace639d05c570b2a76aa3246ab09b5..db33fd924c23136b7b9402a94e1db3f7b689431a 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/solution/StrictTTSchedule.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/solution/StrictTTSchedule.java @@ -22,6 +22,7 @@ import java.util.Map.Entry; import java.util.Set; import java.util.TreeMap; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.Partition; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.TaskMappingEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.TaskMappingEntry; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.ComposablePhenotype; @@ -45,7 +46,7 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.sched.ScheduleRuntimeExcepti * @author huang */ -public class StrictTTSchedule<S extends TaskMappingEntry, T extends TaskMappingEncoding<S>> +public class StrictTTSchedule<S extends TaskMappingEntry<IDeployableComponentAdapter<?>, Partition>, T extends TaskMappingEncoding<IDeployableComponentAdapter<?>, S>> implements IScheduleSolution<StrictTTSchedule<S, T>>, ComposablePhenotype<T>, ArchExpSubSolution<T> { /** @@ -127,8 +128,10 @@ public class StrictTTSchedule<S extends TaskMappingEntry, T extends TaskMappingE /** * Performs a validation of this schedule. Returns {@code true} if the following conditions - * hold: <li>The number of allocations defined in the mapping matches the number of scheduled - * components.</li> <li>No overlap of {@link TimeSlot}s within the schedule of each + * hold: + * <li>The number of allocations defined in the mapping matches the number of scheduled + * components.</li> + * <li>No overlap of {@link TimeSlot}s within the schedule of each * {@link IResourceAdapter}.</li> */ public boolean validateSchedule(boolean enableScheduleException) { @@ -149,7 +152,7 @@ public class StrictTTSchedule<S extends TaskMappingEntry, T extends TaskMappingE * {@link IMappingEncoding}. */ private boolean validateAllocationNumberInSchedule(boolean enableScheduleException) { - for(IDeployableComponentAdapter<?> comp : encoding.getDeployedComponents()) { + for(IDeployableComponentAdapter<?> comp : encoding.getRequesters()) { int compEncNum = encoding.getMappingEntriesOf(comp).size(); int compSchedNum = 0; for(IResourceAdapter<?> resourceAdapter : getResources()) { @@ -161,9 +164,8 @@ public class StrictTTSchedule<S extends TaskMappingEntry, T extends TaskMappingE } if(compEncNum != compSchedNum && systemModelAdapter.getScheduleableComponents().contains(comp)) { - System.out - .println("The number of scheduled Components of " + comp.getName() + - " does not match the number defined in the Component->ExecutionUnit mapping."); + System.out.println("The number of scheduled Components of " + comp.getName() + + " does not match the number defined in the Component->ExecutionUnit mapping."); if(enableScheduleException) { throw new ScheduleRuntimeException(this); } @@ -178,7 +180,8 @@ public class StrictTTSchedule<S extends TaskMappingEntry, T extends TaskMappingE * with another {@link TimeSlot} of that {@link ResourceSchedule}. */ private boolean validateNoTimeSlotOverlaps(boolean enableScheduleException) { - for(Map.Entry<IResourceAdapter<?>, ResourceSchedule> resourceSchedule : schedule.entrySet()) { + for(Map.Entry<IResourceAdapter<?>, ResourceSchedule> resourceSchedule : schedule + .entrySet()) { for(TimeSlot currentTimeSlot : resourceSchedule.getValue().keySet()) { TimeSlot nextTimeSlot = resourceSchedule.getValue().higherKey(currentTimeSlot); if(nextTimeSlot != null && @@ -206,7 +209,8 @@ public class StrictTTSchedule<S extends TaskMappingEntry, T extends TaskMappingE * validated. */ private boolean validateCausalityOfTasks(boolean enableScheduleException) { - for(Map.Entry<IResourceAdapter<?>, ResourceSchedule> resourceSchedule : schedule.entrySet()) { + for(Map.Entry<IResourceAdapter<?>, ResourceSchedule> resourceSchedule : schedule + .entrySet()) { for(TimeSlot currentTimeSlot : resourceSchedule.getValue().keySet()) { for(TimeSlot predecessorSlot : currentTimeSlot.getPredecessors()) { if(currentTimeSlot.getStartTime() < predecessorSlot.getEndTime() - @@ -241,8 +245,8 @@ public class StrictTTSchedule<S extends TaskMappingEntry, T extends TaskMappingE } /** Registers a {@link TimeSlot} with the appropriate schedule. */ - public TimeSlot - registerTimeSlot(TimeSlot slot, S deployedRequest, IResourceAdapter<?> resource) { + public TimeSlot registerTimeSlot(TimeSlot slot, S deployedRequest, + IResourceAdapter<?> resource) { // Create a new TimeSlot and eventually add a new ResourceSchedule, if none exists yet for // the deployment target. if(schedule.get(resource) == null) { @@ -256,7 +260,7 @@ public class StrictTTSchedule<S extends TaskMappingEntry, T extends TaskMappingE // time slot with no associated deployable Component within the appropriate // ReosurceSchedule; it is most likely a communication resource allocated to a message. if(deployedRequest != null) { - schedule.get(resource).put(slot, deployedRequest.getDeployableComponent()); + schedule.get(resource).put(slot, deployedRequest.getSource()); timeSlotsOfMappingEntries.put(deployedRequest, slot); } else { schedule.get(resource).put(slot, null); @@ -282,9 +286,8 @@ public class StrictTTSchedule<S extends TaskMappingEntry, T extends TaskMappingE */ public TimeSlot createTimeSlot(S deployedRequest, IResourceAdapter<?> resource, Collection<TimeSlot> predessorSlots, double start, double end, long iteration) { - TimeSlot slot = - new TimeSlot(deployedRequest, resource, predessorSlots, start, end, (int)iteration, - false); + TimeSlot slot = new TimeSlot(deployedRequest, resource, predessorSlots, start, end, + (int)iteration, false); return registerTimeSlot(slot, deployedRequest, resource); } @@ -353,7 +356,8 @@ public class StrictTTSchedule<S extends TaskMappingEntry, T extends TaskMappingE /** Formats the string representation of a resource */ private String getResourceName(IResourceAdapter<?> resource) { String str = resource.getName(); - if(!(resource instanceof ITransmissionUnitAdapter || resource instanceof IGatewayUnitAdapter) && + if(!(resource instanceof ITransmissionUnitAdapter || + resource instanceof IGatewayUnitAdapter) && resource != systemModelAdapter.getHardwareResource(resource)) { str += "@" + systemModelAdapter.getHardwareResource(resource).getName(); } @@ -372,7 +376,7 @@ public class StrictTTSchedule<S extends TaskMappingEntry, T extends TaskMappingE if(slot.isVoter()) { str += "voter"; } else if(slot.getDeployedRequester() != null) { - str += slot.getDeployedRequester().getDeployableComponent().getName(); + str += slot.getDeployedRequester().getSource().getName(); } else if(slot.getDeployedMessage() != null) { str += slot.getDeployedMessage().getSignalAdapter().getName(); } else { diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/solution/TimeSlot.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/solution/TimeSlot.java index 0d1310fc0b50112bad79d602165033da94658e89..459ac9a3de7118972c3479e5bc113b8dda6502c8 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/solution/TimeSlot.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/solution/TimeSlot.java @@ -20,6 +20,7 @@ import java.util.Comparator; import java.util.HashSet; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ICommunicationResourceAdapter; +import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IDeployableComponentAdapter; 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.comm.Message; @@ -41,7 +42,7 @@ public class TimeSlot implements java.lang.Comparable<TimeSlot> { private IResourceAdapter<?> resource; /** The {@link IMappingEntry} that is represented by this {@link TimeSlot}. */ - private IMappingEntry deployedRequester; + private IMappingEntry<IDeployableComponentAdapter<?>, ?> deployedRequester; /** The {@link Message} reserving this {@link TimeSlot} of a communication resource. */ private Message deployedMessage; @@ -72,8 +73,9 @@ public class TimeSlot implements java.lang.Comparable<TimeSlot> { * Constructs a time slot for a given resource, and enables to specify if the slot has been * allocated for a voter. */ - public TimeSlot(IMappingEntry deployedRequest, IResourceAdapter<?> resource, double startTime, - double endTime, int iteration, boolean isVoterSlot) { + public TimeSlot(IMappingEntry<IDeployableComponentAdapter<?>, ?> deployedRequest, + IResourceAdapter<?> resource, double startTime, double endTime, int iteration, + boolean isVoterSlot) { this.deployedRequester = deployedRequest; this.startTime = startTime; this.endTime = endTime; @@ -89,16 +91,17 @@ public class TimeSlot implements java.lang.Comparable<TimeSlot> { * Constructs a time slot for a given resource, and enables to specify if the slot has been * allocated for a voter. Furthermore, the collection of predecessors is defined. */ - public TimeSlot(IMappingEntry deployedRequest, IResourceAdapter<?> resource, - Collection<TimeSlot> predecessorSlots, double startTime, double endTime, int iteration, - boolean isVoterSlot) { + public TimeSlot(IMappingEntry<IDeployableComponentAdapter<?>, ?> deployedRequest, + IResourceAdapter<?> resource, Collection<TimeSlot> predecessorSlots, double startTime, + double endTime, int iteration, boolean isVoterSlot) { this(deployedRequest, resource, startTime, endTime, iteration, isVoterSlot); this.predecessorSlots.addAll(predecessorSlots); } /** Constructs a time slot for a given mappingEntry. */ - public TimeSlot(IMappingEntry deployedRequest, double startTime, double endTime) { + public TimeSlot(IMappingEntry<IDeployableComponentAdapter<?>, ?> deployedRequest, + double startTime, double endTime) { this(deployedRequest, deployedRequest.getTarget(), startTime, endTime, 0, false); } @@ -113,7 +116,7 @@ public class TimeSlot implements java.lang.Comparable<TimeSlot> { } /** Returns deployedRequester. */ - public IMappingEntry getDeployedRequester() { + public IMappingEntry<IDeployableComponentAdapter<?>, ?> getDeployedRequester() { return deployedRequester; } @@ -241,7 +244,7 @@ public class TimeSlot implements java.lang.Comparable<TimeSlot> { * NO LONGER VALID!:1) if the two slot belong to different resources, compare the resources * names * if the two slot belong to the same resources, compare the start time - * */ + */ // TODO: re-implement this compareTo method, it is a complete mess (refs #6262) @Override public int compareTo(TimeSlot slot) { diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/.ratings index 38c6cbcbc65127c285c6789a87f6f30ea14dfda5..39a274fa3cd24c6d5a93ca2f822cc301a46d8502 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/.ratings +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/.ratings @@ -1,8 +1,8 @@ -ComponentMultiAllocationConstraintEvaluator.java 86be4263501af119e3ea4571514aa8dab8d985b8 RED +ComponentMultiAllocationConstraintEvaluator.java 1f3c1c96391de15f5b21377f52dde183b16428cc RED ComponentMultiDislocationConstraintEvaluator.java e63169976a3075d5d9ac62767bf6c17bc4ddfe07 RED ConstraintEvaluatorBase.java f42f71e64d32201b232c24542a2c0367a6293942 RED DeadlineConstraintEvaluator.java a023d233a2ee768cef573a67e06ae1fe0b53ddbe RED IConstraintEvaluator.java bca49bbdea5e089b0d045fc356ceedcb466df55e RED MappingEvaluatorConstraint.java fec8cf995cbafa433235f8f6715bc5183c2f8ba3 RED -PeriodConstraintEvaluator.java bd551f4988be3f115e76aad2654043093ce64e52 RED -SafetyIntegrityLevelConstraintEvaluator.java 7ed6d6950d915066bf1510717dfe371c102cb2ea RED +PeriodConstraintEvaluator.java 52dc75180579f154a514816223461e27cb9ca84d RED +SafetyIntegrityLevelConstraintEvaluator.java 74260b0b2b1c5a2f4a0de41d24a993a8e0dca65d RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/ComponentMultiAllocationConstraintEvaluator.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/ComponentMultiAllocationConstraintEvaluator.java index 9d1a649db067067b49e397331f3303daf339b6a3..86018dea5015731dec99a9f2b452ab17e673bb07 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/ComponentMultiAllocationConstraintEvaluator.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/ComponentMultiAllocationConstraintEvaluator.java @@ -61,9 +61,9 @@ public class ComponentMultiAllocationConstraintEvaluator<S extends InstantiatedT @Override public DoubleValue evaluateGoal(T phenotype, FlatPhenotypeMap<Phenotype> phenotypeTypeMap, ClassToInstanceMap<EObject> transformedModels) { - for(IMappingEntry mappingEntry : phenotype.getIMappingEntries()) { + for(InstantiatedTaskMappingEntry mappingEntry : phenotype.getMappingEntries()) { if(explorationTarget.getAllRightMultiLocationModelElements() - .contains(mappingEntry.getDeployableComponent().getObject())) { + .contains(mappingEntry.getSource().getObject())) { return new DoubleValue(Double.MAX_VALUE); } } @@ -106,9 +106,9 @@ public class ComponentMultiAllocationConstraintEvaluator<S extends InstantiatedT Value<?> value) { Component constrComp = ((ComponentMultiAllocationConstraint)expTarget).getComponent(); - Collection<IMappingEntry> entries = new ArrayList<>(); - for(IMappingEntry mappingEntry : solution.getIMappingEntries()) { - IDeployableComponentAdapter<?> compAdp = mappingEntry.getDeployableComponent(); + Collection<InstantiatedTaskMappingEntry> entries = new ArrayList<>(); + for(InstantiatedTaskMappingEntry mappingEntry : solution.getMappingEntries()) { + IDeployableComponentAdapter<?> compAdp = mappingEntry.getSource(); if(compAdp.getObject() == constrComp) { entries.add(mappingEntry); } else if(compAdp.isInstantiation() && diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/PeriodConstraintEvaluator.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/PeriodConstraintEvaluator.java index 51dc70a19fd5945a9a979513aa58c4f1de13442c..419a0327b2a4a4f2625653d9de65d3ad5671947a 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/PeriodConstraintEvaluator.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/PeriodConstraintEvaluator.java @@ -76,7 +76,7 @@ public class PeriodConstraintEvaluator<S extends InstantiatedTaskMappingEntry, T // we evaluate if all tasks are within the period. we want everything to be // finished within the period - for(IDeployableComponentAdapter<?> deployableComponent : itmEnc.getDeployedComponents()) { + for(IDeployableComponentAdapter<?> deployableComponent : itmEnc.getRequesters()) { TaskGraph taskGraph = itgEnc.getTaskGraphOf(deployableComponent); // we need to check each iteration in the hyper period if(taskGraph != null) { diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/SafetyIntegrityLevelConstraintEvaluator.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/SafetyIntegrityLevelConstraintEvaluator.java index 15b12efbdb0407628208ce5e9a2e747a44b1c6a9..1f7e60ef77508bf2fd75e286cbea883e584eb125 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/SafetyIntegrityLevelConstraintEvaluator.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/SafetyIntegrityLevelConstraintEvaluator.java @@ -22,7 +22,6 @@ import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; import java.util.List; -import java.util.Map; import java.util.stream.Collectors; import org.eclipse.emf.common.util.Enumerator; @@ -76,12 +75,11 @@ public class SafetyIntegrityLevelConstraintEvaluator<S extends InstantiatedTaskM /** {@inheritDoc} */ @Override public boolean validateInternal(ExplorationConstraint<?> expTarget, T mapping, Value<?> value) { - Map<IDeployableComponentAdapter<?>, Collection<S>> allocationMap = - mapping.getAllocationMap(); List<IDeployableComponentAdapter<?>> silComponents = getSILComponentAdapters(); List<SIL> silBounds = explorationTarget.getLimitation(); for(int idx = 0; idx < silComponents.size(); idx++) { - SIL actualSIL = detectSIL(silComponents.get(idx), allocationMap); + IDeployableComponentAdapter<?> silComponent = silComponents.get(idx); + SIL actualSIL = detectSIL(silComponent, mapping.getMappingEntriesOf(silComponent)); if(actualSIL.getValue() < silBounds.get(idx).getValue()) { return false; } @@ -116,12 +114,11 @@ public class SafetyIntegrityLevelConstraintEvaluator<S extends InstantiatedTaskM */ private List<SIL> getSILViolations(T mapping) { List<SIL> silViolations = new ArrayList<>(); - Map<IDeployableComponentAdapter<?>, Collection<S>> allocationMap = - mapping.getAllocationMap(); List<IDeployableComponentAdapter<?>> silComponents = getSILComponentAdapters(); List<SIL> silBounds = explorationTarget.getLimitation(); for(int idx = 0; idx < silComponents.size(); idx++) { - SIL actualSIL = detectSIL(silComponents.get(idx), allocationMap); + IDeployableComponentAdapter<?> silComponent = silComponents.get(idx); + SIL actualSIL = detectSIL(silComponent, mapping.getMappingEntriesOf(silComponent)); silViolations.add(calculateSILViolation(silBounds.get(idx), actualSIL)); } return silViolations; @@ -130,14 +127,11 @@ public class SafetyIntegrityLevelConstraintEvaluator<S extends InstantiatedTaskM // TODO: Port to org.fortiss.af3.safety /** Helper function for the calculation of the actual SIL of a deployed component. */ private SIL detectSIL(IDeployableComponentAdapter<?> deployableComponent, - Map<IDeployableComponentAdapter<?>, Collection<S>> allocationMap) { - // Note: real hw replication is not meant here, just the allocation to different cores/ecus - Collection<S> replica = allocationMap.get(deployableComponent); - + Collection<S> allEntries) { // Determine the number of replications onto different execution units. This separation is // yet very primitive. Collection<IExecutionUnitAdapter<?>> hwReplica = new HashSet<IExecutionUnitAdapter<?>>(); - for(S currentTaskReplic : replica) { + for(S currentTaskReplic : allEntries) { hwReplica.add(currentTaskReplic.getTarget()); } int silTypeToInt = 0; diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/.ratings index e8b65da6498ee202bbecd4d20d9198aac745c4ee..b3af968cfd7fe8bd3cb875086f8e9989e520d686 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/.ratings +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/.ratings @@ -1,5 +1,5 @@ -EnergyObjectiveEvaluator.java 66b7823301607d90622fdd978ce5da1caa647cfd RED -FailSilentReliabilityEvaluator.java e01e4f5fe39ecabc3d1a4ba3ca38568b0096d8d4 RED +EnergyObjectiveEvaluator.java 02220e3d8cee11e21c0107d27d0e559b038471f3 RED +FailSilentReliabilityEvaluator.java 4971dc34163580168686c3db9c0216defaa19631 RED FaultDetectionVotingReliabilityEvaluator.java 519228a5192f9e70c088e101dd766767f10dda1f RED MappingEvaluatorObjective.java 9a07bad8acb0b63e9798097435bdaed7a0ddf09b RED ReliabilityEvaluatorBase.java baea1cb7dc9f90e4bf763ef542c182aa497d1057 RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/EnergyObjectiveEvaluator.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/EnergyObjectiveEvaluator.java index 0b9d4ef2b76e348f3734844d9a1afd806ee730e1..d554da612cb158538edfa6c3fb422611fb745695 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/EnergyObjectiveEvaluator.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/EnergyObjectiveEvaluator.java @@ -19,6 +19,7 @@ import java.util.Collection; import java.util.HashSet; import org.eclipse.emf.ecore.EObject; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.Partition; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.TaskMappingEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.TaskMappingEntry; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.InstantiatedTaskMappingEncoding; @@ -45,7 +46,7 @@ import com.google.common.collect.ClassToInstanceMap; * * @author huang */ -public class EnergyObjectiveEvaluator<S extends TaskMappingEntry, T extends TaskMappingEncoding<S>> +public class EnergyObjectiveEvaluator<S extends TaskMappingEntry<IDeployableComponentAdapter<?>, Partition>, T extends TaskMappingEncoding<IDeployableComponentAdapter<?>, S>> extends ExplorationTargetEvaluatorBase<StrictTTSchedule<S, T>, Double, EnergyMinObjective> { /** Creates a template energy objective evaluator */ @@ -86,8 +87,10 @@ public class EnergyObjectiveEvaluator<S extends TaskMappingEntry, T extends Task if(deploymentTarget instanceof IExecutionUnitAdapter) { IExecutionUnitAdapter<?> executionUnit = (IExecutionUnitAdapter<?>)deploymentTarget; + // TODO: Rework Schedule to avoid casting. IDeployableComponentAdapter<?> deployedComponent = - t.getDeployedRequester().getDeployableComponent(); + (IDeployableComponentAdapter<?>)t.getDeployedRequester() + .getSource(); energy += deployedComponent.getEnergyConsumption(executionUnit); } else if(deploymentTarget instanceof ICommunicationResourceAdapter) { @@ -111,7 +114,8 @@ public class EnergyObjectiveEvaluator<S extends TaskMappingEntry, T extends Task public boolean validateInputs() throws Exception { // TODO: If constraints exist for the allocation, only consider component / execution unit // allocations that are valid acc. to these constraints. - for(IDeployableComponentAdapter<?> component : systemModelAdapter.getDeployableComponents()) { + for(IDeployableComponentAdapter<?> component : systemModelAdapter + .getDeployableComponents()) { for(IExecutionUnitAdapter<?> execUnit : systemModelAdapter.getDeploymentTargets()) { if(component.getEnergyConsumption(execUnit) == null) { throw new Exception( diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/FailSilentReliabilityEvaluator.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/FailSilentReliabilityEvaluator.java index 3d0ad6d1b738228a01dfe3b5e6018e878d5b3338..0f022d9fbdc884ab29d841415d8afefd09611975 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/FailSilentReliabilityEvaluator.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/FailSilentReliabilityEvaluator.java @@ -58,7 +58,7 @@ public class FailSilentReliabilityEvaluator extends Apfloat overallSuccRate = new Apfloat(1, FP_PRECISION); Apfloat one = new Apfloat(1, FP_PRECISION); - for(IDeployableComponentAdapter<?> deployableComponent : itmEnc.getDeployedComponents()) { + for(IDeployableComponentAdapter<?> deployableComponent : itmEnc.getRequesters()) { // TODO: Check if this correctly determines the taskFailureRate // only software tasks are considered diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/comparch/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/comparch/.ratings index 9997cd325dacdd957cd0a7da451123ee0232dce2..2106354e6a5edec580d21df79cd6ba52f2c4c7ef 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/comparch/.ratings +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/comparch/.ratings @@ -1,6 +1,6 @@ -ComponentArchitectureFinalizer.java 2d372a2ba5d7da467c4e9d658cb2efef818c7108 RED -ComponentArchitectureInitializer.java ad1f5c1e59fd8642a07160a216d8f9fc8e53821c RED +ComponentArchitectureFinalizer.java ec0e29b2ed27aecccae28bab0253b8e068276a17 RED +ComponentArchitectureInitializer.java 4b1e1f03b6205b91e6a9dae5ae5f77ad5ef9ed78 RED ComponentArchitectureInserter.java 9ab94811d460d06fa1ce2f72e40911beb7982e94 RED -ComponentArchitectureInstantiator.java bef63f3fb89a2462781f715cca2b76909d774d30 RED -ComponentArchitectureReplicator.java 82e8bc13a80c99b21b85de9e1f0da8c0496e74e2 RED +ComponentArchitectureInstantiator.java 9258569c6b1a43bcdde104fc133d444f6ae5d002 RED +ComponentArchitectureReplicator.java cbf6fcc9c69b4833664fe10dc5eac0941f014870 RED ComponentArchitectureTransformer.java 9eded58c64a6077a3a5cb13cf3d7d78779b70a49 RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/comparch/ComponentArchitectureFinalizer.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/comparch/ComponentArchitectureFinalizer.java index 3b38ddd4d91d4498997dd982f396a0297acc26e2..d319d3c53606b4856bcf67ea8ab5c2ecad6a1bca 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/comparch/ComponentArchitectureFinalizer.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/comparch/ComponentArchitectureFinalizer.java @@ -42,7 +42,8 @@ import org.fortiss.tooling.base.model.element.IModelElementSpecification; * * @author diewald */ -public class ComponentArchitectureFinalizer extends TransformationModuleBase<ComponentArchitecture> { +public class ComponentArchitectureFinalizer + extends TransformationModuleBase<ComponentArchitecture> { /** {@inheritDoc} */ @Override @@ -100,8 +101,8 @@ public class ComponentArchitectureFinalizer extends TransformationModuleBase<Com throws TransformationModuleException { // Install the back reference specification to the components in the "150%/125% model". try { - createImplementsComponentSpecifications(((ComponentArchitecture)outputModel) - .getTopComponent()); + createImplementsComponentSpecifications( + ((ComponentArchitecture)outputModel).getTopComponent()); } catch(InvalidTimingModelException e) { throw new TransformationModuleException(this, "Could not identify the relevant components, probably due to an inconsistent timing specification."); @@ -130,12 +131,11 @@ public class ComponentArchitectureFinalizer extends TransformationModuleBase<Com InstantiatedTaskMappingEntry entry = null; if(originalComponent instanceof Component) { - entry = - (InstantiatedTaskMappingEntry)encEntryModelElemAssoc.inverse().get( - originalComponent, InstantiatedTaskMappingEntry.class); + entry = (InstantiatedTaskMappingEntry)encEntryModelElemAssoc.inverse() + .get(originalComponent, InstantiatedTaskMappingEntry.class); } - if(entry != null && entry.getDeployableComponent().isInstantiation()) { + if(entry != null && entry.getSource().isInstantiation()) { addImplementsComponentRefSpec(curComp, (Component)originalComponent); } else { createImplementsComponentSpecifications(curComp); diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/comparch/ComponentArchitectureInitializer.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/comparch/ComponentArchitectureInitializer.java index 1fc824b54dba6819e402a005b8bcb2800ceac752..98e07a27bda9e5fd57290fba524daa3880fc6a2b 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/comparch/ComponentArchitectureInitializer.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/comparch/ComponentArchitectureInitializer.java @@ -29,7 +29,6 @@ import org.fortiss.af3.exploration.alg.dse.modeltransformation.ITransformationMo import org.fortiss.af3.exploration.alg.dse.modeltransformation.base.TransformationModuleBase; import org.fortiss.af3.exploration.alg.dse.modeltransformation.element.M2MCopier; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IDeployableComponentAdapter; -import org.fortiss.af3.exploration.alg.dse.sysmodel.mapping.IMappingEncoding; import org.fortiss.af3.exploration.alg.dse.sysmodel.mapping.IMappingEntry; import org.fortiss.af3.exploration.alg.exception.TransformationModuleException; import org.fortiss.af3.exploration.alg.guava.SubClassToInstanceMap; @@ -46,8 +45,8 @@ import com.google.common.collect.Multimap; * * @author diewald */ -public class ComponentArchitectureInitializer extends - TransformationModuleBase<ComponentArchitecture> { +public class ComponentArchitectureInitializer + extends TransformationModuleBase<ComponentArchitecture> { /** {@inheritDoc} */ @Override @@ -110,7 +109,7 @@ public class ComponentArchitectureInitializer extends "Could not retrieve the original Component Architecture from the set of base models."); } - IMappingEncoding mapping = + AbstractTaskMappingEncoding mapping = explorationEncodings.getEncoding(AbstractTaskMappingEncoding.class); if(mapping == null) { throw new TransformationModuleException(this, @@ -157,10 +156,10 @@ public class ComponentArchitectureInitializer extends * transformation process is capable of establishing a unique link between entries and model * elements. */ - private void updateEncodingAssociations(IMappingEncoding mapping) { + private void updateEncodingAssociations(AbstractTaskMappingEncoding mapping) { Multimap<Component, Component> processedElements = HashMultimap.create(); - for(IMappingEntry entry : mapping.getIMappingEntries()) { - IDeployableComponentAdapter<?> compAdp = entry.getDeployableComponent(); + for(AbstractTaskMappingEntry entry : mapping.getMappingEntries()) { + IDeployableComponentAdapter<?> compAdp = entry.getSource(); Component origAF3Component = (Component)compAdp.getObject(); Component genAF3Component = null; diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/comparch/ComponentArchitectureInstantiator.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/comparch/ComponentArchitectureInstantiator.java index b1a037e433a9f07a7cd70fdf78459097a619b461..f548e095bf5e4034a9d606f59be7cf3ce872e957 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/comparch/ComponentArchitectureInstantiator.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/comparch/ComponentArchitectureInstantiator.java @@ -41,7 +41,6 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.in import org.fortiss.af3.exploration.alg.dse.modeltransformation.ITransformationModule; import org.fortiss.af3.exploration.alg.dse.modeltransformation.base.TransformationModuleBase; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IDeployableComponentAdapter; -import org.fortiss.af3.exploration.alg.dse.sysmodel.mapping.IMappingEncoding; import org.fortiss.af3.exploration.alg.dse.sysmodel.mapping.IMappingEntry; import org.fortiss.af3.exploration.alg.exception.TransformationModuleException; import org.fortiss.af3.exploration.alg.guava.SubClassToInstanceMap; @@ -58,11 +57,11 @@ import org.fortiss.tooling.kernel.utils.EcoreUtils; * * @author diewald */ -public class ComponentArchitectureInstantiator extends - TransformationModuleBase<ComponentArchitecture> { +public class ComponentArchitectureInstantiator + extends TransformationModuleBase<ComponentArchitecture> { /** References the {@link Component} to {@link ExecutionUnit} mapping calculated by the DSE. */ - IMappingEncoding mapping; + InstantiatedTaskMappingEncoding<?> mapping; /** {@inheritDoc} */ @Override @@ -139,7 +138,7 @@ public class ComponentArchitectureInstantiator extends Collection<Component> instantiatedComponents = new HashSet<>(); Collection<EObject> preCleanupElementsCollection = new HashSet<>(); - for(IDeployableComponentAdapter<?> comp : mapping.getDeployedComponents()) { + for(IDeployableComponentAdapter<?> comp : mapping.getRequesters()) { if(comp.isInstantiation()) { Component origComp = (Component)comp.getReplacedComponent().getObject(); preCleanupElementsCollection.addAll(getChildrenWithType(origComp, EObject.class)); @@ -150,9 +149,9 @@ public class ComponentArchitectureInstantiator extends Collection<Component> abstrCompRemovalList = new ArrayList<>(); - for(IMappingEntry entry : mapping.getIMappingEntries()) { + for(InstantiatedTaskMappingEntry entry : mapping.getMappingEntries()) { @SuppressWarnings("unchecked") IDeployableComponentAdapter<Component> compAdp = - (IDeployableComponentAdapter<Component>)entry.getDeployableComponent(); + (IDeployableComponentAdapter<Component>)entry.getSource(); if(compAdp.isInstantiation()) { // Randomly take one replicated generated Component that belongs to the // corresponding adapter. @@ -180,9 +179,8 @@ public class ComponentArchitectureInstantiator extends instantiatedComponent); instantiatedComponents.add(instantiatedComponent); } else { - IMappingEntry abstrEntr = - pickFirstInstanceOf(AbstractTaskMappingEntry.class, - entry.getAssociatedElement()); + IMappingEntry abstrEntr = pickFirstInstanceOf(AbstractTaskMappingEntry.class, + entry.getAssociatedElement()); Component genComp = (Component)encEntryModelElemAssoc.get(abstrEntr, Component.class); genToGenAssocMap.put(genComp, genComp); @@ -199,8 +197,8 @@ public class ComponentArchitectureInstantiator extends * This method is intended to replace "abstract" {@link Component} with their instances from the * "Component Pool". */ - private Component - instantiateComponent(Component abstrComponent, Component replacementComponent) { + private Component instantiateComponent(Component abstrComponent, + Component replacementComponent) { Component instantiatedComponent = EcoreUtils.copy(replacementComponent); instantiatedComponent.setContainer(abstrComponent.getContainer()); @@ -209,8 +207,8 @@ public class ComponentArchitectureInstantiator extends // Rewire Channels. // TODO: Possible NPE if optional is empty. Throw an exception about non-found port name // here. - Collection<Port> matchingPorts = - filterSet(instantiatedConnectors, p -> movingPort.getName().equals(p.getName())); + Collection<Port> matchingPorts = filterSet(instantiatedConnectors, + p -> movingPort.getName().equals(p.getName())); Port matchInstantatedConnector = matchingPorts.stream().findAny().get(); genToOrigAssocMap.put(matchInstantatedConnector, movingPort); diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/comparch/ComponentArchitectureReplicator.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/comparch/ComponentArchitectureReplicator.java index 168c6eadb6f72334129b62dc599acb65f6e5281b..2f731c353e33c96c0d62da2319febd74a9c3e316 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/comparch/ComponentArchitectureReplicator.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/comparch/ComponentArchitectureReplicator.java @@ -51,6 +51,7 @@ import org.fortiss.af3.component.model.InputPort; import org.fortiss.af3.component.model.OutputPort; import org.fortiss.af3.component.model.Port; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.comm.constraint.InternalIsolatedCommunicationSet; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.Partition; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.TaskMappingEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.abstractmapping.AbstractTaskMappingEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.abstractmapping.AbstractTaskMappingEntry; @@ -171,11 +172,12 @@ public class ComponentArchitectureReplicator for(Entry<IDeployableComponentAdapter<Component>, Component> deployedComponentPair : genCompAssoc .entrySet()) { Component currentDeployableAf3Component = deployedComponentPair.getValue(); + // TODO: This part needs to be updated to match the new Allocation Models. Collection<ExecutionUnit> allocatedExecutionUnits = getExecutionUnitAllocationsFromMapping( mapping.getAllocatedResourcesFor(deployedComponentPair.getKey())); - Collection<IMappingEntry> currentMappingEntries = - mapping.getIMappingEntriesOf(deployedComponentPair.getKey()); + Collection<AbstractTaskMappingEntry> currentMappingEntries = + mapping.getMappingEntriesOf(deployedComponentPair.getKey()); List<Component> generatedAndReplicatedComponents = new ArrayList<Component>(); generatedAndReplicatedComponents.add(currentDeployableAf3Component); @@ -185,8 +187,8 @@ public class ComponentArchitectureReplicator // components. assert (!allocatedExecutionUnits .isEmpty()) : "Each Component must be allocated to at least one ExecutionUnit."; - Iterator<IMappingEntry> mappingEntryIt = currentMappingEntries.iterator(); - IMappingEntry mappingEntry = mappingEntryIt.next(); + Iterator<AbstractTaskMappingEntry> mappingEntryIt = currentMappingEntries.iterator(); + AbstractTaskMappingEntry mappingEntry = mappingEntryIt.next(); deploymentComponents.put(currentDeployableAf3Component, (ExecutionUnit)mappingEntry.getTarget().getObject()); encEntryModelElemAssoc.put(mappingEntry, Component.class, currentDeployableAf3Component, @@ -272,8 +274,8 @@ public class ComponentArchitectureReplicator * Returns a collection of all {@link InternalIsolatedCommunicationSet} constraints that do not * include the given {@link IMappingEntry}. */ - private static Collection<InternalIsolatedCommunicationSet> - getOtherIsolationCommConstraints(TaskMappingEncoding<?> encoding, IMappingEntry entry) { + private static Collection<InternalIsolatedCommunicationSet> getOtherIsolationCommConstraints( + TaskMappingEncoding<?, ?> encoding, IMappingEntry entry) { Collection<InternalIsolatedCommunicationSet> otherConstraints = new HashSet<>(); Collection<InternalIsolatedCommunicationSet> isoComm = encoding.getConstraintsOf(InternalIsolatedCommunicationSet.class); @@ -306,7 +308,7 @@ public class ComponentArchitectureReplicator * of a single {@link Component} into a {@link Collection} of {@link ExecutionUnit}s. */ private static Collection<ExecutionUnit> getExecutionUnitAllocationsFromMapping( - Collection<IResourceAdapter<?>> mappingEntriesOfRequester) { + Collection<Partition> mappingEntriesOfRequester) { Collection<ExecutionUnit> allocatedExecutionUnits = new ArrayList<ExecutionUnit>(); for(IResourceAdapter<?> currentAllocationTarget : mappingEntriesOfRequester) { assert (currentAllocationTarget @@ -471,10 +473,9 @@ public class ComponentArchitectureReplicator * stored in the given {@code deployableComponent} Map. */ private void allocateReplicatedComponent(Map<Component, IPlatformResource> deploymentComponents, - Iterator<IMappingEntry> mappingEntryIt, Component replicatedComponent) { - IMappingEntry mappingEntry; + Iterator<AbstractTaskMappingEntry> mappingEntryIt, Component replicatedComponent) { // Allocate the replica of the original component to the ExecutionUnits. - mappingEntry = mappingEntryIt.next(); + AbstractTaskMappingEntry mappingEntry = mappingEntryIt.next(); deploymentComponents.put(replicatedComponent, (ExecutionUnit)mappingEntry.getTarget().getObject()); encEntryModelElemAssoc.put(mappingEntry, Component.class, replicatedComponent, diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/deployment/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/deployment/.ratings index d1738339ea1047ccafef862e8c1a357190c0e4fb..7d01ed135cf726233d25ed3f1478d7df8ed66f9d 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/deployment/.ratings +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/deployment/.ratings @@ -1,4 +1,4 @@ -DeploymentFinalizer.java 8ca42bc6095e7754fe14c244a708e160afaeb8f7 RED +DeploymentFinalizer.java 39bb5a9d1953ca96b4713fa34a72a7c3e3d54e08 RED DeploymentInitializer.java 9d5023ee12fc92185bb418c735f1d6c5196dcab8 RED DeploymentReplicator.java 7c65dd646ca37477be592bb620536f15c48fa1f8 RED -ExplorationSolutionToDeployment.java d95c338d700335be6d917057e0983ab1a4c4eedc RED +ExplorationSolutionToDeployment.java 2013adebdac360e8113acb05e640661c484a0a8a RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/deployment/DeploymentFinalizer.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/deployment/DeploymentFinalizer.java index 1f4f214ac7118620338b9097e44b6a24123b4555..8202d405e0e98d2485aa8a63739073955239a27e 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/deployment/DeploymentFinalizer.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/deployment/DeploymentFinalizer.java @@ -42,6 +42,8 @@ import org.fortiss.af3.deployment.utils.DeploymentModelElementFactory; import org.fortiss.af3.exploration.alg.dse.modeltransformation.EMFModelConcurrencyHandler; import org.fortiss.af3.exploration.alg.dse.modeltransformation.ITransformationModule; import org.fortiss.af3.exploration.alg.dse.modeltransformation.base.TransformationModuleBase; +import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IDeployableComponentAdapter; +import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IExecutionUnitAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.mapping.IMappingEncoding; import org.fortiss.af3.exploration.alg.dse.sysmodel.mapping.IMappingEntry; import org.fortiss.af3.exploration.alg.exception.TransformationModuleException; @@ -163,11 +165,12 @@ public class DeploymentFinalizer extends TransformationModuleBase<Deployment> { * methods uses the DeploymentUtils and returns a {@link ComponentAllocation} that can be * processed in an AF3 compatible {@link Deployment}. */ - private List<ComponentAllocation> - allocateComponentsToExecutionUnits(IMappingEncoding mappingEncoding) { + private List<ComponentAllocation> allocateComponentsToExecutionUnits( + IMappingEncoding<IDeployableComponentAdapter<?>, IExecutionUnitAdapter<?>, IMappingEntry<IDeployableComponentAdapter<?>, IExecutionUnitAdapter<?>>> mappingEncoding) { List<ComponentAllocation> componentToExecutionUnitAllocations = new ArrayList<ComponentAllocation>(); - for(IMappingEntry curEntry : mappingEncoding.getIMappingEntries()) { + for(IMappingEntry<IDeployableComponentAdapter<?>, IExecutionUnitAdapter<?>> curEntry : mappingEncoding + .getMappingEntries()) { Component curComponent = (Component)encEntryModelElemAssoc.get(curEntry, Component.class); // If the given entry is unknown, we examine the associated entries since the diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/deployment/ExplorationSolutionToDeployment.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/deployment/ExplorationSolutionToDeployment.java index 033fee219d0fcdda8b5aeed5bf510b85371bc475..6ed5053b10106f33657f700839d5268e777648bb 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/deployment/ExplorationSolutionToDeployment.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/deployment/ExplorationSolutionToDeployment.java @@ -32,6 +32,7 @@ import org.fortiss.af3.exploration.alg.dse.modeltransformation.base.Transformati import org.fortiss.af3.exploration.alg.dse.modeltransformation.comparch.ComponentArchitectureTransformer; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IDeployableComponentAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.mapping.IMappingEncoding; +import org.fortiss.af3.exploration.alg.dse.sysmodel.mapping.IMappingEntry; import org.fortiss.af3.exploration.alg.exception.TransformationModuleException; import org.fortiss.af3.exploration.alg.guava.SubClassToInstanceMap; import org.fortiss.af3.exploration.alg.service.ExplorationEncodingMap; @@ -114,8 +115,9 @@ public class ExplorationSolutionToDeployment extends TransformationStrategyBase< * be generated that is shipped with the generated {@link Deployment}. */ // TODO: Use "Component" as Generic. - private boolean isAdditionalArchRequiredByReplication(IMappingEncoding mapping) { - for(IDeployableComponentAdapter<?> deployedComponent : mapping.getDeployedComponents()) { + private boolean isAdditionalArchRequiredByReplication( + IMappingEncoding<IDeployableComponentAdapter<?>, ?, IMappingEntry<IDeployableComponentAdapter<?>, ?>> mapping) { + for(IDeployableComponentAdapter<?> deployedComponent : mapping.getRequesters()) { if(mapping.getAllocatedResourcesFor(deployedComponent).size() > 1) { return true; } @@ -129,8 +131,9 @@ public class ExplorationSolutionToDeployment extends TransformationStrategyBase< * {@link Deployment}. */ // TODO: Use "Component" as Generic. - private boolean isAdditionalArchRequiredByInstantiation(IMappingEncoding mapping) { - for(IDeployableComponentAdapter<?> deployedComponent : mapping.getDeployedComponents()) { + private boolean isAdditionalArchRequiredByInstantiation( + IMappingEncoding<IDeployableComponentAdapter<?>, ?, IMappingEntry<IDeployableComponentAdapter<?>, ?>> mapping) { + for(IDeployableComponentAdapter<?> deployedComponent : mapping.getRequesters()) { if(deployedComponent.isInstantiation()) { return true; } diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/taskgraph/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/taskgraph/.ratings index 6ad16535713029635daddc5db050139da06ce4a9..9857a36f4e3eb903e3043531ea59426a83b96ee3 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/taskgraph/.ratings +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/taskgraph/.ratings @@ -1,5 +1,5 @@ -AcyclicTaskGraph.java d0fd0fec8e300d012327915742c0572b52f8a6f5 RED +AcyclicTaskGraph.java 5a4c07640b15eff2da05b8054547d2ad03704ed9 RED ChannelAdapterWeightedEdge.java ef160bea5d74f09617388767313657dd76283f61 RED DefaultTaskGraph.java 51fc0ef55ba32b59c95feb6989be1ecb32b5334e RED TaskGraph.java 4a22a1beb6129396b7b478624bf1df2540598504 RED -TaskGraphInstantiator.java 4484d226bc1240c37762a35dd6c3aab0287507af RED +TaskGraphInstantiator.java fe92d5016c6c5b901c20ab418566286ef58d5a9c RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/taskgraph/TaskGraphInstantiator.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/taskgraph/TaskGraphInstantiator.java index df48da72eac0580bc91f1b985908e7cab69a6485..61a55ff76ad3727bed085854c4d967581e854dcf 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/taskgraph/TaskGraphInstantiator.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/taskgraph/TaskGraphInstantiator.java @@ -119,10 +119,9 @@ public class TaskGraphInstantiator<T extends TaskGraph> { * Replaces the given {#link abstractNode} with the given {#link instanceNode} in the {#link * instanceTaskGraph}. */ - public void - insertInstanceComponent(T instanceTaskGraph, - IDeployableComponentAdapter<?> abstractNode, - IDeployableComponentAdapter<?> instanceNode) { + public void insertInstanceComponent(T instanceTaskGraph, + IDeployableComponentAdapter<?> abstractNode, + IDeployableComponentAdapter<?> instanceNode) { ListenableDirectedWeightedGraph<IDeployableComponentAdapter<?>, ChannelAdapterWeightedEdge> graph = instanceTaskGraph.getGraph(); instanceTaskGraph.addTask(instanceNode, abstractNode); @@ -150,13 +149,12 @@ public class TaskGraphInstantiator<T extends TaskGraph> { * {@link IDeployableComponentAdapter} instantiating the "abstract" * {@link IDeployableComponentAdapter}. */ - private - Map<IDeployableComponentAdapter<?>, IDeployableComponentAdapter<?>> + private Map<IDeployableComponentAdapter<?>, IDeployableComponentAdapter<?>> createAbstractInstantiatedNodeAssociations( InstantiatedTaskMappingEncoding<? extends InstantiatedTaskMappingEntry> encoding) { Map<IDeployableComponentAdapter<?>, IDeployableComponentAdapter<?>> instanceToAbstractNodeMap = new HashMap<IDeployableComponentAdapter<?>, IDeployableComponentAdapter<?>>(); - for(IDeployableComponentAdapter<?> instantiatedComponent : encoding.getDeployedComponents()) { + for(IDeployableComponentAdapter<?> instantiatedComponent : encoding.getRequesters()) { if(instantiatedComponent.isInstantiation()) { instanceToAbstractNodeMap.put(instantiatedComponent, instantiatedComponent.getReplacedComponent()); diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/comm/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/comm/.ratings index 7c950170160d3d7db83f527121bd12c89d69e4ee..fa19520a017a5d6c105704f400ad72371f8a6c84 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/comm/.ratings +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/comm/.ratings @@ -1,2 +1,2 @@ -Message.java a34de478e107ce70b0b4cc8e7def31620dd2d7be RED -MessageGenerator.java 489284914093d21ee57fbc08220b5e928c560b22 RED +Message.java 6c99d518bfc9e31bb174c299017b561ec69314aa RED +MessageGenerator.java 4d7b8bb7d59a10129c686a344241701f9b0fd376 RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/comm/Message.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/comm/Message.java index 5b07c57d4729ac366bc30e1d62f61741589323a3..7f8b1c9f0472a7b635a9bf971d47c4f56f657233 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/comm/Message.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/comm/Message.java @@ -19,6 +19,7 @@ import java.util.Collection; import java.util.HashSet; import org.fortiss.af3.component.model.Channel; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.InstantiatedTaskMappingEntry; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.solution.StrictTTSchedule; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.solution.TimeSlot; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IResourceAdapter; @@ -48,10 +49,10 @@ import org.jgrapht.graph.DefaultEdge; public class Message implements Comparable<Message> { /** References the sender of this {@link Message}, i.e. a deployed component/task. */ - private IMappingEntry sender; + private InstantiatedTaskMappingEntry sender; /** References the {@link IMappingEntry}s that are receivers of this {@link Message}. */ - private Collection<IMappingEntry> receiverMappingEntries; + private Collection<InstantiatedTaskMappingEntry> receiverMappingEntries; /** References the receiver of this {@link Message}, i.e. a deployed component/task. */ private Collection<IResourceAdapter<?>> receiverResources; @@ -81,8 +82,8 @@ public class Message implements Comparable<Message> { * Constructs a new {@link Message} between a sender and a receiver (identified by their * respective {@link IMappingEntry}s in the {@link IMappingEncoding}). */ - public Message(ISignalAdapter<?> channelAdapter, IMappingEntry deployedSender, - Collection<? extends IMappingEntry> receiverEntries) { + public Message(ISignalAdapter<?> channelAdapter, InstantiatedTaskMappingEntry deployedSender, + Collection<? extends InstantiatedTaskMappingEntry> receiverEntries) { this.messageAdapter = channelAdapter; this.sender = deployedSender; if(sender != null && sender.getTarget() != null) { @@ -90,8 +91,8 @@ public class Message implements Comparable<Message> { } this.receiverResources = new HashSet<IResourceAdapter<?>>(); - this.receiverMappingEntries = new HashSet<IMappingEntry>(); - for(IMappingEntry receiver : receiverEntries) { + this.receiverMappingEntries = new HashSet<InstantiatedTaskMappingEntry>(); + for(InstantiatedTaskMappingEntry receiver : receiverEntries) { addReceiver(receiver); } @@ -148,7 +149,7 @@ public class Message implements Comparable<Message> { } /** Adds an {@link IMappingEntry} as a receiver of this message. */ - public void addReceiver(IMappingEntry receiver) { + public void addReceiver(InstantiatedTaskMappingEntry receiver) { receiverMappingEntries.add(receiver); receiverResources.add(receiver.getTarget()); } @@ -177,7 +178,7 @@ public class Message implements Comparable<Message> { } /** Returns the {@link IMappingEntry}s that receive this message. */ - public Collection<IMappingEntry> getReceiverMappingEntries() { + public Collection<InstantiatedTaskMappingEntry> getReceiverMappingEntries() { return receiverMappingEntries; } diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/comm/MessageGenerator.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/comm/MessageGenerator.java index 1b987cb4535849f292b1e11ae5aac520e46e1074..d8d5c45482f03ad8fd27641bb5cd95839b023463 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/comm/MessageGenerator.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/comm/MessageGenerator.java @@ -22,9 +22,11 @@ import java.util.Collection; import java.util.HashSet; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.comm.constraint.InternalIsolatedCommunicationSet; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.Partition; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.TaskMappingEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.TaskMappingEntry; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.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.IDeployableComponentAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IExecutionUnitAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ISignalAdapter; @@ -38,7 +40,7 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.mapping.IMappingEntry; * * @author diewald */ -public class MessageGenerator<S extends TaskMappingEntry, T extends TaskMappingEncoding<S>> { +public class MessageGenerator<S extends TaskMappingEntry<IDeployableComponentAdapter<?>, Partition>, T extends TaskMappingEncoding<IDeployableComponentAdapter<?>, S>> { /** Reference to the systemModel. */ private SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter; @@ -58,7 +60,7 @@ public class MessageGenerator<S extends TaskMappingEntry, T extends TaskMappingE // TODO: represent the signals in the task graph: do not use the systemModelAdapter here. // Consequence: there may be multiple edges between two vertices (tasks). for(S entry : encoding.getMappingEntries()) { - IDeployableComponentAdapter<?> senderComponent = entry.getDeployableComponent(); + IDeployableComponentAdapter<?> senderComponent = entry.getSource(); if(senderComponent.isInstantiation()) { senderComponent = senderComponent.getReplacedComponent(); } @@ -74,11 +76,13 @@ public class MessageGenerator<S extends TaskMappingEntry, T extends TaskMappingE for(ISignalAdapter<?> currentMessageAdapter : emittedMessages) { // Create a Collection of dependent MappingEntries, for which messages are generated // (if required). + // TODO: Get rid of the AbstractTaskMappingEntry(s) and use S only. Note that guava + // generic type reflection will be required! Collection<S> mappingEntriesOfSuccesors = getSuccessorMappingEntries(encoding, currentMessageAdapter); - Message generatedMessage = - generateMessageForSenderEntry(currentMessageAdapter, entry, - mappingEntriesOfSuccesors, allIsoCommConstr, otherIsoCommConstr); + Message generatedMessage = generateMessageForSenderEntry(currentMessageAdapter, + (InstantiatedTaskMappingEntry)entry, mappingEntriesOfSuccesors, + allIsoCommConstr, otherIsoCommConstr); if(generatedMessage != null) { generatedMessages.add(generatedMessage); } @@ -108,9 +112,8 @@ public class MessageGenerator<S extends TaskMappingEntry, T extends TaskMappingE } for(IDeployableComponentAdapter<?> successorComponent : realSuccessorComponents) { - Collection<IDeployableComponentAdapter<?>> encComps = - filterSet(encoding.getDeployedComponents(), - c -> c.getObject() == successorComponent.getObject()); + Collection<IDeployableComponentAdapter<?>> encComps = filterSet( + encoding.getRequesters(), c -> c.getObject() == successorComponent.getObject()); for(IDeployableComponentAdapter<?> encComp : encComps) { mappingEntriesOfSuccesors.addAll(encoding.getMappingEntriesOf(encComp)); } @@ -124,14 +127,15 @@ public class MessageGenerator<S extends TaskMappingEntry, T extends TaskMappingE * {@link IExecutionUnitAdapter}. */ private Message generateMessageForSenderEntry(ISignalAdapter<?> senderChannel, - S senderMappingEntry, Collection<S> mappingEntriesOfSuccesors, + InstantiatedTaskMappingEntry senderMappingEntry, + Collection<S> mappingEntriesOfSuccesors, Collection<InternalIsolatedCommunicationSet> allConstraints, Collection<InternalIsolatedCommunicationSet> otherConstraints) { Collection<S> receiverEntries = new HashSet<S>(); for(S mappingEntryReceiver : mappingEntriesOfSuccesors) { // TODO: knowledge about prev steps. - IMappingEntry constrEntry = + AbstractTaskMappingEntry constrEntry = mappingEntryReceiver.getAssociatedElement(AbstractTaskMappingEntry.class); if((senderMappingEntry.getTarget() != mappingEntryReceiver.getTarget())) { if(isPartOfIsolationCommConstraint(allConstraints, senderMappingEntry) && @@ -144,7 +148,8 @@ public class MessageGenerator<S extends TaskMappingEntry, T extends TaskMappingE } if(!receiverEntries.isEmpty()) { - return new Message(senderChannel, senderMappingEntry, receiverEntries); + return new Message(senderChannel, senderMappingEntry, + (Collection<? extends InstantiatedTaskMappingEntry>)receiverEntries); } return null; } @@ -154,8 +159,10 @@ public class MessageGenerator<S extends TaskMappingEntry, T extends TaskMappingE * {@link InternalIsolatedCommunicationSet}s. */ private boolean isPartOfIsolationCommConstraint( - Collection<InternalIsolatedCommunicationSet> isoComm, IMappingEntry entry) { - IMappingEntry actualEntry = entry.getAssociatedElement(AbstractTaskMappingEntry.class); + Collection<InternalIsolatedCommunicationSet> isoComm, + InstantiatedTaskMappingEntry entry) { + AbstractTaskMappingEntry actualEntry = + entry.getAssociatedElement(AbstractTaskMappingEntry.class); for(InternalIsolatedCommunicationSet constr : isoComm) { if(constr.contains(actualEntry)) { @@ -170,8 +177,8 @@ public class MessageGenerator<S extends TaskMappingEntry, T extends TaskMappingE * 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/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/mapping/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/mapping/.ratings index d1b082be04609dd57c253f46d68ff6c1432ba946..82094e2594f7b8d73581e1e994671a05c0fe0d8a 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/mapping/.ratings +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/mapping/.ratings @@ -1,2 +1,2 @@ -IMappingEncoding.java da6260fd43483f23c18d3331d8b5ac3953cae161 RED -IMappingEntry.java 739ac3c6b20c1ce617e9a742e79482aee92ddc61 RED +IMappingEncoding.java cd427e08588b59de29490c75c8a07947a115d4d7 RED +IMappingEntry.java eba204428624604d850b3656ff58d56fb0c69591 RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/mapping/IMappingEncoding.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/mapping/IMappingEncoding.java index 64d62acc92c31a906c16e8ebe696c9982934077a..ac16e64e722e997c21f49b7110009c30f50c301c 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/mapping/IMappingEncoding.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/mapping/IMappingEncoding.java @@ -17,8 +17,6 @@ package org.fortiss.af3.exploration.alg.dse.sysmodel.mapping; import java.util.Collection; -import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IDeployableComponentAdapter; -import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IExecutionUnitAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IRequestAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IResourceAdapter; import org.fortiss.af3.exploration.alg.service.IExplorationEncoding; @@ -28,31 +26,32 @@ import org.fortiss.af3.exploration.alg.service.IExplorationEncoding; * * @author diewald */ -public interface IMappingEncoding extends IExplorationEncoding { +public interface IMappingEncoding<S extends IRequestAdapter<?>, T extends IResourceAdapter<?>, M extends IMappingEntry<S, T>> + extends IExplorationEncoding { /** * Returns the allocation of a specific {@link IRequestAdapter} to its {@link IMappingEntry}s. */ - public Collection<IResourceAdapter<?>> getAllocatedResourcesFor(IRequestAdapter<?> request); + public Collection<T> getAllocatedResourcesFor(S source); /** * Returns the collection of {@link IMappingEntry}s which represent the (multi-)allocation of - * the given {@link IDeployableComponentAdapter}s to {@link IExecutionUnitAdapter}s. + * the given {@link IRequestAdapter}s to {@link IResourceAdapter}s. */ - public Collection<IMappingEntry> getIMappingEntriesOf(IDeployableComponentAdapter<?> component); + public Collection<M> getMappingEntriesOf(S source); /** * Returns whether {@code this} {@link IMappingEncoding} contains the given * {@link IMappingEntry}. */ - public boolean containsEntry(IMappingEntry entry); + public boolean containsEntry(M entry); /** * Returns the collection of {@link IMappingEntry}s contained in {@code this} * {@link IMappingEncoding}. */ - public Collection<IMappingEntry> getIMappingEntries(); + public Collection<M> getMappingEntries(); - /** Returns the collection of deployed {@link IDeployableComponentAdapter}s. */ - public Collection<IDeployableComponentAdapter<?>> getDeployedComponents(); + /** Returns the collection of resource requesters. */ + public Collection<S> getRequesters(); } diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/mapping/IMappingEntry.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/mapping/IMappingEntry.java index 0d6d7f3ba7cb2a4df360f59777373167d7cd27bf..a667682d10863655d6318083ce485fa2c0c64370 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/mapping/IMappingEntry.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/mapping/IMappingEntry.java @@ -15,8 +15,8 @@ +--------------------------------------------------------------------------*/ package org.fortiss.af3.exploration.alg.dse.sysmodel.mapping; -import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IDeployableComponentAdapter; -import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IExecutionUnitAdapter; +import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IRequestAdapter; +import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IResourceAdapter; import org.fortiss.af3.exploration.alg.guava.IAssociativeElement; /** @@ -24,14 +24,14 @@ import org.fortiss.af3.exploration.alg.guava.IAssociativeElement; * * @author diewald */ -public interface IMappingEntry extends IAssociativeElement<IMappingEntry> { +public interface IMappingEntry<S extends IRequestAdapter<?>, T extends IResourceAdapter<?>> + extends IAssociativeElement<IMappingEntry<S, T>>, Cloneable { + + /** Returns the {@link IRequestAdapter} that is represented by this {@link IMappingEntry}. */ + S getSource(); /** Return target resource to which the request is mapped. */ - IExecutionUnitAdapter<?> getTarget(); + T getTarget(); - /** - * Returns the {@link IDeployableComponentAdapter} that is represented by this - * {@link IMappingEntry}. - */ - IDeployableComponentAdapter<?> getDeployableComponent(); + IMappingEntry<S, T> clone(); } diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/comm/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/comm/.ratings index 431a7b6cfb101ae13932aa42649aeeff097c9c3e..3efff2ade4bf2b5fdaa9423ef52725e80eca961b 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/comm/.ratings +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/comm/.ratings @@ -1 +1 @@ -TDMABusScheduler.java bcfa9f046e3e620650cb199af79ed2fa274fcc6e RED +TDMABusScheduler.java f25bcd63b0a8dd2f5e72c72261246286bf48c841 RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/comm/TDMABusScheduler.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/comm/TDMABusScheduler.java index e7e09dbe4fc8f884724a0ba888917b898204f133..67f5294c40f046b6b595a3171139b15e9f7e82f7 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/comm/TDMABusScheduler.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/comm/TDMABusScheduler.java @@ -45,7 +45,6 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ITransmissionUnitAdapte import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.AcyclicTaskGraph; import org.fortiss.af3.exploration.alg.dse.sysmodel.comm.Message; -import org.fortiss.af3.exploration.alg.dse.sysmodel.mapping.IMappingEntry; 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; @@ -97,17 +96,16 @@ public class TDMABusScheduler<S extends InstantiatedTaskMappingEntry, T extends continue; } IDeployableComponentAdapter<?> senderComponent = - senderSlot.getDeployedRequester().getDeployableComponent(); + senderSlot.getDeployedRequester().getSource(); message.addMessageSenderTimeSlot(senderSlot); emitableMessagesPerSlot.put(senderSlot, message); - for(IMappingEntry receiverEntry : message.getReceiverMappingEntries()) { + for(InstantiatedTaskMappingEntry receiverEntry : message.getReceiverMappingEntries()) { // If the receiver entry is only executed during the next hyperperiod, do not // consider this receiver here. AcyclicTaskGraph correspondingTaskGraph = acycItgEnc.getTaskGraphOf(senderComponent); - IDeployableComponentAdapter<?> receiverComponent = - receiverEntry.getDeployableComponent(); + IDeployableComponentAdapter<?> receiverComponent = receiverEntry.getSource(); if(correspondingTaskGraph.getGraph().containsEdge(senderComponent, receiverComponent)) { TimeSlot recvTimeSlot = schedule.getTimeSlotOf(receiverEntry); diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/proc/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/proc/.ratings index 92bd89493ae1b864c0e9f752fd6a91c926616a60..4a6e0c7660f06a6622635db0a2a094882957aa26 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/proc/.ratings +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/proc/.ratings @@ -1,3 +1,3 @@ -EDFSchedulerBase.java d74d55b7702799f70dcc2eb8bd438e5a6fe1570d RED -FailSilentEDFScheduler.java 8b39db36e35eecf724f47cc4b148d83430103e0e RED -FaultDetectionVotingEDFScheduler.java 725aab1c5f631299229daa5b4e9dba036d212007 RED +EDFSchedulerBase.java ccef414626ed16974de7a2524cf68fcef718fcb8 RED +FailSilentEDFScheduler.java 121a3f20080cf87677e4cb6c695751ee7cf70cc9 RED +FaultDetectionVotingEDFScheduler.java 01c337cc9870e7ccdf9adf69a61474b0e8f13196 RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/proc/EDFSchedulerBase.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/proc/EDFSchedulerBase.java index d5b4a5a269deed70e7a4dbf18aec1f6fb4490d94..45bb7e32734fac8f3eab946fb4ac9e3d42fa0a0b 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/proc/EDFSchedulerBase.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/proc/EDFSchedulerBase.java @@ -544,7 +544,7 @@ public abstract class EDFSchedulerBase<S extends InstantiatedTaskMappingEntry, T /** Returns the execution time for the given {@link IDeployableComponentAdapter}. */ protected abstract Apfloat getExecutionTime( - TaskMappingEncoding<? extends TaskMappingEntry> encoding, + TaskMappingEncoding<?, ? extends TaskMappingEntry<?, ?>> encoding, InstantiatedAcyclicTaskGraphEncoding<S, ?> acycItgEnc, IDeployableComponentAdapter<?> deployableComponent, S entry); diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/proc/FailSilentEDFScheduler.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/proc/FailSilentEDFScheduler.java index 834b0b8ca54bebc24a15cc4f3990093ff068e19f..71163898a768f252caac895d5310f8711e1d029f 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/proc/FailSilentEDFScheduler.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/proc/FailSilentEDFScheduler.java @@ -36,8 +36,8 @@ import org.fortiss.af3.exploration.model.ExplorationSpecification; * * @author huang, barner */ -public class FailSilentEDFScheduler extends - EDFSchedulerBase<FailSilentTaskMappingEntry, FailSilentTaskMappingEncoding> { +public class FailSilentEDFScheduler + extends EDFSchedulerBase<FailSilentTaskMappingEntry, FailSilentTaskMappingEncoding> { /** Constructs a simple EDF scheduler for a given exploration run */ public FailSilentEDFScheduler(SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, @@ -51,7 +51,8 @@ public class FailSilentEDFScheduler extends * . */ @Override - protected Apfloat getExecutionTime(TaskMappingEncoding<? extends TaskMappingEntry> encoding, + protected Apfloat getExecutionTime( + TaskMappingEncoding<?, ? extends TaskMappingEntry<?, ?>> encoding, InstantiatedAcyclicTaskGraphEncoding<FailSilentTaskMappingEntry, ?> acycItgEnc, IDeployableComponentAdapter<?> deployableComponent, FailSilentTaskMappingEntry entry) { Apfloat executiontime = diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/proc/FaultDetectionVotingEDFScheduler.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/proc/FaultDetectionVotingEDFScheduler.java index 7372b2ecab9cb41fb10b91294112aeb9112063fb..382b708f21a8f23da602ea57ce05f18ab0055af1 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/proc/FaultDetectionVotingEDFScheduler.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/proc/FaultDetectionVotingEDFScheduler.java @@ -103,7 +103,8 @@ public class FaultDetectionVotingEDFScheduler extends /** {@inheritDoc} */ @Override - protected Apfloat getExecutionTime(TaskMappingEncoding<? extends TaskMappingEntry> encoding, + protected Apfloat getExecutionTime( + TaskMappingEncoding<?, ? extends TaskMappingEntry<?, ?>> encoding, InstantiatedAcyclicTaskGraphEncoding<FaultDetectionVotingTaskMappingEntry, ?> acycItgEnc, IDeployableComponentAdapter<?> deployableComponent, FaultDetectionVotingTaskMappingEntry entry) { diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/port/plot/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/port/plot/.ratings index e1415c754536dbb3aae9c11bb638cb584eb3ae25..1004ef811f494c83a6ab94bbb6882329aa35057c 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/port/plot/.ratings +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/port/plot/.ratings @@ -1,8 +1,7 @@ -DO_NOT_REVIEW_PACKAGE 02c34aff0e3b2b626d26b371e356c47f780dff35 RED MessagePathOnClicked.java 985f075fabbd5e6aa796e5ef0c0e6a976a9e8571 RED ScheduleGanttRenderer.java 8c481d56ca65d6074f0340f2c7789bbe6e3a48e6 RED -ScheduleLabelGenerator.java ef0e34779ad78357756600b321e21bd3118f7632 RED +ScheduleLabelGenerator.java 595273570eef7ef53ba5a9efd4ab25133aded3a8 RED SchedulePlotter.java 71570960426800c1e2589dd05e538e9abb69f126 RED -ScheduleToolTipGenerator.java 150838f3e0af1206c166cfecf2baade5c563b33b RED +ScheduleToolTipGenerator.java 5265f9a8edb405ecc5959d54deee293d4897fc52 RED TaskSeriesCollectionFromSchedule.java a945f60435ee3bfa908db211a4924963a6dcdfb2 RED XYPlotter.java 67d288da8431677636f08dbd2c19cbb6a40aeabe RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/port/plot/ScheduleLabelGenerator.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/port/plot/ScheduleLabelGenerator.java index 2dacbe718587b136c5feb4a9cab337f851a7bbb0..faa3f972c33dbce3d5678e6222aa1f7f0f195d5d 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/port/plot/ScheduleLabelGenerator.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/port/plot/ScheduleLabelGenerator.java @@ -94,8 +94,7 @@ public class ScheduleLabelGenerator implements CategoryItemLabelGenerator { } else if(resource instanceof IGatewayUnitAdapter) { retName = "G"; } else { - retName = - slot.getDeployedRequester().getDeployableComponent().getName(); + retName = slot.getDeployedRequester().getSource().getName(); } } } diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/port/plot/ScheduleToolTipGenerator.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/port/plot/ScheduleToolTipGenerator.java index 45c1d03d88c67c95ab6ca8f990c2ca2d8f4eedaf..99109c6076edd0a4e56d17673a0ab96bdcb3f957 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/port/plot/ScheduleToolTipGenerator.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/port/plot/ScheduleToolTipGenerator.java @@ -90,10 +90,10 @@ public class ScheduleToolTipGenerator extends StandardCategoryToolTipGenerator { if(resource instanceof IExecutionUnitAdapter) { if(currentSlot != null) { - IMappingEntry mappingEntry = currentSlot.getDeployedRequester(); + IMappingEntry<IDeployableComponentAdapter<?>, ?> mappingEntry = + currentSlot.getDeployedRequester(); if(mappingEntry != null) { - IDeployableComponentAdapter<?> component = - mappingEntry.getDeployableComponent(); + IDeployableComponentAdapter<?> component = mappingEntry.getSource(); if(component != null) { prevSlot.put(resource, currentSlot); taskAndResourceName = diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/util/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/util/.ratings index 6a70053692d76730ccd08a7cea821a5517007c5f..e03bb0c00ce50d3a412aa846fc5fcc09cd40e03a 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/util/.ratings +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/util/.ratings @@ -1,7 +1,7 @@ -AF3Utils.java 1d6c8987cce3b5c43cb1ae2c77586877db38183b RED +AF3Utils.java ae4bb78f77989e3a5689bfff80298c1bdeccdb3a RED DesignSpaceExplorationModelElementFactory.java 9dc330973f132c4b936e4dc7ee8407614faf2ff6 RED -ExplorationAlgDebugUtils.java 1c963913e2c82df7369415d348a860f489fe0628 RED +ExplorationAlgDebugUtils.java ff9feee46a3d00dd21d007a53f71f2de1ce10a94 RED ExplorationAlgUtils.java 5915fd72f26cf5d7ef49e62a8e304a63da71d8dc RED ExplorationEcoreUtils.java 48ed07aec3cd93e66d37abc10d50636d591f1c71 RED GraphUtils.java a1cec037a4d54bcf196dc5eebddc72b033993d6f RED -TransformationUtils.java e10cc863c134ada43e71854a427e96fc019462de RED +TransformationUtils.java b077f7a695cecd66bfdb5c265e8875900bee137c RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/util/AF3Utils.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/util/AF3Utils.java index 14ee010495b5afbf28c869d38c10488c87f34aea..18fff4f9cdf8e8508b060f1cd297960394673bac 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/util/AF3Utils.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/util/AF3Utils.java @@ -603,8 +603,9 @@ public class AF3Utils { * @return The {@link ComponentArchitecture} identified as the <i>Component Pool</i> or * {@code null} if none is found. */ - public static ComponentArchitecture getFirstComponentPool(IMappingEncoding mapping) { - for(IDeployableComponentAdapter<?> deployableComponent : mapping.getDeployedComponents()) { + public static ComponentArchitecture getFirstComponentPool( + IMappingEncoding<IDeployableComponentAdapter<?>, ?, IMappingEntry<IDeployableComponentAdapter<?>, ?>> mapping) { + for(IDeployableComponentAdapter<?> deployableComponent : mapping.getRequesters()) { if(deployableComponent.isInstantiation()) { // TODO: Avoid casting: Parameterize the IModelElementAdapter to use EObject-derived // generics? diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/util/ExplorationAlgDebugUtils.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/util/ExplorationAlgDebugUtils.java index d67eb8c92fcdc16be6c5669ed8b8f5721a99bea1..2ce3105a7cabe1af2c8259abbe768941ef8816af 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/util/ExplorationAlgDebugUtils.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/util/ExplorationAlgDebugUtils.java @@ -21,12 +21,15 @@ import java.util.Collection; import java.util.stream.Collectors; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.comm.constraint.InternalIsolatedCommunicationSet; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.Partition; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.TaskMappingEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.TaskMappingEntry; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.abstractmapping.AbstractTaskMappingEncoding; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.abstractmapping.AbstractTaskMappingEntry; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.genotype.ComposableGenotype; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.ComposablePhenotype; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.CompositePhenotype; +import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IDeployableComponentAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.mapping.IMappingEntry; import org.opt4j.core.genotype.CompositeGenotype; @@ -41,19 +44,17 @@ public class ExplorationAlgDebugUtils { /** * TBD. */ - public static <E extends TaskMappingEntry> boolean checkTaskMappingForSFConsistency( - TaskMappingEncoding<E> encoding) { + public static <E extends TaskMappingEntry<IDeployableComponentAdapter<?>, Partition>> boolean + checkTaskMappingForSFConsistency( + TaskMappingEncoding<IDeployableComponentAdapter<?>, E> encoding) { // TODO #checking: Implement this method in a generic manner to check the number of channels // of safety functions with the entry number in the allocation encodings. - Collection<E> sfEs = - encoding.getMappingEntries() - .stream() - .filter(e -> e.getDeployableComponent().getName() - .contains("SafetyProtection")).collect(Collectors.toList()); - Collection<E> ioEs = - encoding.getMappingEntries().stream() - .filter(e -> e.getDeployableComponent().getName().contains("IOServer")) - .collect(Collectors.toList()); + Collection<E> sfEs = encoding.getMappingEntries().stream() + .filter(e -> e.getSource().getName().contains("SafetyProtection")) + .collect(Collectors.toList()); + Collection<E> ioEs = encoding.getMappingEntries().stream() + .filter(e -> e.getSource().getName().contains("IOServer")) + .collect(Collectors.toList()); return sfEs.size() == ioEs.size(); } @@ -67,11 +68,11 @@ public class ExplorationAlgDebugUtils { * identified. * @return Set of <i>all</i> child {@link ComposablePhenotype}s. */ - public static Collection<ComposablePhenotype<?>> getAllSubPhenotypes( - CompositePhenotype<?> compositePhenotype) { + public static Collection<ComposablePhenotype<?>> + getAllSubPhenotypes(CompositePhenotype<?> compositePhenotype) { Collection<ComposablePhenotype<?>> allSubPhenotypes = compositePhenotype.getSubPhenotypes(); - pickInstanceOf(CompositePhenotype.class, allSubPhenotypes).forEach( - p -> allSubPhenotypes.addAll(getAllSubPhenotypes(p))); + pickInstanceOf(CompositePhenotype.class, allSubPhenotypes) + .forEach(p -> allSubPhenotypes.addAll(getAllSubPhenotypes(p))); return allSubPhenotypes; } @@ -84,12 +85,12 @@ public class ExplorationAlgDebugUtils { * identified. * @return Set of <i>all</i> child {@link ComposableGenotype}s. */ - public static Collection<ComposableGenotype> getAllSubGenotypes( - CompositeGenotype<?, ?> compositeGenotype) { + public static Collection<ComposableGenotype> + getAllSubGenotypes(CompositeGenotype<?, ?> compositeGenotype) { @SuppressWarnings("unchecked") Collection<ComposableGenotype> allSubGenotypes = (Collection<ComposableGenotype>)compositeGenotype.values(); - pickInstanceOf(CompositeGenotype.class, allSubGenotypes).forEach( - p -> allSubGenotypes.addAll(getAllSubGenotypes(p))); + pickInstanceOf(CompositeGenotype.class, allSubGenotypes) + .forEach(p -> allSubGenotypes.addAll(getAllSubGenotypes(p))); return allSubGenotypes; } @@ -102,13 +103,14 @@ public class ExplorationAlgDebugUtils { * {@link AbstractTaskMappingEncoding} to examine for consistency. * @return If the mapping is consistent w.r.t. the {@link InternalIsolatedCommunicationSet}. */ - public static boolean mappingContainsAllIsolationCommEntries( - AbstractTaskMappingEncoding encoding) { + public static boolean + mappingContainsAllIsolationCommEntries(AbstractTaskMappingEncoding encoding) { Collection<InternalIsolatedCommunicationSet> constrs = encoding.getConstraintsOf(InternalIsolatedCommunicationSet.class); + // TODO: Remove the ugly casting when converting the internal constraints into "real" ones. for(InternalIsolatedCommunicationSet curConstr : constrs) { for(IMappingEntry entry : curConstr.getIsolatedCommunicationSet()) { - if(!encoding.containsEntry(entry)) { + if(!encoding.containsEntry((AbstractTaskMappingEntry)entry)) { return false; } } diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/util/TransformationUtils.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/util/TransformationUtils.java index d6471f1356c863eb1baeab3a5a30174d22cb3d06..3354cb95319d036eaa040fdac2f7359b16752117 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/util/TransformationUtils.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/util/TransformationUtils.java @@ -38,6 +38,7 @@ import org.fortiss.af3.component.model.OutputPort; import org.fortiss.af3.component.model.Port; import org.fortiss.af3.component.utils.ComponentModelElementFactory; import org.fortiss.af3.deployment.model.Deployment; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.abstractmapping.AbstractTaskMappingEncoding; import org.fortiss.af3.exploration.alg.dse.modeltransformation.EMFModelConcurrencyHandler; import org.fortiss.af3.exploration.alg.dse.modeltransformation.ITransformationModule; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IDeployableComponentAdapter; @@ -256,11 +257,11 @@ public class TransformationUtils { * If one {@link IDeployableComponentAdapter} of the mapping does not wrap an AF3 * {@link Component} but any other object. */ - public static Collection<IDeployableComponentAdapter<Component>> - retrieveDeployableComponents(ITransformationModule<?> tModule, IMappingEncoding mapping) - throws TransformationModuleException { + public static Collection<IDeployableComponentAdapter<Component>> retrieveDeployableComponents( + ITransformationModule<?> tModule, AbstractTaskMappingEncoding mapping) + throws TransformationModuleException { Collection<IDeployableComponentAdapter<Component>> deplCompAdps = new ArrayList<>(); - for(IDeployableComponentAdapter<?> comp : mapping.getDeployedComponents()) { + for(IDeployableComponentAdapter<?> comp : mapping.getRequesters()) { if(comp.getObject() instanceof Component) { @SuppressWarnings("unchecked") IDeployableComponentAdapter<Component> castComp = (IDeployableComponentAdapter<Component>)comp;