Articulo de referencia

Subir colinas

Una superficie con un único máximo. Las técnicas de ascenso de colinas son idóneas para optimizar sobre este tipo de superficies y convergerán hacia el máximo global. En análisi...

Una superficie con un único máximo. Las técnicas de ascenso de colinas son idóneas para optimizar sobre este tipo de superficies y convergerán hacia el máximo global.

En análisis numérico , el ascenso de colinas es una técnica de optimización matemática que pertenece a la familia de la búsqueda local .

Se trata de un algoritmo iterativo que parte de una solución arbitraria a un problema y, a continuación, intenta encontrar una solución mejor mediante modificaciones incrementales . Si la modificación produce una solución mejor, se realiza otra modificación incremental a la nueva solución, y así sucesivamente hasta que no se puedan encontrar más mejoras.

Por ejemplo, el algoritmo de ascenso de colinas se puede aplicar al problema del viajante . Es fácil encontrar una solución inicial que visite todas las ciudades, pero probablemente será muy deficiente en comparación con la solución óptima. El algoritmo parte de dicha solución y realiza pequeñas mejoras, como cambiar el orden en que se visitan dos ciudades. Finalmente, es probable que se obtenga una ruta mucho más corta.

El algoritmo de ascenso de colinas encuentra soluciones óptimas para problemas convexos ; para otros problemas, solo encontrará óptimos locales (soluciones que no pueden mejorarse con ninguna configuración vecina), que no son necesariamente la mejor solución posible (el óptimo global ) de entre todas las soluciones posibles (el espacio de búsqueda ).

Ejemplos de algoritmos que resuelven problemas convexos mediante ascenso de colina incluyen el algoritmo simplex para programación lineal y la búsqueda binaria . [ 1 ] : 253

Para intentar evitar quedarse atascado en óptimos locales, se podrían usar reinicios (es decir, búsqueda local repetida), o esquemas más complejos basados ​​en iteraciones (como la búsqueda local iterada ), o en memoria (como la optimización de búsqueda reactiva y la búsqueda tabú ), o en modificaciones estocásticas sin memoria (como el recocido simulado ).

La relativa simplicidad del algoritmo lo convierte en una opción popular entre los algoritmos de optimización. Se utiliza ampliamente en inteligencia artificial para alcanzar un estado objetivo desde un nodo inicial. En algoritmos relacionados se utilizan diferentes opciones para los nodos siguientes y los nodos iniciales. Aunque algoritmos más avanzados como el recocido simulado o la búsqueda tabú pueden ofrecer mejores resultados, en algunas situaciones el ascenso de colina funciona igual de bien. El ascenso de colina suele producir un mejor resultado que otros algoritmos cuando el tiempo disponible para realizar una búsqueda es limitado, como en los sistemas en tiempo real, siempre que un pequeño número de incrementos converja en una buena solución (la solución óptima o una aproximación cercana). En el otro extremo, el ordenamiento de burbuja puede considerarse un algoritmo de ascenso de colina (cada intercambio de elementos adyacentes disminuye el número de pares de elementos desordenados), pero este enfoque dista mucho de ser eficiente incluso para N modesto, ya que el número de intercambios necesarios crece cuadráticamente.

El algoritmo de ascenso de colinas es un algoritmo que funciona en cualquier momento : puede devolver una solución válida incluso si se interrumpe en cualquier momento antes de que finalice.

Descripción matemática

El método de ascenso de colinas intenta maximizar (o minimizar) una función objetivo.F(incógnita){\displaystyle f(\mathbf {x} )}, dóndeincógnita{\displaystyle \mathbf {x} }es un vector de valores continuos y/o discretos. En cada iteración, el ascenso de colinas ajustará un solo elemento enincógnita{\displaystyle \mathbf {x} }y determinar si el cambio mejora el valor deF(incógnita){\displaystyle f(\mathbf {x} )}. (Tenga en cuenta que esto difiere de los métodos de descenso de gradiente , que ajustan todos los valores enincógnita{\displaystyle \mathbf {x} }en cada iteración según la pendiente de la colina.) Con el ascenso de colinas, cualquier cambio que mejoreF(incógnita){\displaystyle f(\mathbf {x} )}se acepta y el proceso continúa hasta que no se pueda encontrar ningún cambio para mejorar el valor deF(incógnita){\displaystyle f(\mathbf {x} )}. Entoncesincógnita{\displaystyle \mathbf {x} }Se dice que es "localmente óptimo".

