/// <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);
        }
Esempio n. 2
0
        public void CreateInstanceOfAttractRepulseSparkMutator_PassValidParameter()
        {
            ISparkGenerator generator = CreateAttractRepulseSparkGenerator();

            AttractRepulseSparkMutator mutator = new AttractRepulseSparkMutator(generator);

            Assert.NotNull(mutator);
        }
Esempio n. 3
0
        /// <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;
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        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);
            }
        }