Saltar al contenido
coden

Búsqueda local y recocido simulado: un viajante por las capitales regionales checas

El problema de optimización, el problema del viajante, la ascensión de colinas con el vecindario 2-opt, los mínimos locales y los reinicios, el recocido simulado, la temperatura y el esquema de enfriamiento — sobre una ruta por trece capitales regionales con un óptimo conocido.

13 minutos Matěj Žalmánek 2026-10-15

Serie Fundamentos de IA Parte 26 de 52
  1. Mapa de la inteligencia artificial: qué es cada cosa y cómo encaja todo
  2. Breve historia de la inteligencia artificial: de Turing a los modelos de lenguaje
  3. Datos, modelo, entrenamiento, inferencia: los conceptos básicos en un solo ejemplo
  4. Cómo leer la notación matemática: símbolos, subíndices, sumatorios y cuantificadores
  5. Conjuntos y relaciones: las piezas con las que se construyen las definiciones en IA
  6. Funciones y aplicaciones: por qué todo modelo de IA es una función
  7. Lógica y demostraciones: las reglas con las que se razona en IA
  8. Grafos y árboles: la estructura sobre la que se apoyan la búsqueda y las redes neuronales
  9. Álgebra lineal para aprendizaje automático: vectores, matrices y por qué la IA sobre todo multiplica
  10. Derivadas, gradiente y regla de la cadena: cómo sabe un modelo en qué dirección aprender
  11. Descenso de gradiente: cómo aprende un modelo
  12. Qué es la probabilidad: del lanzamiento de un dado a los axiomas de Kolmogórov
  13. Probabilidad condicionada y teorema de Bayes: cómo cambiar una estimación cuando te enteras de algo nuevo
  14. Variable aleatoria y función de distribución: una sola función que lo dice todo sobre la distribución
  15. Función de densidad y función de probabilidad: por qué una variable continua tiene probabilidad cero en cada punto
  16. Esperanza, varianza y covarianza: dónde está una distribución, qué anchura tiene y qué se relaciona con qué
  17. Resumen de las distribuciones de probabilidad: Bernoulli, binomial, Poisson, uniforme, normal y exponencial
  18. Ley de los grandes números y teorema central del límite: por qué las medias se comportan de forma tan predecible
  19. Estadística y estimación de parámetros: máxima verosimilitud, MAP e intervalos de confianza
  20. Teoría de la información: entropía, entropía cruzada y divergencia KL, el origen de las funciones de pérdida
  21. Búsqueda en el espacio de estados: BFS, DFS, UCS y A* con animaciones
  22. Juegos y adversarios: minimax, poda alfa-beta y Monte Carlo tree search
  23. Satisfacción de restricciones: backtracking, propagación de restricciones y AC-3 con un sudoku y un mapa de regiones checas
  24. Lógica y sistemas basados en conocimiento: encadenamiento hacia delante y hacia atrás, resolución y sistemas expertos
  25. Planificación: STRIPS, el mundo de bloques, heurísticas a partir de la relajación y la planificación en los agentes de IA
  26. Búsqueda local y recocido simulado: un viajante por las capitales regionales checas
  27. Algoritmos genéticos: población, cruce, mutación y selección en una mochila para la excursión
  28. Estrategias evolutivas y programación genética: de la regla de un quinto a la ley de Kepler
  29. Optimización por colonia de hormigas: cómo un rastro de feromona encuentra un camino corto
  30. Optimización por enjambre de partículas: inercia, experiencia propia y experiencia del enjambre
  31. Neuroevolución: evolución de los pesos y la forma de las redes neuronales, y el algoritmo NEAT
  32. Conjuntos difusos y funciones de pertenencia: cómo escribir «algo cálido»
  33. Lógica difusa y probabilidad: por qué «algo cálido» no significa «probablemente cálido»
  34. Lógica difusa: t-normas, implicaciones y reglas SI–ENTONCES
  35. Control difuso: Mamdani y Sugeno, del ventilador al péndulo invertido sobre un carro
  36. Agrupamiento difuso: el algoritmo fuzzy c-means y los puntos entre clusters
  37. Sistemas neuro-difusos (ANFIS): reglas difusas que aprenden de los datos
  38. Cadenas de Markov: matriz de transición, distribución estacionaria y PageRank
  39. Modelos ocultos de Márkov: el algoritmo de Viterbi y el casino deshonesto
  40. Redes bayesianas: por qué está mojada la hierba y qué significa eso para el aspersor
  41. El filtro de Kalman: cómo estimar a partir de mediciones imprecisas dónde está un coche y a qué velocidad va
  42. Tipos de aprendizaje automático: supervisado, no supervisado, semisupervisado y más
  43. Prompts, contexto y RAG: cómo darle a un modelo la información correcta
  44. Autocodificadores variacionales (VAE): imágenes nuevas a partir de un espacio latente continuo
  45. Redes generativas adversarias (GAN): el falsificador contra el detective
  46. Modelos de difusión: cómo el ruido puro se convierte en una imagen
  47. Procesos de decisión de Markov: estados, acciones, recompensas y ecuaciones de Bellman
  48. Q-learning y DQN: aprender el valor de las acciones, de la tabla a la red neuronal
  49. Gradiente de la política y PPO: aprender directamente la política
  50. Cómo funciona un agente de IA: un modelo de lenguaje en un bucle con herramientas
  51. Programación con agentes de IA: encargo, pruebas y revisión
  52. Evaluación y seguridad de los sistemas de IA: cómo medir y cómo vigilar

