Вы находитесь на странице: 1из 8

Ramificación y Poda Introducción

Se realiza un recorrido sistemático del árbol de estados


de un problema, no necesariamente en profundidad,
mediante estrategias de ramificación y técnicas de poda
ALGORITMOS-SIC324 para eliminar todos aquellos nodos que no generen
soluciones óptimas:
Calcula en cada nodo una cota del posible mejor valor
alcanzable desde ese nodo.
05- 10 julio de 2017
Si dicho valor es peor que el de la mejor solución
Maria G. Pérez
alcanzada hasta el momento entonces se poda la rama.
maria.espanya@gmail.com
0979173721

Introducción Introducción
Solo se puede realizar la poda cuando ya se tiene una Generalmente, el espacio de soluciones se
solución teórica o se dispone de una cota teórica. organiza en un árbol y se podan los subárboles
Al igual que los métodos de búsqueda con retroceso que no son útiles.
(Backtracking), se aplica a problemas de optimización
con restricciones o a problemas de decisión.
En búsqueda con retroceso:
• Tan pronto como se genera un nuevo hijo del nodo en
curso, este hijo pasa a ser el nodo en curso.
En ramificación y acotación:
• Se generan todos los hijos del nodo en curso antes de
que cualquier otro nodo vivo pase a ser el nuevo nodo en
curso.

Descripción Descripción
Ramificación y poda (Branch and Bound, en inglés) es  Si se encuentra una solución óptima para un
un método general de búsqueda que se aplica de la subproblema concreto, ésta será una solución
siguiente forma: factible para el problema completo, pero no
 Se explora un árbol comenzando a partir de un necesariamente su óptimo global.
problema raíz y su región factible (inicialmente, el
problema original, con su espacio de soluciones
completo).  Cuando en un nodo (subproblema), su cota local es
peor que el mejor valor conocido en la región, no
 Aplica funciones de acotación al problema raíz, puede existir un óptimo global en el subespacio de
para el que establece cotas inferiores y/o la región factible asociada a ese nodo y, por tanto,
superiores. ese nodo puede ser eliminado (“podado”).
 Si las cotas cumplen las condiciones que se hayan
establecido, habremos encontrado la solución
óptima del problema y la búsqueda terminaría.

1
Descripción Conceptos básicos
Nodo vivo: aquel nodo que no ha sido aún podado
 Proseguir con la búsqueda hasta que: y que puede ser ramificado (no se han generado
– Se examinan o podan todos los nodos todos sus hijos)
– O se cumple con el criterio establecido acerca Nodo muerto: nodo del que no se van a generar
del mejor valor encontrado y las cotas locales más hijos porque:
de los subproblemas aún no resueltos.  no hay más
 se llega a una solución
 no generará mejores soluciones que las ya obtenidas hasta el
momento.

Nodo en curso o en expansión: aquel nodo que es


elegido para ramificarlo.

Estrategias de exploración Ramificación y Poda vs Backtracking


La implementación de RyP suele ser iterativa. En cuanto a nodos vivos:
Se utiliza una estructura para almacenar los nodos  En backtracking. Los únicos nodos vivos son los que están en
el camino de la raíz al nodo en curso
vivos.  En Ramificación y Poda. Puede darse el caso de que haya
La generación de la estructura auxiliar depende de más nodos vivos.
la estrategia de ramificación utilizada, En cuanto a nodos en curso:
dependiendo de si es:  En backtracking. Según se genera un hijo este pasa a ser el
 LIFO: Pila. Se realiza una exploración en profundidad nodo en curso
 FIFO: Cola. Se realiza una exploración en anchura  En Ramificación y Poda. Se generan todos los hijos del nodo
 Priority queue (PQ): Cola de prioridad o montículo. La en curso antes de decidir cuál va a ser el siguiente nodo en
exploración se realiza por el nodo más prometedor. curso (aplica estrategias FIFO, LIFO Y PQ).

