public void GlobalizedBoundedNelderMeadOptimizer_Optimize(int?maxDegreeOfParallelism)
        {
            var parameters = new MinMaxParameterSpec[]
            {
                new MinMaxParameterSpec(0.0, 100.0, Transform.Linear)
            };

            var sut = maxDegreeOfParallelism.HasValue ?
                      new GlobalizedBoundedNelderMeadOptimizer(parameters, 5, 1e-5, 10,
                                                               maxDegreeOfParallelism: maxDegreeOfParallelism.Value) :
                      new GlobalizedBoundedNelderMeadOptimizer(parameters, 5, 1e-5, 10);

            var results = sut.Optimize(MinimizeWeightFromHeight);
            var actual  = new OptimizerResult[] { results.First(), results.Last() };

            var expected = new OptimizerResult[]
            {
                new OptimizerResult(new double[] { 37.71314535727786 }, 109.34381396310141),
                new OptimizerResult(new double[] { 37.7131485180996 }, 109.34381396350526)
            };

            Assert.AreEqual(expected.First().Error, actual.First().Error, Delta);
            Assert.AreEqual(expected.First().ParameterSet.First(),
                            actual.First().ParameterSet.First(), Delta);

            Assert.AreEqual(expected.Last().Error, actual.Last().Error, Delta);
            Assert.AreEqual(expected.Last().ParameterSet.First(),
                            actual.Last().ParameterSet.First(), Delta);
        }
コード例 #2
0
        public void BayesianOptimizer_Optimize()
        {
            var parameters = new MinMaxParameterSpec[]
            {
                new MinMaxParameterSpec(0.0, 100.0, Transform.Linear)
            };

            var sut = new BayesianOptimizer(parameters,
                                            iterations: 120,
                                            randomStartingPointCount: 5,
                                            functionEvaluationsPerIterationCount: 1,
                                            randomSearchPointCount: 1000,
                                            seed: 42,
                                            runParallel: false); // Note, since the returned results are not ordered on error,
                                                                 // running with parallel computations will not return reproducible order of results,
                                                                 // so runParallel must be false for this test.

            var results = sut.Optimize(MinimizeWeightFromHeight);
            var actual  = new OptimizerResult[] { results.First(), results.Last() };

            var expected = new OptimizerResult[]
            {
                new OptimizerResult(new double[] { 43.216748276360683 }, 1352.8306605984087),
                new OptimizerResult(new double[] { 38.201425707992833 }, 119.1316225267316)
            };

            Assert.AreEqual(expected.First().Error, actual.First().Error, Delta);
            Assert.AreEqual(expected.First().ParameterSet.First(), actual.First().ParameterSet.First(), Delta);

            Assert.AreEqual(expected.Last().Error, actual.Last().Error, Delta);
            Assert.AreEqual(expected.Last().ParameterSet.First(), actual.Last().ParameterSet.First(), Delta);
        }
コード例 #3
0
        public void SmacOptimizer_OptimizeBest_MultipleParameters()
        {
            var parameters = new MinMaxParameterSpec[]
            {
                new MinMaxParameterSpec(-10.0, 10.0, Transform.Linear),
                new MinMaxParameterSpec(-10.0, 10.0, Transform.Linear),
                new MinMaxParameterSpec(-10.0, 10.0, Transform.Linear),
            };

            var sut = new SmacOptimizer(parameters,
                                        iterations: 80,
                                        randomStartingPointCount: 20,
                                        functionEvaluationsPerIterationCount: 1,
                                        localSearchPointCount: 10,
                                        randomSearchPointCount: 1000,
                                        epsilon: 0.00001,
                                        seed: 42);

            var actual = sut.OptimizeBest(Minimize);

            Assert.AreEqual(-0.964878416222769, actual.Error, Delta);
            Assert.AreEqual(actual.ParameterSet.Length, 3);

            Assert.AreEqual(-7.8487638560350819, actual.ParameterSet[0], Delta);
            Assert.AreEqual(6.2840940040927826, actual.ParameterSet[1], Delta);
            Assert.AreEqual(0.036385473812179825, actual.ParameterSet[2], Delta);
        }