Temario completo de la serie 52 de 83 temas publicados

Qué te llevarás
  • Por qué la ascensión de colinas se queda atascada en un mínimo local y cuándo ayudan los reinicios aleatorios.
  • Cómo el recocido simulado acepta pasos peores y por qué la temperatura y el esquema de enfriamiento importan tanto.
  • Dónde vive hoy la misma idea — del diseño de chips a la temperatura de los modelos de lenguaje.

Conviene conocer antes: Búsqueda en el espacio de estados: BFS, DFS, UCS y A* con animaciones

El herrero que quiere una hoja resistente no deja que el metal al rojo se enfríe de golpe: lo enfría despacio. Así los átomos tienen tiempo de encontrar una disposición regular con la menor energía. Si enfriara el metal de una vez, los átomos se quedarían congelados donde estuvieran y la hoja sería frágil. En 1983 unos físicos se dieron cuenta de que exactamente eso les pasa también a los algoritmos que buscan la mejor solución: si solo van «cuesta abajo», se congelan en el primer hoyo. Así nació el recocido simulado — y con él una de las ideas más útiles de la optimización.

Con esta parte empieza el módulo sobre algoritmos inspirados en la naturaleza. Continúa la parte Búsqueda en el espacio de estados, donde la ascensión de colinas y el recocido aparecieron por primera vez.

1. El problema de optimización

Definición — problema de optimización y vecindario

Se da un conjunto de soluciones factibles S y una función objetivo f : S → ℝ. Buscamos s* = argmins ∈ S f(s) — la solución con el menor valor (en la maximización, al revés).

Un vecindario es una aplicación N : S → 2S que asigna a cada solución el conjunto de soluciones «vecinas», las que se obtienen de ella con un pequeño cambio. Una solución s es un mínimo local si f(s) ≤ f(s′) para todo s′ ∈ N(s), y un mínimo global si se cumple para todo s′ ∈ S.

Dicho de forma sencilla

A diferencia de un laberinto, no nos interesa el camino hacia la solución, sino la solución misma: la ruta más corta, el mejor horario, la distribución más barata. La función objetivo dice lo buena que es una solución. El vecindario dice qué son los «pequeños retoques» — y un mínimo local es una solución que ningún pequeño retoque puede mejorar, aunque cerca pueda haber otra mucho mejor.

2. El problema del viajante

Un viajante tiene que recorrer las trece capitales regionales de Chequia, pasar por cada una exactamente una vez y volver al punto de partida. ¿Qué ruta es la más corta? Las distancias las medimos en línea recta.

Definición — problema del viajante (TSP)

Se dan n ciudades y las distancias d(i, j). Una solución es una permutación cíclica π de las ciudades; su longitud es f(π) = ∑k=1n d(πk, πk+1), donde πn+1 = π1.

Hay (n − 1)! / 2 circuitos distintos (sin importar dónde ni en qué sentido empiezan). La versión de decisión del problema es NP-completa.

Dicho de forma sencilla

Para 13 ciudades hay 239 500 800 rutas posibles. Para veinte ya son más de 60 000 billones. Probarlas todas es imposible, y nadie conoce un algoritmo que en general encuentre la ruta más corta de forma sustancialmente más rápida que en tiempo exponencial.

número de circuitos = n! / (n · 2) = (n − 1)! / 2

