/// <summary>
        ///     Perform a random splice of the genes from 'parent1' and 'parent2' to produce a child.
        /// </summary>
        /// <param name="parent1">The parent to take the first selection of genes from</param>
        /// <param name="parent2">The parent to take the second selection of genes from</param>
        /// <returns></returns>
        public IIndividual PerformCrossover(IIndividual parent1, IIndividual parent2)
        {
            var child = _individualFactory.CreateIndividual();

            // Select a random index for the crossover point.
            // TODO: Make this dynamic
            var minimumCrossoverLength = 1;
            var crossoverIndex         = _random.Next(0, child.GeneLength - minimumCrossoverLength);

            for (var geneIndex = 0; geneIndex < child.GeneLength; geneIndex++)
            {
                int alleleFromParent;

                // Take genes from 'parent1' if the crossover point hasn't been reached
                if (geneIndex < crossoverIndex)
                {
                    alleleFromParent = parent1.GetGeneValue(geneIndex);
                }

                // Take genes from 'parent2' if the crossover point has been reached
                else
                {
                    alleleFromParent = parent2.GetGeneValue(geneIndex);
                }

                child.SetGeneValue(geneIndex, alleleFromParent);
            }

            return(child);
        }
Example #2
0
 public void InitialisePopulation()
 {
     for (var individualIndex = 0; individualIndex < Size; individualIndex++)
     {
         var individual = _individualFactory.CreateIndividual();
         _problemService.MakeSolutionValid(individual);
         Individuals[individualIndex] = individual;
     }
 }
        public async Task <IndividualDto> CreateIndividualAsync(IndividualDto dto)
        {
            var gender = dto.Gender == GenderDto.Female ? Gender.Female : Gender.Male;

            var individual = _individualFactory.CreateIndividual(
                dto.FirstName,
                dto.LastName,
                gender,
                dto.BirthDate);

            var returnedIndividual = await _individualRepository.SaveAsync(individual);

            var result = _mapper.Map <IndividualDto>(returnedIndividual);

            return(result);
        }
 public Individual Adapt(IndividualDataModel dataModel) => _individualFactory.CreateIndividual(
     dataModel.FirstName,
     dataModel.LastName,
     dataModel.Gender,
     dataModel.BirthDate,
     dataModel.Id);