|
Orbital library | |||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||
java.lang.Objectorbital.algorithm.template.GeneralSearch
orbital.algorithm.template.LocalOptimizerSearch
orbital.algorithm.template.HillClimbing
public class HillClimbing
Hill-climbing search. An heuristic search algorithm and local optimizer.
(One variant of hill-climbing)
Expands best nodes first, i.e. those that have min h(n) and forgets about the alternatives.
Hill climbing is neither complete nor optimal, has a time complexity of O(∞) but a space complexity of O(b).
No special implementation data structure since hill climbing discards old nodes. Because of this "amnesy", hill climbing is a suboptimal search strategy and hill climbing is not complete. Due to its concept hill-climbing may get caught at local extrema, will only perform a random walk on "plateaux", and may have difficulties passing ridges when no "sloping" step actions exist. However, these problems can be solved probabilistically by using an iterative random-restart hill-climbing with a sufficient number of iterations. Random-restart hill-climbing requires that ties break randomly. Which is the cause for hill-climbing to be a simple probabilistic algorithm.
Note that random-restart hill-climbing could be implemented by a Decorator decorating GeneralSearchProblem with a broad range of equally cheap initial actions prepended, that branch to several random locations.
Note that hill-climbing approximates gradient descent. If the state space is spanned by a system of linear unequalities, and the evaluation function is linear, then hill-climbing equals the simplex algorithm of linear programming. Local optimization guarantees that local optimum is global optimum if the state-space as well as the evaluation function are convex, then.
Hill-climbing "resembles trying to find the top of Mount Everest in a thick fog while suffering from amnesia." (Russel&Norvig, Ch 4.4)
Greedy,
Serialized FormSimulatedAnnealing, specializes ThresholdAccepting| Nested Class Summary |
|---|
| Nested classes/interfaces inherited from class orbital.algorithm.template.LocalOptimizerSearch |
|---|
LocalOptimizerSearch.LocalSelection, LocalOptimizerSearch.OptionIterator |
| Nested classes/interfaces inherited from interface orbital.algorithm.template.HeuristicAlgorithm |
|---|
HeuristicAlgorithm.Configuration, HeuristicAlgorithm.PatternDatabaseHeuristic |
| Nested classes/interfaces inherited from interface orbital.algorithm.template.EvaluativeAlgorithm |
|---|
EvaluativeAlgorithm.EvaluationComparator |
| Field Summary |
|---|
| Fields inherited from class orbital.algorithm.template.LocalOptimizerSearch |
|---|
BEST_LOCAL_SELECTION, FIRST_LOCAL_SELECTION |
| Constructor Summary | |
|---|---|
HillClimbing(Function heuristic)
Create a new instance of hill climbing search. |
|
HillClimbing(Function heuristic,
LocalOptimizerSearch.LocalSelection localSelection)
Create a new instance of hill climbing search. |
|
| Method Summary | |
|---|---|
Function |
complexity()
O(∞). |
protected java.util.Iterator |
createTraversal(GeneralSearchProblem problem)
Define a traversal order by creating an iterator for the problem's state space. |
Function |
getEvaluation()
f(n) = h(n). |
Function |
getHeuristic()
Get the heuristic function used. |
boolean |
isCorrect()
Whether this algorithm is correct. |
boolean |
isOptimal()
Whether this search algorithm is optimal. |
void |
setHeuristic(Function heuristic)
Set the heuristic function to use. |
Function |
spaceComplexity()
O(b) where b is the branching factor and d the solution depth. |
| Methods inherited from class orbital.algorithm.template.LocalOptimizerSearch |
|---|
getRandom, search, setRandom |
| Methods inherited from class orbital.algorithm.template.GeneralSearch |
|---|
getProblem, solve, solveImpl |
| Methods inherited from class java.lang.Object |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Methods inherited from interface orbital.algorithm.template.AlgorithmicTemplate |
|---|
solve |
| Constructor Detail |
|---|
public HillClimbing(Function heuristic,
LocalOptimizerSearch.LocalSelection localSelection)
heuristic - the heuristic cost function h:S→R to be used as evaluation function f(n) = h(n).localSelection - the variant of local selection used.public HillClimbing(Function heuristic)
heuristic - the heuristic cost function h:S→R to be used as evaluation function f(n) = h(n).| Method Detail |
|---|
public Function getHeuristic()
HeuristicAlgorithm
getHeuristic in interface HeuristicAlgorithmpublic void setHeuristic(Function heuristic)
HeuristicAlgorithmAn heuristic cost function h:S→R is estimating the cost to get from a node n to a goal G. For several heuristic algorithms this heuristic function needs to be admissible
A heuristic cost function h is monotonic :⇔ the f-costs (with h) do not decrease in any path from the initial state ⇔ h obeys the triangular inequality
A simple improvement for heuristic functions is using pathmax.
setHeuristic in interface HeuristicAlgorithmheuristic - the heuristic cost function h:S→R estimating h*.
h will be embedded in the evaluation function f.public Function getEvaluation()
getEvaluation in interface EvaluativeAlgorithmgetEvaluation in interface HeuristicAlgorithmpublic Function complexity()
complexity in interface AlgorithmicTemplateAlgorithmicTemplate.solve(AlgorithmicProblem)public Function spaceComplexity()
spaceComplexity in interface AlgorithmicTemplateAlgorithmicTemplate.solve(AlgorithmicProblem)public boolean isOptimal()
GeneralSearchIf a search algorithm is not optimal, i.e. it might be content with solutions that are sub optimal only, then it can at most reliably find solutions, not best solutions. However, those solutions found still provide an upper bound to the optimal solution.
isOptimal in class GeneralSearchpublic boolean isCorrect()
ProbabilisticAlgorithm
isCorrect in interface ProbabilisticAlgorithmprotected java.util.Iterator createTraversal(GeneralSearchProblem problem)
GeneralSearchLays a linear order through the state space which the search can simply follow sequentially. Thus a traversal policy effectively reduces a search problem through a graph to a search problem through a linear sequence of states. Of course, the mere notion of a traversal policy does not yet solve the task of finding a good order of states, but only encapsulate it. Complete search algorithms result from traversal policies that have a linear sequence through the whole state space.
createTraversal in class GeneralSearchproblem - the problem whose state space to create a traversal iterator for.
GeneralSearch.OptionIterator
|
Orbital library 1.3.0: 11 Apr 2009 |
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||