diff --git a/org.fortiss.af3.exploration.alg/master/plugin.xml b/org.fortiss.af3.exploration.alg/master/plugin.xml index 661feb6808d45a64dc32703cc0c63db366634ca5..3c091022ecfaa9cc3490646592c36e1144498fe6 100644 --- a/org.fortiss.af3.exploration.alg/master/plugin.xml +++ b/org.fortiss.af3.exploration.alg/master/plugin.xml @@ -235,5 +235,17 @@ modelElementClass="org.fortiss.af3.exploration.moea.model.predefined.EnergyMinObjective"> </modelElementClass> </evaluator> + <evaluator + module="org.fortiss.af3.exploration.alg.dse.evaluator.objective.MappingEvaluatorObjective"> + <modelElementClass + modelElementClass="org.fortiss.af3.exploration.model.ObjectiveExpression"> + </modelElementClass> + </evaluator> + <evaluator + module="org.fortiss.af3.exploration.alg.dse.evaluator.constraint.MappingEvaluatorConstraint"> + <modelElementClass + modelElementClass="org.fortiss.af3.exploration.model.ConstraintExpression"> + </modelElementClass> + </evaluator> </extension> </plugin> diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/contribution/Opt4JDseBackend.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/contribution/Opt4JDseBackend.java index a36f6efcbeafd262f5e9ff48fb4066c9feddb47a..b4b25adc6059328329b3c4eb51da1f57790d86cf 100644 --- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/contribution/Opt4JDseBackend.java +++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/contribution/Opt4JDseBackend.java @@ -62,7 +62,7 @@ public class Opt4JDseBackend implements IDseBackend { /** {@inheritDoc} */ @SuppressWarnings("unchecked") @Override - public Optional<ExplorationSolution> executeDSE(ExplorationSpecification spec, + public Optional<ExplorationSolution> executeDSE(ExplorationSpecification expSpec, Set<Class<?>> solutionTypes, IDseInputParameters inputParameters, Collection<IExplorationFeature> explorationModules, IProgressMonitor monitor) throws Exception { @@ -94,7 +94,7 @@ public class Opt4JDseBackend implements IDseBackend { solPhenotypeTypes.add((Class<? extends IExplorationEncoding>)solType); } CompositeExplorationSolution<?> expResult = - explorer.explore(parameters.getInputParameter(DseSpecification.class), + explorer.explore(parameters.getInputParameter(DseSpecification.class), expSpec, systemModelAdapter, solPhenotypeTypes, monitor, true); explorationSolutionSet = expResult.convertToExplorationSolution(); explorationSolutionSet.setInputModelAdapter(systemModelAdapter); diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/DSEFactory.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/DSEFactory.java index e0a5e97268aaddd64005ab22a0d9dfc147ab9557..66249bca7526a04bcd92ef6315437140ffac3610 100644 --- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/DSEFactory.java +++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/DSEFactory.java @@ -54,6 +54,7 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.FailSilentExecModelFactory; import org.fortiss.af3.exploration.alg.dse.sysmodel.FaultDetectionVotingExecModelFactory; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IDeployableComponentAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; +import org.fortiss.af3.exploration.model.ExplorationSpecification; import org.fortiss.af3.exploration.moea.model.DseSpecification; import org.fortiss.af3.exploration.moea.model.feature.SafetyExploration; import org.fortiss.af3.exploration.moea.model.parameters.ExecutionModel; @@ -102,7 +103,8 @@ public class DSEFactory { public <C, S extends InstantiatedTaskMappingEntry, T extends InstantiatedTaskMappingEncoding<S>> void createSubProblems(ArchitectureExplorationProblemModule archExpProblemModule, - DseSpecification dse, SystemModelAdapter<C, ?, ?, ?, ?, ?> systemModelAdapter, + DseSpecification dse, ExplorationSpecification expSpec, + SystemModelAdapter<C, ?, ?, ?, ?, ?> systemModelAdapter, DecoderDependencyGraph execDepGraph) throws Exception { // Java-limitation: it is not possible to pass the generic to the static methods. TaskMappingFactory<S, T> tmFactory = @@ -116,9 +118,9 @@ public class DSEFactory { systemModelAdapter.addSafetyFunctionAdapters(sfExplorationModule.getAdapters()); createSafetyFunctionArchProblem(archExpProblemModule, systemModelAdapter, execDepGraph); } - createAbstractTaskMappingProblem(tmFactory, archExpProblemModule, dse, systemModelAdapter, - execDepGraph); - createTaskMappingInstantiationProblem(tmFactory, archExpProblemModule, dse, + createAbstractTaskMappingProblem(tmFactory, archExpProblemModule, expSpec, + systemModelAdapter, execDepGraph); + createTaskMappingInstantiationProblem(tmFactory, archExpProblemModule, expSpec, systemModelAdapter, execDepGraph); } @@ -190,14 +192,16 @@ public class DSEFactory { private <S extends InstantiatedTaskMappingEntry, T extends InstantiatedTaskMappingEncoding<S>> void createAbstractTaskMappingProblem(TaskMappingFactory<S, T> tmFactory, ArchitectureExplorationProblemModule archExpProblemModule, - DseSpecification dse, SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, + ExplorationSpecification expSpec, + SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, DecoderDependencyGraph execDepGraph) throws Exception { Class<AbstractTaskMappingEncoding> tmEnodingClass = AbstractTaskMappingEncoding.class; AbstractTaskMappingCreator tmCreator = - tmFactory.createAbstractTaskMappingCreator(dse, systemModelAdapter, execDepGraph); + tmFactory.createAbstractTaskMappingCreator(expSpec, systemModelAdapter, + execDepGraph); @SuppressWarnings("rawtypes") List<ComposableDecoder> abstrTaskDecoders = new ArrayList<>(); AbstractTaskMappingDecoder<?, ?> atmDecoder = - tmFactory.createAbstractTaskMappingDecoder(systemModelAdapter, dse); + tmFactory.createAbstractTaskMappingDecoder(systemModelAdapter, expSpec); AbstractTaskMappingIdentityDecoder idtDecoder = new AbstractTaskMappingIdentityDecoder(); abstrTaskDecoders.add(atmDecoder); abstrTaskDecoders.add(idtDecoder); @@ -231,11 +235,13 @@ public class DSEFactory { private <S extends InstantiatedTaskMappingEntry, T extends InstantiatedTaskMappingEncoding<S>> void createTaskMappingInstantiationProblem(TaskMappingFactory<S, T> tmFactory, ArchitectureExplorationProblemModule archExpProblemModule, - DseSpecification dse, SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, + ExplorationSpecification expSpec, + SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, DecoderDependencyGraph execDepGraph) throws Exception { // These suppress warnings are required since type erasure in Java does not allow to pass // XY<Z>.class. - StrictTTDecoder<S, T> tmDecoder = tmFactory.createStrictTTDecoder(systemModelAdapter, dse); + StrictTTDecoder<S, T> tmDecoder = + tmFactory.createStrictTTDecoder(systemModelAdapter, expSpec); InstantiatedTaskMappingDecoder<S, ?> tgDecoder = tmFactory.createInstantiatedTaskMappingDecoder(systemModelAdapter); InstantiatedTaskMappingDecoderAcyclic<S, ?> acycTgDecoder = @@ -243,7 +249,7 @@ public class DSEFactory { @SuppressWarnings("rawtypes") MessageDecoder msgDecoder = tmFactory.createMessageDecoder(systemModelAdapter); @SuppressWarnings("rawtypes") TaskMappingCreator tmCreator = - tmFactory.createTaskMappingCreator(dse, systemModelAdapter, execDepGraph); + tmFactory.createTaskMappingCreator(expSpec, systemModelAdapter, execDepGraph); @SuppressWarnings("rawtypes") List<ComposableDecoder> instTaskDecoders = new ArrayList<>(); instTaskDecoders.add(tgDecoder); instTaskDecoders.add(acycTgDecoder); @@ -261,8 +267,9 @@ public class DSEFactory { * calls the creators of the genotypes composing the architecture exploration problem. */ public ArchitectureExplorationCreator createArchitectureExplorationCreator( - DseSpecification dse, SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter) { - return new ArchitectureExplorationCreator(dse, systemModelAdapter); + ExplorationSpecification expSpec, + SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter) { + return new ArchitectureExplorationCreator(expSpec, systemModelAdapter); } /** diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/Explorer.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/Explorer.java index 8486fe164e1a73a80cd2b63414e867d0d8fe9846..f10e6028eceaee8959ad7a998c45941c39e907e9 100644 --- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/Explorer.java +++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/Explorer.java @@ -63,8 +63,8 @@ public class Explorer { SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, Set<Class<? extends IExplorationEncoding>> requestedSolutions, boolean generateImplicitConstraints) throws Exception { - return explore(dse, systemModelAdapter, requestedSolutions, null, - generateImplicitConstraints); + return explore(dse, dse.getTargetSpecification(), systemModelAdapter, requestedSolutions, + null, generateImplicitConstraints); } /** @@ -72,26 +72,27 @@ public class Explorer { * system model (represented by a {@link SystemModelAdapter}). */ public CompositeExplorationSolution<?> explore(DseSpecification dse, + ExplorationSpecification expSpec, SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, Set<Class<? extends IExplorationEncoding>> requestedSolutions, IProgressMonitor progressMonitor, boolean generateImplicitConstraints) throws Exception { - validateDesignSpaceExploration(dse); + validateDesignSpaceExploration(dse, expSpec); validateSystemModelAdapter(systemModelAdapter); // Clear & add implicit constraints to the Goal specification that are defined by the system // model. Map<ExplorationTarget<?>, ExplorationTarget<?>> targetAssocMap = new HashMap<>(); - DseSpecification dseSpec = copyDSESpecification(dse, targetAssocMap); - ExplorationSpecification expSpec = dseSpec.getTargetSpecification(); + ExplorationSpecification expSpecCopy = + copyExplorationSpecification(expSpec, targetAssocMap); if(generateImplicitConstraints) { - expSpec.getTargets().addAll( + expSpecCopy.getTargets().addAll( ImplicitExplorationTargetFactory.getInstance() - .createImplicitExplorationTargets(dseSpec, systemModelAdapter)); + .createImplicitExplorationTargets(expSpecCopy, systemModelAdapter)); } // Extract external models to add them to the available input models. - for(ExplorationTarget<?> expTarget : expSpec.getTargets()) { + for(ExplorationTarget<?> expTarget : expSpecCopy.getTargets()) { if(expTarget instanceof ExternalModelTarget) { Collection<EObject> extModels = ((ExternalModelTarget)expTarget).getExternalModels(); @@ -107,15 +108,15 @@ public class Explorer { IExplorationConstraintTransformationService constrService = getService(IExplorationConstraintTransformationService.class); Collection<GenericConstraint<?>> genConstrs = - filterByType(expSpec.getTargets(), new ArrayList<GenericConstraint<?>>(), + filterByType(expSpecCopy.getTargets(), new ArrayList<GenericConstraint<?>>(), GenericConstraint.class); Collection<ExplorationConstraint<?>> transformedConstrs = constrService.getTransformedConstraints(systemModelAdapter, genConstrs); - expSpec.getTargets().addAll(transformedConstrs); + expSpecCopy.getTargets().addAll(transformedConstrs); // Invoke the backend in order to perform the DSE IExplorerBackend<? extends IOptimizer> explorerBackend = - createExplorerBackend(dseSpec, targetAssocMap, systemModelAdapter, + createExplorerBackend(dse, expSpecCopy, targetAssocMap, systemModelAdapter, requestedSolutions, progressMonitor); CompositeExplorationSolution<?> explorationResult = explorerBackend.explore(); @@ -129,22 +130,18 @@ public class Explorer { * Copies a DSE model, and returns a map that associates the {@link ExplorationTarget}s given in * the original {@link ExplorationSpecification} with the copied ones. */ - private DseSpecification copyDSESpecification(DseSpecification dse, + private ExplorationSpecification copyExplorationSpecification(ExplorationSpecification expSpec, Map<ExplorationTarget<?>, ExplorationTarget<?>> assocMap) { - // TODO: rework this method, can be done more efficient. - DseSpecification dseCopy = EcoreUtils.copy(dse); + ExplorationSpecification expSpecCopy = EcoreUtils.copy(expSpec); + expSpecCopy.getTargets().clear(); - ExplorationSpecification origExpSpec = dse.getTargetSpecification(); - dseCopy.getTargetSpecification().getTargets().clear(); - - // Instead of this extra hook, use the M2MCopier. - ExplorationSpecification expSpecCopy = dseCopy.getTargetSpecification(); - for(ExplorationTarget<?> target : origExpSpec.getTargets()) { + // TODO: Instead of this extra hook, use the M2MCopier. + for(ExplorationTarget<?> target : expSpec.getTargets()) { ExplorationTarget<?> targetCopy = EcoreUtils.copy(target); expSpecCopy.getTargets().add(targetCopy); assocMap.put(target, targetCopy); } - return dseCopy; + return expSpecCopy; } /** Helper method to issue an exception for invalid DSE configurations */ @@ -156,7 +153,8 @@ public class Explorer { // TODO: Port validation of DSE configuration to model validation framework that creates markers // in the problem view /** Validation of DSE configuration */ - private void validateDesignSpaceExploration(DseSpecification dse) throws Exception { + private void validateDesignSpaceExploration(DseSpecification dse, + ExplorationSpecification expSpec) throws Exception { if(dse == null) { createDesignSpaceExplorationConfigurationException("No DSE configuration has been specified."); // Never here @@ -175,11 +173,8 @@ public class Explorer { createDesignSpaceExplorationConfigurationException("No optimizer backend has been specified."); } - // TODO: create a validation whether the constraints or objectives are not given - if(dse.getTargetSpecification() == null || - dse.getTargetSpecification().getTargets() == null || - dse.getTargetSpecification().getTargets().isEmpty()) { - createDesignSpaceExplorationConfigurationException("No Optimization goals have been provided."); + if(expSpec.getTargets() == null || expSpec.getTargets().isEmpty()) { + createDesignSpaceExplorationConfigurationException("No ExplorationTargets have been provided."); } } @@ -226,12 +221,13 @@ public class Explorer { /** Explorer backend */ private Opt4JExplorerBackend createExplorerBackend(DseSpecification dse, + ExplorationSpecification expSpec, Map<ExplorationTarget<?>, ExplorationTarget<?>> targetAssocMap, SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, Set<Class<? extends IExplorationEncoding>> requestedSolutions, IProgressMonitor progressMonitor) throws Exception { if(dse.getOptimizer() instanceof EAOptimizer) { - return new Opt4JExplorerBackend(dse, targetAssocMap, systemModelAdapter, + return new Opt4JExplorerBackend(dse, expSpec, targetAssocMap, systemModelAdapter, requestedSolutions, progressMonitor); } diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/ImplicitExplorationTargetFactory.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/ImplicitExplorationTargetFactory.java index 9249e534e86bc271dab1540368e08010c75661e8..8f8905439085e14aa15f7f66600cf147f546a2ff 100644 --- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/ImplicitExplorationTargetFactory.java +++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/ImplicitExplorationTargetFactory.java @@ -26,6 +26,7 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.TaskGraph; import org.fortiss.af3.exploration.alg.exception.ConstraintGenerationException; import org.fortiss.af3.exploration.model.ExplorationConstraint; +import org.fortiss.af3.exploration.model.ExplorationSpecification; import org.fortiss.af3.exploration.model.ExplorationTarget; import org.fortiss.af3.exploration.model.time.PeriodConstraint; import org.fortiss.af3.exploration.moea.model.DseSpecification; @@ -73,8 +74,8 @@ public class ImplicitExplorationTargetFactory { * if any of the constraint generators fails. */ public Collection<ExplorationConstraint<?>> createImplicitExplorationTargets( - DseSpecification dse, SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter) - throws Exception { + ExplorationSpecification expSpec, + SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter) throws Exception { return createPeriodConstraints(systemModelAdapter); } diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/TaskMappingFactory.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/TaskMappingFactory.java index 4567e006dd3f2b751ae1fd3e0f36a225a6d7cfac..e7c0f1abaed5f4ca955883f01f2a3e1a136f42b7 100644 --- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/TaskMappingFactory.java +++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/TaskMappingFactory.java @@ -106,10 +106,11 @@ public abstract class TaskMappingFactory<S extends InstantiatedTaskMappingEntry, * @param systemModelAdapter * the system model deduced from the logical and technical architecture */ - public AbstractTaskMappingCreator createAbstractTaskMappingCreator(DseSpecification dse, + public AbstractTaskMappingCreator createAbstractTaskMappingCreator( + ExplorationSpecification expSpec, SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, DecoderDependencyGraph execDepGraph) { - return new AbstractTaskMappingCreator(dse, systemModelAdapter, execDepGraph); + return new AbstractTaskMappingCreator(expSpec, systemModelAdapter, execDepGraph); } /** @@ -122,7 +123,7 @@ public abstract class TaskMappingFactory<S extends InstantiatedTaskMappingEntry, * @param execDepGraph */ // TODO: document execDepGraph param. - public TaskMappingCreator<S, T> createTaskMappingCreator(DseSpecification dse, + public TaskMappingCreator<S, T> createTaskMappingCreator(ExplorationSpecification expSpec, SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, DecoderDependencyGraph execDepGraph) { throw new UnsupportedOperationException(SCHED_NOT_IMPL_MSG); @@ -224,7 +225,7 @@ public abstract class TaskMappingFactory<S extends InstantiatedTaskMappingEntry, */ public AbstractTaskMappingDecoder<?, ?> createAbstractTaskMappingDecoder( SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, - DseSpecification explorationDefinition) { + ExplorationSpecification expSpec) { throw new UnsupportedOperationException( "The Decoder to instantiate an \"abstract\" Task Mapping has not been defined for current Execution Model."); } @@ -282,7 +283,7 @@ public abstract class TaskMappingFactory<S extends InstantiatedTaskMappingEntry, */ public StrictTTDecoder<S, T> createStrictTTDecoder( SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, - DseSpecification explorationDefinition) { + ExplorationSpecification expSpec) { throw new UnsupportedOperationException(SCHED_NOT_IMPL_MSG); } diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/ExplorerBackendBase.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/ExplorerBackendBase.java index 475c1acfb748502f4093050f9feada591b7c89e4..59b13be3e1030aa51969ed6b4512e4166cf8ba6a 100644 --- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/ExplorerBackendBase.java +++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/ExplorerBackendBase.java @@ -38,6 +38,7 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.random.RandomExploration; import org.fortiss.af3.exploration.alg.dse.sysmodel.random.RandomExploration.RandomnessType; import org.fortiss.af3.exploration.alg.service.IExplorationEncoding; import org.fortiss.af3.exploration.model.ExplorationConstraint; +import org.fortiss.af3.exploration.model.ExplorationSpecification; import org.fortiss.af3.exploration.model.ExplorationTarget; import org.fortiss.af3.exploration.moea.model.DseSpecification; import org.fortiss.af3.exploration.moea.model.parameters.IOptimizer; @@ -54,8 +55,11 @@ import org.opt4j.core.problem.Evaluator; public abstract class ExplorerBackendBase<O extends IOptimizer> implements IExplorerBackend<O> { /** DSE specification (optimizer parameters, goal specification, input model, ...) */ + // TODO: remove the DSE Spec. It is currently here protected DseSpecification dse; + protected ExplorationSpecification expSpec; + /** * Map that relates the {@link ExplorationTarget}s from input specification with the * {@link ExplorationTarget}s that are actually used in the DSE. @@ -84,12 +88,13 @@ public abstract class ExplorerBackendBase<O extends IOptimizer> implements IExpl * Constructor that initializes the DSE backend with the given optimizer independent parameters * and the goal specification */ - protected ExplorerBackendBase(DseSpecification dse, + protected ExplorerBackendBase(DseSpecification dse, ExplorationSpecification expSpec, Map<ExplorationTarget<?>, ExplorationTarget<?>> targetAssocMap, SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, Set<Class<? extends IExplorationEncoding>> requestedSolutions, IProgressMonitor progressMonitor) { this.dse = dse; + this.expSpec = expSpec; this.targetAssocMap = targetAssocMap; this.systemModelAdapter = systemModelAdapter; this.requestedSolutions = requestedSolutions; diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/Opt4JExplorerBackend.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/Opt4JExplorerBackend.java index de04cd42bea7e931f2964a8c28938879fd83c958..84d6ec943ae2f0819f5981566d409d02b1480efb 100644 --- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/Opt4JExplorerBackend.java +++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/Opt4JExplorerBackend.java @@ -40,6 +40,7 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.ArchitectureExp import org.fortiss.af3.exploration.alg.dse.backend.opt4j.solution.ArchitectureSolution; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; import org.fortiss.af3.exploration.alg.service.IExplorationEncoding; +import org.fortiss.af3.exploration.model.ExplorationSpecification; import org.fortiss.af3.exploration.model.ExplorationTarget; import org.fortiss.af3.exploration.moea.model.DseSpecification; import org.fortiss.af3.exploration.moea.model.feature.SafetyExploration; @@ -85,13 +86,13 @@ public class Opt4JExplorerBackend extends ExplorerBackendBase<EAOptimizer> { * * @throws Exception */ - public Opt4JExplorerBackend(DseSpecification dse, + public Opt4JExplorerBackend(DseSpecification dse, ExplorationSpecification expSpec, Map<ExplorationTarget<?>, ExplorationTarget<?>> targetAssocMap, SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, Set<Class<? extends IExplorationEncoding>> requestedSolutions, IProgressMonitor progressMonitor) throws Exception { // Optimizer independent configuration - super(dse, targetAssocMap, systemModelAdapter, requestedSolutions, progressMonitor); + super(dse, expSpec, targetAssocMap, systemModelAdapter, requestedSolutions, progressMonitor); if(dse.getOptimizer() instanceof EAOptimizer) { init((EAOptimizer)dse.getOptimizer()); @@ -146,7 +147,7 @@ public class Opt4JExplorerBackend extends ExplorerBackendBase<EAOptimizer> { // modules.add(multiEvaluatorModule); archExplorationProblemModule = - new ArchitectureExplorationProblemModule(dse, systemModelAdapter, + new ArchitectureExplorationProblemModule(dse, expSpec, systemModelAdapter, requestedSolutions); modules.add(archExplorationProblemModule); diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/ArchitectureExplorationCreator.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/ArchitectureExplorationCreator.java index 34b6cd4bfdcb19dfc7f17aa902bda49b5c0d22c2..54dda478cd996e47320ecb379d8ede90e8413bd4 100644 --- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/ArchitectureExplorationCreator.java +++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/ArchitectureExplorationCreator.java @@ -21,7 +21,7 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.ArchitectureEx import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.create.CompositeCreatorBase; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.genotype.ComposableGenotype; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; -import org.fortiss.af3.exploration.moea.model.DseSpecification; +import org.fortiss.af3.exploration.model.ExplorationSpecification; import org.opt4j.core.problem.Creator; import com.google.inject.Inject; @@ -40,14 +40,14 @@ public class ArchitectureExplorationCreator extends CompositeCreatorBase<ArchitectureExplorationEncoding> { /** DSE specification */ - protected DseSpecification dse; + protected ExplorationSpecification expSpec; /** Constructor. */ @Inject - public ArchitectureExplorationCreator(DseSpecification dse, + public ArchitectureExplorationCreator(ExplorationSpecification expSpec, SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter) { super(systemModelAdapter); - this.dse = dse; + this.expSpec = expSpec; } /** {@inheritDoc} */ diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/AbstractTaskMappingCreator.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/AbstractTaskMappingCreator.java index 3b75ae590f40cea6c4f24aa8088d232a1b24fd63..32e4980bfe0a12bc784c624001bc02965a8447b9 100644 --- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/AbstractTaskMappingCreator.java +++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/AbstractTaskMappingCreator.java @@ -28,7 +28,7 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IDeployableComponentAda import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; import org.fortiss.af3.exploration.alg.exception.ExplorationException; import org.fortiss.af3.exploration.alg.service.IExplorationEncoding; -import org.fortiss.af3.exploration.moea.model.DseSpecification; +import org.fortiss.af3.exploration.model.ExplorationSpecification; import org.opt4j.core.Genotype; import org.opt4j.core.problem.Creator; @@ -48,10 +48,10 @@ public class AbstractTaskMappingCreator extends /** Constructor */ @Inject - public AbstractTaskMappingCreator(DseSpecification dse, + public AbstractTaskMappingCreator(ExplorationSpecification expSpec, SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, DecoderDependencyGraph execDepGraph) { - super(dse, systemModelAdapter, execDepGraph); + super(expSpec, systemModelAdapter, execDepGraph); } /** @@ -71,7 +71,7 @@ public class AbstractTaskMappingCreator extends // partial mapping. AbstractTaskMappingEncoding atmEnc = createdGenotypes.get(AbstractTaskMappingEncoding.class); - return new AbstractTaskMappingEncoding(dse, systemModelAdapter, atgEnc, atmEnc); + return new AbstractTaskMappingEncoding(expSpec, systemModelAdapter, atgEnc, atmEnc); } /** {@inheritDoc} */ diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/FailSilentTaskMappingCreator.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/FailSilentTaskMappingCreator.java index f844f0de65f1ef3c35414e166a0f57a8be92d132..2923e248539cd10a7d2aea30d27b86203ffecca7 100644 --- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/FailSilentTaskMappingCreator.java +++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/FailSilentTaskMappingCreator.java @@ -28,7 +28,7 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegen import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; import org.fortiss.af3.exploration.alg.service.IExplorationEncoding; -import org.fortiss.af3.exploration.moea.model.DseSpecification; +import org.fortiss.af3.exploration.model.ExplorationSpecification; import com.google.inject.Inject; @@ -48,10 +48,10 @@ public class FailSilentTaskMappingCreator extends * (execution model = fail-silent) */ @Inject - public FailSilentTaskMappingCreator(DseSpecification dse, + public FailSilentTaskMappingCreator(ExplorationSpecification expSpec, SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, DecoderDependencyGraph execDepGraph) { - super(dse, systemModelAdapter, execDepGraph); + super(expSpec, systemModelAdapter, execDepGraph); } /** {@inheritDoc} */ @@ -64,7 +64,7 @@ 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); + return new FailSilentTaskMappingEncoding(expSpec, systemModelAdapter, atgEnc, atmEnc); } // TODO: remove this method: use the identifier from the encoding, instead. diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/FaultDetectionVotingTaskMappingCreator.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/FaultDetectionVotingTaskMappingCreator.java index 53d2a38c9058a62d25e5c519b69008296279879d..aed18beb6ecb4f962dde06eb9ce2d51b95aee694 100644 --- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/FaultDetectionVotingTaskMappingCreator.java +++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/FaultDetectionVotingTaskMappingCreator.java @@ -28,7 +28,7 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegen import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; import org.fortiss.af3.exploration.alg.service.IExplorationEncoding; -import org.fortiss.af3.exploration.moea.model.DseSpecification; +import org.fortiss.af3.exploration.model.ExplorationSpecification; import com.google.inject.Inject; @@ -49,10 +49,10 @@ public class FaultDetectionVotingTaskMappingCreator * (execution model = fault-detection and voting) */ @Inject - public FaultDetectionVotingTaskMappingCreator(DseSpecification dse, + public FaultDetectionVotingTaskMappingCreator(ExplorationSpecification expSpec, SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, DecoderDependencyGraph execDepGraph) { - super(dse, systemModelAdapter, execDepGraph); + super(expSpec, systemModelAdapter, execDepGraph); } /** {@inheritDoc} */ @@ -65,7 +65,8 @@ 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); + return new FaultDetectionVotingTaskMappingEncoding(expSpec, systemModelAdapter, atgEnc, + atmEnc); } /** {@inheritDoc} */ diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/TaskMappingCreator.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/TaskMappingCreator.java index 7f4f91acc943b069847562aeb6a23eb0596fe43e..72a90248a9247dd7acceab8d913b00608eb9192f 100644 --- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/TaskMappingCreator.java +++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/TaskMappingCreator.java @@ -22,7 +22,7 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.Ta import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.create.ComposableCreatorBase; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.graph.DecoderDependencyGraph; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; -import org.fortiss.af3.exploration.moea.model.DseSpecification; +import org.fortiss.af3.exploration.model.ExplorationSpecification; import org.opt4j.core.Genotype; import org.opt4j.core.problem.Creator; @@ -41,15 +41,15 @@ public abstract class TaskMappingCreator<S extends TaskMappingEntry, T extends T extends ComposableCreatorBase<T> { /** DSE specification. */ - protected DseSpecification dse; + protected ExplorationSpecification expSpec; /** Constructor. */ @Inject - public TaskMappingCreator(DseSpecification dse, + public TaskMappingCreator(ExplorationSpecification expSpec, SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, DecoderDependencyGraph execDepGraph) { super(systemModelAdapter, execDepGraph); - this.dse = dse; + this.expSpec = expSpec; } } diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/MappingEncoding.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/MappingEncoding.java new file mode 100644 index 0000000000000000000000000000000000000000..536f19cdb7df806bf0c1d971e74fc3afd2640d87 --- /dev/null +++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/MappingEncoding.java @@ -0,0 +1,34 @@ +/*--------------------------------------------------------------------------+ +$Id: codetemplates.xml 1 2011-01-01 00:00:01Z hoelzl $ +| | +| 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 org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.ComposablePhenotype; +import org.fortiss.af3.exploration.alg.dse.sysmodel.mapping.IMappingEncoding; +import org.opt4j.core.Genotype; + +/** + * + * @author diewald + * @author $Author: hoelzl $ + * @version $Rev: 18709 $ + * @ConQAT.Rating RED Hash: + */ +public interface MappingEncoding<G extends Genotype> extends ComposablePhenotype<G>, + IMappingEncoding { + +} diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/TaskMappingEncoding.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/TaskMappingEncoding.java index fbf29321340afa1ee72efeb3c5c4955ffaae6f00..a145bbd1e1006b4690b2569f2df4a642465b37eb 100644 --- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/TaskMappingEncoding.java +++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/TaskMappingEncoding.java @@ -33,6 +33,7 @@ import java.util.stream.Collectors; 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.taskgraph.TaskGraphEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.constraint.InternalReplicationConstraint; @@ -52,7 +53,7 @@ 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.model.ExplorationSpecification; 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; @@ -71,15 +72,17 @@ import com.google.common.collect.Multimap; * @ConQAT.Rating RED Hash: A2725E4E96BAA9D211EB0D09F59D039C */ public abstract class TaskMappingEncoding<T extends TaskMappingEntry> implements IMappingEncoding, - ComposableGenotype, ArchExpSubEncoding, IExplorationEncoding, ConstrainedEncoding, - Cloneable { + ComposableGenotype, MappingEncoding, ArchExpSubEncoding, IExplorationEncoding, + ConstrainedEncoding, Cloneable { /** Random generator */ private RandomExploration rand = RandomExploration.getInstance(); /** DSE specification */ - protected DseSpecification dse; + protected ExplorationSpecification expSpec; /** Map holding the DSE-internal constraints. */ + // TODO: Remove InternalConstraint map or replace with a generic mapping Encoding. + // Alternative solution: Mode the map to the operators. protected Multimap<Class<? extends ExplorationConstraint<?>>, ExplorationConstraint<?>> constraintMap = HashMultimap.create(); @@ -131,10 +134,10 @@ public abstract class TaskMappingEncoding<T extends TaskMappingEntry> implements * Constructor that is initialized with a reference to the DSE specification and the input * system. */ - public TaskMappingEncoding(DseSpecification dse, + public TaskMappingEncoding(ExplorationSpecification expSpec, SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, TaskGraphEncoding<?, ?, ?> tgEncoding) { - this.dse = dse; + this.expSpec = expSpec; this.systemModelAdapter = systemModelAdapter; this.tgEncoding = tgEncoding; this.deployableComponents = castToRawColl(tgEncoding.getDeployableComponents()); @@ -152,10 +155,10 @@ public abstract class TaskMappingEncoding<T extends TaskMappingEntry> implements * if no valid allocation targets can be identified for one * {@link IDeployableComponentAdapter}. */ - public TaskMappingEncoding(DseSpecification dse, + public TaskMappingEncoding(ExplorationSpecification expSpec, SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, boolean initialize) throws ExplorationException { - this(dse, systemModelAdapter, new TaskGraphEncoding<>(systemModelAdapter)); + this(expSpec, systemModelAdapter, new TaskGraphEncoding<>(systemModelAdapter)); if(initialize) { resetEncoding(); } @@ -168,10 +171,10 @@ public abstract class TaskMappingEncoding<T extends TaskMappingEntry> implements * if no valid allocation targets can be identified for one * {@link IDeployableComponentAdapter}. */ - public TaskMappingEncoding(DseSpecification dse, + public TaskMappingEncoding(ExplorationSpecification expSpec, SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, TaskGraphEncoding<?, ?, ?> tgEncoding, boolean initialize) throws ExplorationException { - this(dse, systemModelAdapter, tgEncoding); + this(expSpec, systemModelAdapter, tgEncoding); if(initialize) { resetEncoding(); } @@ -184,11 +187,11 @@ public abstract class TaskMappingEncoding<T extends TaskMappingEntry> implements * if no valid allocation targets can be identified for one * {@link IDeployableComponentAdapter}. */ - public TaskMappingEncoding(DseSpecification dse, + public TaskMappingEncoding(ExplorationSpecification expSpec, SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, TaskGraphEncoding<?, ?, ?> tgEncoding, TaskMappingEncoding<?> incompleteEncoding) throws ExplorationException { - this(dse, systemModelAdapter, tgEncoding); + this(expSpec, systemModelAdapter, tgEncoding); completeEncoding(incompleteEncoding); } @@ -214,7 +217,7 @@ public abstract class TaskMappingEncoding<T extends TaskMappingEntry> implements Collection<IDeployableComponentAdapter<?>> fixAllocatedComponents = new HashSet<>(); for(IDeployableComponentAdapter<?> compAdp : deployableComponents) { Optional<ComponentMultiDislocationConstraint> constr = - dse.getTargetSpecification().getTargets().stream() + expSpec.getTargets().stream() .filter(c -> (c instanceof ComponentMultiDislocationConstraint)) .map(ComponentMultiDislocationConstraint.class::cast) .filter(c -> c.getComponent() == compAdp.getObject()).findAny(); @@ -248,7 +251,7 @@ public abstract class TaskMappingEncoding<T extends TaskMappingEntry> implements HashMultimap.create(); Collection<ComponentMultiDislocationConstraint> forbiddenDeploymentConstraints = - getChildrenWithType(dse, ComponentMultiDislocationConstraint.class); + getChildrenWithType(expSpec, ComponentMultiDislocationConstraint.class); for(ComponentMultiDislocationConstraint currentConstraint : forbiddenDeploymentConstraints) { for(IDeployableComponentAdapter<?> currentComponentAdapter : systemModelAdapter @@ -281,7 +284,7 @@ public abstract class TaskMappingEncoding<T extends TaskMappingEntry> implements HashMultimap.create(); Collection<ComponentMultiAllocationConstraint> allowedDeploymentConstraints = - getChildrenWithType(dse, ComponentMultiAllocationConstraint.class); + getChildrenWithType(expSpec, ComponentMultiAllocationConstraint.class); Collection<IDeployableComponentAdapter<?>> constrainedComponentAdps = new HashSet<>(); for(ComponentMultiAllocationConstraint currentConstraint : allowedDeploymentConstraints) { @@ -624,7 +627,7 @@ public abstract class TaskMappingEncoding<T extends TaskMappingEntry> implements */ public void generateFixedDeployment(IDeployableComponentAdapter<?> deployableComponent) { Collection<ComponentMultiAllocationConstraint> constraints = - dse.getTargetSpecification().getTargets().stream() + expSpec.getTargets().stream() .filter(t -> (t instanceof ComponentMultiAllocationConstraint)) .map(ComponentMultiAllocationConstraint.class::cast) .collect(Collectors.toList()); diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/abstractmapping/AbstractTaskMappingEncoding.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/abstractmapping/AbstractTaskMappingEncoding.java index 4c98983a1f7010a19f1ba8919a98d921ac7e7aa0..056a69381be5964a8e354a0c473823497cf7b945 100644 --- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/abstractmapping/AbstractTaskMappingEncoding.java +++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/abstractmapping/AbstractTaskMappingEncoding.java @@ -30,7 +30,7 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IDeployableComponentAda 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.fortiss.af3.exploration.model.ExplorationSpecification; import org.opt4j.core.Genotype; /** @@ -42,17 +42,16 @@ import org.opt4j.core.Genotype; * @version $Rev: 3885 $ * @ConQAT.Rating YELLOW Hash: 3DF39B0B8106F1038EB2EC0EF0E02D1E */ -public class AbstractTaskMappingEncoding extends TaskMappingEncoding<AbstractTaskMappingEntry> - implements ComposablePhenotype<AbstractTaskMappingEncoding> { +public class AbstractTaskMappingEncoding extends TaskMappingEncoding<AbstractTaskMappingEntry> { /** * Constructor that is initialized with a reference to the DSE specification and the input * system model. */ - AbstractTaskMappingEncoding(DseSpecification dse, + AbstractTaskMappingEncoding(ExplorationSpecification expSpec, SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, SafeTaskGraphEncoding<?> tgEncoding) { - super(dse, systemModelAdapter, tgEncoding); + super(expSpec, systemModelAdapter, tgEncoding); } /** @@ -62,10 +61,10 @@ public class AbstractTaskMappingEncoding extends TaskMappingEncoding<AbstractTas * if no valid allocation targets can be identified for one * {@link IDeployableComponentAdapter}. */ - public AbstractTaskMappingEncoding(DseSpecification dse, + public AbstractTaskMappingEncoding(ExplorationSpecification expSpec, SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, SafeTaskGraphEncoding<?> tgEncoding, boolean initialize) throws ExplorationException { - super(dse, systemModelAdapter, tgEncoding, initialize); + super(expSpec, systemModelAdapter, tgEncoding, initialize); } /** @@ -75,10 +74,10 @@ public class AbstractTaskMappingEncoding extends TaskMappingEncoding<AbstractTas * if no valid allocation targets can be identified for one * {@link IDeployableComponentAdapter}. */ - public AbstractTaskMappingEncoding(DseSpecification dse, + public AbstractTaskMappingEncoding(ExplorationSpecification expSpec, SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, boolean initialize) throws ExplorationException { - super(dse, systemModelAdapter, initialize); + super(expSpec, systemModelAdapter, initialize); } /** @@ -88,10 +87,10 @@ public class AbstractTaskMappingEncoding extends TaskMappingEncoding<AbstractTas * if no valid allocation targets can be identified for one * {@link IDeployableComponentAdapter}. */ - public AbstractTaskMappingEncoding(DseSpecification dse, + public AbstractTaskMappingEncoding(ExplorationSpecification expSpec, SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, AbstractTaskGraphEncoding<?, ?> atgEnc, boolean initialize) throws ExplorationException { - super(dse, systemModelAdapter, atgEnc, initialize); + super(expSpec, systemModelAdapter, atgEnc, initialize); } /** @@ -102,11 +101,11 @@ public class AbstractTaskMappingEncoding extends TaskMappingEncoding<AbstractTas * if no valid allocation targets can be identified for one * {@link IDeployableComponentAdapter}. */ - public AbstractTaskMappingEncoding(DseSpecification dse, + public AbstractTaskMappingEncoding(ExplorationSpecification expSpec, SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, AbstractTaskGraphEncoding<?, ?> atgEnc, AbstractTaskMappingEncoding partialEncoding) throws ExplorationException { - super(dse, systemModelAdapter, atgEnc, partialEncoding); + super(expSpec, systemModelAdapter, atgEnc, partialEncoding); } /** {@inheritDoc} */ @@ -126,7 +125,7 @@ public class AbstractTaskMappingEncoding extends TaskMappingEncoding<AbstractTas @Override public AbstractTaskMappingEncoding newInstance() { try { - return new AbstractTaskMappingEncoding(dse, systemModelAdapter, true); + return new AbstractTaskMappingEncoding(expSpec, systemModelAdapter, true); } catch(ExplorationException e) { // Opt4J does not allow to throw Exceptions here. throw new RuntimeException(e); @@ -138,7 +137,7 @@ public class AbstractTaskMappingEncoding extends TaskMappingEncoding<AbstractTas public Object clone() { AbstractTaskMappingEncoding clonedEncoding; try { - clonedEncoding = new AbstractTaskMappingEncoding(dse, systemModelAdapter, false); + clonedEncoding = new AbstractTaskMappingEncoding(expSpec, systemModelAdapter, false); } catch(ExplorationException e) { // Opt4J does not allow to throw Exceptions here. throw new RuntimeException(e); @@ -161,6 +160,6 @@ public class AbstractTaskMappingEncoding extends TaskMappingEncoding<AbstractTas /** {@inheritDoc} */ @Override public Class<? extends ComposablePhenotype<?>> getPTypeToRegister() { - return AbstractTaskMappingEncoding.class; + return (Class<? extends ComposablePhenotype<?>>)AbstractTaskMappingEncoding.class; } } diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FailSilentTaskMappingEncoding.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FailSilentTaskMappingEncoding.java index 704654126d5d2559f475cfd143479d67e01efdb2..17b1f5d498b0ac78618dd8f640f95f3f985db768 100644 --- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FailSilentTaskMappingEncoding.java +++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FailSilentTaskMappingEncoding.java @@ -26,6 +26,7 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IDeployableComponentAda 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.model.ExplorationSpecification; import org.fortiss.af3.exploration.moea.model.DseSpecification; /** @@ -43,10 +44,10 @@ public class FailSilentTaskMappingEncoding extends * Constructor that is initialized with a reference to the DSE specification and the input * system model. */ - FailSilentTaskMappingEncoding(DseSpecification dse, + FailSilentTaskMappingEncoding(ExplorationSpecification expSpec, SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, AbstractTaskGraphEncoding<?, ?> tgEncoding) { - super(dse, systemModelAdapter, tgEncoding); + super(expSpec, systemModelAdapter, tgEncoding); } // TODO: Check whether the two constructors below are actually needed. @@ -57,11 +58,11 @@ public class FailSilentTaskMappingEncoding extends * if no valid allocation targets can be identified for one * {@link IDeployableComponentAdapter}. */ - public FailSilentTaskMappingEncoding(DseSpecification dse, + public FailSilentTaskMappingEncoding(ExplorationSpecification expSpec, SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, AbstractTaskGraphEncoding<?, ?> tgEncoding, boolean initialize) throws ExplorationException { - super(dse, systemModelAdapter, tgEncoding, initialize); + super(expSpec, systemModelAdapter, tgEncoding, initialize); } /** @@ -71,20 +72,20 @@ public class FailSilentTaskMappingEncoding extends * if no valid allocation targets can be identified for one * {@link IDeployableComponentAdapter}. */ - public FailSilentTaskMappingEncoding(DseSpecification dse, + public FailSilentTaskMappingEncoding(ExplorationSpecification expSpec, SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, boolean initialize) throws ExplorationException { - super(dse, systemModelAdapter, initialize); + super(expSpec, systemModelAdapter, initialize); } /** * Constructor which derives the resulting {@link FailSilentTaskMappingEncoding} from the given * {@link AbstractTaskMappingEncoding}. */ - public FailSilentTaskMappingEncoding(DseSpecification dse, + public FailSilentTaskMappingEncoding(ExplorationSpecification expSpec, SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, AbstractTaskGraphEncoding<?, ?> tgEncoding, AbstractTaskMappingEncoding abstractEncoding) { - super(dse, systemModelAdapter, tgEncoding, abstractEncoding); + super(expSpec, systemModelAdapter, tgEncoding, abstractEncoding); } /** {@inheritDoc} */ @@ -114,7 +115,7 @@ public class FailSilentTaskMappingEncoding extends @Override public FailSilentTaskMappingEncoding newInstance() { try { - return new FailSilentTaskMappingEncoding(dse, systemModelAdapter, true); + return new FailSilentTaskMappingEncoding(expSpec, systemModelAdapter, true); } catch(ExplorationException e) { // Opt4J does not allow to throw Exceptions here. throw new RuntimeException(e); @@ -127,7 +128,7 @@ public class FailSilentTaskMappingEncoding extends // TODO: Here, we should maintain the mapping. FailSilentTaskMappingEncoding clonedEncoding; try { - clonedEncoding = new FailSilentTaskMappingEncoding(dse, systemModelAdapter, false); + clonedEncoding = new FailSilentTaskMappingEncoding(expSpec, systemModelAdapter, false); } catch(ExplorationException e) { // Opt4J does not allow to throw Exceptions here. throw new RuntimeException(e); diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FaultDetectionVotingTaskMappingEncoding.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FaultDetectionVotingTaskMappingEncoding.java index b42ee12c7170b1c142912c127c11fd526329791e..b0d596b895730ee6943793e2c348e72155b95ccd 100644 --- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FaultDetectionVotingTaskMappingEncoding.java +++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FaultDetectionVotingTaskMappingEncoding.java @@ -26,7 +26,7 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IDeployableComponentAda 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.fortiss.af3.exploration.model.ExplorationSpecification; /** * Problem encoding of redundant {@link TaskMappingEncoding}s with fault detection and voting. @@ -43,10 +43,10 @@ public class FaultDetectionVotingTaskMappingEncoding extends * Constructor that is initialized with a reference to the DSE specification and the input * system model. */ - FaultDetectionVotingTaskMappingEncoding(DseSpecification dse, + FaultDetectionVotingTaskMappingEncoding(ExplorationSpecification expSpec, SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, AbstractTaskGraphEncoding<?, ?> tgEncoding) { - super(dse, systemModelAdapter, tgEncoding); + super(expSpec, systemModelAdapter, tgEncoding); } // TODO: Check whether the two constructors below are actually needed. @@ -57,11 +57,11 @@ public class FaultDetectionVotingTaskMappingEncoding extends * if no valid allocation targets can be identified for one * {@link IDeployableComponentAdapter}. */ - public FaultDetectionVotingTaskMappingEncoding(DseSpecification dse, + public FaultDetectionVotingTaskMappingEncoding(ExplorationSpecification expSpec, SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, AbstractTaskGraphEncoding<?, ?> tgEncoding, boolean initialize) throws ExplorationException { - super(dse, systemModelAdapter, tgEncoding, initialize); + super(expSpec, systemModelAdapter, tgEncoding, initialize); assert (false) : "Never here any more."; } @@ -72,10 +72,10 @@ public class FaultDetectionVotingTaskMappingEncoding extends * if no valid allocation targets can be identified for one * {@link IDeployableComponentAdapter}. */ - public FaultDetectionVotingTaskMappingEncoding(DseSpecification dse, + public FaultDetectionVotingTaskMappingEncoding(ExplorationSpecification expSpec, SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, boolean initialize) throws ExplorationException { - super(dse, systemModelAdapter, initialize); + super(expSpec, systemModelAdapter, initialize); assert (false) : "Never here any more."; } @@ -83,10 +83,10 @@ public class FaultDetectionVotingTaskMappingEncoding extends * Constructor which derives the resulting {@link FaultDetectionVotingTaskMappingEncoding} from * the given {@link AbstractTaskMappingEncoding}. */ - public FaultDetectionVotingTaskMappingEncoding(DseSpecification dse, + public FaultDetectionVotingTaskMappingEncoding(ExplorationSpecification expSpec, SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, AbstractTaskGraphEncoding<?, ?> tgEncoding, AbstractTaskMappingEncoding abstractEncoding) { - super(dse, systemModelAdapter, tgEncoding, abstractEncoding); + super(expSpec, systemModelAdapter, tgEncoding, abstractEncoding); } /** {@inheritDoc} */ @@ -118,7 +118,7 @@ public class FaultDetectionVotingTaskMappingEncoding extends @Override public FaultDetectionVotingTaskMappingEncoding newInstance() { try { - return new FaultDetectionVotingTaskMappingEncoding(dse, systemModelAdapter, true); + return new FaultDetectionVotingTaskMappingEncoding(expSpec, systemModelAdapter, true); } catch(ExplorationException e) { // Opt4J does not allow to throw Exceptions here. throw new RuntimeException(e); @@ -134,7 +134,7 @@ public class FaultDetectionVotingTaskMappingEncoding extends FaultDetectionVotingTaskMappingEncoding clonedEncoding = null; try { clonedEncoding = - new FaultDetectionVotingTaskMappingEncoding(dse, systemModelAdapter, false); + new FaultDetectionVotingTaskMappingEncoding(expSpec, systemModelAdapter, false); } catch(ExplorationException e) { // Opt4J does not allow to throw Exceptions here. throw new RuntimeException(e); diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/InstantiatedTaskMappingEncoding.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/InstantiatedTaskMappingEncoding.java index 81b9a4c37354935012864cd71918cd6c0b5f6204..59ad29f155900c128a5bfdb31408be2107a696cf 100644 --- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/InstantiatedTaskMappingEncoding.java +++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/InstantiatedTaskMappingEncoding.java @@ -29,7 +29,7 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IDeployableComponentAda 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.fortiss.af3.exploration.model.ExplorationSpecification; import org.opt4j.core.Genotype; /** @@ -44,16 +44,16 @@ import org.opt4j.core.Genotype; * @ConQAT.Rating YELLOW Hash: 46FF32B4C28A6EA1581C3EDFBDA7755E */ public abstract class InstantiatedTaskMappingEncoding<T extends InstantiatedTaskMappingEntry> - extends TaskMappingEncoding<T> implements ComposablePhenotype<AbstractTaskMappingEncoding> { + extends TaskMappingEncoding<T> { /** * Constructor that is initialized with a reference to the DSE specification and the input * system model. */ - protected InstantiatedTaskMappingEncoding(DseSpecification dse, + protected InstantiatedTaskMappingEncoding(ExplorationSpecification expSpec, SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, AbstractTaskGraphEncoding<?, ?> tgEncoding) { - super(dse, systemModelAdapter, tgEncoding); + super(expSpec, systemModelAdapter, tgEncoding); } // TODO: Check whether the two constructors below are actually needed. @@ -64,11 +64,11 @@ public abstract class InstantiatedTaskMappingEncoding<T extends InstantiatedTask * if no valid allocation targets can be identified for one * {@link IDeployableComponentAdapter}. */ - public InstantiatedTaskMappingEncoding(DseSpecification dse, + public InstantiatedTaskMappingEncoding(ExplorationSpecification expSpec, SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, AbstractTaskGraphEncoding<?, ?> tgEncoding, boolean initialize) throws ExplorationException { - super(dse, systemModelAdapter, tgEncoding, initialize); + super(expSpec, systemModelAdapter, tgEncoding, initialize); } /** @@ -78,20 +78,20 @@ public abstract class InstantiatedTaskMappingEncoding<T extends InstantiatedTask * if no valid allocation targets can be identified for one * {@link IDeployableComponentAdapter}. */ - public InstantiatedTaskMappingEncoding(DseSpecification dse, + public InstantiatedTaskMappingEncoding(ExplorationSpecification expSpec, SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, boolean initialize) throws ExplorationException { - super(dse, systemModelAdapter, initialize); + super(expSpec, systemModelAdapter, initialize); } /** * Constructor which derives the resulting {@link InstantiatedTaskMappingEncoding} from the * given {@link AbstractTaskMappingEncoding}. */ - public InstantiatedTaskMappingEncoding(DseSpecification dse, + public InstantiatedTaskMappingEncoding(ExplorationSpecification expSpec, SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, AbstractTaskGraphEncoding<?, ?> tgEncoding, AbstractTaskMappingEncoding abstractEncoding) { - super(dse, systemModelAdapter, tgEncoding); + super(expSpec, systemModelAdapter, tgEncoding); this.constraintMap = abstractEncoding.copyConstraintMap(null); instantiateAbstractEntries(abstractEncoding); } diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/ArchitectureExplorationProblemModule.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/ArchitectureExplorationProblemModule.java index bd5ff5665fd0cc93d601e09cbd601d9e5b0e7549..3e2efce8175c106b4c3fb090eee4ab1ef898132a 100644 --- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/ArchitectureExplorationProblemModule.java +++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/ArchitectureExplorationProblemModule.java @@ -28,6 +28,7 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.solution.ArchitectureSo import org.fortiss.af3.exploration.alg.dse.evaluator.ArchitectureEvaluator; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; import org.fortiss.af3.exploration.alg.service.IExplorationEncoding; +import org.fortiss.af3.exploration.model.ExplorationSpecification; import org.fortiss.af3.exploration.moea.model.DseSpecification; /** @@ -45,9 +46,10 @@ public class ArchitectureExplorationProblemModule /** Constructor. */ public ArchitectureExplorationProblemModule(DseSpecification dse, + ExplorationSpecification expSpec, SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, Set<Class<? extends IExplorationEncoding>> requestedSolutions) { - super(dse, systemModelAdapter, requestedSolutions); + super(dse, expSpec, systemModelAdapter, requestedSolutions); } /** Configure genotype creator (execution model dependent), problem decoder and goal evaluators. */ @@ -67,13 +69,13 @@ public class ArchitectureExplorationProblemModule new DecoderDependencyGraph(systemModelAdapter, requestedSolutions); // TODO: construct the execution dependency graph elsewhere? - bindProblem(dseFactory.createArchitectureExplorationCreator(dse, systemModelAdapter), + bindProblem(dseFactory.createArchitectureExplorationCreator(expSpec, systemModelAdapter), dseFactory.createArchitectureDecoder(systemModelAdapter, execDepGraph), archEvaluator); // Create/Bind the subproblems of the architectural exploration problem. try { - dseFactory.createSubProblems(this, dse, systemModelAdapter, execDepGraph); + dseFactory.createSubProblems(this, dse, expSpec, systemModelAdapter, execDepGraph); } catch(Exception e) { throw new RuntimeException("Failed setting up the DSE Problem instance.", e); } diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/DseProblemModuleBase.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/DseProblemModuleBase.java index 902a98ae97adbb2244c98b7c229078205e95ab43..977a85288bb44850afc33d7de239429496bfdeff 100644 --- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/DseProblemModuleBase.java +++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/DseProblemModuleBase.java @@ -23,7 +23,7 @@ import java.util.Map; import java.util.Set; import java.util.stream.Collectors; -import org.apache.commons.lang.IllegalClassException; +import org.fortiss.af3.exploration.alg.ExplorationAlgActivator; import org.fortiss.af3.exploration.alg.dse.TaskMappingFactory; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.decode.CompositeDecoder; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.evaluate.ComposableEvaluator; @@ -38,9 +38,11 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; import org.fortiss.af3.exploration.alg.service.IExplorationEncoding; import org.fortiss.af3.exploration.model.ExplorationConstraint; import org.fortiss.af3.exploration.model.ExplorationObjective; +import org.fortiss.af3.exploration.model.ExplorationSpecification; import org.fortiss.af3.exploration.model.ExplorationTarget; import org.fortiss.af3.exploration.model.MOExplorationObjective; import org.fortiss.af3.exploration.moea.model.DseSpecification; +import org.fortiss.tooling.kernel.utils.LoggingUtils; import org.opt4j.core.Objective; import org.opt4j.core.genotype.CompositeGenotype; import org.opt4j.core.problem.Evaluator; @@ -61,6 +63,8 @@ public abstract class DseProblemModuleBase<C extends CompositeGenotype<Class<? e /** DSE configuration */ protected DseSpecification dse; + protected ExplorationSpecification expSpec; + /** Representation of input system */ protected SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter; @@ -71,10 +75,11 @@ public abstract class DseProblemModuleBase<C extends CompositeGenotype<Class<? e * Constructor the DSE specification and an adapter to the input system model has to be * specified. */ - public DseProblemModuleBase(DseSpecification dse, + public DseProblemModuleBase(DseSpecification dse, ExplorationSpecification expSpec, SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, Set<Class<? extends IExplorationEncoding>> requestedSolutions) { this.dse = dse; + this.expSpec = expSpec; this.systemModelAdapter = systemModelAdapter; this.requestedSolutions = requestedSolutions; } @@ -86,7 +91,7 @@ public abstract class DseProblemModuleBase<C extends CompositeGenotype<Class<? e */ protected <RT, T extends ExplorationTarget<RT>, S extends Phenotype, E extends Evaluator<?>> void addGoalEvaluators(CompositeEvaluator<P> dseEvaluator) throws Exception { - Collection<ExplorationTarget<?>> targets = dse.getTargetSpecification().getTargets(); + Collection<ExplorationTarget<?>> targets = expSpec.getTargets(); Collection<ExplorationConstraint<?>> constraints = targets.stream().filter(t -> t instanceof ExplorationConstraint<?>) .map(ExplorationConstraint.class::cast).collect(Collectors.toList()); @@ -103,10 +108,12 @@ public abstract class DseProblemModuleBase<C extends CompositeGenotype<Class<? e } int objectivePrioOffset = currentConstrPrio; + int nonMOObjectiveCounter = 0; Collection<ExplorationObjective<?>> objectives = targets.stream().filter(t -> t instanceof ExplorationObjective<?>) .map(ExplorationObjective.class::cast).collect(Collectors.toList()); for(ExplorationObjective<?> currObjective : objectives) { + nonMOObjectiveCounter++; if(MOExplorationObjective.class.isAssignableFrom(currObjective.getClass())) { if(!priorityMap.containsKey(currObjective.getClass())) { int objPrio = ((MOExplorationObjective<?>)currObjective).getPriority(); @@ -115,8 +122,13 @@ public abstract class DseProblemModuleBase<C extends CompositeGenotype<Class<? e priorityMap.put(objectiveType, objectivePrioOffset + objPrio); } } else { - throw new IllegalClassException( - "Objectives that are not MOExplorationObjectives are currently not supported by this backend."); + LoggingUtils.warning( + ExplorationAlgActivator.getDefault(), + "Could not extract the priority of the objective " + + currObjective.getName() + "."); + @SuppressWarnings("unchecked") Class<? extends ExplorationTarget<?>> objectiveType = + (Class<? extends ExplorationTarget<?>>)currObjective.getClass(); + priorityMap.put(objectiveType, objectivePrioOffset + nonMOObjectiveCounter); } } diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/EvaluatorWrapper.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/EvaluatorWrapper.java index dfe0edba62b2973c1c41e44bea55e523704f2b04..2fdc35f57a8f1c221919d9529dea94d412fbe47e 100644 --- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/EvaluatorWrapper.java +++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/EvaluatorWrapper.java @@ -23,15 +23,23 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegen import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype; import org.fortiss.af3.exploration.alg.dse.evaluator.ArchExpSubEvaluator; import org.fortiss.af3.exploration.alg.dse.evaluator.ExplorationTargetEvaluatorBase; +import org.fortiss.af3.exploration.alg.exception.ExplorationException; import org.fortiss.af3.exploration.alg.service.IExplorationTargetEvaluator; import org.fortiss.af3.exploration.dsl.model.MOEAExplorationExpression; import org.fortiss.af3.exploration.dsl.model.expressions.Expression; import org.fortiss.af3.exploration.dsl.model.operators.OptimizationDirection; import org.fortiss.af3.exploration.dsl.model.operators.OptimizationDirectionEnum; +import org.fortiss.af3.exploration.dsl_v2.model.expression.IExpression; +import org.fortiss.af3.exploration.dsl_v2.model.function.Maximize; +import org.fortiss.af3.exploration.dsl_v2.model.function.Minimize; +import org.fortiss.af3.exploration.model.ExplorationObjective; import org.fortiss.af3.exploration.model.ExplorationTarget; +import org.fortiss.af3.exploration.model.ExplorationTargetExpression; +import org.opt4j.core.DoubleValue; import org.opt4j.core.Objective; import org.opt4j.core.Objective.Sign; import org.opt4j.core.Objectives; +import org.opt4j.core.Value; import org.opt4j.core.problem.Evaluator; import com.google.common.collect.ClassToInstanceMap; @@ -55,7 +63,7 @@ public class EvaluatorWrapper<P, RT, T extends ExplorationTarget<RT>> implements private IExplorationTargetEvaluator<P, RT, T> evaluator; /** Goal specification */ - private T goal; + private T explorationTarget; /** Contains the priority of the {@link ExplorationTarget} of the {@link EvaluatorWrapper}. */ private int targetPriority; @@ -75,7 +83,19 @@ public class EvaluatorWrapper<P, RT, T extends ExplorationTarget<RT>> implements if(moExpr instanceof OptimizationDirection) { direction = ((OptimizationDirection)moExpr).getOperator(); } + } else if(goal instanceof ExplorationObjective<?> && + goal instanceof ExplorationTargetExpression<?>) { + // TODO: Reconsider the wrapping / passing to the ExpressionEvaluators. Probably, the + // evaluators only need to be aware of the systemModelAdapter and the exploration + // expression. + IExpression expr = ((ExplorationTargetExpression<?>)goal).getExpression(); + if(expr instanceof Minimize) { + direction = OptimizationDirectionEnum.MIN; + } else if(expr instanceof Maximize) { + direction = OptimizationDirectionEnum.MAX; + } } + String objectiveName = goal.getName() == null ? goal.getClass().toString() + Integer.toString(goal.getId()) : goal.getName(); @@ -83,7 +103,7 @@ public class EvaluatorWrapper<P, RT, T extends ExplorationTarget<RT>> implements new Objective(objectiveName, direction == OptimizationDirectionEnum.MIN ? Sign.MIN : Sign.MAX); - this.goal = goal; + this.explorationTarget = goal; this.evaluator = evaluator; this.targetPriority = priority; @SuppressWarnings("unchecked") Class<P> targetPhenotypeType = (Class<P>)primaryInputType; @@ -105,9 +125,20 @@ public class EvaluatorWrapper<P, RT, T extends ExplorationTarget<RT>> implements ClassToInstanceMap<EObject> transformedModels) { Objectives objectives = new Objectives(); + // TODO: Do we really need the evalu @SuppressWarnings("unchecked") P castedPhenotype = (P)phenotype; - objectives.add(objective, - evaluator.evaluateGoal(castedPhenotype, phenotypes, transformedModels)); + + Value<?> evalResult = new DoubleValue(Double.MAX_VALUE); + try { + evalResult = evaluator.evaluateGoal(castedPhenotype, phenotypes, transformedModels); + } catch(Exception e) { + // The Opt4J framework only allows us to throw runtime exceptions. + throw new RuntimeException(new ExplorationException("The evaluatior " + + this.toString() + " failed to evaluate the ExplorationTarget " + + explorationTarget.getName() + ".", e)); + } + + objectives.add(objective, evalResult); return objectives; } @@ -119,7 +150,17 @@ public class EvaluatorWrapper<P, RT, T extends ExplorationTarget<RT>> implements assert (false); Objectives objectives = new Objectives(); - objectives.add(objective, evaluator.evaluateGoal(phenotype, null, null)); + Value<?> evalResult = new DoubleValue(Double.MAX_VALUE); + try { + evalResult = evaluator.evaluateGoal(phenotype, null, null); + } catch(Exception e) { + // The Opt4J framework only allows us to throw runtime exceptions. + throw new RuntimeException(new ExplorationException("The evaluatior " + + this.toString() + " failed to evaluate the ExplorationTarget " + + explorationTarget.getName() + ".", e)); + } + + objectives.add(objective, evalResult); return objectives; } @@ -127,7 +168,7 @@ public class EvaluatorWrapper<P, RT, T extends ExplorationTarget<RT>> implements /** Returns the type of the goal this evaluator is built for. */ @SuppressWarnings("unchecked") public Class<T> getTargetType() { - return (Class<T>)goal.getClass(); + return (Class<T>)explorationTarget.getClass(); } /** Returns the underlying (actual) evaluator. */ diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/StrictTTDecoder.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/StrictTTDecoder.java index 847eeaef49881d0f11da8a2ce1befc9dbf330095..8ba0aa9ee34b4ad63dd38268d087b0c2d903add3 100644 --- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/StrictTTDecoder.java +++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/StrictTTDecoder.java @@ -35,7 +35,7 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.solution.StrictTTSchedu import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.sched.comm.TDMABusScheduler; import org.fortiss.af3.exploration.alg.dse.sysmodel.sched.proc.EDFSchedulerBase; -import org.fortiss.af3.exploration.moea.model.DseSpecification; +import org.fortiss.af3.exploration.model.ExplorationSpecification; import org.opt4j.core.Genotype; import com.google.inject.Inject; @@ -67,17 +67,14 @@ public class StrictTTDecoder<S extends InstantiatedTaskMappingEntry, T extends I @SuppressWarnings("unchecked") @Inject public StrictTTDecoder(SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, - DseSpecification explorationDefinition) { + ExplorationSpecification expSpec) { this.systemModelAdapter = systemModelAdapter; TaskMappingFactory<?, ?> tmFactory = TaskMappingFactory.getInstance(); simpleEDFScheduler = - (EDFSchedulerBase<S, T>)tmFactory.createEDFScheduler(systemModelAdapter, - explorationDefinition.getTargetSpecification()); - simpleBusScheduler = - new TDMABusScheduler<S, T>(systemModelAdapter, - explorationDefinition.getTargetSpecification()); + (EDFSchedulerBase<S, T>)tmFactory.createEDFScheduler(systemModelAdapter, expSpec); + simpleBusScheduler = new TDMABusScheduler<S, T>(systemModelAdapter, expSpec); } diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatemapping/AbstractTaskMappingDecoder.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatemapping/AbstractTaskMappingDecoder.java index fb9cc10f5ca55da9711da3eb26c27ae3f2ac3246..a47903ae55e37fbeb303ddb323f55506db49e1cb 100644 --- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatemapping/AbstractTaskMappingDecoder.java +++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatemapping/AbstractTaskMappingDecoder.java @@ -27,7 +27,7 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.in import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.decode.ComposableDecoderBase; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.ArchExpSubDecoder; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; -import org.fortiss.af3.exploration.moea.model.DseSpecification; +import org.fortiss.af3.exploration.model.ExplorationSpecification; import org.opt4j.core.problem.Decoder; import com.google.inject.Inject; @@ -47,15 +47,15 @@ public abstract class AbstractTaskMappingDecoder<S extends InstantiatedTaskMappi /** Reference to the {@link SystemModelAdapter} that handles input models for the DSE. */ SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter; - /** Reference to the {@link DseSpecification} specification that defines the DSE. */ - DseSpecification explorationDefinition; + /** Reference to the {@link ExplorationSpecification} specification that defines the DSE. */ + ExplorationSpecification expSpec; /** Constructs a new decoder that instantiates {@link AbstractTaskMappingEncoding}. */ @Inject public AbstractTaskMappingDecoder(SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, - DseSpecification explorationDefinition) { + ExplorationSpecification expSpec) { this.systemModelAdapter = systemModelAdapter; - this.explorationDefinition = explorationDefinition; + this.expSpec = expSpec; } /** {@inheritDoc} */ diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatemapping/FailSilentAbstractTaskMappingDecoder.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatemapping/FailSilentAbstractTaskMappingDecoder.java index 8383101d5b91a995bb2c95a510a7677f435067ab..e11011479477731635af3aebb20fd8d03959ed36 100644 --- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatemapping/FailSilentAbstractTaskMappingDecoder.java +++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatemapping/FailSilentAbstractTaskMappingDecoder.java @@ -33,7 +33,7 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegen import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IDeployableComponentAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; -import org.fortiss.af3.exploration.moea.model.DseSpecification; +import org.fortiss.af3.exploration.model.ExplorationSpecification; /** * Decoder for instantiating an {@link AbstractTaskMappingEncoding} to a @@ -50,8 +50,8 @@ public class FailSilentAbstractTaskMappingDecoder extends /** Constructor. */ public FailSilentAbstractTaskMappingDecoder( SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, - DseSpecification explorationDefinition) { - super(systemModelAdapter, explorationDefinition); + ExplorationSpecification expSpec) { + super(systemModelAdapter, expSpec); } /** {@inheritDoc} */ @@ -62,8 +62,7 @@ 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); + return new FailSilentTaskMappingEncoding(expSpec, systemModelAdapter, atgEnc, genotype); } // TODO: Abstract to the AbstractTaskMappingDecoder. diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatemapping/FaultDetectionVotingAbstractTaskMappingDecoder.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatemapping/FaultDetectionVotingAbstractTaskMappingDecoder.java index 45e750c615ab7f5e3618af992d112ed30d46a377..3acbe024acd5dbe83edc236f9c029bcdd1af5d2c 100644 --- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatemapping/FaultDetectionVotingAbstractTaskMappingDecoder.java +++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatemapping/FaultDetectionVotingAbstractTaskMappingDecoder.java @@ -32,7 +32,7 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegen import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IDeployableComponentAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; -import org.fortiss.af3.exploration.moea.model.DseSpecification; +import org.fortiss.af3.exploration.model.ExplorationSpecification; import org.opt4j.core.problem.Decoder; /** @@ -51,8 +51,8 @@ public class FaultDetectionVotingAbstractTaskMappingDecoder /** Constructor. */ public FaultDetectionVotingAbstractTaskMappingDecoder( SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, - DseSpecification explorationDefinition) { - super(systemModelAdapter, explorationDefinition); + ExplorationSpecification expSpec) { + super(systemModelAdapter, expSpec); } /** {@inheritDoc} */ @@ -63,8 +63,8 @@ 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."; - return new FaultDetectionVotingTaskMappingEncoding(explorationDefinition, - systemModelAdapter, atgEnc, genotype); + return new FaultDetectionVotingTaskMappingEncoding(expSpec, systemModelAdapter, atgEnc, + genotype); } /** diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/ExplorationTargetEvaluatorBase.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/ExplorationTargetEvaluatorBase.java index 214f0be3108f845b973a6d284c581ed27e173222..5e009d55809534fd8aaba0d3393878251e1f5e7d 100644 --- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/ExplorationTargetEvaluatorBase.java +++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/ExplorationTargetEvaluatorBase.java @@ -23,6 +23,7 @@ import org.eclipse.emf.ecore.EObject; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.FlatPhenotypeMap; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; +import org.fortiss.af3.exploration.alg.exception.ExplorationException; import org.fortiss.af3.exploration.alg.service.IExplorationTargetEvaluator; import org.fortiss.af3.exploration.model.ExplorationConstraint; import org.fortiss.af3.exploration.model.ExplorationTarget; @@ -49,7 +50,7 @@ public abstract class ExplorationTargetEvaluatorBase<P, RT, T extends Exploratio protected SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter; /** Exploration goal evaluated by this evaluator */ - protected T optTarget; + protected T explorationTarget; /** Prototype constructor. */ protected ExplorationTargetEvaluatorBase() { @@ -65,7 +66,7 @@ public abstract class ExplorationTargetEvaluatorBase<P, RT, T extends Exploratio protected ExplorationTargetEvaluatorBase( SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, T optTarget) throws Exception { this.systemModelAdapter = systemModelAdapter; - this.optTarget = optTarget; + this.explorationTarget = optTarget; validateInputs(); } @@ -83,7 +84,15 @@ public abstract class ExplorationTargetEvaluatorBase<P, RT, T extends Exploratio } // TODO #checking: Add an check here to ensure that the evaluators don't mess around with // the encodings. - Value<?> evalResult = evaluateGoal(phenotype, phenotypeTypeMap, transformedModels); + Value<?> evalResult = new DoubleValue(Double.MAX_VALUE); + try { + evalResult = evaluateGoal(phenotype, phenotypeTypeMap, transformedModels); + } catch(Exception e) { + // The Opt4J framework only allows us to throw runtime exceptions. + throw new RuntimeException(new ExplorationException("The evaluatior " + + this.toString() + " failed to evaluate the ExplorationTarget " + + explorationTarget.getName() + ".", e)); + } return evalResult; } diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/ExpressionEvaluatorBase.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/ExpressionEvaluatorBase.java new file mode 100644 index 0000000000000000000000000000000000000000..354ed9c1bd09c1b764f2ec9da4957e0241e49221 --- /dev/null +++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/ExpressionEvaluatorBase.java @@ -0,0 +1,133 @@ +/*--------------------------------------------------------------------------+ +$Id: codetemplates.xml 1 2011-01-01 00:00:01Z hoelzl $ +| | +| 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.evaluator; + +import java.util.Collection; + +import org.eclipse.emf.ecore.EObject; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.FlatPhenotypeMap; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype; +import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; +import org.fortiss.af3.exploration.alg.exception.ExplorationException; +import org.fortiss.af3.exploration.alg.service.IExplorationTargetEvaluator; +import org.fortiss.af3.exploration.dsl_v2.model.expression.IExpression; +import org.fortiss.af3.exploration.lang.ExplorationExpressionEvaluator; +import org.fortiss.af3.exploration.model.ExplorationTarget; +import org.fortiss.af3.exploration.model.ExplorationTargetExpression; +import org.fortiss.tooling.kernel.introspection.IIntrospectionDetailsItem; +import org.fortiss.tooling.kernel.introspection.IIntrospectionItem; +import org.opt4j.core.DoubleValue; +import org.opt4j.core.Value; + +import com.google.common.collect.ClassToInstanceMap; + +/** + * + * @author diewald + * @author $Author: hoelzl $ + * @version $Rev: 18709 $ + * @ConQAT.Rating RED Hash: + */ +public abstract class ExpressionEvaluatorBase<P extends Phenotype, RT, T extends ExplorationTarget<RT>> + extends ExplorationExpressionEvaluator implements IExplorationTargetEvaluator<P, RT, T> { + + /** Representation of system model */ + protected SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter; + + /** Exploration goal evaluated by this evaluator */ + protected T explorationTarget; + + protected IExpression expression; + + /** Prototype constructor. */ + protected ExpressionEvaluatorBase() { + } + + /** + * Creates an evaluator for a given exploration goal + * + * @throws Exception + * if the input validation fails (has to be implemented by the concrete + * {@link ExplorationTarget} evaluators. + */ + protected ExpressionEvaluatorBase(SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, + T explorationTarget) throws Exception { + if(!(explorationTarget instanceof ExplorationTargetExpression<?>)) { + throw new Exception("The exploration target " + explorationTarget.getName() + " is" + + " not of the ExplorationTargetExpression. Thus, it cannot be evaluated by " + + getClass().getSimpleName() + "."); + + } + + this.systemModelAdapter = systemModelAdapter; + this.explorationTarget = explorationTarget; + this.expression = ((ExplorationTargetExpression<?>)explorationTarget).getExpression(); + + validateInputs(); + } + + /** + * Wrapper method for the original evaluate function. + * + * @param transformedModels + * TODO + */ + public Value<?> evaluate(P phenotype, FlatPhenotypeMap<Phenotype> phenotypeTypeMap, + ClassToInstanceMap<EObject> transformedModels) { + if(phenotype == null) { + return new DoubleValue(Double.MAX_VALUE); + } + // TODO #checking: Add an check here to ensure that the evaluators don't mess around with + // the encodings. + Value<?> evalResult = new DoubleValue(Double.MAX_VALUE); + try { + evalResult = evaluateGoal(phenotype, phenotypeTypeMap, transformedModels); + } catch(Exception e) { + // The Opt4J framework only allows us to throw runtime exceptions. + throw new RuntimeException(new ExplorationException("The evaluatior " + + this.toString() + " failed to evaluate the ExplorationTarget " + + explorationTarget.getName() + ".", e)); + } + return evalResult; + } + + /** {@inheritDoc} */ + @Override + public String getIntrospectionLabel() { + return getClass().getSimpleName(); + } + + // TODO: Add the introspection information. + /** {@inheritDoc} */ + @Override + public boolean showInIntrospectionNavigation() { + return true; + } + + /** {@inheritDoc} */ + @Override + public Collection<IIntrospectionItem> getIntrospectionItems() { + return null; + } + + /** {@inheritDoc} */ + @Override + public IIntrospectionDetailsItem getDetailsItem() { + return null; + } +} diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/MappingEvaluator.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/MappingEvaluator.java new file mode 100644 index 0000000000000000000000000000000000000000..49b908355a80a581ebccd66ed862883ff7b18ddb --- /dev/null +++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/MappingEvaluator.java @@ -0,0 +1,122 @@ +/*--------------------------------------------------------------------------+ +$Id: codetemplates.xml 1 2011-01-01 00:00:01Z hoelzl $ +| | +| 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.evaluator; + +import java.util.ArrayList; +import java.util.Collection; + +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.MappingEncoding; +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.dsl_v2.model.booleanp.Implies; +import org.fortiss.af3.exploration.dsl_v2.model.booleanp.allocation.Allocation; +import org.fortiss.af3.exploration.dsl_v2.model.booleanp.allocation.Dislocation; +import org.fortiss.af3.exploration.model.ExplorationTarget; +import org.fortiss.tooling.base.model.element.IModelElement; + +/** + * + * @author diewald + * @author $Author: hoelzl $ + * @version $Rev: 18709 $ + * @ConQAT.Rating RED Hash: + */ +public abstract class MappingEvaluator extends + ExpressionEvaluatorBase<MappingEncoding, Double, ExplorationTarget<Double>> { + + protected MappingEncoding mapping; + + /** Empty prototype constructor. */ + public MappingEvaluator() { + super(); + } + + /** Constructor. */ + public MappingEvaluator(SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, + ExplorationTarget<Double> explorationTarget) throws Exception { + super(systemModelAdapter, explorationTarget); + } + + /** {@inheritDoc} */ + @Override + public Object visit(Allocation alloc) throws Exception { + // TODO: Here, we could use the requester / resource framework for the return types. In + // addition we would obtain a generic mapping evaluator. + IModelElement requester = alloc.getLeft().accept(this, IModelElement.class); + IModelElement resource = alloc.getRight().accept(this, IModelElement.class); + + IRequestAdapter<?> requestAdp = systemModelAdapter.getDeployableComponentOf(requester); + + Collection<IResourceAdapter<?>> allocResourceAdps = + mapping.getAllocatedResourcesFor(requestAdp); + for(IResourceAdapter<?> allocResource : allocResourceAdps) { + if(allocResource.getObject() == resource) { + return Boolean.valueOf(true); + } + } + + return Boolean.valueOf(false); + } + + /** {@inheritDoc} */ + @Override + public Object visit(Dislocation disLoc) throws Exception { + IModelElement requester = disLoc.getLeft().accept(this, IModelElement.class); + IModelElement resource = disLoc.getRight().accept(this, IModelElement.class); + + IRequestAdapter<?> requestAdp = systemModelAdapter.getDeployableComponentOf(requester); + + Collection<IResourceAdapter<?>> allocResourceAdps = + mapping.getAllocatedResourcesFor(requestAdp); + for(IResourceAdapter<?> allocResource : allocResourceAdps) { + if(allocResource.getObject() == resource) { + return Boolean.valueOf(false); + } + } + + return Boolean.valueOf(true); + } + + /** {@inheritDoc} */ + @Override + public Object visit(Implies implies) throws Exception { + // FIXME: How to implement implies? + return null; + } + + /** {@inheritDoc} */ + @Override + public boolean validateInputs() throws Exception { + return true; + } + + /** {@inheritDoc} */ + @Override + public Collection<Class<?>> getRequiredInputTypes() { + Collection<Class<?>> requiredTypes = new ArrayList<>(); + requiredTypes.add(MappingEncoding.class); + return requiredTypes; + } + + /** {@inheritDoc} */ + @Override + public Class<?> getPrimaryInputType() { + return MappingEncoding.class; + } +} diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/ComponentMultiAllocationConstraintEvaluator.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/ComponentMultiAllocationConstraintEvaluator.java index 17ee333188577b1ce7b5a1cbf1c59477e19340fa..3cb30da70223f29060dd12e2b5563a54602ebaf2 100644 --- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/ComponentMultiAllocationConstraintEvaluator.java +++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/ComponentMultiAllocationConstraintEvaluator.java @@ -78,19 +78,19 @@ public class ComponentMultiAllocationConstraintEvaluator<S extends InstantiatedT */ @Override public boolean validateInputs() throws Exception { - if(optTarget.getComponent() == null || - systemModelAdapter.getDeployableComponentOf(optTarget.getComponent()) == null) { + if(explorationTarget.getComponent() == null || + systemModelAdapter.getDeployableComponentOf(explorationTarget.getComponent()) == null) { throw new Exception("The referenced component of the dislocation constraint " + - optTarget.getName() + "(id: " + optTarget.getId() + + explorationTarget.getName() + "(id: " + explorationTarget.getId() + ") is not correctly specified." + " Either it is missing, or not part of the set of deployable components."); } - if(optTarget.getExecutionUnits().isEmpty() || + if(explorationTarget.getExecutionUnits().isEmpty() || !mapInOut(systemModelAdapter.getDeploymentTargets(), t -> t.getObject(), - ArrayList::new).containsAll(optTarget.getExecutionUnits())) { + ArrayList::new).containsAll(explorationTarget.getExecutionUnits())) { throw new Exception("The referenced execution unit of the dislocation constraint " + - optTarget.getName() + "(id: " + optTarget.getId() + + explorationTarget.getName() + "(id: " + explorationTarget.getId() + ") is not correctly specified." + " Either it is missing, or not part of the set of deployment targets."); } diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/ComponentMultiDislocationConstraintEvaluator.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/ComponentMultiDislocationConstraintEvaluator.java index 566971566c94c9d5021e0931ccfc3dfccb509dcb..ff8b28fddd831d027b700a7d0375bf361021ce4a 100644 --- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/ComponentMultiDislocationConstraintEvaluator.java +++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/ComponentMultiDislocationConstraintEvaluator.java @@ -77,19 +77,19 @@ public class ComponentMultiDislocationConstraintEvaluator<S extends Instantiated */ @Override public boolean validateInputs() throws Exception { - if(optTarget.getComponent() == null || - systemModelAdapter.getDeployableComponentOf(optTarget.getComponent()) == null) { + if(explorationTarget.getComponent() == null || + systemModelAdapter.getDeployableComponentOf(explorationTarget.getComponent()) == null) { throw new Exception("The referenced component of the dislocation constraint " + - optTarget.getName() + "(id: " + optTarget.getId() + + explorationTarget.getName() + "(id: " + explorationTarget.getId() + ") is not correctly specified." + " Either it is missing, or not part of the set of deployable components."); } - if(optTarget.getExecutionUnits().isEmpty() || + if(explorationTarget.getExecutionUnits().isEmpty() || !mapInOut(systemModelAdapter.getDeploymentTargets(), t -> t.getObject(), - ArrayList::new).containsAll(optTarget.getExecutionUnits())) { + ArrayList::new).containsAll(explorationTarget.getExecutionUnits())) { throw new Exception("The referenced execution unit of the dislocation constraint " + - optTarget.getName() + "(id: " + optTarget.getId() + + explorationTarget.getName() + "(id: " + explorationTarget.getId() + ") is not correctly specified." + " Either it is missing, or not part of the set of deployment targets."); } diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/DeadlineConstraintEvaluator.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/DeadlineConstraintEvaluator.java index bab0cb327f0dd4bebea3683d2afddf7270fc57ac..467e089cae281787d18da66d4bf08ea7a8e5f874 100644 --- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/DeadlineConstraintEvaluator.java +++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/DeadlineConstraintEvaluator.java @@ -78,17 +78,17 @@ public class DeadlineConstraintEvaluator<S extends InstantiatedTaskMappingEntry, sourceDeployableComponent.add(systemModelAdapter.getDeployableComponentOf(optGoal .getStartComponent())); - targetDeployableComponent.add(systemModelAdapter.getDeployableComponentOf(optTarget + targetDeployableComponent.add(systemModelAdapter.getDeployableComponentOf(explorationTarget .getEndComponent())); - deadline = optTarget.getDeadline(); + deadline = explorationTarget.getDeadline(); // TODO: AD: The cast to the AF3 systemmodeladapter breaks the abstration the goals. It // would be rather required to define the source and sink components as // IDeployableComponents in the ecore model. The transformation from AF3 components to the // IDeployableCompontes should be done when the data from the GUI is written to the model. IDeployableComponentAdapter<?> origStartComponent = - ((AF3SystemModelAdapter)systemModelAdapter).getDeployableComponentAdapter(optTarget + ((AF3SystemModelAdapter)systemModelAdapter).getDeployableComponentAdapter(explorationTarget .getStartComponent()); if(origStartComponent.isInstantiation()) { sourceDeployableComponent.add(origStartComponent); @@ -97,7 +97,7 @@ public class DeadlineConstraintEvaluator<S extends InstantiatedTaskMappingEntry, } IDeployableComponentAdapter<?> origTargetComponent = - ((AF3SystemModelAdapter)systemModelAdapter).getDeployableComponentAdapter(optTarget + ((AF3SystemModelAdapter)systemModelAdapter).getDeployableComponentAdapter(explorationTarget .getEndComponent()); if(origStartComponent.isInstantiation()) { targetDeployableComponent.add(origTargetComponent); @@ -169,8 +169,8 @@ public class DeadlineConstraintEvaluator<S extends InstantiatedTaskMappingEntry, public boolean validateInputs() { // TODO: AD: is this check really required here? Shouldn't this be done by the // inputvalidator? - if(optTarget.getStartComponent() == null || optTarget.getEndComponent() == null || - optTarget.getDeadline() <= 0) { + if(explorationTarget.getStartComponent() == null || explorationTarget.getEndComponent() == null || + explorationTarget.getDeadline() <= 0) { return false; } diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/IConstraintEvaluator.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/IConstraintEvaluator.java index a134841e8f8f1dcf165c4c66cace1c025ef0de32..763f616185ff3b62aace70f7633d743aa903bdeb 100644 --- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/IConstraintEvaluator.java +++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/IConstraintEvaluator.java @@ -38,6 +38,6 @@ public interface IConstraintEvaluator<P, RT, T extends ExplorationConstraint<RT> * The {@code validate} is applied to phenotypes in order to check whether proposed solutions * are contained within the feasible set. */ - public <M> boolean validate(ExplorationTarget<?> expTarget, M solution, Class<M> solutionType, + <M> boolean validate(ExplorationTarget<?> expTarget, M solution, Class<M> solutionType, SolutionQuantification value); } diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/MappingEvaluatorConstraint.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/MappingEvaluatorConstraint.java new file mode 100644 index 0000000000000000000000000000000000000000..3e065004f67b2528d31627953366ca170dcb79b0 --- /dev/null +++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/MappingEvaluatorConstraint.java @@ -0,0 +1,108 @@ +/*--------------------------------------------------------------------------+ +$Id: codetemplates.xml 1 2011-01-01 00:00:01Z hoelzl $ +| | +| 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.evaluator.constraint; + +import org.eclipse.emf.ecore.EObject; +import org.fortiss.af3.exploration.alg.dse.SolutionQuantification; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.MappingEncoding; +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.evaluator.MappingEvaluator; +import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; +import org.fortiss.af3.exploration.alg.service.IExplorationTargetEvaluator; +import org.fortiss.af3.exploration.dsl_v2.model.function.Maximize; +import org.fortiss.af3.exploration.dsl_v2.model.function.Minimize; +import org.fortiss.af3.exploration.model.ExplorationConstraint; +import org.fortiss.af3.exploration.model.ExplorationTarget; +import org.opt4j.core.IntegerValue; +import org.opt4j.core.Value; + +import com.google.common.collect.ClassToInstanceMap; + +/** + * + * @author diewald + * @author $Author: hoelzl $ + * @version $Rev: 18709 $ + * @ConQAT.Rating RED Hash: + */ +public class MappingEvaluatorConstraint extends MappingEvaluator implements + IConstraintEvaluator<MappingEncoding, Boolean, ExplorationConstraint<Boolean>> { + + public MappingEvaluatorConstraint() { + } + + public MappingEvaluatorConstraint(SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, + ExplorationTarget<Double> explorationTarget) throws Exception { + super(systemModelAdapter, explorationTarget); + } + + /** {@inheritDoc} */ + @Override + public Value<?> evaluateGoal(MappingEncoding phenotype, + FlatPhenotypeMap<Phenotype> phenotypeTypeMap, + ClassToInstanceMap<EObject> transformedModels) { + mapping = phenotype; + + Boolean retVal = null; + // FIXME: pass parsing exception to upper layers. + try { + retVal = expression.accept(this, Boolean.class); + } catch(Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + // TODO Auto-generated method stub + return new IntegerValue(retVal == true ? 1 : 0); + } + + /** {@inheritDoc} */ + @Override + public Object visit(Maximize max) throws Exception { + // TODO Auto-generated method stub + return null; + } + + /** {@inheritDoc} */ + @Override + public Object visit(Minimize min) throws Exception { + // TODO Auto-generated method stub + return null; + } + + /** {@inheritDoc} */ + @Override + public IExplorationTargetEvaluator<MappingEncoding, Double, ExplorationTarget<Double>> + createEvaluator(SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, + ExplorationTarget<Double> explorationTarget) throws InstantiationException, + Exception { + return new MappingEvaluatorConstraint(systemModelAdapter, explorationTarget); + } + + /** {@inheritDoc} */ + @Override + public <M> boolean validate(ExplorationTarget<?> expTarget, M solution, Class<M> solutionType, + SolutionQuantification value) { + Double evalValue = value.getQuantificationOf(expTarget); + if(evalValue > 0.0) { + return false; + } + return true; + } +} diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/SafetyIntegrityLevelConstraintEvaluator.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/SafetyIntegrityLevelConstraintEvaluator.java index 76f760564706568e91fe569bfc45b061bb57e69e..3ed3d7a05581e906b3158a1c262b6b4af8cd5698 100644 --- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/SafetyIntegrityLevelConstraintEvaluator.java +++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/SafetyIntegrityLevelConstraintEvaluator.java @@ -85,7 +85,7 @@ public class SafetyIntegrityLevelConstraintEvaluator<S extends InstantiatedTaskM Map<IDeployableComponentAdapter<?>, Collection<S>> allocationMap = mapping.getAllocationMap(); List<IDeployableComponentAdapter<?>> silComponents = getSILComponentAdapters(); - List<SIL> silBounds = optTarget.getLimitation(); + List<SIL> silBounds = explorationTarget.getLimitation(); for(int idx = 0; idx < silComponents.size(); idx++) { SIL actualSIL = detectSIL(silComponents.get(idx), allocationMap); if(actualSIL.getValue() < silBounds.get(idx).getValue()) { @@ -109,7 +109,7 @@ public class SafetyIntegrityLevelConstraintEvaluator<S extends InstantiatedTaskM private List<IDeployableComponentAdapter<?>> getSILComponentAdapters() { Collection<IDeployableComponentAdapter<?>> deplComp = castToRawColl(systemModelAdapter.getDeployableComponents()); - return deplComp.stream().filter(c -> optTarget.getComponents().contains(c)) + return deplComp.stream().filter(c -> explorationTarget.getComponents().contains(c)) .collect(Collectors.toList()); } @@ -124,7 +124,7 @@ public class SafetyIntegrityLevelConstraintEvaluator<S extends InstantiatedTaskM Map<IDeployableComponentAdapter<?>, Collection<S>> allocationMap = mapping.getAllocationMap(); List<IDeployableComponentAdapter<?>> silComponents = getSILComponentAdapters(); - List<SIL> silBounds = optTarget.getLimitation(); + List<SIL> silBounds = explorationTarget.getLimitation(); for(int idx = 0; idx < silComponents.size(); idx++) { SIL actualSIL = detectSIL(silComponents.get(idx), allocationMap); silViolations.add(calculateSILViolation(silBounds.get(idx), actualSIL)); diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/MappingEvaluatorObjective.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/MappingEvaluatorObjective.java new file mode 100644 index 0000000000000000000000000000000000000000..79019567c316c9a8afd2076530d7e3e1cf46a9b1 --- /dev/null +++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/MappingEvaluatorObjective.java @@ -0,0 +1,108 @@ +/*--------------------------------------------------------------------------+ +$Id: codetemplates.xml 1 2011-01-01 00:00:01Z hoelzl $ +| | +| 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.evaluator.objective; + +import java.math.BigInteger; + +import org.eclipse.emf.ecore.EObject; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.MappingEncoding; +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.evaluator.MappingEvaluator; +import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; +import org.fortiss.af3.exploration.alg.service.IExplorationTargetEvaluator; +import org.fortiss.af3.exploration.dsl_v2.model.arithmetic.IArithmeticExpression; +import org.fortiss.af3.exploration.dsl_v2.model.function.IFunction; +import org.fortiss.af3.exploration.dsl_v2.model.function.Maximize; +import org.fortiss.af3.exploration.dsl_v2.model.function.Minimize; +import org.fortiss.af3.exploration.model.ExplorationTarget; +import org.opt4j.core.DoubleValue; +import org.opt4j.core.IntegerValue; +import org.opt4j.core.Value; +import org.opt4j.core.problem.Evaluator; + +import com.google.common.collect.ClassToInstanceMap; + +/** + * + * @author diewald + * @author $Author: hoelzl $ + * @version $Rev: 18709 $ + * @ConQAT.Rating RED Hash: + */ +public class MappingEvaluatorObjective extends MappingEvaluator { + + /** Prototype Constructor. */ + public MappingEvaluatorObjective() { + } + + /** + * Constructor. + * + * @param systemModelAdapter + * abstracts the input models. + * @param explorationTarget + * Target for which the {@link Evaluator} is constructed. + * @throws Exception + * if the inputs don't satisfy the {@link Evaluator}'s requirements. + */ + public MappingEvaluatorObjective(SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, + ExplorationTarget<Double> explorationTarget) throws Exception { + super(systemModelAdapter, explorationTarget); + } + + /** {@inheritDoc} */ + @Override + public Value<?> evaluateGoal(MappingEncoding phenotype, + FlatPhenotypeMap<Phenotype> phenotypeTypeMap, + ClassToInstanceMap<EObject> transformedModels) throws Exception { + mapping = phenotype; + + // For ExplorationObjectives the expression begins either with a Minimize or Maximize + // operation. + IArithmeticExpression minMaxTerm = ((IFunction)expression).getArgs(); + + Number retVal = minMaxTerm.accept(this, Number.class); + + return retVal instanceof BigInteger ? new IntegerValue(retVal.intValue()) + : new DoubleValue(retVal.doubleValue()); + } + + /** {@inheritDoc} */ + @Override + public Object visit(Maximize max) throws Exception { + // Max/Min operators are handled in the EvaluationWrapper (pre-processing). + return null; + } + + /** {@inheritDoc} */ + @Override + public Object visit(Minimize min) throws Exception { + // Max/Min operators are handled in the EvaluationWrapper (pre-processing). + return null; + } + + /** {@inheritDoc} */ + @Override + public IExplorationTargetEvaluator<MappingEncoding, Double, ExplorationTarget<Double>> + createEvaluator(SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, + ExplorationTarget<Double> explorationTarget) throws InstantiationException, + Exception { + return new MappingEvaluatorObjective(systemModelAdapter, explorationTarget); + } +} diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/ReliabilityEvaluatorBase.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/ReliabilityEvaluatorBase.java index f8d5dd1c1c9e68350a1be29216160048b7b1946c..ecd8b62b9c834d0c74b0ee1a0297d886ec81534d 100644 --- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/ReliabilityEvaluatorBase.java +++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/ReliabilityEvaluatorBase.java @@ -91,12 +91,12 @@ public abstract class ReliabilityEvaluatorBase<S extends InstantiatedTaskMapping super(systemModelAdapter, target); targetComponent = - systemModelAdapter.getDeployableComponentOf(optTarget.getTargetComponent()); + systemModelAdapter.getDeployableComponentOf(explorationTarget.getTargetComponent()); if(targetComponent == null) { throw new Exception("The Component for which to minimize the failure rate is not" + " correctly specified. It is either not defined, or it is not part of the" + - " set of deployable Components. The error is caused by " + optTarget.getName() + - "(id: " + optTarget.getId() + ")."); + " set of deployable Components. The error is caused by " + explorationTarget.getName() + + "(id: " + explorationTarget.getId() + ")."); } // TODO: Check for different implementation of this single initialization for different @@ -264,7 +264,7 @@ public abstract class ReliabilityEvaluatorBase<S extends InstantiatedTaskMapping // TODO: It seems that 'comp' is used to identify the task graph for which the analysis is // performed. return new DoubleValue(evaluateInternal(schedule, itmEnc, - atgEnc.getTaskGraphOf(targetComponent), optTarget.getType())); + atgEnc.getTaskGraphOf(targetComponent), explorationTarget.getType())); // ((AF3SystemModelAdapter)systemModelAdapter).getTaskGraph(optGoal.getComponent()), // optGoal.getType()); } diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/sysmodel/FailSilentExecModelFactory.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/sysmodel/FailSilentExecModelFactory.java index 4c5a1aba3a45dd5b7616309a2601e73c3c32a90f..bd7a1aa53031d76e11688eedcc30e7218662b0da 100644 --- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/sysmodel/FailSilentExecModelFactory.java +++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/sysmodel/FailSilentExecModelFactory.java @@ -50,7 +50,6 @@ import org.fortiss.af3.exploration.model.ExplorationSpecification; import org.fortiss.af3.exploration.model.ExplorationTarget; import org.fortiss.af3.exploration.model.time.DeadlineConstraint; import org.fortiss.af3.exploration.model.time.PeriodConstraint; -import org.fortiss.af3.exploration.moea.model.DseSpecification; import org.fortiss.af3.exploration.moea.model.predefined.ComponentMultiAllocationConstraint; import org.fortiss.af3.exploration.moea.model.predefined.ComponentMultiDislocationConstraint; import org.fortiss.af3.exploration.moea.model.predefined.FailureMinObjective; @@ -93,10 +92,10 @@ public class FailSilentExecModelFactory extends /** Creates a TaskMappingCreator that matches the given execution model. */ @Override public TaskMappingCreator<FailSilentTaskMappingEntry, FailSilentTaskMappingEncoding> - createTaskMappingCreator(DseSpecification dse, + createTaskMappingCreator(ExplorationSpecification expSpec, SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, DecoderDependencyGraph execDepGraph) { - return new FailSilentTaskMappingCreator(dse, systemModelAdapter, execDepGraph); + return new FailSilentTaskMappingCreator(expSpec, systemModelAdapter, execDepGraph); } /* @@ -152,8 +151,8 @@ public class FailSilentExecModelFactory extends public AbstractTaskMappingDecoder<FailSilentTaskMappingEntry, FailSilentTaskMappingEncoding> createAbstractTaskMappingDecoder( SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, - DseSpecification explorationDefinition) { - return new FailSilentAbstractTaskMappingDecoder(systemModelAdapter, explorationDefinition); + ExplorationSpecification expSpec) { + return new FailSilentAbstractTaskMappingDecoder(systemModelAdapter, expSpec); } /** {@inheritDoc} */ @@ -179,9 +178,9 @@ public class FailSilentExecModelFactory extends @Override public StrictTTDecoder<FailSilentTaskMappingEntry, FailSilentTaskMappingEncoding> createStrictTTDecoder(SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, - DseSpecification explorationDefinition) { + ExplorationSpecification expSpec) { return new StrictTTDecoder<FailSilentTaskMappingEntry, FailSilentTaskMappingEncoding>( - systemModelAdapter, explorationDefinition); + systemModelAdapter, expSpec); } /** diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/sysmodel/FaultDetectionVotingExecModelFactory.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/sysmodel/FaultDetectionVotingExecModelFactory.java index d574ff34b6c6758f02e142be8c742b61e7eff368..345f3dc3e2f5d7da888a49f435ba720bf09e8cab 100644 --- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/sysmodel/FaultDetectionVotingExecModelFactory.java +++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/sysmodel/FaultDetectionVotingExecModelFactory.java @@ -50,7 +50,6 @@ import org.fortiss.af3.exploration.model.ExplorationSpecification; import org.fortiss.af3.exploration.model.ExplorationTarget; import org.fortiss.af3.exploration.model.time.DeadlineConstraint; import org.fortiss.af3.exploration.model.time.PeriodConstraint; -import org.fortiss.af3.exploration.moea.model.DseSpecification; import org.fortiss.af3.exploration.moea.model.predefined.ComponentMultiAllocationConstraint; import org.fortiss.af3.exploration.moea.model.predefined.ComponentMultiDislocationConstraint; import org.fortiss.af3.exploration.moea.model.predefined.FailureMinObjective; @@ -96,10 +95,10 @@ public class FaultDetectionVotingExecModelFactory @Override public TaskMappingCreator<FaultDetectionVotingTaskMappingEntry, FaultDetectionVotingTaskMappingEncoding> - createTaskMappingCreator(DseSpecification dse, + createTaskMappingCreator(ExplorationSpecification expSpec, SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, DecoderDependencyGraph execDepGraph) { - return new FaultDetectionVotingTaskMappingCreator(dse, systemModelAdapter, execDepGraph); + return new FaultDetectionVotingTaskMappingCreator(expSpec, systemModelAdapter, execDepGraph); } /* @@ -156,9 +155,8 @@ public class FaultDetectionVotingExecModelFactory AbstractTaskMappingDecoder<FaultDetectionVotingTaskMappingEntry, FaultDetectionVotingTaskMappingEncoding> createAbstractTaskMappingDecoder( SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, - DseSpecification explorationDefinition) { - return new FaultDetectionVotingAbstractTaskMappingDecoder(systemModelAdapter, - explorationDefinition); + ExplorationSpecification expSpec) { + return new FaultDetectionVotingAbstractTaskMappingDecoder(systemModelAdapter, expSpec); } /** {@inheritDoc} */ @@ -186,9 +184,9 @@ public class FaultDetectionVotingExecModelFactory public StrictTTDecoder<FaultDetectionVotingTaskMappingEntry, FaultDetectionVotingTaskMappingEncoding> createStrictTTDecoder(SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, - DseSpecification explorationDefinition) { + ExplorationSpecification expSpec) { return new StrictTTDecoder<FaultDetectionVotingTaskMappingEntry, FaultDetectionVotingTaskMappingEncoding>( - systemModelAdapter, explorationDefinition); + systemModelAdapter, expSpec); } /** {@inheritDoc} */ diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/SystemModelAdapter.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/SystemModelAdapter.java index 26371025426126ddbe0c3bea05458ce97fc757e6..7e24ea43076d208bd47ab4430f95769a99ab19fa 100644 --- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/SystemModelAdapter.java +++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/SystemModelAdapter.java @@ -1066,6 +1066,10 @@ public class SystemModelAdapter<C, E, S, G, TR, M> { */ protected boolean connectsSwHwPlatform(IConnector connector, Map<IModelElement, IModelElement> invNetDriverRef) { + if(platformInterconnectTypes == null) { + return false; + } + if(!connectsSwHwPlatform(connector)) { if(connector != null) { IHierarchicElement parent = connector.getOwner(); diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/af3/AF3SystemModelAdapter.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/af3/AF3SystemModelAdapter.java index a734d77da306ecb7f3ea08c34923f99c31fbd217..c9c6aa262f08017a9f8ef67dee7cbfef989583c3 100644 --- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/af3/AF3SystemModelAdapter.java +++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/af3/AF3SystemModelAdapter.java @@ -329,17 +329,17 @@ public class AF3SystemModelAdapter for(Component currentComponent : deployableComponents) { Map<IExecutionUnitAdapter<?>, Double> wcetMap = new HashMap<IExecutionUnitAdapter<?>, Double>(); - Map<IExecutionUnitAdapter<?>, Double> energyConsumptionMap = - new HashMap<IExecutionUnitAdapter<?>, Double>(); + // Map<IExecutionUnitAdapter<?>, Double> energyConsumptionMap = + // new HashMap<IExecutionUnitAdapter<?>, Double>(); for(IExecutionUnitAdapter<?> execUnit : deploymentTargets) { wcetMap.put(execUnit, parameterAdapter.getWcet(currentComponent, execUnit)); - energyConsumptionMap.put(execUnit, - parameterAdapter.getEnergyConsumption(currentComponent, execUnit)); + // energyConsumptionMap.put(execUnit, + // parameterAdapter.getEnergyConsumption(currentComponent, execUnit)); } InternalComponentParameters parameterMap = new InternalComponentParameters(); parameterMap.setWcetMap(wcetMap); - parameterMap.setEnergyConsumptionMap(energyConsumptionMap); + // parameterMap.setEnergyConsumptionMap(energyConsumptionMap); internalParameterMap.put(currentComponent, parameterMap); } return internalParameterMap; diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/service/IExplorationTargetEvaluator.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/service/IExplorationTargetEvaluator.java index f60bf203c38dcd8d37f08fa58df98c750f201afe..df02a6f3c9da8497a5aa8ec8c089f7bfd888cce6 100644 --- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/service/IExplorationTargetEvaluator.java +++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/service/IExplorationTargetEvaluator.java @@ -46,10 +46,9 @@ public interface IExplorationTargetEvaluator<P, RT, S extends ExplorationTarget< * Evaluates a phenotype w.r.t. a given objective dimension * * @param transformedModels - * TODO */ public Value<?> evaluateGoal(P phenotype, FlatPhenotypeMap<Phenotype> phenotypeTypeMap, - ClassToInstanceMap<EObject> transformedModels); + ClassToInstanceMap<EObject> transformedModels) throws Exception; /** Validate if objective has been correctly specified. */ public boolean validateInputs() throws Exception; diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/util/AF3Utils.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/util/AF3Utils.java index c2391a6874015093eff2eca6e3461034512a44e0..d8ad13856482eece96af0f3754e887543d51c922 100644 --- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/util/AF3Utils.java +++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/util/AF3Utils.java @@ -505,11 +505,13 @@ public class AF3Utils { Map<IModelElement, IModelElement> invElementReferences = new HashMap<IModelElement, IModelElement>(); - for(IModelElement referencingElement : getChildrenWithType(referencingPlatformArchitecture, - interPlatformConnectingElements.getFirst())) { - for(IModelElement referencedElement : getReferencedElementsWithType(referencingElement, - interPlatformConnectingElements.getSecond())) { - invElementReferences.put(referencedElement, referencingElement); + if(interPlatformConnectingElements != null) { + for(IModelElement referencingElement : getChildrenWithType( + referencingPlatformArchitecture, interPlatformConnectingElements.getFirst())) { + for(IModelElement referencedElement : getReferencedElementsWithType( + referencingElement, interPlatformConnectingElements.getSecond())) { + invElementReferences.put(referencedElement, referencingElement); + } } }