Climbing to the top search (en adelante, Climbing) es una técnica de optimización matemática que pertenece a la familia de algoritmos de búsqueda local . El algoritmo es un método iterativo que comienza con una solución arbitraria al problema y luego trata de encontrar la mejor solución cambiando uno de los elementos de la solución paso a paso Si la solución da una solución mejor, se hace un incremento para obtener una nueva solución, y se hace hasta llegar a un punto en el que no se encuentra ninguna mejora.
Por ejemplo, la escalada se puede utilizar para resolver el problema del viajante de comercio . Es fácil encontrar una solución inicial en la que el vendedor visite todas las ubicaciones, pero que probablemente sea muy pobre en comparación con la solución óptima. El algoritmo comienza con esta decisión y realiza pequeños cambios en la decisión que modifican el orden en que se visitan los dos sitios. En última instancia, lo más probable es que se encuentre una ruta significativamente más corta.
Climbing encuentra soluciones óptimas en problemas de programación convexa , para otros problemas el algoritmo solo encontrará un óptimo local (una solución que no se puede mejorar moviéndose a nodos vecinos), que no es necesariamente la mejor solución ( óptimo global ) de todos posibles soluciones en ( dominios de soluciones admisibles ). Ejemplos de algoritmos que resuelven problemas convexos por búsqueda de vértices incluyen el método simplex para programación lineal y búsqueda binaria [1] . Como un intento de superar quedarse atascado en un óptimo local, puede intentar comenzar la búsqueda nuevamente (es decir, repetir la búsqueda local) o usar esquemas más complejos basados en iteración (como en la búsqueda local iterativa ), almacenamiento de memoria (como en búsqueda pasiva y búsqueda tabú ), o modificaciones de algoritmos estocásticos menos memorizados (como recocido simulado ).
La relativa simplicidad del algoritmo hace que el algoritmo sea popular entre los algoritmos de optimización. Es ampliamente utilizado en la teoría de la inteligencia artificial para llegar a un estado objetivo desde un punto de partida. El método para elegir el siguiente punto y el punto de partida puede variar, dando una serie de algoritmos relacionados. Si bien los algoritmos más avanzados, como el recocido simulado o la búsqueda tabú , pueden brindar mejores resultados, la escalada funciona igual de bien en algunas situaciones. La escalada a menudo funciona mejor que otros algoritmos cuando el tiempo de búsqueda es limitado, lo cual es importante en los sistemas en tiempo real, siempre que una pequeña cantidad de pasos converja en una buena solución (al óptimo o cerca de él). Otro caso extremo, el tipo de burbuja , se puede considerar como un algoritmo ascendente (cada permutación de elementos vecinos reduce el número de pares no ordenados), y este enfoque está lejos de ser óptimo incluso para N pequeños, ya que el número de permutaciones crece cuadráticamente.
Climbing es un algoritmo de corte de tiempo : devuelve una solución válida incluso si se interrumpe en cualquier momento.
Climbing trata de maximizar (o minimizar) la función objetivo , donde es un vector de valores continuos y/o discretos. En cada iteración, el ascenso modifica un elemento y determina si las correcciones realizadas mejoran el valor o no. (Tenga en cuenta que esto es diferente de los métodos de descenso de gradiente , que corrigen todos los elementos del vector en cada iteración de acuerdo con el gradiente ascendente). Ascendiendo, se acepta cualquier cambio que mejore y el proceso continúa hasta que alcanzamos un punto donde no se puede mejorar. ser encontrado en . Entonces decimos que es un "óptimo local".
En espacios vectoriales discretos, cada valor posible se puede representar como un vértice en un gráfico . La escalada atraviesa la gráfica de vértice a vértice, siempre aumentando (o disminuyendo) localmente el valor de la función hasta alcanzar un máximo local (o un mínimo local ) .
El ascenso simple selecciona el primer nodo en la dirección del vértice, mientras que el ascenso más pronunciado compara todos los descendientes y selecciona el nodo más cercano al vértice. Ambas formas fallan si no hay un nodo para escalar, lo que puede suceder si hay un máximo local que no es una solución. El ascenso más rápido es similar a la mejor búsqueda primero , que itera sobre todas las extensiones posibles de la ruta actual, no solo una.
Climb random search no comprueba todos los nodos vecinos antes de elegir un movimiento. En cambio, se elige un nodo vecino al azar y se toma una decisión (basada en la mejora dada por ese vecino) si moverse hacia ese nodo o revisar otro nodo.
El descenso de coordenadas realiza una búsqueda lineal a lo largo de una coordenada desde el punto actual en cada iteración. Algunas variantes de descenso de coordenadas eligen una dirección de coordenadas al azar en cada iteración.
La reanudación aleatoria del ascenso es un metaalgoritmo construido sobre el algoritmo de ascenso. También se conoce como escalada Shotgun Hill . El algoritmo realiza iterativamente el ascenso, eligiendo cada vez una inicial aleatoria . Se guarda el mejor valor y si un nuevo intento de escalada arroja un valor mejor que el memorizado, reemplaza el estado memorizado.
La reanudación aleatoria de la escalada es, en muchos casos, un algoritmo sorprendentemente eficiente. Resulta que a menudo es más eficiente gastar recursos de CPU explorando el espacio en lugar de optimizar cuidadosamente desde el estado inicial.
La escalada no necesariamente encontrará un máximo global, puede conducir a un máximo local . Este problema no ocurre si la función es convexa. Sin embargo, dado que no todas las funciones son convexas, es posible que el ascenso no encuentre un máximo global. Otros algoritmos de búsqueda local intentan superar este problema, como la búsqueda aleatoria de vértices los paseos aleatorios y el algoritmo de recocido simulado .
Las crestas son un problema difícil de escalar cuando se optimiza en un espacio continuo. Dado que el ascenso cambia solo un elemento del vector a la vez, cada paso solo cambia en la dirección de los ejes numéricos. Si la función objetivo forma una cresta estrecha que crece en una dirección distinta a los ejes de coordenadas (en el caso de la minimización, la función forma un desfiladero estrecho que disminuye en una dirección diferente a los ejes de coordenadas), entonces el ascenso puede zigzaguear por la cresta (o descender el desfiladero). Si las laderas de la arista (o desfiladero) son muy empinadas, el ascenso puede verse obligado a realizar pasos en zigzag muy pequeños, lo que puede ocasionar un tiempo innecesariamente largo para subir por la arista (o descender el desfiladero).
Los métodos de descenso de gradiente, por otro lado, pueden moverse en la dirección en que sube una cresta o desciende un barranco. Por lo tanto, el descenso del gradiente o el método del gradiente conjugado serán más preferibles si la función objetivo es diferenciable. Escalar, sin embargo, tiene la ventaja de no requerir diferenciabilidad, por lo que escalar puede ser preferible cuando la función objetivo es compleja.
Otro problema que a veces surge al escalar es una meseta. Una meseta ocurre cuando la superficie es lo suficientemente plana como para que los valores de la función objetivo sean indistinguibles de los valores de los nodos cercanos debido a las limitaciones de la precisión computacional de la máquina. En tales casos, el algoritmo de escalada no puede elegir la dirección del movimiento y puede ir en una dirección que no conduzca a una mejora en la función objetivo.
El artículo se basa en material extraído del artículo del Free On-line Dictionary of Computing (FOLDOC) con licencia de la GFDL (versión 1.3) .
de optimización | Métodos|
---|---|
unidimensional |
|
orden cero | |
Primer orden | |
segundo orden | |
estocástico | |
Métodos de programación lineal | |
Métodos de programación no lineal |