Pasos del algoritmo de RyP Pasos del algoritmo de RyP


Ramificación
Selección. En este paso se selecciona el nodo vivo
– estrategias utilizadas en la ramificación
que va a ser ramificado, según la estrategia
FIFO
elegida.  Lista de nodos vivos: Cola.
Ramificación. Se generan los hijos del nodo  Recorrido del árbol en anchura.
seleccionado (solo tuplas prometedoras).
Estimación de las cotas. Para cada nodo, se
calcula una cota del posible mejor valor alcanzable
desde ese nodo.
Poda. Se podan los nodos generados en la etapa
anterior que no van a conducir a una mejor solución
que la conocida hasta ahora.

2
Pasos del algoritmo de RyP Pasos del algoritmo de RyP
Ramificación Estimación de las cotas
– LIFO cada nodo puede tener:
 Lista de nodos vivos: Pila. – una cota inferior de coste/beneficio,
 Recorrido del árbol en profundidad. – un coste/beneficio estimado y
– una cota superior del coste/beneficio.

CI E CS

El árbol se poda según los valores de las cotas


(CI, CS).
El árbol se ramifica según los valores estimados
(E).

Pasos del algoritmo de RyP Pasos del algoritmo de RyP


Estimación de las cotas Estimación de las cotas
Cota local Cota local
– Permite asegurar que no se alcanzará nada mejor al Tabla 1. Interpretación de los valores de las cotas
expandir un determinado nodo.
Maximización Minimización
– Se calcula localmente para cada nodo i.
Valor Beneficio Coste
– Si OptimoLocal(i) es el coste/beneficio de la mejor
solución que se podría alcanzar al expandir el nodo i, Cota local (CL) Cota superior Cota inferior
la cota local es una estimación de dicho valor que Significado: al expandir el CL ≥ Óptimo local CL ≤ Óptimo local
debe ser mejor o igual que ÓptimoLocal(i). nodo no se consigue nada
– Cuanto más cerca esté la cota a ÓptimoLocal(i), mejor.
mejor será la cota y más se podará el árbol (se debe Cota global (CG) Cota inferior Cota superior
mantener un equilibrio entre la eficiencia del cálculo
Significado: La solución CG ≤ Optimo global CG ≥ Optimo global
de la cota y su calidad).
óptima nunca será peor
– Ver Tabla 1 que esta cota.

Pasos del algoritmo de RyP


Pasos del algoritmo de RyP
Estimación de las cotas
Estrategia de poda
Cota global
Además de podar aquellos nodos que no cumplan las
– La solución óptima nunca será peor que esta cota.
restricciones implícitas (soluciones parciales no
– Es el valor de la mejor solución estudiada hasta el factibles), se podrán podar aquellos nodos cuya
momento (o una estimación del óptimo global) y debe
cota local sea peor que la cota global.
ser peor o igual al coste/beneficio de la solución
óptima.
– Inicialmente, se le puede asignar el valor obtenido por Si se sabe que lo mejor que se puede alcanzar al
un algoritmo greedy o, en su defecto, el peor valor expandir un nodo, no se puede mejorar una solución
posible. que ya se ha obtenido (o se va a obtener al
– Se actualiza siempre que alcanzamos una solución que explorar otra rama del árbol), no es necesario
mejore su valor actual. expandir dicho nodo.
– Cuanto más cercana sea al coste/beneficio óptimo, más
se podará el árbol, por lo que es importante encontrar
buenas soluciones cuanto antes.
– (Ver Tabla 1.).

