Simulated Annealing
Escrito en la categoría Búsqueda, Inteligencia Artificial Aplicada
5 de Abril del 2009
En el anterior post explicamos el algoritmo Metrópolis y por qué era tan importante para resolver el problema del viajante de comercio. En éste vamos a explicaros qué es el algoritmo simulated annealing y cómo se codifica para poder utilizarlo en cualquier aplicación.
Recordaréis que el algoritmo Metrópolis devuelve una serie de configuraciones. Esto sucede así hasta que llega a una situación de equilibrio, que habitualmente consiste en alcanzar un número de configuraciones determinado. En cada ciclo, el algoritmo Metrópolis nos devuelve una muestra de la distribución de Gibbs para una determinada temperatura. Para saber si dicha muestra es un mínimo global, hay que repetir los muestreos disminuyendo de manera monótona la temperatura, hasta que el valor se aproxime a 0. Esta sucesión de muestreos es lo que llamamos simulated annealing. El pseudocódigo del algoritmo es el siguiente:
comienzo SIMULATED_ANNEALING {
C[0] = INI_CONFIGURACION ( );
T = INI_TEMPERATURA ( );
t = 0;
repetir {
C = C[t];
repetir {
auxC = GEN_CONFIGURACION(C);
∆E = E(auxC)-E(C);
q = mín{1, e^(-∆E/T)};
si (ALEATORIO(0,1)< q) entonces { C = auxC; } ;
} hasta( TEST_EQUILIBRIO );
t = t +1;
C[t] = C;
T = ENFRIAR (T, t);
}hasta (T ≈ 0);
devolver C[t] = C* = arg mín E(C);
}
Tenemos que realizar las siguiente aclaraciones:
- Las funciones INI_CONFIGURACION y INI_TEMPERATURA, proporcionan una configuración inicial (normalmente aleatoria) y la temperatura inicial, respectivamente.
- La función GENERAR devuelve una configuración local a la dada.
- La función ALEATORIO devuelve un valor uniformemente distribuido entre los límites que se pasan por el argumento.
- El control de convergencia de algoritmo Metrópolis lo realiza la función TEST_EQULIBRIO, el cual lo que hace es comprobar en qué ciclo se encuentra y escapar del bucle cuando satisfaga la restricción.
- La función ENFRIAR merece un capítulo sólo para ella, ya que ésta es la que se encarga de reducir la temperatura de manera monótona, y es la que permite que el sistema funcione.
La característica más interesante de este algoritmo es su capacidad para evitar los mínimos locales, lo cual se debe a la cuidadosa gestión del parámetro T. En el siguiente post os contaremos cómo debemos desarrollar la función de ENFRIAR. Ya casi hemos resuelto el problema.









