Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
10/11/12 17:17:36 (12 years ago)
Author:
ascheibe
Message:

#1886 added a comparison factor parameter to the crossover analyzer so that it can be defined what a successful crossover is

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior.Analyzers/3.3/CrossoverPerformanceAnalyzer.cs

    r8739 r8797  
    2727using HeuristicLab.Data;
    2828using HeuristicLab.Encodings.PermutationEncoding;
    29 using HeuristicLab.Operators;
    3029using HeuristicLab.Optimization;
    3130using HeuristicLab.Parameters;
     
    3534  [Item("CrossoverPerformanceAnalyzer", "An operator that analyzes the performance of crossovers.")]
    3635  [StorableClass]
    37   public class CrossoverPerformanceAnalyzer : SingleSuccessorOperator, IAnalyzer {
     36  public class CrossoverPerformanceAnalyzer : InitializableOperator, IAnalyzer {
    3837    private const string ResultsParameterName = "Results";
    3938    private const string GenerationsParameterName = "Generations";
     39    private const string SuccessfullCrossoversRowName = "Successfull Crossovers per Generation with CompFact ";
    4040
    4141    #region IAnalyzer Members
     
    4646
    4747    #region Parameter properties
     48    public IValueLookupParameter<BoolValue> MaximizationParameter {
     49      get { return (IValueLookupParameter<BoolValue>)Parameters["Maximization"]; }
     50    }
     51    public IValueParameter<ItemCollection<DoubleValue>> ComparisonFactorParameter {
     52      get { return (IValueParameter<ItemCollection<DoubleValue>>)Parameters["ComparisonFactor"]; }
     53    }
    4854    public ILookupParameter<ResultCollection> ResultsParameter {
    4955      get { return (ILookupParameter<ResultCollection>)Parameters[ResultsParameterName]; }
     
    8591    private int cnt = 0;
    8692    [Storable]
    87     private int success = 0;
     93    private int[] success;
    8894    [Storable]
    8995    private int lastGeneration = 0;
     
    98104      : base(original, cloner) {
    99105      cnt = original.cnt;
    100       success = original.success;
     106      success = (int[])original.success.Clone();
    101107      lastGeneration = original.lastGeneration;
    102108      equalParents = original.equalParents;
     
    129135      Parameters.Add(new ValueParameter<ISingleObjectiveSolutionSimilarityCalculator>("SimilarityCalculator"));
    130136      Parameters.Add(new LookupParameter<ItemCollection<IItem>>("Operators", "The operators and items that the problem provides to the algorithms."));
     137      Parameters.Add(new ValueLookupParameter<BoolValue>("Maximization", "True if the problem is a maximization problem, false otherwise"));
     138      Parameters.Add(new ValueParameter<ItemCollection<DoubleValue>>("ComparisonFactor", "Determines if the quality should be compared to the better parent (1.0), to the worse (0.0) or to any linearly interpolated value between them."));
     139      ComparisonFactorParameter.Value.Add(new DoubleValue(0));
     140      ComparisonFactorParameter.Value.Add(new DoubleValue(0.5));
     141      ComparisonFactorParameter.Value.Add(new DoubleValue(1));
     142
    131143
    132144      plotHelper = new ScatterPlotHelper(false, true);
     
    142154    }
    143155
    144     public override IOperation Apply() {
     156    protected override void InitializeAction() {
    145157      if (SimilarityCalculatorParameter.Value == null) {
    146158        SimilarityCalculatorParameter.Value = OperatorsParameter.ActualValue.OfType<ISingleObjectiveSolutionSimilarityCalculator>().FirstOrDefault();
     159      }
     160
     161      if (success == null) {
     162        success = new int[ComparisonFactorParameter.Value.Count];
    147163      }
    148164
     
    150166      childDiversityHelper.InitializePlot(Results, "Child Diversity", "Solution Index", "Diversity");
    151167      parentDiversityHelper.InitializePlot(Results, "Parent Diversity", "Solution Index", "Diversity");
    152 
    153       performanceHelper.InitializeChart(Results, "Average Crossover Performance", "Average Crossover Performance per Generation");
    154       successHelper.InitializeChart(Results, "Successfull Crossovers", "Successfull Crossovers per Generation");
    155       equalParentsHelper.InitializeChart(Results, "Number of equal parents", "Absolut number of equal parents");
     168      performanceHelper.InitializeChart(Results, "Average Crossover Performance", new string[] { "Average Crossover Performance per Generation" });
     169      equalParentsHelper.InitializeChart(Results, "Number of equal parents", new string[] { "Absolut number of equal parents" });
     170
     171      List<string> successfullCXRowNames = new List<string>();
     172      foreach (var value in ComparisonFactorParameter.Value) {
     173        successfullCXRowNames.Add(SuccessfullCrossoversRowName + value.Value.ToString());
     174      }
     175      successHelper.InitializeChart(Results, "Successfull Crossovers", successfullCXRowNames.ToArray());
     176    }
     177
     178    public override IOperation Apply() {
     179      Initialize();
    156180
    157181      Point2D<double> qualityPoint, diversityPointChild, diversityPointParent;
    158182      var qualityParent1 = ParentsQualityParameter.ActualValue.First().Value;
    159183      var qualityParent2 = ParentsQualityParameter.ActualValue.Last().Value;
     184      var qualityChild = QualityParameter.ActualValue.Value;
    160185      var child = ChildParameter.ActualValue;
    161186      var parent1 = ParentsParameter.ActualValue.First();
     
    163188      var parentDiversity = SimilarityCalculatorParameter.Value.CalculateSolutionSimilarity(ExecutionContext.Scope.SubScopes.First(), ExecutionContext.Scope.SubScopes.Last());
    164189      string curGenStr = GenerationsParameter.ActualValue.Value.ToString();
    165 
    166190
    167191      diversityPointParent = new Point2D<double>(cnt, parentDiversity);
     
    173197      }
    174198
    175       qualityPoint = new Point2D<double>(cnt++, worseQuality - QualityParameter.ActualValue.Value);
    176       if ((worseQuality - QualityParameter.ActualValue.Value) > 0) {
    177         success++;
    178       }
     199      qualityPoint = new Point2D<double>(cnt++, worseQuality - qualityChild);
    179200      qualityPoints.Add(qualityPoint.Y);
     201
     202      //track successfull cx
     203      var compFactsArray = ComparisonFactorParameter.Value.ToArray();
     204      for (int i = 0; i < compFactsArray.Length; i++) {
     205        if (WeightedParentsQualityComparer.Compare(qualityChild, qualityParent1, qualityParent2, compFactsArray[i].Value, MaximizationParameter.ActualValue.Value)) {
     206          success[i]++;
     207        }
     208      }
    180209
    181210      if (parentDiversity == 1.0) {
     
    188217
    189218          performanceHelper.AddPoint(avg);
    190           successHelper.AddPoint(success);
    191219          equalParentsHelper.AddPoint(equalParents);
     220
     221          for (int i = 0; i < compFactsArray.Length; i++) {
     222            successHelper.AddPoint(SuccessfullCrossoversRowName + compFactsArray[i].Value.ToString(), success[i]);
     223          }
    192224
    193225          Reset();
     
    206238    private void Reset() {
    207239      cnt = 0;
    208       success = 0;
     240      success = new int[ComparisonFactorParameter.Value.Count];
    209241      lastGeneration = GenerationsParameter.ActualValue.Value;
    210242      qualityPoints.Clear();
Note: See TracChangeset for help on using the changeset viewer.