n!
todos los órdenes en que se pueden enumerar n ciudades — ese es el número de permutaciones; pero cada circuito aparece contado entre ellas varias veces
n
un circuito no tiene principio: Praha → Brno → … → Praha es el mismo recorrido que Brno → … → Praha → Brno. Cada circuito puede empezar en cualquiera de las n ciudades, de ahí n veces menos
2
la distancia de ida es la misma que la de vuelta, así que un circuito recorrido al revés es el mismo recorrido con la misma longitud
Para 13 ciudades: 12! / 2 = 479 001 600 / 2 = 239 500 800.
Ejemplo — la distancia en línea recta de Praha a Brno

Las ciudades vienen dadas por la latitud φ y la longitud λ en grados. Dentro de Chequia basta una proyección plana aproximada: un grado de latitud mide 110,57 km y un grado de longitud 111,32 · cos φ0 km, donde φ0 = 49,8° es el centro del país (los meridianos convergen hacia el polo). Entonces

d(i, j) = √( (71,85 · Δλ)2 + (110,57 · Δφ)2 ).

Praha (50,08° N, 14,42° E), Brno (49,20°, 16,61°)

Δλ = 2,19° → 71,85 · 2,19 = 157,35 km hacia el este

Δφ = −0,88° → 110,57 · 0,88 = 97,30 km hacia el sur

d = √(157,352 + 97,302) = √(24 759 + 9 467) = √34 226 ≈ 185,0 km

Frente al cálculo exacto sobre una esfera, el error a estas distancias ronda el 1 %; para comparar rutas no importa.

Trece ciudades son todavía pocas para calcular el óptimo de forma exacta — con la programación dinámica de Held–Karp sobre subconjuntos de ciudades, que necesita 2n · n2 pasos en lugar de (n − 1)!. El circuito más corto mide 1 060,4 km. Gracias a ello veremos con exactitud lo cerca del óptimo que llega cada uno de los algoritmos siguientes:

Algoritmo — programación dinámica de Held–Karp (1962)

Numeremos las ciudades 0, …, n − 1 y empecemos en la ciudad 0. Para cada conjunto de ciudades M ∋ 0 y cada ciudad j ∈ M, sea D(M, j) la longitud del camino más corto que sale de 0, pasa exactamente por las ciudades de M y termina en j. Entonces

D({0}, 0) = 0,   D(M, j) = mink ∈ M ∖ {j} [ D(M ∖ {j}, k) + d(k, j) ],

y la longitud del circuito óptimo es minj ≠ 0 [ D(todas las ciudades, j) + d(j, 0) ]. Hay como mucho 2n · n valores de D, y cada uno es el mínimo de como mucho n números.

n = 13:   213 · 132 = 8 192 · 169 = 1 384 448 pasos

recorrer todos los órdenes desde un inicio fijo: 12! = 479 001 600 — unas 346 veces más

Dicho de forma sencilla

Cómo hayas pasado por Plzeň, Karlovy Vary y Ústí no importa para el resto del viaje, salvo dos cosas: qué ciudades llevas ya a tus espaldas y dónde estás ahora mismo. Basta, pues, con recordar el camino más corto para cada uno de esos pares, no todos los órdenes. Para 13 ciudades es rápido, pero 2n sigue creciendo de forma exponencial — para 60 ciudades la tabla tendría más de 1019 filas.

0100200300 050100150 oeste → este (km) sur → norte (km) 1 060,4 km Praha Brno Ostrava Plzeň Liberec Olomouc Ústí nad Labem Hradec Králové České Budějovice Pardubice Zlín Jihlava Karlovy Vary
El circuito más corto por las capitales regionales (en línea recta)

3. Ascensión de colinas y el vecindario 2-opt

Definición — el movimiento 2-opt

Un movimiento 2-opt quita del circuito dos aristas no adyacentes (a, b) y (e, f) y las sustituye por las aristas (a, e) y (b, f) — es decir, invierte el orden de las ciudades entre b y e. La longitud cambia en Δ = d(a, e) + d(b, f) − d(a, b) − d(e, f). El vecindario de una ruta por n ciudades tiene (n − 1)(n − 2) / 2 movimientos.

Dicho de forma sencilla

Donde una ruta se cruza consigo misma, casi seguro que es más larga de lo necesario. El movimiento 2-opt deshace el cruce: corta la ruta en dos puntos y da la vuelta a uno de los trozos. El cambio de longitud se calcula con cuatro distancias; no hace falta recalcular toda la ruta.

