public void GivenADifferentialEvolutionAlgorithm_WhenTheAlgorithmIsRun_ItShouldResultInAPopulationWithAtLeastOneIndividual() { Mock <IFitnessEvaluationStrategy> fitnessEvaluationMock = new Mock <IFitnessEvaluationStrategy>(); IFitnessEvaluationStrategy fitnessEvaluationStrategy = fitnessEvaluationMock.Object; Mock <ICrossoverStrategy> crossoverMock = new Mock <ICrossoverStrategy>(); crossoverMock.Setup(x => x.Cross(It.IsAny <Individual>(), It.IsAny <Individual>())) .Returns(new Individual(fitnessEvaluationStrategy, new Configuration())); ICrossoverStrategy crossoverStrategy = crossoverMock.Object; Mock <IMutationStrategy> mutationMock = new Mock <IMutationStrategy>(); IMutationStrategy mutationStrategy = mutationMock.Object; Mock <ISelectionStrategy> selectionMock = new Mock <ISelectionStrategy>(); selectionMock.Setup(x => x.Select(It.IsAny <List <Individual> >())) .Returns(new Individual(fitnessEvaluationStrategy, new Configuration())); ISelectionStrategy selectionStrategy = selectionMock.Object; DifferentialEvolution differentialEvolution = new DifferentialEvolution(mutationStrategy, crossoverStrategy, selectionStrategy, selectionStrategy, fitnessEvaluationStrategy, new Configuration()); differentialEvolution.Run(); Assert.IsTrue(differentialEvolution.population.Count > 0); }
public void GivenFiveIterationsAndThreeIndividuals_WhenTheAlgorithmIsRun_ItShouldCallTheCrossoverStrategyFifteenTimes() { Mock <IFitnessEvaluationStrategy> fitnessEvaluationMock = new Mock <IFitnessEvaluationStrategy>(); IFitnessEvaluationStrategy fitnessEvaluationStrategy = fitnessEvaluationMock.Object; Mock <ICrossoverStrategy> crossoverMock = new Mock <ICrossoverStrategy>(); crossoverMock.Setup(x => x.Cross(It.IsAny <Individual>(), It.IsAny <Individual>())) .Returns(new Individual(fitnessEvaluationStrategy, new Configuration())); ICrossoverStrategy crossoverStrategy = crossoverMock.Object; Mock <IMutationStrategy> mutationMock = new Mock <IMutationStrategy>(); IMutationStrategy mutationStrategy = mutationMock.Object; Mock <ISelectionStrategy> selectionMock = new Mock <ISelectionStrategy>(); selectionMock.Setup(x => x.Select(It.IsAny <List <Individual> >())) .Returns(new Individual(fitnessEvaluationStrategy, new Configuration())); ISelectionStrategy selectionStrategy = selectionMock.Object; DifferentialEvolution differentialEvolution = new DifferentialEvolution(mutationStrategy, crossoverStrategy, selectionStrategy, selectionStrategy, fitnessEvaluationStrategy, new Configuration()); differentialEvolution.Run(); crossoverMock.Verify(c => c.Cross(It.IsAny <Individual>(), It.IsAny <Individual>()), Times.Exactly(15)); }
static void Main(string[] args) { IConfiguration configuration = new Configuration(); IMutationStrategy trialVectorMutationStrategy = new TrialIndividualMutationStrategy(configuration); ICrossoverStrategy crossoverStrategy = new BinomialCrossoverStrategy(configuration); ISelectionStrategy generationSelectionStrategy = new MinimisationElitistSelectionStrategy(); ISelectionStrategy differenceVectorSelectionStrategy = new RandomSelectionStrategy(); IFitnessEvaluationStrategy fitnessEvaluationStrategy = new RastriginFitnessEvaluationStrategy(); DifferentialEvolution differentialEvolution = new DifferentialEvolution( trialVectorMutationStrategy, crossoverStrategy, generationSelectionStrategy, differenceVectorSelectionStrategy, fitnessEvaluationStrategy, configuration ); differentialEvolution.Run(); var population = differentialEvolution.population; foreach (Individual individual in population) { foreach (double dimension in individual.Position) { Console.Write(Math.Round(dimension) + ", "); } Console.WriteLine(); } Console.Read(); }