Skip to content
Snippets Groups Projects
  1. Sep 15, 2018
  2. Sep 13, 2018
    • Alexander Diewald's avatar
      Parameters: Improved defaults. · e9c52c60
      Alexander Diewald authored
      
      * The previous parameter set caused the optimizer to spend half of the
        iterations for random generation, not the search itself. Now, only the
        first 5 iterations are spent on the creation of the initial pool.
      * Adjust the default of the parallel execution to "true".
      
      Signed-off-by: default avatarAlexander Diewald <diewald@fortiss.org>
      e9c52c60
    • Alexander Diewald's avatar
      Merge branch 'rover_partition_generation' into 'master' · e8ce9cc0
      Alexander Diewald authored
      Rover partition generation
      
      See merge request !3
      e8ce9cc0
    • Alexander Diewald's avatar
      Operators: Compare Operators by their type. · 4f59c39f
      Alexander Diewald authored
      
      * An injection exception occurred when launching the MOEA DSE a second
        time from the same AF3 instance. Here, operator modules that maintain
        an internal map keep the entries of the previous run (which are
        replaced). This triggered an equals check of operator keys when the
        operators for the next execution should be placed in the internal
        operator selector maps. Within the equals check, one operator (from
        the prev. execution) had an instance of the operator such that the
        comparision would be based on the operator instances. Thus, an
        operator would be instantiated by the given injector during the
        binding phase causing the Exception.
      * In order to obtain a correct operator representation in the internal
        maps an to resolve the above problem, base the Operator Key hash and
        equals method on the OperatorTypes only. We only allow one operator
        type per genotype anyways such that the new equals operation correctly
        implements the concept and "old" operator instances are cleaned out.
      
      Signed-off-by: default avatarAlexander Diewald <diewald@fortiss.org>
      4f59c39f
    • Alexander Diewald's avatar
      3f931a66
    • Alexander Diewald's avatar
      09a7e583
    • Alexander Diewald's avatar
      Multithreading: Thread-safe for large models. · 06475537
      Alexander Diewald authored
      
      * Use scope enter and exit calls to clean cached objects in thread-
        specific caches such as the PhenotypeCache that is used to collect the
        results of the decoders in  a single top-most decode() call.
      * Add the @ThreadedMethod annotation to trigger the Treaded scope entry
        and exit calls for cache handling. It denotes that the code within
        such an annotated method places objects the cache that need to be
        removed after exiting the method. An method interceptor is used for
        this purpose.
      * Pass Injectors to demanding classes such as the GuiceDecoder by the
        Provides mechanisms.
      * Extend the usage of the injector to generate objects (not DSE-process
        specific objects).
      
      Signed-off-by: default avatarAlexander Diewald <diewald@fortiss.org>
      06475537
  3. Sep 09, 2018
    • Alexander Diewald's avatar
      DI: Add missing bits for parallel DSE processing. · f51fb646
      Alexander Diewald authored
      
      * Modify the Dependency Visitor such that it can also evaluate the
        providers of artifacts instead of the artifacts alone.
      * Install only those Decoders and Creators in the DSE Process that are
        actually needed to produce the result types.
      * Correct the ThreadScope implementation.
      * Add a thread-local cache for the parallelized decode phase that
        collects the created Phenotypes.
      * Modify the cache mechanism for the create phase similar to the
        thread-local cache of the decode phase.
      * Change the register mechanism of CreatorModules and OperatorModules
        such that they can be associated with their corresponding Genotype
        more easily.
      * CreatorModules used in the DSE process are now created by Guice to
        allow method interception (evil bug fixed).
      
      Signed-off-by: default avatarAlexander Diewald <diewald@fortiss.org>
      f51fb646
  4. 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
  5. Aug 22, 2018
  6. 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
  7. 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
  8. 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
  9. 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
  10. Jul 31, 2018
  11. Jul 30, 2018
  12. 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
  13. 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
  14. 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
  15. Jul 03, 2018
  16. Jul 02, 2018
  17. 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
  18. 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
  19. Jun 08, 2018
  20. Apr 27, 2018
Loading