Δ = d(a, e) + d(b, f) − (d(a, b) + d(e, f))

Δ
cuánto se alarga el circuito; un Δ negativo significa que se acorta. Tanto la ascensión de colinas como el recocido deciden según su signo, por eso necesitamos calcularlo de forma barata
d(a, e) + d(b, f)
las dos aristas nuevas con las que volvemos a unir los extremos cortados — se suman porque la ruta las gana
d(a, b) + d(e, f)
las dos aristas que hemos cortado — se restan porque desaparecen de la ruta. El tramo entre b y e solo se recorre al revés y las distancias son simétricas, así que su longitud no cambia y no aparece en la fórmula
Por eso bastan cuatro distancias en lugar de trece: todo lo demás de la ruta se queda igual.
Algoritmo — ascensión de colinas (descenso más pronunciado)

Empieza desde una solución aleatoria s. Repite: encuentra s′ ∈ N(s) con la menor f(s′); si f(s′) < f(s), pasa a s′; si no, termina — s es un mínimo local.

Dicho de forma sencilla

Pruebas todas las formas de deshacer cruces, eliges la que más acorta la ruta y repites. Cuando ya ninguna ayuda, te detienes. Para trece ciudades son 66 movimientos por paso.

def delta(c, i, j):                    # movimiento 2-opt: invierte c[i..j]
    a, b = c[i - 1], c[i]
    e, f = c[j], c[(j + 1) % len(c)]
    return d(a, e) + d(b, f) - d(a, b) - d(e, f)

def horolezec(c):
    n = len(c)
    while True:
        tahy = [(i, j) for i in range(1, n - 1) for j in range(i + 1, n)]
        i, j = min(tahy, key=lambda t: delta(c, *t))   # descenso más pronunciado
        if delta(c, i, j) >= 0:                        # nada acorta la ruta
            return c                                    # mínimo local
        c = c[:i] + c[i:j + 1][::-1] + c[j + 1:]

La primera ciudad la dejamos en su sitio (i ≥ 1) — un circuito no tiene principio, así que moverla no aportaría nada nuevo. Para n = 13, los pares 1 ≤ i < j ≤ 12 dan exactamente 12 · 11 / 2 = 66 movimientos.

Desde un circuito aleatorio de 2 402 km, la ascensión de colinas llega en 8 pasos a 1 065,8 km — y ahí se detiene. Al óptimo le faltan solo 5 km, pero ya ningún movimiento 2-opt por sí solo acorta la ruta. El escalador está en un mínimo local y no lo sabe:

0100200300 050100150 oeste → este (km) sur → norte (km) 1 065,8 km Praha Brno Ostrava Plzeň Liberec Olomouc Ústí nad Labem Hradec Králové České Budějovice Pardubice Zlín Jihlava Karlovy Vary
Dónde se quedó atascado el escalador; en naranja discontinuo, el óptimo

4. Dónde se atasca el escalador

De cien inicios aleatorios, la ascensión de colinas terminó en el óptimo 61 veces. En los 39 casos restantes se quedó atascada en otro sitio, en el peor de ellos en 1 162,6 km — cien kilómetros más. Las trampas son tres:

  • Mínimo local — un hoyo del que todo paso lleva cuesta arriba.
  • Meseta — todos los vecinos son igual de buenos, así que el escalador no sabe adónde ir.
  • Cresta — existe una buena dirección, pero no coincide con ningún movimiento individual; solo se llega a ella pasando por soluciones peores.
Ejemplo — por qué el escalador no sale de 1 065,8 km

La ascensión de colinas desde el primer inicio terminó en el circuito Zlín → Ostrava → Olomouc → Pardubice → Hradec Králové → Liberec → Ústí nad Labem → Karlovy Vary → Plzeň → Praha → České Budějovice → Jihlava → Brno → Zlín. Calculamos Δ para los 66 movimientos 2-opt: uno de ellos (invertir todo salvo la primera ciudad) da el mismo circuito en sentido contrario y Δ = 0; todos los demás alargan la ruta. El más barato de ellos invierte el par Pardubice – Hradec Králové:

a = Olomouc, b = Pardubice, e = Hradec Králové, f = Liberec

Δ = d(a, e) + d(b, f) − d(a, b) − d(e, f)

  = 122,9 + 95,9 − 116,8 − 83,0 = +19,0 km

