using System; using System.Threading.Tasks; namespace AForge.Genetic { public abstract class ChromosomeBase : IChromosome, IComparable { public Guid ID; public double? fitness=null; public double Fitness { get { //while (fitness == null) ; if (fitness is double f) { if(double.IsNaN(f)) return 999999; else return f; } //while (fitness == null) ; //return fitness??0; else return 999999; } } public int CalcID; public double[] AttemptArray = null; public abstract void Generate(); public abstract IChromosome CreateNew(); public abstract IChromosome Clone(); public abstract void Mutate(); public abstract void Crossover(IChromosome pair); public int CompareTo(object o) { double num = ((ChromosomeBase)o).Fitness; if (fitness != num) { if (!(fitness < num)) { return -1; } return 1; } return 0; } public virtual bool isValid() { throw new NotImplementedException(); return true; } public virtual bool _valid { get; set; } = false; public virtual void Evaluate(IFitnessFunction function) { throw new NotImplementedException(); fitness = function.Evaluate(this); } } }