Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
07/12/16 18:20:50 (8 years ago)
Author:
mkommend
Message:

#1087: Refactored and improved analyzers for multi-objective test functions.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Analyzers/ScatterPlotAnalyzer.cs

    r14030 r14044  
    1919 */
    2020#endregion
     21
    2122using System.Linq;
    2223using HeuristicLab.Common;
     
    2425using HeuristicLab.Encodings.RealVectorEncoding;
    2526using HeuristicLab.Optimization;
     27using HeuristicLab.Parameters;
    2628using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    2729
     
    3133  public class ScatterPlotAnalyzer : MOTFAnalyzer {
    3234
    33     [StorableHook(HookType.AfterDeserialization)]
    34     private void AfterDeserialization() {
     35    public IScopeTreeLookupParameter<RealVector> IndividualsParameter {
     36      get { return (IScopeTreeLookupParameter<RealVector>)Parameters["Individuals"]; }
    3537    }
     38
    3639    [StorableConstructor]
    3740    protected ScatterPlotAnalyzer(bool deserializing) : base(deserializing) { }
    38     public ScatterPlotAnalyzer(ScatterPlotAnalyzer original, Cloner cloner) : base(original, cloner) {
    39     }
     41    protected ScatterPlotAnalyzer(ScatterPlotAnalyzer original, Cloner cloner) : base(original, cloner) { }
    4042    public override IDeepCloneable Clone(Cloner cloner) {
    4143      return new ScatterPlotAnalyzer(this, cloner);
    4244    }
    4345
    44     public ScatterPlotAnalyzer() { }
     46    public ScatterPlotAnalyzer() {
     47      Parameters.Add(new ScopeTreeLookupParameter<RealVector>("Individuals", "The individual solutions to the problem"));
     48    }
    4549
    46     public override void Analyze(Individual[] individuals, double[][] qualities, ResultCollection results) {
    47       if (qualities == null || qualities.Length < 1) return;
     50    public override IOperation Apply() {
     51      var results = ResultsParameter.ActualValue;
     52      var qualities = QualitiesParameter.ActualValue;
     53      var testFunction = TestFunctionParameter.ActualValue;
    4854      int objectives = qualities[0].Length;
    49       double[][] opf = new double[0][];
    50       var optmialFront = TestFunctionParameter.ActualValue.OptimalParetoFront(objectives);
    51 
    52       if (optmialFront != null) opf = optmialFront.Select(s => s.ToArray()).ToArray();
    53       var qualityClones = qualities.Select(s => s.ToArray()).ToArray();
    54       var solutionClones = individuals.Select(s => s.RealVector().ToArray()).ToArray();
     55      var individuals = IndividualsParameter.ActualValue;
    5556
    5657      if (!results.ContainsKey("Scatterplot")) {
     
    5859      }
    5960
    60       results["Scatterplot"].Value = new MOSolution(qualityClones, solutionClones, opf, objectives);
     61      double[][] optimalFront = new double[0][];
     62      var front = testFunction.OptimalParetoFront(objectives);
     63      if (front != null) optimalFront = front.ToArray();
     64
     65      var qualityClones = qualities.Select(s => s.ToArray()).ToArray();
     66      var solutionClones = individuals.Select(s => s.ToArray()).ToArray();
     67
     68      results["Scatterplot"].Value = new MOSolution(qualityClones, solutionClones, optimalFront, objectives);
     69
     70      return base.Apply();
    6171    }
    6272  }
Note: See TracChangeset for help on using the changeset viewer.