Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
08/31/14 18:28:25 (10 years ago)
Author:
bburlacu
Message:

#1772: Fixed bug and improved handling of elite individuals in the genealogy analyzer. Fixed minor bug in the tracing code. Other minor cosmetic improvements to the GenealogyGraph and FragmentGraphView.

Location:
branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4
Files:
2 edited

Legend:

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

    r11288 r11318  
    272272          var prevVertex = (IGenealogyGraphNode<T>)GenealogyGraph.GetByContent(elite);
    273273          prevVertex.IsElite = true; // mark elites in the graph retroactively
    274           var w = (IGenealogyGraphNode<T>)prevVertex.Clone();
    275           var v = new GenealogyGraphNode<T>(prevVertex.Data) {
     274          var v = new GenealogyGraphNode<T>((IDeepCloneable)prevVertex.Data.Clone()) {
    276275            Rank = generation,
    277276            Quality = prevVertex.Quality,
    278277            IsElite = false
    279278          };
    280 
    281           object data = null;
    282           if (prevVertex.InArcs.Any())
    283             data = prevVertex.InArcs.Last().Data;
    284           var children = prevVertex.Children.ToList();
    285           var parents = prevVertex.Parents.ToList();
    286 
    287           GenealogyGraph.RemoveVertex(prevVertex);
    288           GenealogyGraph.AddVertex(w);
    289279          GenealogyGraph.AddVertex(v);
    290           GenealogyGraph.AddArc(w, v); // connect current elite with previous elite
    291 
    292           // recreate connections after prevVertex was replaced with w
    293           foreach (var c in children) GenealogyGraph.AddArc(w, c);
    294           foreach (var p in parents) GenealogyGraph.AddArc(p, w);
    295 
    296           v.InArcs.Last().Data = data;
    297 
    298           if (w.InArcs.Any())
    299             w.InArcs.Last().Data = data;
     280          GenealogyGraph.AddArc(prevVertex, v);
    300281
    301282          // inject the graph node unique id to the scope
     283          ExecutionContext.Scope.SubScopes[index].Variables[BeforeManipulatorOperator.ChildParameter.ActualName].Value = v.Data;
    302284          ExecutionContext.Scope.SubScopes[index].Variables["Id"].Value = new StringValue(v.Id);
    303285        }
  • branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/GenealogyGraph/GenealogyGraph.cs

    r11257 r11318  
    3838
    3939    [Storable]
    40     private Dictionary<double, List<IGenealogyGraphNode>> ranks; // use a linked list for fast insertion/removal
     40    private Dictionary<double, List<IGenealogyGraphNode>> ranks;
     41
    4142    public Dictionary<double, List<IGenealogyGraphNode>> Ranks {
    4243      get { return ranks; }
     
    5657
    5758    [StorableConstructor]
    58     protected GenealogyGraph(bool deserializing) : base(deserializing) { }
     59    protected GenealogyGraph(bool deserializing)
     60      : base(deserializing) {
     61    }
     62
    5963    public GenealogyGraph() {
    6064      Ranks = new Dictionary<double, List<IGenealogyGraphNode>>();
     
    8589
    8690      if (idMap.ContainsKey(node.Id))
    87         throw new InvalidOperationException("Duplicate content is not allowed in the genealogy graph.");
     91        throw new InvalidOperationException("Duplicate ids are not allowed in the genealogy graph.");
    8892      idMap[node.Id] = node;
    8993    }
     
    118122
    119123    public event EventHandler GraphUpdated;
     124
    120125    private void OnGraphUpdated(object sender, EventArgs args) {
    121126      var updated = GraphUpdated;
Note: See TracChangeset for help on using the changeset viewer.