Пример #1
0
 public Dna(Dna template)
 {
     genes = new List <Gen>();
     for (var i = 0; i < template.length; i++)
     {
         genes.Add(new Gen(template.genes[i]));
     }
 }
Пример #2
0
 public void UseTemplate(Dna template)
 {
     sampleDna = template;
     for (var i = 0; i < count; i++)
     {
         pool[i].AdjustByTemplate(template);
     }
 }
Пример #3
0
        public Dna Copy()
        {
            Dna result = new Dna(0);

            for (var i = 0; i < length; i++)
            {
                result.Add(genes[i].Copy());
            }
            return(result);
        }
Пример #4
0
 public bool CompatibleWith(Dna dna)
 {
     if (length == dna.length)
     {
         for (var i = 0; i < length; i++)
         {
             if (!genes[i].CompatibleWith(dna.genes[i]))
             {
                 return(false);
             }
         }
         return(true);
     }
     return(false);
 }
Пример #5
0
 public void AdjustByTemplate(Dna template)
 {
     if (genes.Count > template.genes.Count)
     {
         genes.RemoveRange(template.genes.Count, genes.Count - template.genes.Count);
         for (var i = 0; i < genes.Count; i++)
         {
             genes[i].AdjustByTemplate(template.genes[i]);
         }
     }
     else
     {
         for (var i = 0; i < genes.Count; i++)
         {
             genes[i].AdjustByTemplate(template.genes[i]);
         }
         for (var i = genes.Count; i < template.genes.Count; i++)
         {
             genes.Add(template.genes[i]);
         }
     }
 }
Пример #6
0
        public Genepool(Dna template, int newCount)
        {
            pool      = new List <Dna>();
            sampleDna = template.Copy();

            if (newCount > 0)
            {
                if (newCount > count)
                {
                    for (var i = count; i < newCount; i++)
                    {
                        pool.Add(new Dna(template));
                    }
                }
                else
                {
                    pool.RemoveRange(newCount, count - newCount);
                }
            }
            else
            {
                throw new System.InvalidOperationException($"Count can not be equal or less then 0. Requested {count}");
            }
        }