/// <summary>
 /// Генерировать новый ген для хромосомы.
 /// </summary>
 /// <param name="geneIndex">Индекс гена.</param>
 /// <returns>Новый объект гена.</returns>
 public override Gene GenerateGene(int geneIndex)
 {
     try
     {
         return(new Gene(TopologySection.GenerateGeneValue(this, geneIndex)));
     }
     catch (Exception ex)
     {
         Console.WriteLine("GenerateGene failed! {0}", ex.Message);
         return(new Gene());
     }
 }
        /// <summary>
        /// Создать новую топологию - декодировать фенотип хромосомы на базе её текущего генотипа.
        /// </summary>
        /// <param name="chromosome">Декодируемая хромосома.</param>
        public Topology(TopologyChromosome chromosome)
        {
            try
            {
                Sections = new TopologySection[chromosome.CurrentProject.MCZs.Length];
                Pathes   = new Dictionary <DataAcquisitionSectionPart, IEnumerable <TopologyPath> >();

                DecodeSections(chromosome);
                GroupDADs(chromosome);
                DecodePathes(chromosome);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Topology failed! {0}", ex.Message);
            }
        }
        /// <summary>
        /// Поочерёдно декодировать каждую секцию хромосомы.
        /// </summary>
        /// <param name="chromosome">Декодируемая хромосома.</param>
        protected void DecodeSections(TopologyChromosome chromosome)
        {
            try
            {
                for (var sectionIndex = 0; sectionIndex < chromosome.Length / TopologyChromosome.GENES_IN_SECTION; sectionIndex++)
                {
                    if (Sections[sectionIndex] == null)
                    {
                        Sections[sectionIndex] = new TopologySection();
                    }

                    Sections[sectionIndex].Decode(chromosome, sectionIndex);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("DecodeSections failed! {0}", ex.Message);
            }
        }