コード例 #1
0
        public IList <IGenome <T> > Generate(IList <IGenome <T> > genomes)
        {
            IList <IGenome <T> > result;
            IList <IGenome <T> > babies;
            int n;

            n      = Count(genomes);
            result = new List <IGenome <T> >(n);
            Selector.BeforeAllSelections(genomes);
            while (result.Count < n)
            {
                babies = Crossover.Crossover(Selector.SelectNext());
                if (babies.Count == 0)
                {
                    ThrowInvalidChildProducedCount();
                }

                foreach (var babie in babies)
                {
                    Mutator.Mutate(babie);
                    result.Add(babie);
                    if (result.Count() > n)
                    {
                        break;
                    }
                }
            }

            if (result.Count() > n)
            {
                result = result.Take(n).ToArray();
            }

            if (result.Count() != n)
            {
                ThrowInvalidBreadCount(result.Count(), n);
            }

            return(result);
        }