Así que cualquier movimiento individual alarga la ruta al menos 19,0 km — y eso que el óptimo es solo 5,4 km más corto. El camino hacia él pasa por circuitos peores, y esos el escalador no los acepta nunca.

El remedio más sencillo son los reinicios aleatorios: lanzar al escalador de nuevo desde otro punto y quedarse con el mejor resultado. Si un inicio tiene éxito con probabilidad 0,61, de cinco inicios al menos uno tendrá éxito con probabilidad 1 − 0,395 ≈ 99 %. Para un problema pequeño basta. En uno grande hay millones de hoyos y harían falta demasiados reinicios.

Pr = 1 − (1 − p)r

Pr
la probabilidad de que al menos uno de los r inicios encuentre el óptimo — la calculamos mediante el complemento, porque «al menos uno» tiene muchas formas, mientras que «ninguno» solo una
1 − p
la probabilidad de que un inicio fracase (en nuestro caso 0,39 de cien intentos)
r
el número de inicios en el exponente: los inicios son independientes (cada uno tiene una semilla aleatoria distinta), así que las probabilidades de fracaso se multiplican
¿Cuántos inicios para un 99,9 %? De 0,39r ≤ 0,001 se sigue r ≥ ln 0,001 / ln 0,39 = 7,34, es decir, 8 inicios.

5. Recocido simulado

Algoritmo — recocido simulado

Empieza desde una solución aleatoria s con una temperatura inicial T0. En cada iteración:

  1. elige un vecino aleatorio s′ ∈ N(s) y calcula Δ = f(s′) − f(s);
  2. si Δ ≤ 0, pasa a s′; si no, pasa a él con probabilidad e−Δ/T (el criterio de Metropolis);
  3. baja la temperatura según el esquema de enfriamiento, por ejemplo T ← α · T con 0 < α < 1.

Devuelve la mejor solución que hayas visto por el camino.

Dicho de forma sencilla

Un escalador que de vez en cuando se permite un paso en la dirección equivocada. Al principio, mientras «hace calor», da muchos pasos así — salta de hoyo en hoyo y explora todo el paisaje. A medida que se enfría, se vuelve cada vez más prudente, y al final ya solo desciende al valle más profundo que ha encontrado por el camino. Un empeoramiento pequeño lo acepta con más facilidad que uno grande.

P(aceptar) = min(1, e−Δ / T)

P(aceptar)
la probabilidad con la que pasamos al vecino propuesto; en el programa sorteamos u de forma uniforme en [0, 1) y aceptamos el movimiento cuando u < P
min(1, …)
para una mejora (Δ ≤ 0) la exponencial es ≥ 1 y una probabilidad no puede pasar de 1 — así que un paso mejor se acepta siempre, igual que en la ascensión de colinas
Δ
cuánto peor es el vecino, en km. Está en el exponente con signo negativo, así que cada kilómetro más de empeoramiento multiplica la probabilidad por el mismo número menor que 1 — los empeoramientos grandes son exponencialmente más raros que los pequeños
T
la temperatura, en las mismas unidades que Δ (km). Divide a Δ y con ello fija la escala: un empeoramiento de T km pasa con probabilidad 1/e ≈ 0,37 a cualquier temperatura. Una T alta hace «pequeños» los empeoramientos grandes; T → 0 los prohíbe todos
Solo importa el cociente Δ / T: lo grande que es el empeoramiento en comparación con la temperatura actual.

La regla para aceptar un paso peor viene de la física: en 1953 Nicholas Metropolis y sus colegas la usaron para simular átomos en equilibrio térmico, donde la probabilidad de un estado con energía E es proporcional a e−E/kT. Para la optimización la adaptaron de forma independiente en 1983 Kirkpatrick, Gelatt y Vecchi, de IBM — y dos años después, también de forma independiente, el físico eslovaco Vladimír Černý, precisamente sobre el problema del viajante.

import math, random

def zihani(c, T0=200, Tk=0.5, K=10_000):
    alfa = (Tk / T0) ** (1 / K)          # enfriamiento geométrico
    T, delka = T0, delka_okruhu(c)
    nej, nej_delka = c, delka
    for k in range(K):
        i, j = sorted(random.randint(1, len(c) - 1) for _ in range(2))
        if i != j:                          # i = j: ningún movimiento
            D = delta(c, i, j)
            if D <= 0 or random.random() < math.exp(-D / T):
                c = c[:i] + c[i:j + 1][::-1] + c[j + 1:]
                delka += D
                if delka < nej_delka:
                    nej, nej_delka = c, delka
        T *= alfa
    return nej

