¡Esta es una revisión vieja del documento!
Es un algoritmo que se basa en tratar la evolución de estados de un problema como si de un grafo se tratase. Los nodos de este grafo son los posibles estados del problema, y estos pueden representar cualquier cosa, desde una coordenada 2d hasta la posición de las piezas de un puzle.
Los nodos se unen por aristas, estas corresponden a los cambios que hay que hacer para cambiar de un estado a otro. De un nodo salen tantas aristas como cambios inmediatos pueden hacerse.
A cada nodo del árbol se le asigna un coste, este coste corresponde a lo cerca que está un estado del estado final, es decir, la solución. La forma de calcular el coste es distinta para cada problema y a la vez importante para su resolución. Cuando el estado final es desconocido o complejo de calcular podemos indicar que el coste del nodo corresponde a la dificultad que plantea tomarlo, por ejemplo, en una carrera un terreno plano tendrá menos costo que una subida.
Para llevar a cabo el algoritmo A* necesitaremos…
Partiendo de un estado que será el denominado “estado actual”…
Como ejemplo al estudio del A* haremos un seguimiento del algoritmo en la resolución de un puzzle de 8 fichas, un 3×3.
Se seguirá el siguiente diagrama que parte de un posible estado (1) e intenta llegar a un objetivo (4) utilizando el A*. Aunque para cada problema el cálculo del parámetro h es distinto y en él radica la calidad de la solución, en este se ha utilizado la Distancia Manhattan (aunque se podría haber utilizado cualquier otra). La forma concreta de cálculo ha sido:
Siendo el número de piezas mal colocadas en cada iteración, con esto conseguimos dar más puntuación a aquel estado que tiene más fichas mal colocadas. La i, por lo tanto sería el número de pieza.
El hill-climbing (también llamado rather descent si su función evalua el coste en vez de la calidad) intenta, en una solución ya existente al problema (que podría haber sido creada de forma aleatoria), hacer cambios hasta conseguir soluciones mejores.
Representa la búsqueda como un escalador que busca la cima de un monte sólo que no sabe cual es esta. Un monte puede tener varios picos y el escalador puede tomar un pico como la cima.
Consiste en un bucle que busca incrementar la calidad de una situación, no depende de un árbol de búsqueda (nodos) por lo que ha de poder evaluar dichos nodos (o estados) independientemente. Cuando los estados a los cuales se puede acceder desde el estado actual tienen un valor equivalente el siguiente que se evaluará se seleccionará aleatoriamente. En este algoritmo se distinguen los siguientes conceptos:
Realmente el algoritmo lo que hace es iniciar en una solución aleatoria y hace búsqueda de una mejor y próxima solución hasta encontrar la que no se pueda mejorar. Puede restringirse el número de iteraciones.
http://en.wikipedia.org/wiki/Hill_climbing Clearly, if enough iterations are allowed, random-restart hill-climbing will eventually find the optimal solution. The success of hill-climbing depends very much on the shape of the state- space "surface": if there are only a few local maxima, random-restart hill-climbing will find a good solution very quickly. A realistic problems has surface that looks more like a porcupine. If the problem is NP-complete, then in all likelihood we cannot do better than exponential time. It follows that there must be an exponential number of local maxima to get stuck on. Usually, however, a reasonably good solution can be found after a small number of iterations.