コード例 #4
0
        OptimizerResult RunOpenLoopOptimizationTest(List <OptimizerResult> results)
        {
            var parameters = new MinMaxParameterSpec[]
            {
                new MinMaxParameterSpec(-10.0, 10.0, Transform.Linear),
                new MinMaxParameterSpec(-10.0, 10.0, Transform.Linear),
                new MinMaxParameterSpec(-10.0, 10.0, Transform.Linear),
            };

            var iterations = 80;
            var randomStartingPointsCount            = 20;
            var functionEvaluationsPerIterationCount = 1;

            var sut = new BayesianOptimizer(parameters,
                                            iterations: iterations,
                                            randomStartingPointCount: randomStartingPointsCount,
                                            functionEvaluationsPerIterationCount: functionEvaluationsPerIterationCount,
                                            randomSearchPointCount: 1000,
                                            seed: 42);

            // Using BayesianOptimizer in an open loop.
            var initialParameterSets  = sut.ProposeParameterSets(randomStartingPointsCount, results);
            var initializationResults = sut.RunParameterSets(Minimize, initialParameterSets);

            results.AddRange(initializationResults);

            for (int i = 0; i < iterations; i++)
            {
                var parameterSets    = sut.ProposeParameterSets(functionEvaluationsPerIterationCount, results);
                var iterationResults = sut.RunParameterSets(Minimize, parameterSets);
                results.AddRange(iterationResults);
            }

            return(results.Where(v => !double.IsNaN(v.Error)).OrderBy(r => r.Error).First());
        }
コード例 #5
0
        public void SmacOptimizer_Optimize()
        {
            var parameters = new MinMaxParameterSpec[]
            {
                new MinMaxParameterSpec(0.0, 100.0, Transform.Linear)
            };

            var sut = new SmacOptimizer(parameters,
                                        iterations: 80,
                                        randomStartingPointCount: 20,
                                        functionEvaluationsPerIterationCount: 1,
                                        localSearchPointCount: 10,
                                        randomSearchPointCount: 1000,
                                        epsilon: 0.00001,
                                        seed: 42);

            var actual = sut.Optimize(MinimizeWeightFromHeight);

            var expected = new OptimizerResult[]
            {
                new OptimizerResult(new double[] { 90.513222660177 }, 114559.431919558),
                new OptimizerResult(new double[] { 41.8333740634068 }, 806.274612132759),
            };

            Assert.AreEqual(expected.First().Error, actual.First().Error, Delta);
            Assert.AreEqual(expected.First().ParameterSet.First(), actual.First().ParameterSet.First(), Delta);

            Assert.AreEqual(expected.Last().Error, actual.Last().Error, Delta);
            Assert.AreEqual(expected.Last().ParameterSet.First(), actual.Last().ParameterSet.First(), Delta);
        }
コード例 #6
0
        public void GlobalizedBoundedNelderMeadOptimizer_Optimize(int?maxDegreeOfParallelism)
        {
            var parameters = new MinMaxParameterSpec[]
            {
                new MinMaxParameterSpec(0.0, 100.0, Transform.Linear)
            };

            var sut = CreateSut(maxDegreeOfParallelism, parameters);

            var results = sut.Optimize(MinimizeWeightFromHeight);
            var actual  = new OptimizerResult[] { results.First(), results.Last() };

            var expected = new OptimizerResult[]
            {
                new OptimizerResult(new double[] { 37.71314634450421 }, 109.3438139631394),
                new OptimizerResult(new double[] { 37.713142445047254 }, 109.34381396345546)
            };

            Assert.AreEqual(expected.First().Error, actual.First().Error, Delta);
            Assert.AreEqual(expected.First().ParameterSet.First(),
                            actual.First().ParameterSet.First(), Delta);

            Assert.AreEqual(expected.Last().Error, actual.Last().Error, Delta);
            Assert.AreEqual(expected.Last().ParameterSet.First(),
                            actual.Last().ParameterSet.First(), Delta);
        }
