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); }
/// <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); }
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); }