En espacios vectoriales discretos, cada valor posible paraincógnita{\displaystyle \mathbf {x} }puede visualizarse como un vértice en un grafo . El ascenso de colinas seguirá el grafo de vértice a vértice, aumentando (o disminuyendo) siempre localmente el valor deF(incógnita){\displaystyle f(\mathbf {x} )}, hasta un máximo local (o mínimo local )incógnitametro{\displaystyle x_{m}}se alcanza.

Variantes

En el método de ascenso de colinas simple , se elige el primer nodo más cercano, mientras que en el método de ascenso de colinas de máxima pendiente se comparan todos los sucesores y se elige el más cercano a la solución. Ambos métodos fallan si no hay un nodo más cercano, lo que puede ocurrir si existen máximos locales en el espacio de búsqueda que no son soluciones. El método de ascenso de colinas de máxima pendiente es similar a la búsqueda primero en amplitud , que prueba todas las posibles extensiones de la ruta actual en lugar de solo una. [ 2 ]

El método de ascenso de colina estocástico no examina a todos los vecinos antes de decidir cómo moverse. En cambio, selecciona un vecino al azar y decide (en función de la mejora que haya experimentado) si moverse a ese vecino o examinar otro. El método de ascenso de colina de primera elección implementa el ascenso de colina estocástico generando vecinos aleatoriamente hasta que se genera uno mejor, el cual se elige posteriormente. Este método funciona bien cuando los estados tienen muchos sucesores posibles (por ejemplo, miles). [ 3 ]

El método de descenso de coordenadas realiza una búsqueda lineal a lo largo de una dirección de coordenadas en el punto actual en cada iteración. Algunas versiones de este método seleccionan aleatoriamente una dirección de coordenadas diferente en cada iteración.

El algoritmo de ascenso de colinas con reinicio aleatorio es un metaalgoritmo construido sobre el algoritmo de ascenso de colinas. También se conoce como ascenso de colinas tipo escopeta . Realiza el ascenso de colinas de forma iterativa, cada vez con una condición inicial aleatoria.incógnita0{\displaystyle x_{0}}. El mejorincógnitametro{\displaystyle x_{m}}se mantiene: si una nueva carrera de ascenso a la colina produce un mejorincógnitametro{\displaystyle x_{m}}que el estado almacenado, reemplaza el estado almacenado.

Problemas

Máximos locales

Una superficie con dos máximos locales. (Solo uno de ellos es el máximo global). Si un algoritmo de ascenso de colinas comienza en una ubicación desfavorable, puede converger hacia el máximo inferior.

El método de ascenso de colinas no necesariamente encuentra el máximo global, sino que puede converger en un máximo local . Este problema no se presenta si la heurística es convexa. Sin embargo, dado que muchas funciones no son convexas, el ascenso de colinas a menudo no logra alcanzar un máximo global. Otros algoritmos de búsqueda local intentan superar este problema, como el ascenso de colinas estocástico , los paseos aleatorios y el recocido simulado .

A pesar de los numerosos máximos locales en este gráfico, aún es posible encontrar el máximo global mediante recocido simulado. Desafortunadamente, la aplicabilidad del recocido simulado depende del problema específico, ya que se basa en encontrar saltos fortuitos que mejoren la posición. En ejemplos tan extremos, el método de ascenso de colinas probablemente producirá un máximo local.

Crestas y callejones

Una cresta

Las crestas representan un problema complejo para los algoritmos de ascenso de colinas que optimizan en espacios continuos. Dado que estos algoritmos solo ajustan un elemento del vector a la vez, cada paso se mueve en una dirección alineada con el eje. Si la función objetivo crea una cresta estrecha que asciende en una dirección no alineada con el eje (o, si el objetivo es minimizar, un callejón estrecho que desciende en una dirección no alineada con el eje), el algoritmo solo puede ascender la cresta (o descender el callejón) mediante un movimiento en zigzag. Si los lados de la cresta (o del callejón) son muy empinados, el algoritmo puede verse obligado a dar pasos muy pequeños mientras zigzaguea hacia una mejor posición. Por lo tanto, puede tardar un tiempo excesivo en ascender la cresta (o descender el callejón).