コード例 #7
0
        public void ParticleSwarmOptimizer_Optimize(int?maxDegreeOfParallelism)
        {
            var parameters = new MinMaxParameterSpec[]
            {
                new MinMaxParameterSpec(0.0, 100.0, Transform.Linear)
            };

            var sut = maxDegreeOfParallelism.HasValue ?
                      new ParticleSwarmOptimizer(parameters, 100, maxDegreeOfParallelism: maxDegreeOfParallelism.Value) :
                      new ParticleSwarmOptimizer(parameters, 100);

            var results = sut.Optimize(Minimize2);

            var actual = new OptimizerResult[] { results.First(), results.Last() };

            var expected = new OptimizerResult[]
            {
                new OptimizerResult(new double[] { 38.1151505704492 }, 115.978346548015),
                new OptimizerResult(new double[] { 37.2514904205637 }, 118.093289672808),
            };

            Assert.AreEqual(expected.First().Error, actual.First().Error, 0.0001);
            Assert.AreEqual(expected.First().ParameterSet.First(), actual.First().ParameterSet.First(), 0.0001);

            Assert.AreEqual(expected.Last().Error, actual.Last().Error, 0.0001);
            Assert.AreEqual(expected.Last().ParameterSet.First(), actual.Last().ParameterSet.First(), 0.0001);
        }
コード例 #8
0
        public void RandomSearchOptimizer_Optimize(int?maxDegreeOfParallelism)
        {
            var parameters = new MinMaxParameterSpec[]
            {
                new MinMaxParameterSpec(10.0, 37.5, Transform.Linear)
            };

            var sut = maxDegreeOfParallelism.HasValue ?
                      new RandomSearchOptimizer(parameters, 2, 42, true, maxDegreeOfParallelism.Value) :
                      new RandomSearchOptimizer(parameters, 2);

            var actual = sut.Optimize(MinimizeWeightFromHeight);

            var expected = new OptimizerResult[]
            {
                new OptimizerResult(new double[] { 13.8749507052707 }, 23438.2157641635),
                new OptimizerResult(new double[] { 28.3729278125674 }, 3690.81119818742),
            };

            Assert.AreEqual(expected.First().Error, actual.First().Error, Delta);
            Assert.AreEqual(expected.First().ParameterSet.First(),
                            actual.First().ParameterSet.First(), Delta);

            Assert.AreEqual(expected.Last().Error, actual.Last().Error, Delta);
            Assert.AreEqual(expected.Last().ParameterSet.First(),
                            actual.Last().ParameterSet.First(), Delta);
        }
コード例 #9
0
        public void ParameterBounds_NextValue()
        {
            var sut = new MinMaxParameterSpec(min: 20, max: 200,
                                              transform: Transform.Linear);

            var sampler = new RandomUniform(seed: 32);

            var actual = new double[10];

            for (int i = 0; i < actual.Length; i++)
            {
                actual[i] = sut.SampleValue(sampler: sampler);
            }

            var expected = new double[]
            {
                99.8935983236384,
                57.2098020451189,
                44.4149092419142,
                89.9002946307418,
                137.643828772774,
                114.250629522954,
                63.8914499915631,
                109.294177409864,
                188.567149950455,
                33.2731248034505
            };

            Assert.AreEqual(expected.Length, actual.Length);
            for (int i = 0; i < expected.Length; i++)
            {
                Assert.AreEqual(expected[i], actual[i], 0.000001);
            }
        }
コード例 #10
0
        public void BayesianOptimizer_OptimizeBest_MultipleParameters(bool runParallel)
        {
            var parameters = new MinMaxParameterSpec[]
            {
                new MinMaxParameterSpec(-10.0, 10.0, Transform.Linear),
                new MinMaxParameterSpec(-10.0, 10.0, Transform.Linear),
                new MinMaxParameterSpec(-10.0, 10.0, Transform.Linear),
            };

            var sut = new BayesianOptimizer(parameters,
                                            iterations: 100,
                                            randomStartingPointCount: 5,
                                            functionEvaluationsPerIterationCount: 1,
                                            randomSearchPointCount: 1000,
                                            seed: 42,
                                            runParallel: runParallel);

            var actual = sut.OptimizeBest(Minimize);

            Assert.AreEqual(-0.76070603822760785, actual.Error, Delta);
            Assert.AreEqual(3, actual.ParameterSet.Length);

            Assert.AreEqual(1.6078245041928358, actual.ParameterSet[0], Delta);
            Assert.AreEqual(-8.9735394990879769, actual.ParameterSet[1], Delta);
            Assert.AreEqual(-0.18217921731163855, actual.ParameterSet[2], Delta);
        }
