public void TestRandomRestartHillClimberIncrementingRestartPoint() { comparer = new MaximizingComparer <TestIntegerEvaluableState>(); generator = new TestExponentialIntegerSuccessorGenerator(); var climberConfiguration = new ClimberConfiguration <TestIntegerEvaluableState, int>() .ComparesUsing(comparer) .GeneratesSuccessorsWith((c) => generator.GetSuccessors(c)); randomizer = new TestIntegerRandomizerSimulator(); climber = new RandomRestartHillClimber <TestIntegerEvaluableState, int>(5, randomizer, climberConfiguration); RunTest(climber, 1, 10000); }
public void TestRandomRestartHillClimberSameRestartPointEachTime() { comparer = new MaximizingComparer <TestIntegerEvaluableState>(); generator = new TestLinearIntegerSuccessorGenerator(); randomizer = new TestIntegerEvaluableStateNonRandomizer(); var climberConfiguration = new ClimberConfiguration <TestIntegerEvaluableState, int>() .ComparesUsing(comparer) .GeneratesSuccessorsWith((c) => generator.GetSuccessors(c)); randomizer = new TestIntegerEvaluableStateNonRandomizer(); climber = new RandomRestartHillClimber <TestIntegerEvaluableState, int>(5, randomizer, climberConfiguration); RunTest(climber, 2, 100); }
private void RunTest(RandomRestartHillClimber <TestIntegerEvaluableState, int> climber, int initialStateValue, int expectedOptimalValue) { TestIntegerEvaluableState initialState = new TestIntegerEvaluableState(initialStateValue); TestIntegerEvaluableState resultState = new TestIntegerEvaluableState(initialStateValue); Dictionary <int, Tuple <TestIntegerEvaluableState, TestIntegerEvaluableState> > localWinners = new Dictionary <int, Tuple <TestIntegerEvaluableState, TestIntegerEvaluableState> >(); void OnClimberRestartEvent(object source, ClimberCompleteEvent <TestIntegerEvaluableState, int> e) { localWinners[e.CLimberIndex] = new Tuple <TestIntegerEvaluableState, TestIntegerEvaluableState>(e.InitialState, e.OptimizedState); } climber.ClimberCompleteEvent += OnClimberRestartEvent; resultState = climber.Optimize(initialState); Assert.AreEqual(expectedOptimalValue, resultState.Value); }