public void TestOptimizeStopsAtLocalExtrema() { IComparer <int> comparer = new MaximizingComparer <int>(); generator = new TestIntegerLocalMaximaSuccessorGenerator(); picker = new ClimberSuccessorPicker <TestIntegerEvaluableState, int>(generator, comparer); algorithm = new LocalClimberAlgorithm <TestIntegerEvaluableState, int>(comparer, picker); TestIntegerEvaluableState initialState = new TestIntegerEvaluableState(2); Task <TestIntegerEvaluableState> optimizeTask = Task.Run(() => algorithm.Optimize(initialState)); Stopwatch timer = new Stopwatch(); timer.Start(); while (!optimizeTask.IsCompleted && timer.ElapsedMilliseconds < 10000) { } timer.Stop(); Assert.IsTrue(optimizeTask.IsCompleted, "Optimization did not stop at local maxima"); Assert.IsTrue(optimizeTask.IsCompletedSuccessfully, "FAILED"); TestIntegerEvaluableState result = optimizeTask.Result; Assert.AreEqual(50, result.Value, "Encountered states do not match"); }
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); }
public void TestOptimizeEmitsEventsInOrder() { IComparer <int> comparer = new MaximizingComparer <int>(); generator = new TestIntegerLocalMaximaSuccessorGenerator(); picker = new ClimberSuccessorPicker <TestIntegerEvaluableState, int>(generator, comparer); algorithm = new LocalClimberAlgorithm <TestIntegerEvaluableState, int>(comparer, picker); List <int> encounteredStates = new List <int>(); List <int> expectedStates = new List <int>(); for (int i = 3; i <= 50; i++) { expectedStates.Add(i); } void OnEvent(object source, ClimberStepEvent <TestIntegerEvaluableState, int> e) { encounteredStates.Add(e.StepState.Value); } algorithm.ClimbStepPerformed += OnEvent; TestIntegerEvaluableState initialState = new TestIntegerEvaluableState(2); Task <TestIntegerEvaluableState> optimizeTask = Task.Run(() => algorithm.Optimize(initialState)); Stopwatch timer = new Stopwatch(); timer.Start(); while (!optimizeTask.IsCompleted && timer.ElapsedMilliseconds < 10000) { } timer.Stop(); Assert.IsTrue(optimizeTask.IsCompletedSuccessfully, "FAILED"); TestIntegerEvaluableState result = optimizeTask.Result; Assert.AreEqual(expectedStates.Count, encounteredStates.Count); for (int i = 0; i < expectedStates.Count; i++) { Assert.AreEqual(encounteredStates[i], expectedStates[i], "Encountered states do not match"); } }
public void Setup() { generator = new TestLinearIntegerSuccessorGenerator(); picker = new ClimberSuccessorPicker <TestIntegerEvaluableState, int>(generator, new MaximizingComparer <int>()); }