Skip to content
Snippets Groups Projects
  1. Oct 02, 2018
  2. Sep 27, 2018
  3. Sep 26, 2018
  4. Sep 24, 2018
  5. Sep 17, 2018
  6. Sep 15, 2018
  7. 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
      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
  8. 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
  9. 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
  10. Aug 22, 2018
  11. Aug 12, 2018
    • 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
  12. 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
  13. 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
  14. 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
  15. Jul 30, 2018
  16. 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
  17. 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
  18. 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
  19. Jul 03, 2018
    • Alexander Diewald's avatar
    • Alexander Diewald's avatar
      DI: Add an ExplorationModule service to define a DSE process. · aaaaf0ab
      Alexander Diewald authored
      
      From the class doc: 
      * Service for adding Exploration Modules to the DSE. The define the
        concrete problems that shall be solved by the DSE process. Modules
        registered with this service are known to the DSE and can be selected
        by users to define a DSE process. The Modules registered here are not
        defining a concrete DSE process, just the concrete problems.
      * Exploration modules can be categorized into three classes: Variable
        definitions, Problem statements and transformations, and Evaluators
        (solution metrics). The variable definitions consist of a Genotypes
        (variables), Operators (modify variables), and Creators (variable
        initialization). Problem statements transform Genotypes into
        evaluable solutions implemented by Decoders that produce Phenotypes.
        Evaluators rate Phenotypes such that the quality of a solution can be
        quantified.
      * The complete DSE process is based on DI:Creators, Operators, Decoders,
        and Evaluators have to be implemented as Guice AbstractModules.
        Therefore, the package org.fortiss.af3.exploration.alg.dse.module
        contains base classes simplifying the definition of exploration
        modules.
      
      * Also, provide a basic 
      
      
      Signed-off-by: default avatarAlexander Diewald <diewald@fortiss.org>
      aaaaf0ab
    • Alexander Diewald's avatar
      Services: Remove the generic from the exploration service. · 3e40e522
      Alexander Diewald authored
      
      * The generic parameter was intended to specify the extension types
        (modules) of an exploration services.
      * This information is used nowhere, so remove it.
      
      Signed-off-by: default avatarAlexander Diewald <diewald@fortiss.org>
      3e40e522
Loading