コード例 #11
0
        public void RandomSearchOptimizer_Optimize(int?maxDegreeOfParallelism)
        {
            var parameters = new MinMaxParameterSpec[]
            {
                new MinMaxParameterSpec(10.0, 37.5, Transform.Linear)
            };

            var sut = maxDegreeOfParallelism.HasValue ?
                      new RandomSearchOptimizer(parameters, 100, 42, true, maxDegreeOfParallelism.Value) :
                      new RandomSearchOptimizer(parameters, 100);

            var actual = sut.Optimize(MinimizeWeightFromHeight);

            var expected = new OptimizerResult[]
            {
                new OptimizerResult(new double[] { 28.3729278125674 }, 3690.81119818742),
                new OptimizerResult(new double[] { 19.1529422843144 }, 14251.396910816733),
            };

            Assert.AreEqual(expected.First().Error, actual.First().Error, Delta);
            Assert.AreEqual(expected.First().ParameterSet.First(),
                            actual.First().ParameterSet.First(), Delta);

            Assert.AreEqual(expected.Last().Error, actual.Last().Error, Delta);
            Assert.AreEqual(expected.Last().ParameterSet.First(),
                            actual.Last().ParameterSet.First(), Delta);
        }
コード例 #12
0
        public void ParticleSwarmOptimizer_Optimize(int?maxDegreeOfParallelism)
        {
            var parameters = new MinMaxParameterSpec[]
            {
                new MinMaxParameterSpec(0.0, 100.0, Transform.Linear)
            };

            var sut = CreateSut(maxDegreeOfParallelism, parameters);

            var results = sut.Optimize(MinimizeWeightFromHeight);

            var actual = new OptimizerResult[] { results.First(), results.Last() };

            var expected = new OptimizerResult[]
            {
                new OptimizerResult(new double[] { 38.1151505704492 }, 115.978346548015),
                new OptimizerResult(new double[] { 37.2514904205637 }, 118.093289672808),
            };

            Assert.AreEqual(expected.First().Error, actual.First().Error, Delta);
            Assert.AreEqual(expected.First().ParameterSet.First(),
                            actual.First().ParameterSet.First(), Delta);

            Assert.AreEqual(expected.Last().Error, actual.Last().Error, Delta);
            Assert.AreEqual(expected.Last().ParameterSet.First(),
                            actual.Last().ParameterSet.First(), Delta);
        }
コード例 #13
0
        public void SmacOptimizer_OptimizeBest_SingleParameter()
        {
            var parameters = new MinMaxParameterSpec[]
            {
                new MinMaxParameterSpec(0.0, 100.0, Transform.Linear)
            };

            var sut = CreateSut(parameters);

            var actual = sut.OptimizeBest(MinimizeWeightFromHeight);

            Assert.AreEqual(109.616853578648, actual.Error, Delta);
            Assert.AreEqual(37.6315924979893, actual.ParameterSet.Single(), Delta);
        }
コード例 #14
0
        public void BayesianOptimizer_OptimizeBest_SingleParameter(int?maxDegreeOfParallelism)
        {
            var parameters = new MinMaxParameterSpec[]
            {
                new MinMaxParameterSpec(0.0, 100.0, Transform.Linear)
            };

            var sut = CreateSut(maxDegreeOfParallelism, parameters);

            var actual = sut.OptimizeBest(MinimizeWeightFromHeight);

            Assert.AreEqual(110.050490091126, actual.Error, Delta);
            Assert.AreEqual(37.84434624847227, actual.ParameterSet.Single(), Delta);
        }