Así es en la realidad: las seis primeras iteraciones de nuestra ejecución y seis iteraciones de su mitad. p es la probabilidad de aceptación min(1, e−Δ/T), u el número sorteado; un movimiento que empeora pasa cuando u < p.

kTΔ (km)puAceptadoLongitud (km)
1200,0−310,01,000—sí1 941,4
2199,9+26,50,8760,293sí1 967,9
3199,8−49,21,000—sí1 918,7
4199,6−111,21,000—sí1 807,5
5199,5+146,60,4800,144sí1 954,1
6199,4−127,81,000—sí1 826,3
500110,0+147,34,0 · 10−70,065no1 060,4
500210,0+86,21,8 · 10−40,838no1 060,4
500310,0— (i = j)——no1 060,4
500410,0+73,06,6 · 10−40,660no1 060,4
500510,0+82,42,6 · 10−40,747no1 060,4
500610,0+212,15,8 · 10−100,262no1 060,4

Al principio, con T ≈ 200, pasa incluso un movimiento que alarga la ruta 146,6 km — la probabilidad es 0,48 y salió u = 0,14. A mitad de la ejecución T = 10 y la ruta ya está en el óptimo; los movimientos que la alargarían 70 kilómetros o más tienen una probabilidad inferior al uno por mil y se rechazan todos. A veces los dos números aleatorios caen en el mismo sitio (i = j) y la iteración no propone nada — en toda la ejecución ocurrió 824 veces.

Teorema — la distribución de Boltzmann (formulación actual)

Si mantenemos fija la temperatura T y proponemos los vecinos de forma simétrica (el vecino s′ se propone desde s con la misma probabilidad que s desde s′ — en 2-opt se cumple, porque el mismo movimiento (i, j) lleva también de vuelta), el proceso de Metropolis es una cadena de Markov cuya distribución estacionaria es

πT(s) = e−f(s)/T / Z(T)

πT(s)
con qué frecuencia, tras vagar mucho tiempo a la temperatura T, nos encontramos en la solución s
e−f(s)/T
el peso de una solución: cuanto más corta la ruta f(s), mayor. Es exactamente el peso que equilibra el criterio de Metropolis — el cociente de los pesos de dos vecinos es e−Δ/T
Z(T)
la suma de los pesos de todas las soluciones; dividimos por ella para que las probabilidades sumen 1

Demostración (condición de equilibrio detallado): para vecinos con f(s′) = f(s) + Δ, Δ > 0, el flujo de s a s′ es proporcional a π(s) · e−Δ/T y el flujo de vuelta a π(s′) · 1. Para π = πT ambas expresiones valen e−f(s′)/T / Z, los flujos se igualan y la distribución ya no cambia.

óptimo (1 060,4 km) frente a la trampa del escalador (1 065,8 km): cociente de frecuencias e5,38/T

T = 100: 1,06   T = 10: 1,71   T = 1: 217   T = 0,5: 47 089

Dicho de forma sencilla

A temperatura alta, el recocido está casi con la misma frecuencia en el óptimo que en la trampa cinco kilómetros más larga — no los distingue. A medida que baja la temperatura, el peso se desplaza hacia las rutas más cortas: con T = 1 el óptimo es doscientas veces más frecuente, con 0,5 casi cincuenta mil veces. El enfriamiento va «afilando» así la distribución hasta que solo queda el valle más profundo. El problema es que solo alcanza el equilibrio una cadena que tiene tiempo de sobra para vagar — de ahí el enfriamiento lento.

6. Temperatura y esquema de enfriamiento

¿Qué probabilidad tiene un paso que alarga la ruta 20 km? Depende de la temperatura:

Temperatura T200501020,5
e−20/T0,9050,6700,1350,000 05≈ 4 · 10−18

A 200 pasa casi cualquier paso que empeora; a 0,5, ninguno — en ese momento el recocido se comporta como la ascensión de colinas. El esquema de enfriamiento decide cuánto tiempo «vaga» el algoritmo y cuánto «desciende». La salida más barata de la trampa del escalador (+19,0 km, ver más arriba) pasaría con T = 50 con probabilidad 0,68, con T = 10 con 0,15 y con T = 2 prácticamente nunca.

Tk = T0 · αk,   α = (TK / T0)1/K

