Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
02/21/13 16:02:47 (11 years ago)
Author:
bburlacu
Message:

#1772: Added base class for the fragment analyzers. Improved analyzers, added SymbolicExpressionTreeRelativeFragmentDepthAnalyzer. Added LineageExplorer.

Location:
branches/HeuristicLab.EvolutionaryTracking/HeuristicLab.EvolutionaryTracking/3.4/Analyzers/Fragments
Files:
1 added
1 moved

Legend:

Unmodified
Added
Removed
  • branches/HeuristicLab.EvolutionaryTracking/HeuristicLab.EvolutionaryTracking/3.4/Analyzers/Fragments/SymbolicExpressionTreeFragmentLengthsAnalyzer.cs

    r9082 r9238  
    6363      UpdateCounterParameter.Hidden = true;
    6464      UpdateIntervalParameter.Hidden = true;
    65 
    66 
    6765    }
    6866    #region After deserialization code
    69 
    7067    [StorableHook(HookType.AfterDeserialization)]
    7168    private void AfterDeserialization() {
     
    9794          InitializeRows();
    9895
    99           var parents = SecondaryTraceMap.Values.SelectMany(list => list.Cast<ISymbolicExpressionTree>()).ToList(); // parents of individuals at generation N-1
    100           var offspring = SecondaryTraceMap.Keys.Cast<ISymbolicExpressionTree>().ToList(); // individuals at generation N-1
    101           var fragments = SecondaryFragmentMap.Values.Cast<IFragment>().ToList();
     96          var fragmentLengths = (from m in SecondaryFragmentMap
     97                                 let fragment = (IFragment)m.Value
     98                                 where fragment.Root != null
     99                                 select fragment.Length
     100                               ).ToList();
    102101
     102          // fragments of selected offspring
     103          var selected = new HashSet<ISymbolicExpressionTree>(GlobalTraceMap.Values.SelectMany(list => list.Cast<ISymbolicExpressionTree>()));
     104          var goodFragmentlengths = (from m in SecondaryFragmentMap
     105                                     let tree = (ISymbolicExpressionTree)m.Key
     106                                     let fragment = (IFragment)m.Value
     107                                     where fragment.Root != null
     108                                     where selected.Contains(tree)
     109                                     select fragment.Length
     110                                    ).ToList();
    103111
    104           // a hash of the offspring trees that got selected for reproduction at generation N
    105           var selected = new HashSet<ISymbolicExpressionTree>(GlobalTraceMap.Values.SelectMany(list => list.Cast<ISymbolicExpressionTree>()));
    106 
    107           var selectedOffspringFragments = SecondaryFragmentMap.Where(m => selected.Contains((ISymbolicExpressionTree)m.Key)).Select(m => m.Key).ToList();
    108 
    109           var selectedOffspring = offspring.Where(selected.Contains).ToList();
    110           var selectedOffspringParents = selectedOffspring.SelectMany(x => SecondaryTraceMap[x].Cast<ISymbolicExpressionTree>()).ToList();
    111 
    112           var rows = FragmentLengths.Rows;
    113 
    114           double avgParentsLength = parents.Count > 0 ? parents.Average(p => p.Length) : 0;
    115           double avgGoodParentsLength = selectedOffspringParents.Count > 0 ? selectedOffspringParents.Average(p => p.Length) : 0;
    116           rows["Parent lengths (all)"].Values.Add(avgParentsLength);
    117           rows["Parent lengths (good)"].Values.Add(avgGoodParentsLength);
    118           double avgOffspringLength = offspring.Count > 0 ? offspring.Average(o => o.Length) : 0;
    119           double avgGoodOffspringLength = selectedOffspring.Count > 0 ? selectedOffspring.Average(o => o.Length) : 0;
    120           rows["Offspring lengths (good)"].Values.Add(avgOffspringLength);
    121           rows["Offspring lengths (all)"].Values.Add(avgGoodOffspringLength);
    122           double avgFragmentLength = fragments.Count > 0 ? fragments.Average(f => f.Length) : 0;
    123           double avgGoodFragmentLength = selectedOffspringFragments.Count > 0 ? fragments.Average(f => f.Length) : 0;
    124           rows["Fragment lengths (good)"].Values.Add(avgGoodFragmentLength);
    125           rows["Fragment lengths (all)"].Values.Add(avgFragmentLength);
     112          FragmentLengths.Rows["Average fragment length (all)"].Values.Add(fragmentLengths.Count > 0 ? fragmentLengths.Average() : 0.0);
     113          FragmentLengths.Rows["Average fragment length (good)"].Values.Add(goodFragmentlengths.Count > 0 ? goodFragmentlengths.Average() : 0.0);
    126114        }
    127115      }
    128 
    129116      return base.Apply();
    130117    }
     
    132119    protected override void InitializeParameters() {
    133120      var results = ResultsParameter.ActualValue;
    134       if (!results.ContainsKey("Fragment Lengths")) {
    135         FragmentLengths = FragmentLengths ?? new DataTable("Fragment Lengths") { VisualProperties = { YAxisTitle = "Fragment length" } };
    136         results.Add(new Result("Fragment Lengths", FragmentLengths));
     121      if (!results.ContainsKey("Fragment lengths")) {
     122        FragmentLengths = FragmentLengths ?? new DataTable("Fragment lengths") { VisualProperties = { YAxisTitle = "Number of nodes" } };
     123        results.Add(new Result("Fragment lengths", FragmentLengths));
    137124      }
    138125      base.InitializeParameters();
     
    142129      string[] rowNames =
    143130        {
    144           "Parent lengths (good)", "Parent lengths (all)",
    145           "Offspring lengths (good)", "Offspring lengths (all)",
    146           "Fragment lengths (good)", "Fragment lengths (all)"
     131          "Average fragment length (good)", "Average fragment length (all)"
    147132        };
    148133      foreach (var rowName in rowNames.Where(rowName => !FragmentLengths.Rows.ContainsKey(rowName))) {
Note: See TracChangeset for help on using the changeset viewer.