Professional Documents
Culture Documents
Ramificacin y
poda
Esta tcnica de diseo se aplica normalmente para
resolver problemas de Optimizacin. Realiza una
enumeracin parcial del espacio de soluciones
basndose en la generacin de un rbol de expansin.
El diseo de dicha tcnica en su versin ms sencilla
puede seguir un recorrido en anchura, en profundidad, o
utilizando el clculo de funciones de coste para
seleccionar el nodo que en principio parece ms
prometedor. Adems utiliza cotas para podar aquellas
ramas del rbol que no conducen a la solucin ptima.
Para ello calcula en cada nodo una cota del posible valor
de aquellas soluciones alcanzables desde se.
Definimos nodo vivo del rbol a un nodo con posibilidades de ser
ramificado.
El viajante de comercio
Se conoce la distancia entre un cierto numero de
ciudades. Un viajante debe, a partir de una de ellas, visitar
cada ciudad exactamente una vez y regresar al punto de
partida habiendo recorrido en total la menor distancia
posible.
Es decir, dado un grafo dirigido con arcos de longitud no
negativa, se trata de encontrar un circuito de longitud
mnima que comience y termine en el mismo vrtice y
pase exactamente una vez por cada uno de los vrtices
restantes (circuito Hamiltoniano).
Sean G=(V,A) un grafo orientado:
V={1,2,,n}
Lij la longitud de (i,j)A
Lij=si no existe el arco (i,j).
Espacio de soluciones:
E = { 1,p,1 | p es una permutacin de (2,3,,n) }
7 0 0 16
0 12 5 4
4 12 0 6
1 0 8 0
6 27 8 0
repetir
expandir el nodo vivo ms prometedor;
generar todos sus hijos;
una vez generados, el padre se elimina;
para cada hijo hacer
si tiene un coste esperado peor que el de la mejor solucin en curso
entonces se elimina
sino
si tiene un coste esperado mejor que el de la mejor solucin en curso
y no es solucin
entonces se pasa a la lista de nodos vivos
sino {tiene un coste esperado mejor que el de la mejor solucin en
curso y es solucin (el coste no es estimado sino real)}
pasa a ser la mejor solucin en curso y se revisa toda la lista de
nodos vivos, eliminando los que prometen algo peor
de lo conseguido
finsi
finsi
finpara
hasta que la lista est vaca
while (!E.Vacia())
{
nod = E.Elimina_Min();
analizados++;
numhijos = nod.Expandir(ref hijos, nod);
generados += numhijos;
for (int i = 0; i < numhijos; i++)
{
if (hijos[i].EsAceptable())
{
if (hijos[i].EsSolucion())
{
hijos[i].Poner_Cota(hijos[i].Costo);
for (int j = 0; j < numhijos; j++)
{ //una nueva solucion
if (i != j)
hijos[j] = null;
}
solucion = hijos[i].Solucion;
}
else E.Insertar(hijos[i]);
}
else
{
hijos[i] = null;
podados++;
}
}
}
Ejemplo utilizado.
V1 V2 V3 V4 V5
5 V1 15 7 4 20
V2 1 16 6 5
3
V3 8 20 4 10
V4 4 7 14 3
V5 10 35 15 4
Podados
Analizados
U=
1
C=43 C=23 C=47
C=35
2 3 4 5
Podados
Analizados
U=
1
2 3 4 5
2 4 5
Podados
Analizados
U=
1
2 3 4 5
2 4 5
C=33 C=50
2 5
Podados
Analizados
U=
1
2 3 4 5
2 4 5
Podados
Analizados
U=
1
2 3 4 5
2 4 5
2 5 2 4
C=29
Podados
Analizados
U= U=29
1
2 3 4 5
3 5 1
4
2 5 2 4
Podados
U=29
Analizados
1
2 3 4 5
3 5 1
4
2 4 5
2 5 2 4
C=33
5 2
Podados
U=29
Analizados
1
2 3 4 5
3 5 1
4 2 3 4
2 5 2 4
5 2
Podados
U=29
Analizados
1
2 3 4 5
3 5 1
4 2 3 4
2 4 5
4 5 2 5 2 4
C=46 C=40
5 2
Podados
U=29
Analizados
1
2 3 4 5
3 5 1
4 2 3 5 2 3 4
C=39 C=49 C=43
2 4 5
4 5 2 5 2 4
5 2
Podados
U=29
Analizados
1
2 3 4 5
3 5 1
4 2 3 5 2 3 4
2 4 5
4 5 2 5 2 4
C=50
5 2 2
Podados
U=29
Analizados
1
2 3 4 5
3 5 1
4 2 3 5 2 3 4
2 4 5
4 5 2 5 2 4
5 2 4 2
C=62
Podados
U=29
Analizados
1
2 3 4 5
3 5 1
4 2 3 5 2 3 4
2 4 5
Generados = 26
Analizados = 12
4 5 2 5 2 4
Podados = 14
5 2 4 2
C=62
Podados
U=29
Analizados
Branching Strategies in a Branch-and-Price Approach
for a Multiple Objective Nurse Scheduling Problem