/// <summary> /// Configure the climber to optimize in a specified direction /// </summary> /// <param name="direction">The direction for the climber to optimize in</param> /// <returns>the modified configuration</returns> public ClimberConfiguration <TState, TEvaluation> ClimbsInDirection(ClimberDirection direction) { StateComparisonFactory comparisonFactory = new StateComparisonFactory(); StateComparer = comparisonFactory.Create <TState, TEvaluation>(direction); return(this); }
/// <summary> /// Creates an <see cref="IComparable{TState}"/> for the desired climber direction /// </summary> /// <typeparam name="TState">The state for which the climber will optimize</typeparam> /// <typeparam name="TEvaluation">The type of the climber state's evaluation</typeparam> /// <param name="direction">The direction in which the climber will climb</param> /// <returns>An <see cref="IComparable{TState, TEvaluation}"/> that will promote climbing in the desired direction</returns> public IComparer <TState> Create <TState, TEvaluation>(ClimberDirection direction) where TState : EvaluableState <TEvaluation> where TEvaluation : IComparable <TEvaluation> { IComparer <TState> comparer; switch (direction) { case ClimberDirection.Maximize: comparer = new MaximizingComparer <TState>(); break; case ClimberDirection.Minimize: comparer = new MinimizingComparer <TState>(); break; default: throw new ArgumentException("Unknown climber direction"); } return(comparer); }