Tk
la temperatura en la iteración k-ésima — determina qué empeoramientos se aceptan todavía en ese momento
T0
la temperatura inicial; se elige de modo que al principio pase la mayoría de los empeoramientos — aquí 200 km, más que un movimiento 2-opt típico sobre una ruta aleatoria
α
el coeficiente de enfriamiento, justo por debajo de 1; lo calculamos a partir de la temperatura final TK y del número de iteraciones K, para que la ejecución termine exactamente donde queremos
k
el número de iteración en el exponente: cada iteración multiplica la temperatura por el mismo número, así que en el mismo número de iteraciones la temperatura baja siempre en la misma proporción — de 200 a 100 se tarda lo mismo que de 1 a 0,5

α = (0,5 / 200)1/10 000 = 0,00250,0001 = 0,999401

la temperatura se reduce a la mitad cada ln 0,5 / ln α ≈ 1 157 iteraciones

T1 000 = 109,9,   T3 000 = 33,1,   T5 000 = √(200 · 0,5) = 10,0

Teorema — convergencia del recocido

Si la temperatura baja lo bastante despacio, de forma logarítmica: Tk = c / ln(k + 1) con una constante c lo bastante grande, la probabilidad de que el recocido termine en el mínimo global tiende a uno al crecer el número de iteraciones (Hajek, 1988).

«Lo bastante grande» significa exactamente c ≥ d*, donde d* es la profundidad del mínimo local no global más profundo: lo mínimo que tiene que subir un camino que sale de él antes de llegar a una solución mejor.

si bastara c = 20 km, la temperatura 0,5 no llegaría hasta ln(k + 1) = 20 / 0,5 = 40,

es decir, tras k ≈ e40 ≈ 2,4 · 1017 iteraciones — unos mil millones de veces más que todos los 239 500 800 circuitos

Dicho de forma sencilla

Si enfrías infinitamente despacio, encontrarás el óptimo con seguridad. Pero el enfriamiento logarítmico es tan lento que tardaría más que buscar en todo. Por eso en la práctica se enfría de forma geométrica — rápido, sin garantías, pero con resultados que normalmente bastan.

7. Recocido sobre las capitales regionales

Lancemos el recocido sobre el mismo problema: 10 000 iteraciones, con la temperatura bajando de forma geométrica de 200 a 0,5. El mapa muestra cómo era la ruta al principio y tras 1 000, 3 000, 5 000 y 10 000 iteraciones:

0100200300 050100150 oeste → este (km) sur → norte (km) inicio aleatorio · 2 251,4 km iteración 1000 · 1 985,3 km iteración 3000 · 1 159,2 km iteración 5000 · 1 060,4 km iteración 10000 · 1 060,4 km Praha Brno Ostrava Plzeň Liberec Olomouc Ústí nad Labem Hradec Králové České Budějovice Pardubice Zlín Jihlava Karlovy Vary
Una ejecución del recocido: la ruta mientras se enfría

Tras mil iteraciones la ruta sigue siendo caótica (1 985 km) — a temperatura alta el recocido acepta casi todo. Tras tres mil ya tiene forma (1 159 km), y tras cinco mil está en el óptimo, 1 060,4 km. De los 1 498 movimientos aceptados, 695 fueron de empeoramiento; la ascensión de colinas no habría hecho ni uno solo de ellos. El gráfico muestra cómo la longitud de la ruta salta arriba y abajo hasta que baja la temperatura:

120016002000 0100200 02 5005 0007 50010 000 iteración (número de movimientos propuestos) longitud de la ruta (km) temperatura T (km)
Evolución del recocido ruta actual mejor hasta ahora temperatura (derecha)

El paso de vagar a descender se ve también en el número de movimientos aceptados en cada millar de iteraciones: 597, 411, 232, 104, 35, 35, 26, 21, 26, 11. En el primer millar, cuando T está entre 200 y 110, se acepta más de la mitad de las propuestas. A partir del quinto millar (T por debajo de 20), ya solo decenas; de ellas, 37 fueron de empeoramiento, y 26 de estas, pequeñas, de menos de 3 km.

Y no es la suerte de una sola ejecución: de cien ejecuciones con semillas distintas, 98 terminaron en el óptimo y las otras dos a menos de 3 km. Frente al 61 % de la ascensión de colinas desde un solo inicio, la diferencia es grande.

8. Cuándo compensa el recocido