3
Pasos del algoritmo de RyP Pasos del algoritmo de RyP
Estrategia de poda Estrategia de poda
Por la forma en la que están definidas las cotas Tabla 2. Interpretación de las cotas
local y global, se puede asegurar que con la poda no Maximización Minimización
se perderá ninguna solución óptima: Valor Beneficio Coste
Podar si CL < CG CL > CG
Por definición: Cota local (CL) Cota superior Cota inferior
– CotaLocal(i) es mejor o igual que ÓptimoLocal(i).
Significado: al expandir el CL ≥ Óptimo local CL ≤ Óptimo local
– CotaGlobal es peor o igual que Óptimo. nodo no se consigue nada
mejor.
Si CotaLocal(i) es peor que CotaGlobal, entonces Cota global (CG) Cota inferior Cota superior
ÓptimoLocal(i) tiene que ser peor que Óptimo. Significado: La solución CG ≤ Optimo global CG ≥ Optimo global
(Ver Tabla 2) óptima nunca será peor
que esta cota.

Aplicabilidad del algoritmo de RyP Ejemplo 1


El problema de la mochila 0/1 El problema de la asignación
El problema del comerciante viajero
El problema de asignación Es un problema de RyP que, dadas n tareas y n personas,
problema de programación lineal entera asignar a cada persona una tarea minimizando el coste de
la asignación total.
El problema de las n reinas
Para resolver el problema se diseña una matriz de valores
El problema del puzle que determinan el coste de asignar a cada persona una
tarea
NOTA: Para cada problema, debe describirse la forma Si al agente i con 1≤ i ≤ n se le asigna la tarea j con 1≤ j ≤ n,
de las soluciones (y su árbol asociado), el cálculo de las el coste será: ci,j.
cotas y las estrategias de ramificación y poda. Por ejemplo, si consideramos la hipotética situación para
el caso de 3 agentes (a,b,c) y sus 3 tareas (1,2,3), la
correspondiente matriz seria:

Ejemplo 1 Ejemplo 1
El problema de la asignación El problema de la asignación

En este problema no se utiliza la técnica voraz ya


que no hay una función de selección que garantice
obtener la solución óptima sin tener que cambiar
decisiones.

4
Ejemplo 1 Ejemplo 2
El problema de la asignación, para minimizar y el tiempo
que tarda un trabajador en realizar x tarea.
El problema de la asignación
Mínimo coste para cada agente: 1 2 3

a ←3, b← 1, c← 2: 3+2+9=14 S 1 9 2
D 3 5 7
Mínimo coste por tarea: F 4 11 8
1← b, 2 ← a, 3 ← c: 2+7+4=14 Cota Sup: S1+D2+F3 = 1+5+8=14
Estas dos soluciones no son soluciones óptimas. Cota Sup: 14
S1: S1+D2+F3: 1+5+8=14
La mejor solución: S2: S2+D1+F1: 9+3+4=16

a ← 2, b ← 3, c ← 1: 7+1+3= 11 S3: S3+D1+F1: 2+3+4=9*

D1: S3+D1+F2: 2+3+11=16 S 3


D 2
F 1
D2: S3+D2+F1: 2+5+4=11*

Ejemplo 3 Ejercicio
El problema de la asignación, calcular la cota mas
prometedora para maximizar el beneficio Dado el siguiente problema de la asignación, calcular la
1 2 3 cota más prometedora que generan la máxima ganancia.
S 1 9 2
D 3 5 7
F 4 11 8
1. Cota Sup (valores de la diagonal): S1+D2+F3 = 1+5+8=14
Cota Sup: 14 S1: S1+D2+F3: 1+5+8=14
S2: S2+D1+F1: 9+3+4=16
S3: S3+D1+F1: 2+3+4=9
S1
D1+F3: 9+3+8=20
S2:
D3+F1: 9+7+4=20

S1
D2+F3: 1+5+8=14 S 2
D 3
D3+F2: 1+7+11=19
S2: F 1

Programación lineal entera Programación lineal entera


