public override BaseDoubleSpecies <TSpecies> Cross(BaseDoubleSpecies <TSpecies> Species) { if (this == Species) { //return new BaseDoubleSpecies<TSpecies> (m_Chromosomes); return((TSpecies)Activator.CreateInstance(typeof(TSpecies), new object[] { m_Chromosomes })); } TSpecies Other = (TSpecies)Species; //В данном конкретном случае лучше работает скрещивание сразу всех хромосом double[] chromosomes = new double[m_Chromosomes.Length]; for (int i = 0; i < chromosomes.Length; ++i) { chromosomes[i] = Cross(m_Chromosomes[i], Other.Cromosomes[i]); } return((TSpecies)Activator.CreateInstance(typeof(TSpecies), new object[] { chromosomes })); }
/// <summary> /// Добавить особь в список /// </summary> /// <param name="species"></param> public void Add(BaseDoubleSpecies <TSpecies> species) { m_bestSpecies.Add((BaseDoubleSpecies <TSpecies>)species.Clone()); }