Parte II Métodos aproximados en problemas
7.2 El problema MaxA-p-Pv1( P ) con simulated annealing-SA
7.2.1 Adaptación del problema
Simulated annealing, (recocido simulado, SA), se puede considerar como una variación de la simulación de Monte Carlo. En cada iteración, cada átomo es sometido a un desplazamiento aleatorio que provoca un cambio global en la energía del sistema (δ). Si δ < 0, se acepta el cambio; en caso contrario, el cambio se acepta con una probabilidad e(−δ/T), siendo T la temperatura absoluta.
Recordemos el enunciado concreto del problema:
búsqueda del punto de máxima iluminación interior a un polígono MaxA-p-Pv1(P):
ENTRADA: Un polígonoP den vértices.
PREGUNTA:¿En qué punto interior aP se debe colocar una luz para que el área iluminada por dicha luz sea máxima?
Por tanto, la entrada del problema serán simplemente los n vértices, (dados en sentido positivo), del polígono P y la salida serán las coordenadas (x, y) de un punto p interior a P. Mostramos en la Figura 7.1 una entrada para MaxA-p-Pv1(P) y la salida producida por la heurística, visualizando el punto de máxima iluminación y su correspondiente polígono de visibilidad mediante los programas de visualización implementados con el paquete informático MATLAB y cuyos códigos también se encuentran en el Apéndice B.
Figura 7.1:Un ejemplo de la aproximación del problemaMaxA-p-Pv1(P)con SA
Los elementos de conÞguración de la heurística adaptados a nuestro problema se pueden describir de la siguiente manera:
Conjunto S de configuraciones:
El conjunto de conÞguraciones o soluciones factibles de nuestro problema serán todos los puntos que se encuentran en el interior del polígonoP. Así, consideraremos que el conjunto de conÞgu- raciones es inÞnito y que cada elemento, (cada punto), viene determinado por sus coordenadas (x, y) en el plano.
S={p1= (x1, y1), p2= (x2, y2), ..., pn= (xn, yn), ...} (7.2.1)
Función de coste C:
La función de coste C : S → < asignará a cada elemento de la conÞguración S un valor real. En nuestro caso para cada pi ∈ S la función de costes producirá un valor que representa el área iluminada por una luz-punto situada precisamente en el punto pi, es decir, representará el área del polígono de visibilidad del punto pi, que es un punto interior a P. Para la obtención de este valor se ha implementado un algoritmo lineal, (ver [72]), para el cálculo del polígono de visibilidad V(P, pi) de un punto pi ∈ S. Como todo polígono de visibilidad es un polígono estrellado desde el punto de iluminación, V(P, pi)es un polígono estrellado desdepi y por tanto se puede descomponer en la unión de los triángulos Tj que se formán al unir cada vértice de V(P, pi) conpi,(V(P, pi) =Skj=1Tj). La función de costes parapi será la suma del área de los triángulos Tj coni= 1, ..., k. C(pi) = k X j=1 Area(Tj) (7.2.2)
Una vez que conocemos la función de costes C, analizamos en el siguiente apartado la función de vecindad utilizada, es decir, la función que producirá el siguiente elemento de S a analizar a partir del elemento pi.
Vecindad de cada configuración:
Según se indica en el esquema general desimulated annealing SA, para cada elementox∈S, se debe obtener un elementoy∈Sen la vecindad dexque será el elemento a analizar en la siguiente iteración de la heurística. Así, para cada punto pi = (xi, yi) debemos determinar mediante la función de vecindad el siguiente puntop0
i= (x0i, y0i) a analizar. La bondad de los resultados que produzca la heurística dependerá en gran medida de la función de vecindad utilizada.
En nuestro algoritmo, dado un punto pi = (xi, yi) la función de vecindad calcula las coor- denadas del punto p0i sumando a cada coordenada de pi un valor real que sigue la distribución N(0,1). Para obtener números aleatorios distribuidos uniformemente hemos utilizado la propia función rand de que dispone el lenguaje C y para los números aleatorios distribuidos normal- mente hemos utilizado el método de Box-Muller [16]. El númerox∈[a, b)seguirá la distribución normal N(0,1)si P[x < y] = √1 2π Z y a e−t2dt ∀y ∈[x, b) (7.2.3)
El método de Box-Muller nos permite obtener, a partir de dos númerosu1 yu2 distribuidos
uniformemente, otros dos números n1 yn2 normalmente distribuidos, mediante las fórmulas ½ n1= p −2∗ln(u1)sen(2π u2) n2= p −2∗ln(u1) cos(2π u2) (7.2.4)
Según la implementación realizada los polígonos que generamos en nuestra investigación se encuentran situados en el plano real y en el cuadrado de vértices{(0,0),(1,0),(1,1),(0,1)}. Por ello si sumamos a cada coordenada del punto pi = (xi, yi) un valor que siga la distribución N(0,1), el punto obtenido será un punto exterior al polígonoP con una probabilidad alta. Así, una vez generados los valoresn1 yn2estos han sido divididos por unfactor de vecindaddiv, (que
irá aumentando con cada temperatura), con lo que el punto obtenido tiene una probabilidad más alta de ser interior aP. Hemos considerado en nuestro algoritmodiv= 10.0, (recuérdese que nos encontramos en el cuadrado de vértices{(0,0),(1,0),(1,1),(0,1)}), con lo cual conseguimos que los puntos estudiados no estén concentrados para evitar entrar en máximos locales. En forma de pseudocódigo la función que genera el vecinop0i = (x0i, yi0)al puntopi= (xi, yi), tiene la siguiente forma:
Función Generar-Vecino
ENTRADA: Un polígono P de n vértices, {v1, ..., vn}, un punto pi = (xi, yi) y un factor de vecindad div.
SALIDA:Un punto p0i = (x0i, yi0) vecino de pi e interior aP. [01] u1 ←rand()*1.0/RAND_MAX; [02] u2←rand()*1.0/RAND_MAX; [03] do [04] {n1 ←Sqrt(-2.0*ln(u1))*sin(2∗π∗u2); [05] n2←Sqrt(-2.0*ln(u1))*cos(2∗π∗u2); [06] x0 i =xi+n1/div; [07] y0i=xi+n2/div; [08] }while (p0i = (x0i, yi0)exterior a P); [09] div←div/0.9999; [10] returnp0i;
Pero el algoritmo heurístico necesita unos datos iniciales de los que partir, es decir, nece- sita una conÞguración inicial. Esta conÞguración inicial según se mencionó en el Capítulo 1 depende de la naturaleza del problema. En el siguiente apartado exponemos la generación de la conÞguración inicial utilizada.
Configuración inicial:
La conÞguración inicial que necesita nuestra heurística para solucionar el problema MaxA-p- Pv1(P)se traduce en un punto inicialp0 interior aP, que se considerará como primera solución
a analizar y en su caso a iterar. La elección de este primer punto p0 a estudiar se realiza de
forma aleatoria, generando mediante la funciónrand sus dos cooordenadas. La única condición exigida al puntop0 es que sea un punto interior al polígonoP.
En forma de pseudocódigo la función que genera la conÞguración inicial tiene la siguiente forma:
Función Generar-Configuracion Inicial
ENTRADA: Un polígonoP de nvértices, {v1, ..., vn}.
SALIDA:Un punto p0= (x0, y0) interior aP.
[01] do
[02] {x0←rand()*1.0/RAND_MAX;
[03] y0←rand()*1.0/RAND_MAX;
[04] }while (p0 = (x0, y0) exterior aP);
[09] returnp0;
Los elementos más importantes en la estrategia heurística deSAson la elección de la tempe- ratura inicialT0, la reducción de esta temperatura y el número de iteraciones del método heurís-
tico para cada temperaturaTi. Todos estos elementos los exponemos en la siguiente subsección.