• Mediante la programación lineal entera, se intenta Terminología
resolver problemas numéricos en los que no se quieren • Un problema se dice que cae dentro de la programación
obtener soluciones en los números reales, sino entera cuando se pide que algunas de sus variables
soluciones dentro de los números enteros. obtengan soluciones en el dominio de los enteros.
• Por ejemplo, en problemas de planificación, donde • Un problema de programación entera se dice puro si
no es solución, decir, que se necesitan 3.4 personas todas sus variables deben tomar valores enteros, si no,
para una tarea y 4.22 para otra, o que un camión mixto en otro caso.
debe transportar 27.1 cajas. • A menudo se pide que las variables tomen en particular
• Además en estos problemas no nos interesa que las los valores 0 o 1. En estos casos de habla de
ecuaciones den un valor exacto, sino aquel valor que programación 0-1, o bien de programación entera
mejor aproxime un cierto valor, o bien que binaria.
maximize/minimize cierta función. • El problema de programación entera se convierte en un
problema de programación lineal cuando no se pide que
ninguna variable sea entera.

5
Programación lineal entera Programación lineal entera
Representación del problema en RyP Representación del problema en RyP
• Para representar el problema de la programación entera • Para representar el problema de la programación entera
(PE) mediante un método de ramificación y poda debemos (PE) mediante un método de ramificación y poda debemos
apoyarnos en la solución del problema en programación apoyarnos en la solución del problema en programación
lineal (PL), y tener en cuenta los siguientes resultados: lineal (PL), y tener en cuenta los siguientes resultados:

 Si el problema no tiene solución en PL tampoco la tiene en  Si el problema no tiene solución en PL tampoco la tiene en
PE. PE.
 Si el problema en PL da valores enteras a las variables  Si el problema en PL da valores enteras a las variables
hemos encontrado la solución en PE hemos encontrado la solución en PE
 La solución en PL da un valor de z que es cota de la solución  La solución en PL da un valor de z que es cota de la solución
en PE (superior si se maximiza, inferior se si minimiza). en PE (superior si se maximiza, inferior se si minimiza).

Programación lineal entera Programación lineal entera


Representación del problema en RyP
Representación del problema en RyP • completable(H): true si no ha asignado todas las variables, a
• En el contexto de RyP, cada variable tiene una cantidad no ser que se pueda asegurar que todas las solución
limitada de valores que puede tomar. Así, se puede descendientes de H no verificarán alguna restricción (debe
definir el esquema de RyP, para PE como: ser evidente, si hay que resolver ecuaciones con
• Nodos del árbol de búsqueda: asignación realizada hasta el posibilidades múltiples hacer completable=true).
momento • solución(H): si H es una asignación de todas las variables
• Raíz: asignación vacía que cumple las restricciones.
• hijos(H): Añadir una asignación a una variable aún no en H. • coste_estimado(H): Se reemplazan las variables ya
Elegiremos la variable que pueda tomar un rango menor de asignadas en H en las ecuaciones y restricciones. Se
valores para minimizar el número de hijos. resuelve el problema que se obtiene en PL. El resultado es
el coste_estimado.

Programación lineal entera Programación lineal entera


Representación del problema en RyP Solución:
• Primero se determina en que rango de valores se
Ejemplo 2: mueven x1, x2 y x3. Por la restricción, vemos que por
fuerza:
• x1 está en {0,1,2,3} (si x1>3, la segunda restricción
Maximizar 20x1 + 10x2 + 10x3
será falsa),
Sujeto a: • x2 en {0} (por la primera),
• 2x1 +20x2 +4x3 <= 15 y • x3 en {0,1,2,3} (por la primera)
• 6x1 +20x2 +4x3 <= 20, • Ahora comenzamos con la raíz vacía.
• x1, x2, x3>=0, enteros. • Según el algoritmo generamos un único hijo, el que
asigna x2 --> 0
Se sabe que el problema tiene solución en PL.

6
Programación lineal entera Programación lineal entera
Solución: Solución:
El problema quedaría
• Maximizar 20x1 +10x3 Entonces z=66.6 es el máximo en PL
• cumpliendo 2x1+4x3 <= 15 y
• 6x1+4x3 <= 20, Como el coste_estimado = 66.6, es mejor que -∞
• x1, x3>=0, enteros. tenemos que el nodo se añade a la cola de prioridad.
Como {x2 -->0} no es solución tenemos que calcular el En la siguiente vuelta del bucle consideramos este nodo
coste_estimado. Por ello, se resuelve en PL: y elegimos para hijos dar valor a x1.
Donde la primera ecuación se puede escribir como:
x3 <= 3.75 -0.5x1, y
la segunda x3 <= 5 -1.5x1.

