Class HillClimber

java.lang.Object
repast.simphony.parameter.optimizer.HillClimber
All Implemented Interfaces:
AdvancementChooser
Direct Known Subclasses:
AnnealingAdvancementChooser

public class HillClimber extends Object implements AdvancementChooser
This is a simple advancement algorithm that will perform a Hill Climbing traversal of the space.
Author:
Jerry Vos
See Also:
  • Field Details

    • lastValue

      protected double lastValue
    • checkingLocal

      protected boolean checkingLocal
    • forwardValid

      protected boolean forwardValid
    • forwardValue

      protected double forwardValue
    • centerValue

      protected double centerValue
    • lastSetter

      protected ParameterSetter lastSetter
  • Constructor Details

    • HillClimber

      public HillClimber()
      Constructs the climber.
  • Method Details

    • chooseAdvancement

      public AdvanceType chooseAdvancement(ParameterSetter setter, AdvanceType lastType, double runResult)
      This performs the hill climbing algorithm. In the best case it will traverse the space by (assuming we've just chosen a new parameter):
      • Explore the local space to find which direction to follow. It first will explore to the right (FORWARD) of the current position, then to the left (BACKWARD).
      • Next it will move whichever direction is best of left, right, and the neither (if we're at a peak). If we're on a peak it will return AdvanceType.SWITCH.

      Because of the implementation, this may result in a single spot being executed multiple times in order. Also, this handles the border cases where it cannot move forwards or backwards (but wishes to) by switching.

      Specified by:
      chooseAdvancement in interface AdvancementChooser
      Parameters:
      setter - the current setter
      lastType - the last executed parameter command
      runResult - the last run's value
      Returns:
      the action to perform
    • shouldRevert

      public boolean shouldRevert(double runResult)
      Returns true when the previous run's value was greater than runResult or when we're exploring the local space to figure out which direction to go.
      Specified by:
      shouldRevert in interface AdvancementChooser
      Parameters:
      runResult - the result of the previous run
      Returns:
      if we should revert to the previous space