コード例 #15
0
        public void BayesianOptimizer_OptimizeNonDeterministicInParallel()
        {
            var parameters = new MinMaxParameterSpec[]
            {
                new MinMaxParameterSpec(0, 1, Transform.Linear, ParameterType.Discrete)
            };
            var sut = new BayesianOptimizer(parameters, iterations: 240, randomStartingPointCount: 5, functionEvaluationsPerIteration: 5,
                                            seed: Seed, maxDegreeOfParallelism: -1, allowMultipleEvaluations: true);
            var results = sut.Optimize(p => MinimizeNonDeterministic(p, Random));
            var actual = new OptimizerResult[] { results.First(), results.Last() }.OrderByDescending(o => o.Error);

            Assert.AreEqual(1, actual.First().Error);
            Assert.AreEqual(1, (int)actual.First().ParameterSet[0]);
        }
コード例 #16
0
        public void RandomSearchOptimizer_OptimizeBest(int?maxDegreeOfParallelism)
        {
            var parameters = new MinMaxParameterSpec[]
            {
                new MinMaxParameterSpec(0.0, 100.0, Transform.Linear)
            };

            var sut = maxDegreeOfParallelism.HasValue ?
                      new RandomSearchOptimizer(parameters, 100, 42, true, maxDegreeOfParallelism.Value) :
                      new RandomSearchOptimizer(parameters, 100);

            var actual = sut.OptimizeBest(MinimizeWeightFromHeight);

            Assert.AreEqual(110.67173923600831, actual.Error, Delta);
            Assert.AreEqual(37.533294194160632, actual.ParameterSet.Single(), Delta);
        }
コード例 #17
0
        public void BayesianOptimizer_OptimizeBest()
        {
            var parameters = new MinMaxParameterSpec[]
            {
                new MinMaxParameterSpec(-10.0, 10.0, Transform.Linear),
                new MinMaxParameterSpec(-10.0, 10.0, Transform.Linear),
                new MinMaxParameterSpec(-10.0, 10.0, Transform.Linear),
            };
            var sut    = new BayesianOptimizer(parameters, 100, 5, 1);
            var actual = sut.OptimizeBest(Minimize);

            Assert.AreEqual(actual.Error, -0.74765422244251278, 0.0001);
            Assert.AreEqual(actual.ParameterSet.Length, 3);

            Assert.AreEqual(-5.0065683270835173, actual.ParameterSet[0], Delta);
            Assert.AreEqual(-9.67008227467075, actual.ParameterSet[1], Delta);
            Assert.AreEqual(-0.24173704452893574, actual.ParameterSet[2], Delta);
        }
コード例 #18
0
        public void BayesianOptimizer_OptimizeBestInParallel()
        {
            var parameters = new MinMaxParameterSpec[]
            {
                new MinMaxParameterSpec(-10.0, 10.0, Transform.Linear),
                new MinMaxParameterSpec(-10.0, 10.0, Transform.Linear),
                new MinMaxParameterSpec(-10.0, 10.0, Transform.Linear),
            };
            //high variance without fixed seed
            var sut    = new BayesianOptimizer(parameters, 100, 5, 2, seed: Seed);
            var actual = sut.OptimizeBest(Minimize);

            Assert.AreEqual(-0.736123479387088, actual.Error, Delta);
            Assert.AreEqual(3, actual.ParameterSet.Length);

            Assert.AreEqual(-4.37019084318084, actual.ParameterSet[0], Delta);
            Assert.AreEqual(-3.05224638108734, actual.ParameterSet[1], Delta);
            Assert.AreEqual(0.274598500819224, actual.ParameterSet[2], Delta);
        }