Programación lineal entera Programación lineal entera


Solución: Solución:
Se consideran las siguientes posibilidades: Se consideran las siguientes posibilidades:
• {x2-->0, x1-->0}. En este caso tenemos que el • {x2-->0, x1-->2}. El problema queda
problema queda: • Maximizar 40 + 10x3
• Maximizar z = +10x3 • Sujeto a: 4 +4x3 <= 15 y
• Sujeto a: • 12+4x3 <= 20, x3>=0, entero.
• +4x3 <= 15 y +4x3 <= 20, x3>=0, enteros. • Simplificando: x3<=2.75, x3<=2, y el máximo en PL lo da
Las restricciones indican, en primer lugar, que x3 <= x3=2, con z=60.
15/4 = 3.75, y que x3<=4.
En PL la mejor solución seria x3=3.75, es decir z= 37,5.
Como 37.5 es mejor que -∞ tenemos que el nodo se
añade a la cola de prioridad.

Programación lineal entera Programación lineal entera


Solución: Solución:
Se consideran las siguientes posibilidades: Se consideran las siguientes posibilidades:
• {x2-->0, x1-->2}. El problema queda • {x2-->0, x1-->3}. El problema queda
• Maximizar 40 + 10x3 • Maximizar 60 + 10x3
• Sujeto a: 4 +4x3 <= 15 y 12+4x3 <= 20,, x3>=0, entero. • Sujeto a: 6 +4x3 <= 15 y 18+4x3 <= 20, con x3>=0,
• Simplificando: x3<=2.75, x3<=2, y el máximo en PL lo da entero.
x3=2, con z=60. • Las restricciones se simplifican a x3 <= 9/4 y x3 <= 2/4, el
máximo de PL es x3=0.5, con z=65

7
Programación lineal entera Programación lineal entera
Solución: Solución:
En la siguiente vuelta se elegirá el nodo, {x2-->0, x1--3} Cont…
por ser el de mayor coste_estimado, y por tanto el que • {x2-->0. x1-->3. x3-->1 }. No es solución porque no cumple
devolverá max de la cola de prioridad. Se considerarán las condiciones (en particular la 2ª) y no es completable.
sus 4 hijos, para x3 en {0,1,2,3} Se desecha.
• {x2-->0. x1-->3. x3-->2 }. No es solución porque no cumple
las condiciones (en particular la 2ª) y no es completable.
• {x2-->0. x1-->3. x3-->0 }. Es solución porque asigna
Se desecha.
todas las variables y cumple las restricciones. Tiene
una coste_real de z=60, que mejora -∞, por lo que • {x2-->0. x1-->3. x3-->3 }. No es solución porque no cumple
las condiciones (en particular la 2ª) y no es completable.
tenemos un nuevo mejor={x2-->0. x1-->3. x3-->0 } y
Se desecha.
un nuevo coste_mejor = 60.

Programación lineal entera Programación lineal entera


Solución: Solución:
En la siguiente vuelta se comprueba que el máximo de la En la figura, se muestra los nodos del árbol de
cola de prioridad tiene coste_estimado de 60 (es {x2-- búsqueda generado, junto con el coste_estimado. Los
>0, x1-->2} ) y como no mejora el mejor_coste no se nodos con X, se han desechado por no ser soluciones.
explora el resto. La solución final es {x1-->3, x2-->0,
x3-->0 }, con un z=60

Taller El 8-puzzle

resolver mediante programación


lineal entera
Max Z = 21x1+11x2

sujeto a 7x1+4x2 ≤13


x1 ≥0, x2 ≥0
x1 ,x2 son enteros