using System; using System.Collections.Generic; using System.Linq; using HeuristicLab.Common; using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding; using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; namespace HeuristicLab.EvolutionaryTracking { [StorableClass] public class SymbolicExpressionTreeGenealogyGraphNode : Vertex { public ISymbolicExpressionTree SymbolicExpressionTree { get { return (ISymbolicExpressionTree)Content; } set { Content = value; } } [Storable] private double quality; public double Quality { get { return quality; } set { quality = value; } } [Storable] private bool isElite; public bool IsElite { get { return isElite; } set { isElite = value; } } [Storable] private double rank; public double Rank { get { return rank; } set { rank = value; } } [StorableHook(HookType.AfterDeserialization)] private void AfterDeserialization() { if (Id == null) throw new Exception(); } [StorableConstructor] public SymbolicExpressionTreeGenealogyGraphNode(bool deserializing) : base(deserializing) { } public SymbolicExpressionTreeGenealogyGraphNode() { } private SymbolicExpressionTreeGenealogyGraphNode(SymbolicExpressionTreeGenealogyGraphNode original, Cloner cloner) : base(original, cloner) { Quality = original.Quality; IsElite = original.IsElite; Rank = original.Rank; } public override IDeepCloneable Clone(Cloner cloner) { return new SymbolicExpressionTreeGenealogyGraphNode(this, cloner); } public new IEnumerable Ancestors() { return base.Ancestors().Cast(); } public new IEnumerable Descendants() { return base.Descendants().Cast(); } public IEnumerable RootLineage() { var lineage = new List { this }; int i = 0; while (i != lineage.Count) { if (lineage[i].InEdges != null) { lineage.Add((SymbolicExpressionTreeGenealogyGraphNode)lineage[i].InEdges[0].Source); } ++i; } return lineage; } public new List InEdges { get { return base.InEdges == null ? null : base.InEdges.Cast().ToList(); } } public new List OutEdges { get { return base.OutEdges == null ? null : base.InEdges.Cast().ToList(); } } } }