コード例 #19
0
        public void BayesianOptimizer_OptimizeBest_SingleParameter(bool runParallel)
        {
            var parameters = new MinMaxParameterSpec[]
            {
                new MinMaxParameterSpec(0.0, 100.0, Transform.Linear)
            };

            var sut = new BayesianOptimizer(parameters,
                                            iterations: 80,
                                            randomStartingPointCount: 20,
                                            functionEvaluationsPerIterationCount: 1,
                                            randomSearchPointCount: 1000,
                                            seed: 42,
                                            runParallel: runParallel);

            var actual = sut.OptimizeBest(MinimizeWeightFromHeight);

            Assert.AreEqual(126.50056735005998, actual.Error, Delta);
            Assert.AreEqual(38.359608938153649, actual.ParameterSet.Single(), Delta);
        }
コード例 #20
0
        public void GlobalizedBoundedNelderMeadOptimizer_OptimizeBest(int?maxDegreeOfParallelism)
        {
            var parameters = new MinMaxParameterSpec[]
            {
                new MinMaxParameterSpec(-10.0, 10.0, Transform.Linear),
                new MinMaxParameterSpec(-10.0, 10.0, Transform.Linear),
                new MinMaxParameterSpec(-10.0, 10.0, Transform.Linear),
            };

            var sut = CreateSut(maxDegreeOfParallelism, parameters);

            var actual = sut.OptimizeBest(Minimize);

            Assert.AreEqual(actual.Error, -0.99999960731425908, Delta);
            Assert.AreEqual(actual.ParameterSet.Length, 3);

            Assert.AreEqual(actual.ParameterSet[0], -1.5711056814954487, Delta);
            Assert.AreEqual(actual.ParameterSet[1], -6.283490634742785, Delta);
            Assert.AreEqual(actual.ParameterSet[2], -2.9822323517533149E-07, Delta);
        }
コード例 #21
0
        public void SmacOptimizer_OptimizeBest_MultipleParameters()
        {
            var parameters = new MinMaxParameterSpec[]
            {
                new MinMaxParameterSpec(-10.0, 10.0, Transform.Linear),
                new MinMaxParameterSpec(-10.0, 10.0, Transform.Linear),
                new MinMaxParameterSpec(-10.0, 10.0, Transform.Linear),
            };

            var sut = CreateSut(parameters);

            var actual = sut.OptimizeBest(Minimize);

            Assert.AreEqual(-0.964878416222769, actual.Error, Delta);
            Assert.AreEqual(actual.ParameterSet.Length, 3);

            Assert.AreEqual(-7.8487638560350819, actual.ParameterSet[0], Delta);
            Assert.AreEqual(6.2840940040927826, actual.ParameterSet[1], Delta);
            Assert.AreEqual(0.036385473812179825, actual.ParameterSet[2], Delta);
        }
コード例 #22
0
        public void BayesianOptimizer_OptimizeBest_MultipleParameters(int?maxDegreeOfParallelism)
        {
            var parameters = new MinMaxParameterSpec[]
            {
                new MinMaxParameterSpec(-10.0, 10.0, Transform.Linear),
                new MinMaxParameterSpec(-10.0, 10.0, Transform.Linear),
                new MinMaxParameterSpec(-10.0, 10.0, Transform.Linear),
            };

            var sut = CreateSut(maxDegreeOfParallelism, parameters);

            var actual = sut.OptimizeBest(Minimize);

            Assert.AreEqual(-0.59028531714984367, actual.Error, Delta);
            Assert.AreEqual(3, actual.ParameterSet.Length);

            Assert.AreEqual(3.9675549296511132, actual.ParameterSet[0], Delta);
            Assert.AreEqual(6.8542302757754143, actual.ParameterSet[1], Delta);
            Assert.AreEqual(-0.047884811669533178, actual.ParameterSet[2], Delta);
        }
コード例 #23
0
        public void ParticleSwarmOptimizer_OptimizeBest(int?maxDegreeOfParallelism)
        {
            var parameters = new MinMaxParameterSpec[]
            {
                new MinMaxParameterSpec(-10.0, 10.0, Transform.Linear),
                new MinMaxParameterSpec(-10.0, 10.0, Transform.Linear),
                new MinMaxParameterSpec(-10.0, 10.0, Transform.Linear),
            };

            var sut = CreateSut(maxDegreeOfParallelism, parameters);

            var actual = sut.OptimizeBest(Minimize);

            Assert.AreEqual(-0.64324321766401094, actual.Error, Delta);
            Assert.AreEqual(3, actual.ParameterSet.Length);

            Assert.AreEqual(-4.92494268653156, actual.ParameterSet[0], Delta);
            Assert.AreEqual(10, actual.ParameterSet[1], Delta);
            Assert.AreEqual(-0.27508308116943514, actual.ParameterSet[2], Delta);
        }
