/// <summary> /// Initializes a new instance of the <see cref="FireworksAlgorithm2012"/> class. /// </summary> /// <param name="problem">The problem to be solved by the algorithm.</param> /// <param name="stopCondition">The stop condition for the algorithm.</param> /// <param name="settings">The algorithm settings.</param> public FireworksAlgorithm2012(Problem problem, IStopCondition stopCondition, FireworksAlgorithmSettings2012 settings) : base(problem, stopCondition, settings) { this.Randomizer = new DefaultRandom(); this.BestWorstFireworkSelector = new ExtremumFireworkSelector(problem.Target); this.Distribution = new NormalDistribution(FireworksAlgorithm2012.normalDistributionMean, FireworksAlgorithm2012.normalDistributionStdDev); this.InitialSparkGenerator = new InitialSparkGenerator(problem.Dimensions, problem.InitialRanges, this.Randomizer); this.ExplosionSparkGenerator = new ExplosionSparkGenerator(problem.Dimensions, this.Randomizer); this.SpecificSparkGenerator = new GaussianSparkGenerator(problem.Dimensions, this.Distribution, this.Randomizer); this.DistanceCalculator = new EuclideanDistance(problem.Dimensions); this.LocationSelector = new DistanceBasedFireworkSelector(this.DistanceCalculator, this.BestWorstFireworkSelector, this.Settings.LocationsNumber); this.SamplingSelector = new BestFireworkSelector(new Func <IEnumerable <Firework>, Firework>(this.BestWorstFireworkSelector.SelectBest)); this.ExploderSettings = new ExploderSettings { ExplosionSparksNumberModifier = settings.ExplosionSparksNumberModifier, ExplosionSparksNumberLowerBound = settings.ExplosionSparksNumberLowerBound, ExplosionSparksNumberUpperBound = settings.ExplosionSparksNumberUpperBound, ExplosionSparksMaximumAmplitude = settings.ExplosionSparksMaximumAmplitude, SpecificSparksPerExplosionNumber = settings.SpecificSparksPerExplosionNumber }; this.Exploder = new Exploder(this.ExploderSettings, this.BestWorstFireworkSelector); this.Differentiator = new Differentiator(); this.PolynomialFit = new PolynomialFit(this.Settings.FunctionOrder); this.FunctionSolver = new Solver(); this.EliteStrategyGenerator = new LS2EliteStrategyGenerator(problem.Dimensions, this.PolynomialFit, this.Differentiator, this.FunctionSolver); }
public void CreateInstanceOfAttractRepulseSparkMutator_PassValidParameter() { ISparkGenerator generator = CreateAttractRepulseSparkGenerator(); AttractRepulseSparkMutator mutator = new AttractRepulseSparkMutator(generator); Assert.NotNull(mutator); }
/// <summary> /// Initializes a new instance of the <see cref="AttractRepulseSparkMutator"/> class. /// </summary> /// <param name="generator">Attract-Repulse generator to generate a spark.</param> /// <exception cref="System.ArgumentNullException"> /// if <paramref name="generator"/> is <c>null</c>.</exception> public AttractRepulseSparkMutator(ISparkGenerator generator) { if (generator == null) { throw new ArgumentNullException(nameof(generator)); } this.generator = generator; }
public void MutateFirework_PassEachParameterAsNullAndOtherIsCorrect_ArgumentNullExceptionThrown( MutableFirework mutableFirework, FireworkExplosion explosion, String expectedParamName) { ISparkGenerator generator = CreateAttractRepulseSparkGenerator(); AttractRepulseSparkMutator mutator = new AttractRepulseSparkMutator(generator); ArgumentException exception = Assert.Throws <ArgumentNullException>(() => mutator.MutateFirework(ref mutableFirework, explosion)); Assert.Equal(expectedParamName, exception.ParamName); }
public void MutateFirework_PassValidParameters_ShouldChangeFireworkState() { Range range = new Range(-10, 10); IList <Dimension> dimensions = new List <Dimension>(); dimensions.Add(new Dimension(range)); dimensions.Add(new Dimension(range)); dimensions.Add(new Dimension(range)); IDictionary <Dimension, double> coordinatesBefore = new Dictionary <Dimension, double>(); IDictionary <Dimension, double> coordinatesAfter = new Dictionary <Dimension, double>(); foreach (Dimension dimension in dimensions) { coordinatesBefore.Add(dimension, 0); coordinatesAfter.Add(dimension, 1); } MutableFirework mutableFirework = new MutableFirework(FireworkType.SpecificSpark, 0, coordinatesBefore); MutableFirework mutateFirework = new MutableFirework(FireworkType.SpecificSpark, 1, coordinatesAfter); //present state mutable firework after mutate FireworkExplosion explosion = CreateFireworkExplosion(mutableFirework); ISparkGenerator generator = CreateAttractRepulseSparkGenerator(); generator.CreateSpark(explosion).Returns(mutateFirework); AttractRepulseSparkMutator mutator = Substitute.For <AttractRepulseSparkMutator>(generator); mutator.MutateFirework(ref mutableFirework, explosion); Assert.NotNull(mutableFirework); Assert.Equal(mutableFirework.BirthStepNumber, mutateFirework.BirthStepNumber); Assert.Equal(mutableFirework.Quality, mutateFirework.Quality); double dimensionValueBefore; double dimensionValueAfter; foreach (Dimension dimension in dimensions) { mutableFirework.Coordinates.TryGetValue(dimension, out dimensionValueBefore); mutateFirework.Coordinates.TryGetValue(dimension, out dimensionValueAfter); Assert.Equal(dimensionValueBefore, dimensionValueAfter); } }