Por el contrario, los métodos de descenso de gradiente pueden moverse en cualquier dirección en la que la cresta o el callejón asciendan o desciendan. Por lo tanto, el descenso de gradiente o el método del gradiente conjugado generalmente se prefieren a la escalada de colinas cuando la función objetivo es diferenciable. Sin embargo, los métodos de escalada de colinas tienen la ventaja de no requerir que la función objetivo sea diferenciable, por lo que pueden preferirse cuando la función objetivo es compleja.

Meseta

Otro problema que a veces se presenta con el algoritmo de ascenso de colinas es la meseta. Esta se produce cuando el espacio de búsqueda es plano, o lo suficientemente plano como para que el valor devuelto por la función objetivo sea indistinguible del valor devuelto para regiones cercanas debido a la precisión que utiliza la máquina para representarlo. En tales casos, el algoritmo de ascenso de colinas puede no ser capaz de determinar en qué dirección debe avanzar y puede deambular en una dirección que nunca conduce a una mejora.

El algoritmo de pseudocódigo de ascenso de colina en espacio discreto es nodoactual := nodoinicial bucle hacer L := VECINOS(nodoactual) nextEval := −INF nextNode := NULL para todo x en L hacer si EVAL(x) > nextEval entonces nextNode := x nextEval := EVAL(x) si nextEval ≤ EVAL(currentNode) entonces // Devuelve el nodo actual ya que no existen mejores vecinos. devolver nodo actual nodoactual := nodosiguiente
El algoritmo de ascenso continuo de colinas en el espacio es currentPoint := initialPoint // el vector de magnitud cero es común stepSize := initialStepSizes // un vector de todos 1 es común aceleración := algunaAceleración // un valor como 1.2 es común candidato[0] := −aceleración candidato[1] := −1 / aceleración candidato[2] := 1 / aceleración candidato[3] := aceleración mejorPuntuación := EVAL(PuntoActual) bucle hacer antesDeLaPuntuación := mejorPuntuación para cada elemento i en currentPoint hacer beforePoint := currentPoint[i] mejorPaso := 0 para j de 0 a 3 hacer // probar cada una de las 4 ubicaciones candidatas paso := tamañoPaso[i] × candidato[j] currentPoint[i] := beforePoint + step puntuación := EVAL(currentPoint) si puntuación > mejor puntuación entonces mejorPuntuación := puntuación mejorPaso := paso si bestStep es 0 entonces currentPoint[i] := beforePoint stepSize[i] := stepSize[i] / aceleración demás currentPoint[i] := beforePoint + bestStep stepSize[i] := bestStep // aceleración Si (bestScore − beforeScore) < epsilon, entonces devuelve currentPoint.

Contraste entre algoritmo genético y optimización aleatoria .

Véase también

Referencias

  • Russell, Stuart J.; Norvig , Peter (2003), Inteligencia artificial: un enfoque moderno (2.ª  ed.), Upper Saddle River, Nueva Jersey: Prentice Hall, pp. 111–114 , ISBN  0-13-790395-2
  1. Skiena, Steven (2010). Manual de diseño de algoritmos (2.ª ed.). Springer Science+Business Media . ISBN  978-1-849-96720-4.
  2. Este artículo se basa en material tomado de Hill+climbing en el Free On-line Dictionary of Computing antes del 1 de noviembre de 2008 e incorporado bajo los términos de "relicencia" de la GFDL , versión 1.3 o posterior.
  3. Russell, Stuart J.; Norvig, Peter (2022). Inteligencia artificial: un enfoque moderno . Serie Prentice Hall en inteligencia artificial. Ming-wei Chang, Jacob Devlin, Anca Dragan, David Forsyth, Ian Goodfellow, Jitendra Malik, Vikash Mansinghka, Judea Pearl, Michael J. Wooldridge (4.ª ed., edición global). Boston: Pearson. pág. 131. ISBN   978-1-292-40117-1.

Lecturas adicionales

  • Lasry, George (2018). Una metodología para el criptoanálisis de cifrados clásicos con metaheurísticas de búsqueda (PDF) . Kassel University Press . ISBN 978-3-7376-0459-8.
  • Logotipo de WikibooksEscalada de colinas en Wikibooks