Professional Documents
Culture Documents
a
Prctica 1a: Metaheursticas
basadas en trayectorias
Algoritmos empleados: Greedy, Bsqueda
local y Bsqeuda Tab.
Juan Antonio Prez Cruz 77362120X
japc0010@red.ujaen.es
Juana Mara Rodrguez Garca 77363220Y
jmrg0021@red.ujaen.es
Grupo 2: 12.30-14:30
ndice
Descripcin del
problema
.2
Descripcin de la aplicacin de los
algoritmos..3
Lectura del
fichero.
3
Coste de la funcin
objetivo3
Factorizacin
.4
Solucin
inicial
.4
Estructura del mtodo de
bsqueda
.5
Bsqueda
local
.5
Bsqueda
tab.
...6
Algoritmo de comparacin: bsqueda Greedy..
...9
Breve manual de
usuario
.10
Experimentos y anlisis de
resultados..
.11
Referencias
bibliogrficas
14
1
(i)
fij
Dkl
Factorizacin:
Haremos uso de esta funcin, puesto que la funcin del coste tiene mucho costo
computacional. Al hacer cualquier cambio para representar nuestra solucin
empleamos un valor actual r y otro s, cuando generamos nuevas secuencias vecinas
en cada movimiento.
FUNCION factorizacion (solActual:array de enteros, , flujo :array()(tam),
localizaciones:array(tam)(tam), tam:entero, s:entero, r:entero)
costeActual:entero = 0
Para k = 0 Hasta tam Hacer
Si k es distinto de r Y k es distinto de s entonces
costeActual += flujo(r)(k)*(localizaciones(solActual(s))(solActual(k))
localizaciones(solActual(r))(solActual(k))) +
flujo(s)(k)*(localizaciones(solActual(r)(solActual(k)) l localizaciones
(solActual(s))(solActual(k))) +
flujo(k)(r)*(localizaciones(solActual[k))(solActual[s)) - localizaciones
[solActual(k))[solActual[r))) +
flujo(k)(r)*(localizaciones(solActual(k))[solActual[r)) - localizaciones
[solActual[k))(solActual[s)))
Fin_Si
Fin_Para
Devolver costeActual;
Solucin inicial:
Haremos uso de una solucin inicial aleatoria a partir de una semilla:
La solucin que obtenemos con la bsqueda local est basada en el pseudocdigo del
seminario: Dont Look Bits:
En la primera iteracin, todos los bits estn a 0, es decir, todas las unidades estn
activadas en un bucle externo y todos sus movimientos pueden ser considerados para
explorar el entorno:
a) Si tras probar todos los movimientos asociados a esa unidad, ninguno provoca
una mejora, se pone su bit a 1 para desactivarla en el futuro
Bsqueda Tab
Consideramos en este algoritmo una lista de movimientos tab que permitirn o no
seleccionar a unos vecinos generados en cada iteracin. Se coge entonces al mejor de
estos, dejando a un lado la funcin objetivo. Para mejorar las posibles soluciones se
hace una re-inicializacin de la bsqueda, despus de 10 iteraciones sin mejora. Esto lo
haremos de tres formas distintas: desde una nueva solucin aleatoria (mejorando
diversidad), desde una mejor solucin encontrada hasta el momento (mejorando la
intensificacin), o desde la solucin menos frecuente que se ha dado (controlando la
diversidad).
Criterio
de
aspiracin:
vecino_generado_tabu
<
mejor_encontrada_hasta_ahora
Hacer
cnt:entero = 0;
Repetir
rnd = aleatorio(0,nuevoTam-1)
Si (find(elegir.begin(), elegir.end(), rnd) == elegir.end())
elegir [cnt] = rnd
cnt++
Mientras (cnt < numVecinos)
Para i = 0 Hasta i < numVecinos Hacer
solucionesVecinas[i] = todasSolucionesVecinas[elegir[i]]
Fin_Para
Para num = 0 Hasta num < numVecinos Hacer
Para i = 0 Hasta i < tama Hacer
Para j = i + 1 Hasta j < tama Hacer
Frec(soluVecinas(num)(i))(soluVecinas(num)(j))++
Fin_Para
Fin_Para
Fin_Para
MejorValorLocal = coste(soluVecinas(0),Flujo,Dist,tama)
mejorSolucionLocal= solucionesVecinas(0)
Para i = 0 Hasta i < numVecinos Hacer
Si (compruebaTabu(soluVecinas(i), ListaTabu) == 0 o mejorValorLocal<mejorValor)
vecinoActual:entero = funcionObjetivo(soluVecinas(i))
Si (vecinoActual < mejorValorLocal)
mejorValorLocal = vecinoActual
mejorSolucionLocal = soluVecinas(i)
Fin_Si
ListaTabu = aadeTabu(mejorSolucionLocal, ListaTabu);
Fin_Si
Fin_Para // fin del para
pi = mejorSolucionLocal
Si (mejorValorLocal< mejorValor)
mejorValor = mejorValorLocal;
mejorSolucion = mejorSolucionLocal
SiNo
contReinicio++
Si (contReinicio !=0 y (contReinicio%numReinicio == 0))
contReinicio=0
tirada:flotante = aleatorio(0, 1)
Si (tirada <= 0.25)
9
solucionInicial(pi,tama,aleatorio(0,100000));
mejorValor = Coste(pi,Flujo,Dist,tama);
SiNo
Si (tirada <= 0.5)
pi=mejorSolucion
mejorValor = coste(pi,Flujo,Dist,tama)
SiNo
pi=generaSolucionFrecuencia(frec)
mejorValor = coste(pi,Flujo,Dist,tama)
Fin_Si
Fin_Si
tirada = aleatorio(0, 1)
Si (tirada <= 0.5)
Si (tamTabu<=1) tamTabu=tama/2
tamTabu *= 0.5
SiNo
Si (tamTabu>=tama) tamTabu=tama/2
tamTabu *= 1.5
Fin_Si
Fin_Si
ListaTabu.borrar ()
ListaTabu.reservar(tamTabu)
Fin_Si //fin de las reinicializaciones
Fin_para//fin
del
general-------------------------------------------------------------------------------------------------
Algoritmo de comparacin
Bsqueda Greedy
10
for
El algoritmo Greedy del QAP se basa en la heurstica de asociar unidades de gran flujo
con localizaciones cntricas en la red y viceversa. Para ello, se calculan dos vectores, el
potencial de flujo y el potencial de distancia, que se componen respectivamente de la
sumatoria de flujos de una unidad al resto
localizacin al resto
ms
importante es la unidad en el intercambio de flujos. Por otro lado, cuanto menor sea
ms cntrica es una localizacin concreta. Por tanto, el algoritmo ir seleccionando la
unidad i libre con mayor
Caso
Els19
Algoritmo GREEDY
Coste obtenido
Desv
38627698
124,42
8632
293,80
0.217238
20820
448,47
0.422075
4462
19,18
0.424213
5968117
9,98
0.302765
4323853
13,25
0.32543
2104696
15,76
0.358785
1387185541
117,73
0.348949
314
141,54
0.582865
116090
30,88
0.374607
2886118
19,16
0.115867
506552163
78,79
0.114889
312578
29,96
0.134444
3730054
18,82
0.1364
19942
26,12
0.145689
27626
18,13
0.189689
5804880
17,54
0.192622
788404422
71,83
0.195067
8373936
16,21
0.271333
367940
2,03
0.464445
Chr20a
Chr25a
Nug25
Bur26a
Bur26b
Tai30a
Tai30b
Esc32a
Kra32
Tai35a
Tai35b
Tho40
Tai40a
Sko42
Sko49
Tai50a
Tai50b
Tai60a
Lipa90a
Tiempo
0.214672
Caso
Els19
Tiempo
0.143685
Chr20a
Chr25a
Nug25
Bur26a
Bur26b
Tai30a
Tai30b
Esc32a
Kra32
Tai35a
Tai35b
Tho40
Tai40a
Sko42
Sko49
Tai50a
Tai50b
Tai60a
Lipa90a
10748
390,33
0.151382
7028
85,14
46.3927
4036
7,80
47.1274
5475745
0,90
77.0502
3844040
0,69
96.8471
1955438
7,55
39.211
773892715
21,47
102.769
192
47,69
50.9753
104930
18,30
67.4926
2677192
10,54
14.8001
374701532
32,26
22.2875
290502
20,78
12.3278
3514614
11,95
13.5857
17874
13,04
21.3068
26204
12,05
16.0825
5528592
11,94
19.8083
629875942
37,28
56.5234
8480430
17,69
1.11271
363968
0,93
571.834
Desviacin
media: 59,76
Tiempo medio:
301,70
Caso
Els19
Chr20a
Chr25a
Nug25
Tiempo
29096.2
3968
81,02
34849.4
7194
89,52
46889.3
4436
18,48
47588.8
14
Bur26a
Bur26b
Tai30a
Tai30b
5444442
0,52
50883.1
3864205
0,41
47199.9
1924674
5,86
62675.9
864893435
35,75
60164.6
176
35,38
74496.6
127710
43,98
70385.9
2638406
8,93
16645.7
330548906
16,67
17066.9
272132
13,15
22179.6
3354188
6,84
22461.2
17324
9,56
23994.5
27234
16,45
31948.7
5403598
9,41
34479
540781128
17,86
34436.1
7819456
8,51
48830.3
366984
1,76
116204
Esc32a
Kra32
Tai35a
Tai35b
Tho40
Tai40a
Sko42
Sko49
Tai50a
Tai50b
Tai60a
Lipa90a
Desviacin
media: 22,22
Tiempo medio:
44623,79
Desv
Tiempo
75,68
59,76
22,22
0,28
301,70
44623,79
15
Como vemos el algoritmo de bsqueda local no parece que sea muy bueno.
Parte de una solucin aleatoria y esto puede penalizar al algoritmo, ya que es
posible que se quede estancado en un mximo local que no sea lo
suficientemente bueno. Aun as, parece lgico que el uso de este algoritmo sea
ms conveniente que el Greedy, ya que se acerca ms a la solucin ptima y su
tiempo de ejecucin no es elevado.
La bsqueda tab, en cambio, nos da casi siempre una mejor solucin, ya que
genera vecinos y se queda con el mejor de ellos. En caso de estancamiento es
capaz de reinicializarse y explorar por otro vecindario diferente. El
inconveniente que este algoritmo nos plantea es un coste muy elevado de
cmputo, ya que tiene que generar muchos aleatorios y realizar 10000
iteraciones, generando en cada una de ellas 30 vecinos distintos.
Referencias bibliogrficas
16
17