- Timestamp:
- 02/02/15 13:58:40 (9 years ago)
- Location:
- branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/GenealogyGraph/GenealogyGraphNode.cs
r11852 r11858 60 60 61 61 public IEnumerable<IGenealogyGraphNode> Parents { 62 get { return InArcs.Select(a => a.Source); }62 get { return base.InArcs.Select(x => (IGenealogyGraphNode)x.Source); } 63 63 } 64 64 65 65 public IEnumerable<IGenealogyGraphNode> Children { 66 get { return OutArcs.Select(a => a.Target); }66 get { return base.OutArcs.Select(x => (IGenealogyGraphNode)x.Target); } 67 67 } 68 68 -
branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/Operators/BeforeCrossoverOperator.cs
r11390 r11858 30 30 namespace HeuristicLab.EvolutionTracking { 31 31 [StorableClass] 32 [Item(" AfterCrossoverOperator", "A generic operator that can record genealogical relationships between crossover parents and children.")]32 [Item("BeforeCrossoverOperator", "A generic operator that can record genealogical relationships between crossover parents and children.")] 33 33 public class BeforeCrossoverOperator<T> : EvolutionTrackingOperator<T>, ICrossoverOperator<T> where T : class,IItem { 34 34 private const string ParentsParameterName = "Parents"; -
branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/Operators/BeforeManipulatorOperator.cs
r11387 r11858 53 53 public override IOperation Apply() { 54 54 // since mutation always takes place after crossover, the vertex for the current child is already in the tree 55 var childVertex= GenealogyGraph.GetByContent(ChildParameter.ActualValue);56 var clonedVertex = (IGenealogyGraphNode<T>)childVertex.Clone();57 clonedVertex.Rank = childVertex.Rank - 0.5;58 GenealogyGraph.AddVertex( clonedVertex);55 var vChild = GenealogyGraph.GetByContent(ChildParameter.ActualValue); 56 var vClone = (IGenealogyGraphNode<T>)vChild.Clone(); 57 vClone.Rank = vChild.Rank - 0.5; 58 GenealogyGraph.AddVertex(vClone); 59 59 60 var arcs = childVertex.InArcs.ToList();60 var arcs = vChild.InArcs.ToList(); 61 61 foreach (var arc in arcs) { 62 62 var p = arc.Source; 63 63 GenealogyGraph.RemoveArc(arc); 64 GenealogyGraph.AddArc(new GenealogyGraphArc(p, clonedVertex));64 GenealogyGraph.AddArc(new GenealogyGraphArc(p, vClone)); 65 65 } 66 66 // by convention, the arc connecting child with parent (non-root parent in case of crossover) 67 67 // holds fragment data when applicable. the following line of code preserves this data 68 68 // the graph arcs are now connecting parent (rank n) --> clone (rank n+0.5) --> child (rank n+1) 69 clonedVertex.InArcs.Last().Data = arcs.Last().Data;70 GenealogyGraph.AddArc(new GenealogyGraphArc( clonedVertex, childVertex));69 vClone.InArcs.Last().Data = arcs.Last().Data; 70 GenealogyGraph.AddArc(new GenealogyGraphArc(vClone, vChild)); 71 71 72 72 return base.Apply();
Note: See TracChangeset
for help on using the changeset viewer.