- Timestamp:
- 08/31/14 18:28:25 (10 years ago)
- 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 272 272 var prevVertex = (IGenealogyGraphNode<T>)GenealogyGraph.GetByContent(elite); 273 273 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()) { 276 275 Rank = generation, 277 276 Quality = prevVertex.Quality, 278 277 IsElite = false 279 278 }; 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);289 279 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); 300 281 301 282 // inject the graph node unique id to the scope 283 ExecutionContext.Scope.SubScopes[index].Variables[BeforeManipulatorOperator.ChildParameter.ActualName].Value = v.Data; 302 284 ExecutionContext.Scope.SubScopes[index].Variables["Id"].Value = new StringValue(v.Id); 303 285 } -
branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/GenealogyGraph/GenealogyGraph.cs
r11257 r11318 38 38 39 39 [Storable] 40 private Dictionary<double, List<IGenealogyGraphNode>> ranks; // use a linked list for fast insertion/removal 40 private Dictionary<double, List<IGenealogyGraphNode>> ranks; 41 41 42 public Dictionary<double, List<IGenealogyGraphNode>> Ranks { 42 43 get { return ranks; } … … 56 57 57 58 [StorableConstructor] 58 protected GenealogyGraph(bool deserializing) : base(deserializing) { } 59 protected GenealogyGraph(bool deserializing) 60 : base(deserializing) { 61 } 62 59 63 public GenealogyGraph() { 60 64 Ranks = new Dictionary<double, List<IGenealogyGraphNode>>(); … … 85 89 86 90 if (idMap.ContainsKey(node.Id)) 87 throw new InvalidOperationException("Duplicate content isnot allowed in the genealogy graph.");91 throw new InvalidOperationException("Duplicate ids are not allowed in the genealogy graph."); 88 92 idMap[node.Id] = node; 89 93 } … … 118 122 119 123 public event EventHandler GraphUpdated; 124 120 125 private void OnGraphUpdated(object sender, EventArgs args) { 121 126 var updated = GraphUpdated;
Note: See TracChangeset
for help on using the changeset viewer.