Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
08/23/15 13:21:12 (9 years ago)
Author:
bburlacu
Message:

#1772: Made GenealogyAnalyzer class abstract and added abstract method EvaluateIntermediateChildren in order to assign qualities to intermediate vertices in the genealogy graph. Implemented SymbolicDataAnalysisGeneticOperatorImprovementAnalyzer which shows parent-child quality statistics for crossover and mutation.

Location:
branches/HeuristicLab.EvolutionTracking
Files:
1 added
5 edited

Legend:

Unmodified
Added
Removed
  • branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/Analyzers/GenealogyAnalyzer.cs

    r12891 r12892  
    2222using System.Collections.Generic;
    2323using System.Linq;
    24 using HeuristicLab.Analysis;
    2524using HeuristicLab.Common;
    2625using HeuristicLab.Core;
     
    3433  [StorableClass]
    3534  [Item("GenealogyAnalyzer", "An analyzer which performs the necessary instrumentation to record the evolution of a genetic algorithm.")]
    36   public class GenealogyAnalyzer<T> : SingleSuccessorOperator, IAnalyzer
     35  public abstract class GenealogyAnalyzer<T> : SingleSuccessorOperator, IAnalyzer
    3736  where T : class, IItem {
    3837    #region parameter names
     
    146145    #endregion properties
    147146
    148     public GenealogyAnalyzer() {
     147    protected GenealogyAnalyzer() {
    149148      #region add parameters
    150149      // the instrumented operators
     
    166165      Parameters.Add(new ValueParameter<IManipulatorOperator<T>>(AfterManipulatorOperatorParameterName));
    167166      #endregion add parameters
    168     }
    169 
    170     public override IDeepCloneable Clone(Cloner cloner) {
    171       return new GenealogyAnalyzer<T>(this, cloner);
    172167    }
    173168
     
    246241    }
    247242
     243    protected abstract void EvaluateIntermediateChildren();
     244
    248245    public override IOperation Apply() {
    249246      IGenealogyGraph<T> genealogyGraph;
     
    273270        int index = 0;
    274271        T elite = null;
    275 
     272        // identify previous elite individual
    276273        for (int i = 0; i < population.Length; ++i) {
    277274          if (genealogyGraph.GetByContent(population[i]).Rank.Equals(generation - 1)) {
     
    281278          }
    282279        }
    283 
     280        // add current elite and connect with previous
    284281        #region add elite in the graph and connect it with the previous elite
    285282        if (elite != null) {
     
    303300        vertex.Quality = qualities[i].Value;
    304301      }
     302      // update qualities for intermediate vertices
     303      EvaluateIntermediateChildren();
     304
    305305      // remove extra graph nodes (added by the instrumented operators in the case of offspring selection)
    306306      var pop = new HashSet<T>(population);
  • branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Analyzers/SymbolicDataAnalysisGenealogyAnalyzer.cs

    r11227 r12892  
    1 using HeuristicLab.Core;
     1#region License Information
     2/* HeuristicLab
     3 * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
     4 *
     5 * This file is part of HeuristicLab.
     6 *
     7 * HeuristicLab is free software: you can redistribute it and/or modify
     8 * it under the terms of the GNU General Public License as published by
     9 * the Free Software Foundation, either version 3 of the License, or
     10 * (at your option) any later version.
     11 *
     12 * HeuristicLab is distributed in the hope that it will be useful,
     13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
     14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     15 * GNU General Public License for more details.
     16 *
     17 * You should have received a copy of the GNU General Public License
     18 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
     19 */
     20#endregion
     21
     22using System.Linq;
     23using HeuristicLab.Common;
     24using HeuristicLab.Core;
     25using HeuristicLab.Data;
    226using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
    327using HeuristicLab.EvolutionTracking;
     28using HeuristicLab.Optimization;
     29using HeuristicLab.Parameters;
    430using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    531
    632namespace HeuristicLab.Problems.DataAnalysis.Symbolic {
    7   [Item("SymbolicDataAnalysisGenealogyAnalyzer", "")]
     33  [Item("SymbolicDataAnalysisGenealogyAnalyzer", "Genealogy analyzer for symbolic data analysis problems")]
    834  [StorableClass]
    935  public class SymbolicDataAnalysisGenealogyAnalyzer : GenealogyAnalyzer<ISymbolicExpressionTree> {
    10     public SymbolicDataAnalysisGenealogyAnalyzer() { }
     36    private const string EvaluatorParameterName = "Evaluator";
     37    private const string ProblemDataParameterName = "ProblemData";
     38    private const string InterpreterParameterName = "SymbolicExpressionTreeInterpreter";
     39    private const string EstimationLimitsParameterName = "EstimationLimits";
     40    private const string ApplyLinearScalingParameterName = "ApplyLinearScaling";
     41
     42    #region parameters
     43    public ILookupParameter<ISingleObjectiveEvaluator> EvaluatorParameter {
     44      get {
     45        return (ILookupParameter<ISingleObjectiveEvaluator>)Parameters[EvaluatorParameterName];
     46      }
     47    }
     48
     49    public ILookupParameter<IDataAnalysisProblemData> ProblemDataParameter {
     50      get {
     51        return (ILookupParameter<IDataAnalysisProblemData>)Parameters[ProblemDataParameterName];
     52      }
     53    }
     54
     55    public ILookupParameter<ISymbolicDataAnalysisExpressionTreeInterpreter> InterpreterParameter {
     56      get {
     57        return (ILookupParameter<ISymbolicDataAnalysisExpressionTreeInterpreter>)Parameters[InterpreterParameterName];
     58      }
     59    }
     60
     61    public ILookupParameter<DoubleLimit> EstimationLimitsParameter {
     62      get { return (ILookupParameter<DoubleLimit>)Parameters[EstimationLimitsParameterName]; }
     63    }
     64
     65    public ILookupParameter<BoolValue> ApplyLinearScalingParameter {
     66      get { return (ILookupParameter<BoolValue>)Parameters[ApplyLinearScalingParameterName]; }
     67    }
     68    #endregion
     69
     70    public SymbolicDataAnalysisGenealogyAnalyzer() {
     71      Parameters.Add(new LookupParameter<ISingleObjectiveEvaluator>(EvaluatorParameterName));
     72      Parameters.Add(new LookupParameter<IDataAnalysisProblemData>(ProblemDataParameterName));
     73      Parameters.Add(new LookupParameter<ISymbolicDataAnalysisExpressionTreeInterpreter>(InterpreterParameterName));
     74      Parameters.Add(new LookupParameter<DoubleLimit>(EstimationLimitsParameterName));
     75      Parameters.Add(new LookupParameter<BoolValue>(ApplyLinearScalingParameterName));
     76    }
     77
     78    public SymbolicDataAnalysisGenealogyAnalyzer(SymbolicDataAnalysisGenealogyAnalyzer original, Cloner cloner)
     79      : base(original, cloner) {
     80    }
     81
     82    public override IDeepCloneable Clone(Cloner cloner) {
     83      return new SymbolicDataAnalysisGenealogyAnalyzer(this, cloner);
     84    }
    1185
    1286    [StorableConstructor]
    13     protected SymbolicDataAnalysisGenealogyAnalyzer(bool deserializing) : base(deserializing) { }
     87    protected SymbolicDataAnalysisGenealogyAnalyzer(bool deserializing) : base(deserializing) {
     88    }
     89
     90    protected override void EvaluateIntermediateChildren() {
     91      var results = ResultsParameter.ActualValue;
     92      var graph = (IGenealogyGraph<ISymbolicExpressionTree>)results["PopulationGraph"].Value;
     93      var population = PopulationParameter.ActualValue;
     94      var generation = GenerationsParameter.ActualValue.Value;
     95      var problemData = ProblemDataParameter.ActualValue;
     96
     97      var vertices = population.Select(graph.GetByContent).Where(x => x.InDegree == 1).Select(x => x.Parents.First());
     98      var intermediateVertices = vertices.Where(x => x.Rank.IsAlmost(generation - 0.5));
     99
     100      var classificationProblemData = problemData as IClassificationProblemData;
     101      var regressionProblemData = problemData as IRegressionProblemData;
     102      if (classificationProblemData != null) {
     103        var evaluator = (ISymbolicDataAnalysisSingleObjectiveEvaluator<IClassificationProblemData>)EvaluatorParameter.ActualValue;
     104        foreach (var v in intermediateVertices) {
     105          var child = v.Data;
     106          v.Quality = evaluator.Evaluate(this.ExecutionContext, child, classificationProblemData, classificationProblemData.TrainingIndices);
     107        }
     108      } else if (regressionProblemData != null) {
     109        var evaluator = (ISymbolicDataAnalysisSingleObjectiveEvaluator<IRegressionProblemData>)EvaluatorParameter.ActualValue;
     110        foreach (var v in intermediateVertices) {
     111          var child = v.Data;
     112          v.Quality = evaluator.Evaluate(this.ExecutionContext, child, regressionProblemData, problemData.TrainingIndices);
     113        }
     114      }
     115    }
    14116  }
    15117}
  • branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.csproj

    r12225 r12892  
    183183    <Compile Include="Analyzers\BuildingBlockAnalyzers\SymbolicDataAnalysisPoly10Analyzer.cs" />
    184184    <Compile Include="Analyzers\SymbolicDataAnalysisBottomUpDiversityAnalyzer.cs" />
     185    <Compile Include="Analyzers\SymbolicDataAnalysisGeneticOperatorImprovementAnalyzer.cs" />
    185186    <Compile Include="Analyzers\SymbolicDataAnalysisSingleObjectivePruningAnalyzer.cs" />
    186187    <Compile Include="Analyzers\SymbolicDataAnalysisGenealogyAnalyzer.cs" />
  • branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisSingleObjectiveProblem.cs

    r12155 r12892  
    2525using HeuristicLab.Core;
    2626using HeuristicLab.Data;
    27 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
    28 using HeuristicLab.EvolutionTracking;
    2927using HeuristicLab.Optimization;
    3028using HeuristicLab.Parameters;
     
    3432  [StorableClass]
    3533  public abstract class SymbolicDataAnalysisSingleObjectiveProblem<T, U, V> : SymbolicDataAnalysisProblem<T, U, V>, ISymbolicDataAnalysisSingleObjectiveProblem
    36     where T : class,IDataAnalysisProblemData
     34    where T : class, IDataAnalysisProblemData
    3735    where U : class, ISymbolicDataAnalysisSingleObjectiveEvaluator<T>
    3836    where V : class, ISymbolicDataAnalysisSolutionCreator {
     
    118116      }
    119117
    120       foreach (var op in Operators.OfType<GenealogyAnalyzer<ISymbolicExpressionTree>>()) {
     118      foreach (var op in Operators.OfType<SymbolicDataAnalysisGenealogyAnalyzer>()) {
    121119        op.QualityParameter.ActualName = Evaluator.QualityParameter.ActualName;
    122120        op.PopulationParameter.ActualName = Evaluator.SymbolicExpressionTreeParameter.ActualName;
  • branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.TravelingSalesman/3.3/Analyzers/TSPGenealogyAnalyzer.cs

    r11864 r12892  
    1 using HeuristicLab.Core;
     1using HeuristicLab.Common;
     2using HeuristicLab.Core;
    23using HeuristicLab.Encodings.PermutationEncoding;
    34using HeuristicLab.EvolutionTracking;
     
    1213    [StorableConstructor]
    1314    protected TSPGenealogyAnalyzer(bool deserializing) : base(deserializing) { }
     15
     16    public TSPGenealogyAnalyzer(TSPGenealogyAnalyzer original, Cloner cloner) : base(original, cloner) {
     17    }
     18
     19    public override IDeepCloneable Clone(Cloner cloner) {
     20      return new TSPGenealogyAnalyzer(this, cloner);
     21    }
     22
     23    protected override void EvaluateIntermediateChildren() {
     24      throw new System.NotImplementedException();
     25    }
    1426  }
    1527}
Note: See TracChangeset for help on using the changeset viewer.