Skip to content
Snippets Groups Projects
  1. Sep 07, 2018
    • Alexander Diewald's avatar
      ExpFeatures: Use the ExplorationFeature service for OperatorModules. · 28aa3728
      Alexander Diewald authored
      
      * ExplorationFeatures:
      ** Add a method to the IExplorationFeatures that checks whether the
         available input system models justify the application of a certain
         feature. This is intended to detect cases where an ExplorationFeature
         would degenerate to a No-Op such that it is useless to be executed.
      ** Add a utility method that returns the set of ExplorationFeatures,
         which are enabled by the user (by a DseSpecificiation) and applicable
         to the given input system models.
      ** Change the ExplorationFeature(Service) such that a stronger coupling
         between Genotypes and its Creators and Operators exist: It is
         required to correctly register the operators with their corresponding
         Genotypes.
      * Copying:
      ** Add a "Copyable" interface that enforces the existence of a copy
         statement. This is the inverse approach as the Cloneable marker
         interface of Java.
      ** Add a mechanism that installs a default CopyModule if no specialized
         CopyModule is provided for a given Genotype. This implementation
         relies on the existence of the Copyable interface for each Genotype.
      
      Signed-off-by: default avatarAlexander Diewald <diewald@fortiss.org>
      28aa3728
  2. Aug 22, 2018
  3. Aug 12, 2018
    • Alexander Diewald's avatar
      Merge branch 'dependency_injection' into 'master' · 31ae470d
      Alexander Diewald authored
      Dependency injection
      
      See merge request !2
      31ae470d
    • Alexander Diewald's avatar
      Merge branch 'master' of https://git.fortiss.org/af3/exploration-alg.git into dependency_injection · e0d2e23f
      Alexander Diewald authored
      Conflicts:
      	org.fortiss.af3.exploration.alg/.classpath
      	org.fortiss.af3.exploration.alg/META-INF/MANIFEST.MF
      	org.fortiss.af3.exploration.alg/build.properties
      	org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/.ratings
      	org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/DSEFactory.java
      	org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/platform/.ratings
      	org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/platform/PlatformCommunicationGraphCreator.java
      	org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/platform/.ratings
      	org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/platform/PlatformCommunicationGraphEncoding.java
      	org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/.ratings
      	org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/CompositeDecoder.java
      	org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/CompositeDecoderBase.java
      	org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/problem/.ratings
      	org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/comm/.ratings
      	org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/comm/MessageDecoder.java
      	org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/.ratings
      	org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/SystemModelAdapter.java
      	org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/taskgraph/.ratings
      	org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/comm/.ratings
      	org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/mapping/comm/.ratings
      	org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/comm/.ratings
      	org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/comm/TDMABusScheduler.java
      	org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/proc/.ratings
      	org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/proc/EDFSchedulerBase.java
      	org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/graph/.ratings
      	org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/graph/display/.ratings
      	org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/util/.ratings
      e0d2e23f
    • Alexander Diewald's avatar
      DI: Fully functional: Completely rework evaluation & data passing. · 4e0d3459
      Alexander Diewald authored
      
      * Switch the ExplorationEvaluationService to not rely on eclipse
        extension points but use java registration methods. This service has
        now a close relation to the ExplorationFeatureService that holds all
        ExplorationModules.
        Additional information and logic required for evaluation is found in
        the ExplorationEvaluationService.
      * Register the MappingEvaluatorObjective for DSML Expressions and the
        EvaluatorModules specific for the ParitionExploration.
      * Add the @Provides annotation to each evaluation function such that
        their method parameters are automatically injected by Guice.
      * Extract the parsing of IExpressions to parsers which are called from
        the corresponding IExplorationModules.
      * Provisioning interception:
        * Generalize the DecodingInterceptor into a ProvisionInterceptor such
          that it can be used for the create phase as well. Along, make the
          update mechanism via sub-modules providing same types optional (used
          only in the decode phase).
        * Add an Interceptor module such that already created Genotypes can be
          provided to other create methods that depend upon them. This avoids
          launching the create method for the same time several times, causing
          inconsistencies between the Genotypes.
        * Add a @Creates annotation for method interception binding.
      * Add additionally required @Provides annotation in the
        SystemModelAdaper.
      * Create a TaskMapper that encapsulates the Task -> ITaskAdapter
        associations. It is used, for instance, in the evaluators where the
        ExplorationTargets are defined on AF3 elements whereas the DSE
        internally works on reduced elements.
      * Remove the non-used cglib library.
      * Add the ByteBuddy library (v1.8.17) to be able to generate code at
        runtime. It is used to generate Provider Classes (using @Provides
        methods) that are supplied to the injectors of follow up phases (e.g.,
        decode -> evaluate) such that previous results are available to these
        injectors.
      * NOTE / IMPORTANT: This commit leaves several outdated and (now) unused
        classes in place. They will be removed in follow up commits.
      
      Signed-off-by: default avatarAlexander Diewald <diewald@fortiss.org>
      4e0d3459
  4. Aug 05, 2018
    • Alexander Diewald's avatar
    • Alexander Diewald's avatar
      DI: Decode phenotypes (same iteration, genotype) only once. · fdcd27a3
      Alexander Diewald authored
      
      * If a phenotype is requested as an input parameter by multiple
        decode methods, the decoding chain would be launched many times.
        In order to increase performance, remember the already decoded
        phenotypes in the GuiceDecoder and return them in case of subsequent
        requests.
      * Extend the decoding interceptor such that it request the map of
        already decoded phenotypes and looks for already decoded phenotypes.
        If one is found it is returned instaed of invoking the decode method.
      * All decode methods are now intercepted by the above mentioned
        interceptor. Decode methods MUST be annotated with "@Decodes" from now
        on.
      * Plugin-style decoders are still supported by marking Phenotypes if
        they are processed by sub-decoders. Otherwise, only sub-decoders would 
        be executed due to them placing the produced Phenotype in the above
        mentioned map.
      
      Signed-off-by: default avatarAlexander Diewald <diewald@fortiss.org>
      fdcd27a3
  5. Aug 04, 2018
    • Alexander Diewald's avatar
      DI: Add decoder plugin mechanism. · e11234f6
      Alexander Diewald authored
      
      * Update Guice to a self-compile version that allows overriding
        @Provides methods.
      * Create an "@PluginDecoder" annotation along with a MethodInterceptor
        that intercepts such annotated decode methods. It launches all decode
        methods that provide the same phenotype prior to executing itself
        (sub-decoding). These sub-decoders are providing updates to the
        phenotype before the actual decoding is executed.
        NOTE: Sub-decoder methods must be annotated with the "@Named("XYZ")"
        key where XYZ is the class name of the decoder. This is required to
        avoid @Provides methods that would return the same type.
      * Re-create the DecoderModules by the Guice Injector before passing them
        to the GuiceDecoder such that Method Interceptors can be installed
        before the GuiceDecoder is instantiated.
      * Correct the integration of the PlatformCommunicationGraphEncoding.
      * Add more required @Provides Methods to the SystemModelAdapter.
      
      Signed-off-by: default avatarAlexander Diewald <diewald@fortiss.org>
      e11234f6
  6. Aug 01, 2018
    • Alexander Diewald's avatar
      DSE-Process: Add an ExplorationFeature service. · fdd0872a
      Alexander Diewald authored
      
      * The IExplorationFeatureService allows to add extensions to the DSE
        process that consist of sub-modules, e.g., Variables, Evaluations,
        or additional operations on existing encodings.
      * While the IExplorationFeatureService is used to manage all existing
        extensions, the activated ones (configuration) is passed to the DSE
        by the exploration backend. Currently, the activated features are hard
        coded, but shall be moved to the UI.
      * Consequently, the IExplorationModuleService has bee removed. Its
        functionality has been moved to the ExplorationFeature abstract class
        that are single features registered with the
        IExplorationFeatureService.
      * The activated features now govern the installation of the sub-modules
        (Creators, Decoders), instead of the previous
        IExplorationModuleService.
      * When setting up the Opt4J exploration, the activated decoder
        configuration is now checked for consistency to avoid circular
        dependencies and duplicate responsibilities of decoders to create a
        phenotype.
      * An IExplorationFeature type is added to the MOEA ecore model to allow
        referencing exploration features from EMF classes.
      
      Signed-off-by: default avatarAlexander Diewald <diewald@fortiss.org>
      fdd0872a
  7. Jul 31, 2018
  8. Jul 30, 2018
  9. Jul 14, 2018
    • Alexander Diewald's avatar
      DI: Base the DSE architecture on DI. · dea0bffa
      Alexander Diewald authored
      
      * Create a top-most injector (DSE injector) when the explorer is
        created. It hosts the Opt4J injector and allows accessing data from
        the DSE from within Opt4J Modules.
      * Enable Multi-Operator bindings (multiple operators from which one is
        selected to be applied on the same Genotype-Type) by the Operator's
        type. This is required to allow injecting DSE-wide parameters, e.g.,
        system model data.
        * Use a OperatorKey to allow registering Operators Objects or their
          Classes in the selection map.
        * Operators registered by their type are initialized lazily when they
          are delivered by the OperatorSelector on request.
      * Remove various dependencies on the SystemModelAdapter (Use DI where
        data is needed). This allows to break up very complex inheritance
        hierarchies.
      * Extend the SystemModelAdapter to use @Provides annotations that are
        used in opt4j modules (e.g. decoders) to obtain system model data.
      * Some of the old custom factories are now initialized with a null value
        for the SystemModelAdapter since they will be removed soon due to the
        use of DI.
      
      Signed-off-by: default avatarAlexander Diewald <diewald@fortiss.org>
      dea0bffa
    • Alexander Diewald's avatar
      DI: Update Opt4J for fixed child injector behavior. · c4fedc10
      Alexander Diewald authored
      
      * Self-build version that allows to embed the opt4j injector as a child
        injector.
      
      Signed-off-by: default avatarAlexander Diewald <diewald@fortiss.org>
      c4fedc10
    • Alexander Diewald's avatar
  10. Jul 10, 2018
    • Alexander Diewald's avatar
      DI: First "operational" decoding chain. · 0498c90c
      Alexander Diewald authored
      
      * Refactoring: Remove unneeded Generics from several encodings and
        adapters. It is not possible in Guice to bind arbitrary Generics
        without additional concepts and a lot of implementation work. Thus,
        reduce the use of generics where possible.
      * Modify the decoders to contain Provides methods that are resolved by
        the Guice injector to resolve the execution order.
      * Reduce a lot of boilerplate code from the Decoders that was required
        by the old JGraphT-based Decoding.
      * Only support FailSafeTaskMappingEntries for now: The genericification
        shall be discussed anyways.
      * Register the guicified decoders in the Service registration class
        ExplorationAlg.
      * Don't allow double registration of Guice Modules in the
        ExplorationModule service.
      * Add a ThreadLocalScope that may be required for parallelization to
        ensure using the correct genotypes in the decoders.
      
      Signed-off-by: default avatarAlexander Diewald <diewald@fortiss.org>
      0498c90c
  11. Jul 04, 2018
    • Alexander Diewald's avatar
      DI: Prototype for ExplorationModule service based decoding. · 7b045f36
      Alexander Diewald authored
      
      * YELLOW: ExplorationExceptions.
      * Add ExplorationServiceRuntimeExceptions for cases where no exceptions
        may be thrown (e.g., startup methods).
      * Modify the ExplorationModule service such that instances of them must
        be registered instead of their types (no-arg constructors).
      * Add the ExplorationModule service to the plugin startup class.
      * Register the FailSilentTaskMappingDecoder.
      * Adjust the FailSilent- and FaultTolerantTaskMappingDecoder such that
        they use the new Guice DI mechanism.
      * Remove the creation methods of the above decoders from the DSE
        factories.
      
      Signed-off-by: default avatarAlexander Diewald <diewald@fortiss.org>
      7b045f36
  12. Jul 03, 2018
  13. Jul 02, 2018
  14. Jun 27, 2018
    • Alexander Diewald's avatar
      Guice: Proof of concept impl for decoder dependencies. · 81a3cabc
      Alexander Diewald authored
      
      * Testwise implementation of a decoding mechanism that is intended to
        replace the current dependency declaration and resolution mechanism
        with the Guice framework. This step should allow to reduce a lot of
        boilerplate code and ease maintenance.
      * The mechanism is is based on the "Providers" and "@Provide"
        annotation in combination with "@Inject" fields that declare the
        input dependencies.
      * TODOs:
      ** Switch all decoders to the new mechanism.
      ** Reduce the mountain of abstraction code that is not really required
         to configure the DSE.
      ** Implement a service mechanism that binds the guice modules belonging
         to an exploration feature.
      
      Signed-off-by: default avatarAlexander Diewald <diewald@fortiss.org>
      81a3cabc
  15. Jun 26, 2018
    • Alexander Diewald's avatar
      DSE-DI: Cleanup for DI-based decoders (DI --> Guice). · 540c157b
      Alexander Diewald authored
      
      * Create a GuiceDecoder class that serves as a container at which
        Guice-based decoders can be registered. It calls the Decoder that
        provides the demanded output encoding (Provides annotation). The
        Guice injector will be responsible to resolve the dependencies between
        the decoders.
      * Simplify the Phenotype classes such that there exists only a single
        phenotype that can host sub-phenotypes.
      * Also remove the generic from the phenotype that declares it's primary
        input genotype: There is almost no gain in terms of safety/robustness
        versus a ton of code complications.
      
      Signed-off-by: default avatarAlexander Diewald <diewald@fortiss.org>
      540c157b
  16. Jun 08, 2018
  17. Apr 27, 2018
  18. Apr 17, 2018
  19. Mar 28, 2018
    • Alexander Diewald's avatar
      Exploration(.*): Fix containment relations. · a865d755
      Alexander Diewald authored
      When using a non-z3 backend (here: the unofficial MOEA backend) that makes a more extensive use of the ExplorationSolution, invalid models can be produced. The reason for this behavior are faulty containment relations since the produced model fragments of the DSE were not contained in any other EObject. Here, it shall be noted that the SuperSets themselves are not intended as containers as of now since they are also used to pass around references to the relevant elements of a DSE.
      
      Furthermore, one warning was produced due to an EAttribute not being set (noticeable on the console).
      
      Technical details:
      
      * getCastedType(...): Used to avoid ugly casting in client code. The DSE language is based on generic IModelElements, whereas the Sets/SuperSets are strict w.r.t. to the types to provide guarantess for the DSE I/O.
      * The ExplorationSpecification now contains the the map of input parameters passed to the DSE (Tracing), but not its elements (!).
      * ExplorationSolution: 
      * * Contains the returned SuperSetMap.
      * * Added a "pool" for SuperSets: They are accessible via the SuperSetMap.
      * * Added a element "pool" for the generated elements referenced by the returned SuperSets.
      * DSMLModelElementFactory: Creating Sets now requires a reference to the SuperSet (reduced code redundancy; can be used for robustness checking later).
      * Adapt to the meta-model changes when using SuperSets/Sets (esp in the smt plugin).
      refs 3353
      a865d755
    • Alexander Diewald's avatar
      9bec3c26
    • Alexander Diewald's avatar
      Exploration.alg: Exponential penalty funcion for NoEmptyPartitionConstraint. · 5f9e344c
      Alexander Diewald authored
      * Using exponential functions for the penalty calculation of constraints is common practice and favored over pure potential functions.
      refs 3257
      5f9e344c
  20. Mar 22, 2018
    • Alexander Diewald's avatar
      Exploration.alg: Add Channels Export for Partitions. · be49c4b9
      Alexander Diewald authored
      * Adds a sub-method to the Partition Transformation Strategy that adds Ports and Channels to a PartitionAchitecture.
      * The required Ports and Channels are derived from the Signals exchanged between Tasks.
      * Ports and Channels are only added for InterPartitionCommunication (logically).
      * The Sampling and Queuing characteristics of PartitionPorts is derived from their corresponding TaskPorts.
      refs 3257
      be49c4b9
Loading