コード例 #24
0
        public void SmacOptimizer_OptimizeBest_SingleParameter()
        {
            var parameters = new MinMaxParameterSpec[]
            {
                new MinMaxParameterSpec(0.0, 100.0, Transform.Linear)
            };

            var sut = new SmacOptimizer(parameters,
                                        iterations: 80,
                                        randomStartingPointCount: 20,
                                        functionEvaluationsPerIterationCount: 1,
                                        localSearchPointCount: 10,
                                        randomSearchPointCount: 1000,
                                        epsilon: 0.00001,
                                        seed: 42);

            var actual = sut.OptimizeBest(MinimizeWeightFromHeight);

            Assert.AreEqual(109.616853578648, actual.Error, Delta);
            Assert.AreEqual(37.6315924979893, actual.ParameterSet.Single(), Delta);
        }
コード例 #25
0
        public void ParticleSwarmOptimizer_OptimizeBest(int?maxDegreeOfParallelism)
        {
            var parameters = new MinMaxParameterSpec[]
            {
                new MinMaxParameterSpec(-10.0, 10.0, Transform.Linear),
                new MinMaxParameterSpec(-10.0, 10.0, Transform.Linear),
                new MinMaxParameterSpec(-10.0, 10.0, Transform.Linear),
            };

            var sut = maxDegreeOfParallelism.HasValue ?
                      new ParticleSwarmOptimizer(parameters, 100, maxDegreeOfParallelism: maxDegreeOfParallelism.Value) :
                      new ParticleSwarmOptimizer(parameters, 100);

            var actual = sut.OptimizeBest(Minimize);

            Assert.AreEqual(actual.Error, -0.64324321766401094, 0.0000001);
            Assert.AreEqual(actual.ParameterSet.Length, 3);

            Assert.AreEqual(actual.ParameterSet[0], -4.92494268653156, 0.0000001);
            Assert.AreEqual(actual.ParameterSet[1], 10, 0.0000001);
            Assert.AreEqual(actual.ParameterSet[2], -0.27508308116943514, 0.0000001);
        }
コード例 #26
0
        public void BayesianOptimizer_Optimize()
        {
            var parameters = new MinMaxParameterSpec[]
            {
                new MinMaxParameterSpec(0.0, 100.0, Transform.Linear)
            };
            var sut     = new BayesianOptimizer(parameters, 120, 5, 1);
            var results = sut.Optimize(Minimize2);
            var actual  = new OptimizerResult[] { results.First(), results.Last() };

            var expected = new OptimizerResult[]
            {
                new OptimizerResult(new double[] { 90.513222660177 }, 114559.431919558),
                new OptimizerResult(new double[] { 24.204380402436 }, 7601.008090362)
            };

            Assert.AreEqual(expected.First().Error, actual.First().Error, m_delta);
            Assert.AreEqual(expected.First().ParameterSet.First(), actual.First().ParameterSet.First(), m_delta);

            Assert.AreEqual(expected.Last().Error, actual.Last().Error, m_delta);
            Assert.AreEqual(expected.Last().ParameterSet.First(), actual.Last().ParameterSet.First(), m_delta);
        }
