/// <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); }
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);