public void TestPerformOptimizationReturnsLocalExtrema()
        {
            TestIntegerEvaluableState initial = new TestIntegerEvaluableState(2);
            TestIntegerEvaluableState result;

            generator = new TestIntegerLocalMaximaSuccessorGenerator();
            picker    = new ClimberSuccessorPicker <TestIntegerEvaluableState, int>(generator, comparer);
            algorithm = new LocalClimberAlgorithm <TestIntegerEvaluableState, int>(comparer, picker);
            climber   = new GeneralHillClimber <TestIntegerEvaluableState>(algorithm);

            Task <TestIntegerEvaluableState> optimizeTask = Task.Run(() => climber.PerformOptimization(initial));

            bool      complete = false;
            Stopwatch timer    = new Stopwatch();

            timer.Start();

            while (!complete && timer.ElapsedMilliseconds < 5000)
            {
                complete = optimizeTask.IsCompleted;
            }

            timer.Stop();
            Assert.IsTrue(complete, "Optimization did not stop at local extraema");

            result = optimizeTask.Result;

            Assert.AreEqual(50, result.Value);
        }
 public void Setup()
 {
     comparer  = new MaximizingComparer <int>();
     generator = new TestLinearIntegerSuccessorGenerator();
     picker    = new ClimberSuccessorPicker <TestIntegerEvaluableState, int>(generator, comparer);
     algorithm = new LocalClimberAlgorithm <TestIntegerEvaluableState, int>(comparer, picker);
     climber   = new GeneralHillClimber <TestIntegerEvaluableState>(algorithm);
 }
        public void TestRandomRestartHillClimberSameRestartPointEachTime()
        {
            comparer   = new MaximizingComparer <int>();
            generator  = new TestLinearIntegerSuccessorGenerator();
            picker     = new ClimberSuccessorPicker <TestIntegerEvaluableState, int>(generator, comparer);
            algorithm  = new LocalClimberAlgorithm <TestIntegerEvaluableState, int>(comparer, picker);
            randomizer = new TestIntegerEvaluableStateNonRandomizer();
            climber    = new RandomRestartHillClimber <TestIntegerEvaluableState, int>(randomizer, algorithm, 5);

            RunTest(climber, 2, 100);
        }
        public void TestRandomRestartHillClimberIncrementingRestartPoint()
        {
            comparer   = new MaximizingComparer <int>();
            generator  = new TestExponentialIntegerSuccessorGenerator();
            picker     = new ClimberSuccessorPicker <TestIntegerEvaluableState, int>(generator, comparer);
            algorithm  = new LocalClimberAlgorithm <TestIntegerEvaluableState, int>(comparer, picker);
            randomizer = new TestIntegerRandomizerSimulator();
            climber    = new RandomRestartHillClimber <TestIntegerEvaluableState, int>(randomizer, algorithm, 5);


            RunTest(climber, 1, 64);
        }
Exemple #5
0
        /// <summary>
        /// Returns the configured <see cref="IClimberAlgorithm{TState, TEvaluation}"/> if it is available or creates a default one with the given configuration.
        /// </summary>
        /// <returns>The <see cref="IClimberAlgorithm{TState, TEvaluation}"/> for this configuration</returns>
        private IClimberAlgorithm <TState, TEvaluation> ResolveAlgorithm(IComparer <TState> comparer, Func <TState, IEnumerable <TState> > successorGenerationFunction)
        {
            IClimberAlgorithm <TState, TEvaluation> algorithm;

            // create a climber algorithm if one is not already configured
            if (ClimberAlgorithm == null)
            {
                ClimberSuccessorSelector <TState, TEvaluation> successorSelector = new ClimberSuccessorSelector <TState, TEvaluation>(comparer, successorGenerationFunction);
                algorithm = new LocalClimberAlgorithm <TState, TEvaluation>(successorSelector);
            }
            else
            {
                algorithm = ClimberAlgorithm;
            }

            return(algorithm);
        }
Exemple #6
0
        public void TestPerformOptimizationReturnsLocalExtrema()
        {
            TestIntegerEvaluableState initial = new TestIntegerEvaluableState(2);
            TestIntegerEvaluableState result;

            generator = new TestIntegerLocalMaximaSuccessorGenerator();
            picker    = new ClimberSuccessorSelector <TestIntegerEvaluableState, int>(generator, comparer);
            algorithm = new LocalClimberAlgorithm <TestIntegerEvaluableState, int>(picker);
            climber   = new ClimberConfiguration <TestIntegerEvaluableState, int>()
                        .ComparesUsing(comparer)
                        .GeneratesSuccessorsWith(generator)
                        .Build();

            result = climber.Optimize(initial);

            Assert.AreEqual(50, result.Value);
        }