コード例 #27
0
        public void SmacOptimizer_Optimize()
        {
            var parameters = new MinMaxParameterSpec[]
            {
                new MinMaxParameterSpec(0.0, 100.0, Transform.Linear)
            };

            var sut = CreateSut(parameters);

            var actual = sut.Optimize(MinimizeWeightFromHeight);

            var expected = new OptimizerResult[]
            {
                new OptimizerResult(new double[] { 90.513222660177 }, 114559.431919558),
                new OptimizerResult(new double[] { 41.8333740634068 }, 806.274612132759),
            };

            Assert.AreEqual(expected.First().Error, actual.First().Error, Delta);
            Assert.AreEqual(expected.First().ParameterSet.First(), actual.First().ParameterSet.First(), Delta);

            Assert.AreEqual(expected.Last().Error, actual.Last().Error, Delta);
            Assert.AreEqual(expected.Last().ParameterSet.First(), actual.Last().ParameterSet.First(), Delta);
        }
        public void GlobalizedBoundedNelderMeadOptimizer_OptimizeBest(int?maxDegreeOfParallelism)
        {
            var parameters = new MinMaxParameterSpec[]
            {
                new MinMaxParameterSpec(-10.0, 10.0, Transform.Linear),
                new MinMaxParameterSpec(-10.0, 10.0, Transform.Linear),
                new MinMaxParameterSpec(-10.0, 10.0, Transform.Linear),
            };

            var sut = maxDegreeOfParallelism.HasValue ?
                      new GlobalizedBoundedNelderMeadOptimizer(parameters, 5, 1e-5, 10,
                                                               maxDegreeOfParallelism: maxDegreeOfParallelism.Value) :
                      new GlobalizedBoundedNelderMeadOptimizer(parameters, 5, 1e-5, 10);

            var actual = sut.OptimizeBest(Minimize);

            Assert.AreEqual(actual.Error, -0.99999949547279676, Delta);
            Assert.AreEqual(actual.ParameterSet.Length, 3);

            Assert.AreEqual(actual.ParameterSet[0], -7.8547285710964134, Delta);
            Assert.AreEqual(actual.ParameterSet[1], 6.2835515298977995, Delta);
            Assert.AreEqual(actual.ParameterSet[2], -1.5851024386788885E-07, Delta);
        }
コード例 #29
0
        public void BayesianOptimizer_Optimize()
        {
            var parameters = new MinMaxParameterSpec[]
            {
                new MinMaxParameterSpec(0.0, 100.0, Transform.Linear)
            };
            var sut = new BayesianOptimizer(parameters, 120, 5, 1, maxDegreeOfParallelism: 1);
            var results = sut.Optimize(MinimizeWeightFromHeight);
            var actual = new OptimizerResult[] { results.First(), results.Last() }.OrderByDescending(o => o.Error);

            var expected = new OptimizerResult[]
            {
                new OptimizerResult(new double[] { 90.513222660177 }, 114559.431919558),
                new OptimizerResult(new double[] { 24.2043804024367 }, 7601.00809036235)
            };

            Assert.AreEqual(expected.First().Error, actual.First().Error, Delta);
            Assert.AreEqual(expected.First().ParameterSet.First(),
                            actual.First().ParameterSet.First(), Delta);

            Assert.AreEqual(expected.Last().Error, actual.Last().Error, Delta);
            Assert.AreEqual(expected.Last().ParameterSet.First(),
                            actual.Last().ParameterSet.First(), Delta);
        }
コード例 #30
0
        public void BayesianOptimizer_Optimize(int?maxDegreeOfParallelism)
        {
            var parameters = new MinMaxParameterSpec[]
            {
                new MinMaxParameterSpec(0.0, 100.0, Transform.Linear)
            };

            var sut = CreateSut(maxDegreeOfParallelism, parameters);

            var results = sut.Optimize(MinimizeWeightFromHeight);
            var actual  = new OptimizerResult[] { results.First(), results.Last() };

            var expected = new OptimizerResult[]
            {
                new OptimizerResult(new double[] { 90.513222660177036 }, 114559.43191955783),
                new OptimizerResult(new double[] { 41.752538896050559 }, 779.196560786838)
            };

            Assert.AreEqual(expected.First().Error, actual.First().Error, Delta);
            Assert.AreEqual(expected.First().ParameterSet.First(), actual.First().ParameterSet.First(), Delta);

            Assert.AreEqual(expected.Last().Error, actual.Last().Error, Delta);
            Assert.AreEqual(expected.Last().ParameterSet.First(), actual.Last().ParameterSet.First(), Delta);
        }