Para ser justos: el recocido hizo 10 000 iteraciones, y la ascensión de colinas desde un inicio, solo unas seiscientas evaluaciones. En un problema pequeño, la ascensión de colinas con reinicios habría obtenido lo mismo por el mismo coste. La diferencia se ve en un problema mayor. Tomemos 60 ciudades colocadas al azar y demos a ambos algoritmos el mismo presupuesto — 200 000 movimientos 2-opt evaluados:

AlgoritmoLongitud de la mejor ruta
Ascensión de colinas con reinicios aleatorios2 312,5 km
Recocido simulado (tres ejecuciones)2 209,8 – 2 269,8 km

La ascensión de colinas solo cupo dos veces en el presupuesto: con 60 ciudades el vecindario tiene 1 711 movimientos y el descenso más pronunciado los examina todos en cada paso. El recocido prueba un movimiento aleatorio cada vez y reparte el mismo presupuesto en explorar todo el paisaje. Cada una de sus tres ejecuciones terminó mejor que la ascensión de colinas.

9. El recocido en la inteligencia artificial y más allá

  • Diseño de chips y horarios. La colocación de componentes en un chip fue una de las primeras grandes aplicaciones del recocido en los años ochenta; hoy se sigue usando para horarios, rutas de vehículos o la distribución de almacenes.
  • Entrenamiento de redes neuronales. El descenso de gradiente estocástico calcula el gradiente a partir de un pequeño lote de datos, así que cada paso es un poco aleatorio — igual que el recocido, puede escaparse de un hoyo poco profundo. Los esquemas de tasa de aprendizaje que la van reduciendo poco a poco se llaman incluso cosine annealing (recocido coseno).
  • La temperatura de los modelos de lenguaje. Cuando un modelo de lenguaje elige la siguiente palabra, divide las puntuaciones de las palabras por una temperatura T y con la función softmax las convierte en probabilidades proporcionales a ez/T — la misma fórmula de Boltzmann. Una temperatura alta significa un texto más creativo y arriesgado; una baja, uno más prudente y predecible.
  • Recocido cuántico. Ordenadores especializados (por ejemplo, D-Wave) buscan el mínimo de energía físicamente, aprovechando fenómenos cuánticos. Si son más rápidos que los algoritmos clásicos, y cuándo, sigue siendo objeto de investigación.
Ejemplo — la temperatura al elegir la siguiente palabra

Un modelo da a tres candidatas a siguiente palabra las puntuaciones z = (2, 1, 0). La probabilidad de la i-ésima palabra es pi = ezi/T / ∑j ezj/T — la distribución de Boltzmann de la sección sobre el recocido, solo que con la «energía» −z.

T = 1:   (e2, e1, e0) = (7,39; 2,72; 1), suma 11,11 → 0,665; 0,245; 0,090

T = 0,5:   (e4, e2, 1) = (54,6; 7,39; 1), suma 62,99 → 0,867; 0,117; 0,016

T = 2:   (e1, e0,5, 1) = (2,72; 1,65; 1), suma 5,37 → 0,506; 0,307; 0,186

Una temperatura más baja desplaza la probabilidad hacia la mejor candidata (con T → 0 siempre gana ella); una más alta la reparte también entre palabras menos probables — igual que el recocido a temperatura alta acepta también rutas peores.

10. Resumen

  • Un problema de optimización busca la solución con el mejor valor de la función objetivo; la búsqueda local se mueve por el vecindario de la solución actual.
  • La ascensión de colinas va siempre al vecino mejor y se queda atascada en un mínimo local — en las capitales regionales, en 39 de 100 inicios. Los reinicios aleatorios ayudan en problemas pequeños.
  • El recocido simulado acepta también pasos peores, con probabilidad e−Δ/T; al bajar la temperatura pasa de la exploración al descenso.
  • En las capitales regionales encontró el óptimo en 98 de 100 ejecuciones; en un problema mayor superó a la ascensión de colinas con el mismo presupuesto.
  • La misma fórmula de Boltzmann vive en la temperatura de los modelos de lenguaje, y la idea del enfriamiento, en los esquemas de aprendizaje de las redes neuronales.

¿Quieres probarlo tú? Pide a un agente de IA que escriba un recocido para una ruta tuya — por ejemplo, por los lugares que quieres visitar en vacaciones — y mira qué pasa si enfrías demasiado rápido.

¿Lo ves de otra manera? Escribe a support@coden-app.com.

Un Agente en tu ordenador, controlado desde el móvil