tema 6 vuelta atrÁs

17
1 1 Departamento de Lenguajes y Sistemas Informáticos UNIVERSIDAD DE ALICANTE TEMA 6 VUELTA ATRÁS 2 VUELTA ATRÁS (Backtracking) EJEMPLO INTRODUCTORIO (1) El Problema de la Mochila (general). Sean n objetos con valores v i y pesos p i y una mochila con capacidad máxima de transporte de un peso P. Seleccionar un conjunto de objetos de forma que: no sobrepase el peso P (restricción) el valor transportado sea máximo (función objetivo) ¿Cómo obtener la solución óptima? Programación dinámica: Objetos no fragmentables y pesos discretos. Algoritmos Voraces: Objetos fragmentables ¿Cómo lo resolvemos si no podemos fragmentar los objetos y los pesos son valores reales?

Upload: snoopdock

Post on 16-Jun-2015

281 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Tema 6 Vuelta AtrÁs

1

1

Departamento de Lenguajes y Sistemas Informáticos

UNIVERSIDAD DE ALICANTE

TEMA 6VUELTA ATRÁS

2

VUELTA ATRÁS (Backtracking) EJEMPLO INTRODUCTORIO (1)

El Problema de la Mochila (general). Sean n objetos con valoresvi y pesos pi y una mochila con capacidad máxima de transporte de un peso P. Seleccionar un conjunto de objetos de forma que:

no sobrepase el peso P (restricción)el valor transportado sea máximo (función objetivo)

¿Cómo obtener la solución óptima?Programación dinámica: Objetos no fragmentables y pesos discretos. Algoritmos Voraces: Objetos fragmentables

¿Cómo lo resolvemos si no podemos fragmentar los objetos y los pesos son valores reales?

Page 2: Tema 6 Vuelta AtrÁs

2

3

VUELTA ATRÁSEJEMPLO INTRODUCTORIO (2)

El Problema de la Mochila (general). Sean n objetos con valoresvi y pesos pi y una mochila con capacidad máxima de transporte de un peso P. Seleccionar un conjunto de objetos de forma que:

no sobrepase el peso P (restricción)el valor transportado sea máximo (función objetivo)

¿Cómo obtener la solución óptima?Programación dinámica: Objetos no fragmentables y pesos discretos. Algoritmos Voraces: Objetos fragmentables

¿Cómo lo resolvemos si no podemos fragmentar los objetos y los pesos son valores reales?

Generar todas las combinaciones posibles (espacio de soluciones)Seleccionar las que cumplen las restricciones (soluciones factibles)Elegir aquella que maximiza la función objetivo (solución óptima)

4

VUELTA ATRÁS EJEMPLO INTRODUCTORIO (3)

Tipificación del problema:

Solución =

Restricciones:Implícitas

Explícitas

Función objetivo: (valor transportado)

1

n

i ii

x p P=

≤∑

1 2, , , n iX x x x x=< … > ∈

1

Maxn

i ii

x v=∑

{ }0,1ix ∈0 no se selecciona el objeto 1 se selecciona el objeto completo

i

i

x ix i=⎧

⎨ =⎩

Page 3: Tema 6 Vuelta AtrÁs

3

5

Solución OPTIMA

VUELTA ATRÁS EJEMPLO INTRODUCTORIO (4)

Combinaciones posiblesSupongamos el siguiente ejemplo:

Espacio de soluciones:

16

(7,8,2)3

(49, 40,20)

P

pn

v

=⎧⎪⎨ =⎧

=⎪ ⎨ =⎩⎩

SOLUCIÓN PESO VALOR

(0,0,0) 0 0

(0,0,1) 2 20

(0,1,0) 8 40

(0,1,1) 10 60

(1,0,0) 7 49

(1,0,1) 8 69

(1,1,0) 15 89

(1,1,1) 17 109

Soluciones factibles

Solución NO factible

6

funcion GENERA (n,k:ent;) x:vector[{0,1}])

para j ∈{0,1} hacerxk = jopcion

(k=n):Imprimir(x);(k<n):GENERA (n,k+1,x);

fopcionfpara

fin

VUELTA ATRÁS EJEMPLO INTRODUCTORIO (5)

Generación de todas las combinaciones

Ejemplo n=3: { }1 2 3, , / 0,1ix x x x< > ∈

00? 01?

0??

000 001 010 011

10? 11?

1??

100 101 110 111

???

Page 4: Tema 6 Vuelta AtrÁs

4

7

VUELTA ATRÁS EJEMPLO INTRODUCTORIO (6)

Generación de las soluciones factibles

Complejidad:Caso peor:

Caso mejor

funcion MOCHILA (v,p:vector[real];P:real;n,k:entero;x:vector[{0,1}])

para j ∈{0,1} hacerxk = j

si (Σ(k)xipi≤P)opcion(k=n) : Imprimir(x);(k<n) : MOCHILA(v,p,P,n,k+1,x);

fopcionfinsi

fparafin

1

n

i ii

x p P=

≤∑

, ii p P∀ >

( ) 2· ( 1) (2 )nf n f n n= − + ∈Ο

2( ) ( )f n n∈Ω

8

funcion MOCHILA (v,p:vector[real]; P,v_mejor:real; n,k:entero;x,x_mejor:vector[{0,1}])

para j ∈{0,1} hacerxk = j

si (Σ(k)xipi≤P)opcion(k=n) : si valor(x)>v_mejor entonces

x_mejor=x;v_mejor=valor(x);

finsi

(k<n) : MOCHILA(v,p,P,v_mejor,n,k+1,x,x_mejor);fopcion

finsifpara

fin

VUELTA ATRÁS EJEMPLO INTRODUCTORIO (7)

Búsqueda de la solución óptima

Page 5: Tema 6 Vuelta AtrÁs

5

9

VUELTA ATRÁS DEFINICIÓN Y ÁMBITO DE APLICACIÓN

Algunos problemas sólo podemos resolverlos mediante la obtención y estudio exhaustivo del conjunto de posibles soluciones al problema.

De entre todas ellas, se podrá seleccionar un subconjunto o bien, aquella que consideremos la mejor (la solución óptima)

Para llevar a cabo el estudio exhaustivo Vuelta atrás proporciona una forma sistemática de generar todas las posibles soluciones a un problema.

Generalmente se emplea en la resolución de problemas de selección / optimización en los que el conjunto de soluciones posibles es finito.

En los que se pretende encontrar una o varias soluciones que sean:Factibles: que satisfagan unas restricciones y/oÓptimas: optimicen una cierta función objetivo

10

VUELTA ATRÁS CARACTERÍSTICAS

La solución debe poder expresarse mediante una tupla de decisiones< x1 , x2 , .... , xn > donde xi ∈ Di

Las decisiones pueden pertenecer a dominios diferentes pero estos dominios siempre serán discretos.

Se generan y estudian todas las posibles soluciones

La estrategia siempre proporcionaTodas las soluciones factiblesLa solución óptima al problemaPero... con una complejidad elevada (2n, n!, nn)

Page 6: Tema 6 Vuelta AtrÁs

6

11

VUELTA ATRÁS CARACTERÍSTICAS

La generación y búsqueda de la solución se realiza mediante un sistema de prueba y error:Sea < x1 , x2 , ...., xi-1 , ..., > una tupla por completar. Decidimos sobre xi

Si Cumple restricciones: se añade xi a la solución y se pasa a xi+1Si no cumple restricciones: se prueba otra posibilidad para xi

Si No cumple restricciones y no hay más posibilidades con xi : se replantea la decisión anterior xi-1

La generación y búsqueda se realiza utilizando una imaginaria estructura de árbol sobre la que se realiza un recorrido en preorden.

12

VUELTA ATRÁS ESQUEMA RECURSIVO

BACKTRACKING (DP:datos_problema; k:entero; var x:tupla)comienzo

Pk = {j : j ∈ Dk} (Posibles valores xk)mientras (Pk ≠ ∅) (comprobar todos los valores para xk)

xk = elemento(Pk) (selección de valor para xk)si factible(x)

opcionsolucion(x): tratar(x) (Todas,la mejor,etc)

¬ solucion(x): BACKTRACKING(D,k+1,x)fopcion

finsiPk = Pk – {xk}

fmientrasfin

Page 7: Tema 6 Vuelta AtrÁs

7

13

VUELTA ATRÁS BACKTRACKING VS. GREEDY

GREEDYLos dominios son continuosBuscamos la solución óptima y existe un criterio de decisión voraz que nos conduce a ella.Buscamos una aproximación a la solución óptima.

BACKTRACKINGLos dominios no son continuosBuscamos todas las soluciones factibles o todas las soluciones óptimasBuscamos una solución óptima y el problema no tiene solución voraz.

14

VUELTA ATRÁS EJERCICIOS

EJERCICIOS OBLIGATORIOSEl Viajante de Comercio (ciclos hamiltonianos)Problema de las n reinasEl laberinto

OTROS EJERCICIOSTransformación de un númeroPermutacionesEl coloreado de grafos (coloreado de mapas)La empresa navieraEl reparto de paquetesLa asignación de turnos

Page 8: Tema 6 Vuelta AtrÁs

8

15

EjerciciosPROBLEMA DEL VIAJANTE DE COMERCIO: Solución VORAZ

En un grafo no dirigido y completo encontrar un ciclo hamiltoniano de mínimo coste, es decir, pasar por todos los vértices una sola vez y regresar al de partida de forma que el coste final sea mínimo.

Tipificación del problema:Secuencia de aristas que expresan el recorrido

Función objetivo: Minimizar el coste de la solución

Restricciones:xi ∈ V 1≤ i ≤ nNo existen nodos de grado 3No se forman bucles o ciclos excepto al final

1 2 2 3 1 1( , ), ( , ), , ( , ), ( , )n n nx x x x x x x x−< … >

1

1 11

Min peso( , ) peso( , )n

i i ni

x x x x−

+=

⎡ ⎤+⎢ ⎥⎣ ⎦∑

16

EjerciciosPROBLEMA DEL VIAJANTE DE COMERCIO: Solución voraz

funcion VIAJANTE_GREEDY (A:aristas;n:N): cjto_aristasvar y, solución: cjto_aristas;

decisión: arista;comienzo

solución=∅;y=ORDENA_PESOS_CRECIENTE(A);mientras |y|>0 ∧ |solución|≠n hacer

decisión=primero(y);si (¬∃_vértices_grado3(solución,decisión)) ∧

(¬∃_bucles(solución,decisión) ∨ |solución|=n-1) entoncessolución=AÑADIR(solución,decisión);

fsiy=ELIMINAR_PRIMERO(y);

fmientrassi (|solución|=n) entonces

devuelve(solución);si_no

devuelve(∅); /* No hay solución */fsi

fin

Page 9: Tema 6 Vuelta AtrÁs

9

17

EjerciciosPROBLEMA DEL VIAJANTE DE COMERCIO: Solución voraz

Criterio de selección: Tomar las aristas de menor peso.Inconveniente: No proporciona la solución óptima, pero sí una aproximada con coste razonable.Complejidad Ο(n3)

En función de:n = número de nodosn2 = número de aristas

ORDENA_PESOS_CRECIENTES → Ο(n2logn2)bucle mientras → Ο(n3)

Ο(n2) (en el caso peor, comprobar todas las aristas)∃_vértices_grado3 → Ο(n) (analizar el grado de cada vertice)∃_bucles → Ο(n) (Recorrer la solución y ver si hay bucles)

18

EjerciciosPROBLEMA DEL VIAJANTE DE COMERCIO: Solución VUELTA ATRAS

Tipificación del problema:Secuencia de vértices visitados

Fijamos el 1 como primer vértice

Función objetivo: Minimizar el peso total asociado a x

Restricciones:No podemos pasar dos veces por el mismo vértice, es decir, hay que comprobar que no hay elementos repetidos:

Debe existir arista entre un vértice y el siguiente:

Debe existir un camino de vuelta al principio:

1 2, , , nx x x< … >

1 1i ji j x x i n j n≠ ⇒ ≠ ≤ ≤ ≤ ≤

21, , , [2,n]n ix x x< … > ∈

1( , ) 1 -1i ipeso x x i n+ ≠ ∞ ≤ ≤

1( , )npeso x x ≠ ∞

Page 10: Tema 6 Vuelta AtrÁs

10

19

EjerciciosPROBLEMA DEL VIAJANTE DE COMERCIO: Solución vuelta atrás

/* Inicialización y llamada inicial */v_mejor=∞;X[1]=1; // Partimos del vértice 1VIAJANTE_BT(G,num_vertices(G),2, v_mejor,x, x_mejor);

/* Función */funcion VIAJANTE_BT (G:grafo;n,k,v_mejor:entero;x,x_mejor:vector[ent]))comienzo

xk=1;mientras xk<n hacerxk=xk+1;opcion

(k=n) ∧ (peso(xn-1,xn)≠∞) ∧ (peso(xn,x1)≠∞) ∧ ¬Repetido(x,n)):si peso_total(x)< v_mejor entonces

v_mejor=peso_total(x);x_mejor=x;

fsi(k<n) ∧ (peso(xk-1,xk)≠∞) ∧ (¬Repetido(x,k)):

VIAJANTE_BT (G,n,k+1,v_mejor,x,x_mejor);fopcion

fmientrasfin

20

EjerciciosPROBLEMA DEL VIAJANTE DE COMERCIO: Solución vuelta atrás

/* Versión Iterativa */funcion VIAJANTE_BT (var G:grafo)var x:vector[1,n]; k:entero;comienzo

x1=1; k=2; xk=1; v_mejor=∞;mientras k>1 hacersi xk<n entonces

xk=xk+1;opcion(k=n) ∧ (peso(xn-1,xn)≠∞) ∧ (peso(xn,x1)≠∞) ∧ ¬Repetido(x,n)):

si peso_total(x)< v_mejor entoncesv_mejor=peso_total(x);x_mejor=x;

fsi(k<n) ∧ (peso(xk-1,xk)≠∞) ∧ (¬Repetido(x,k)):

k=k+1;xk=1;fopcion

si_no k=k-1;fmientrasdevuelve x_mejor;

fin

Page 11: Tema 6 Vuelta AtrÁs

11

21

EjerciciosPROBLEMA DE LAS n REINAS

En un tablero de n x n, colocar n reinas sin que se “maten” entre sí.

Tipificación del problema:Secuencia de decisiones en la que cada xi es la columna en la que se encuentra la reina i (fila i)Restricciones:

Dos reinas no pueden estar en la misma columna

Dos reinas no pueden estar en la misma diagonal

Aunando ambas restricciones:

i j

i j

i x j x

x i x j

+ ≠ +

− ≠ −

i jx x i j− ≠ −

1 1i ji j x x i n j n≠ ⇒ ≠ ≤ ≤ ≤ ≤

22

EjerciciosPROBLEMA DE LAS n REINAS

funcion nREINAS (n,k:entero; x:vector[{1,...,n}])comienzoxk=0;mientras xk<n hacer

xk= xk+1;opcion

(k=n) ∧ CORRECTO(x,n): Imprimir(x);(k<n) ∧ CORRECTO(x,k): nREINAS(n,k+1,x);

fopcionfmientras

fin

funcion CORRECTO (var x: vector[{1,...,n}]; k:entero)var i:entero; ok:booleanocomienzo

i=1; ok=cierto;mientras (i>k) ∧ ok hacer

si (xi=xk) ∨ (abs(xi-xk)=abs(i-k)) entonces ok=falso;i=i+1;

fmientrasdevuelve ok

fin

Page 12: Tema 6 Vuelta AtrÁs

12

23

EjerciciosPROBLEMA DEL LABERINTO (2 MOVIMIENTOS)

Buscar todos los caminos posibles en una laberinto representado por una matriz de n x m, partiendo de la posición (1,1)hasta llegar a la posición (n,m).Sólo se pueden hacer dos movimientos:

derecha (→)abajo (↓).

Tipificación del problema:Secuencia de decisiones en la que cada xi es la dirección en la que nos movemos:

Restricciones:No salirse del laberinto ni tocar los muros

1 2 ?, , ,x x x< … >

{ }( )

( )0 ir hacia la derecha

0,1 1 ir hacia abajoix

→∈

24

EjerciciosPROBLEMA DEL LABERINTO

funcion LABERINTO (n,m,k:entero; x:vector[{0,1}] )comienzoxk=-1; mientras xk<1 hacer

xk = xk+1;opcion(k=n+m-2) ∧ CORRECTO(x,k): Imprimir(x);(k<n+m-2) ∧ CORRECTO(x,k): LABERINTO(n,m,k+1,x);fopcion

fmientrasfin

funcion CORRECTO (var x:vector[{0,1}]; k:entero): booleanovar i, filas, columnas:enterocomienzo

i=1; filas=1; columnas=1;mientras i ≤ k hacer

si xi=0 entonces columnas++si_no filas++;i=i+1;

fmientrassi (filas ≤ n) ∧ (columnas ≤ m) entonces

devuelve M[filas,columnas]si_no devuelve falso

fin

Page 13: Tema 6 Vuelta AtrÁs

13

25

EjerciciosPROBLEMA DE LA TRANSFORMACIÓN DE UN NÚMERO

Transformar un número n en otro m usando dos funciones f(x) y g(x)con un número máximo de transformaciones P.

f(x) = 3xg(x) = x/2 (división entera)

Tipificación del problema:Secuencia de decisiones

Función que comprueba las transformaciones realizadas:F(x,q,n) = x1(x2( x3 .... xq(n) ....)) = m , q ≤ P

Restricciones:k ≤ P k = nº de transformacionesF(x,k,n) ≠ 0F(x,k,n) ≠ F(x,i,n) i<k (valor repetido)

1 2 ?, , ,x x x< … >

{ }0 se aplica ( )

0,1 1 se aplica g( )i

f xx

x∈

26

EjerciciosPROBLEMA DE LA TRANSFORMACIÓN DE UN NÚMERO

v_mejor=P+1; /* inicialización previa de v_mejor */

funcion TRANSFORMA (P,n,m,k:entero; x,x_mejor:vector; v_mejor:entero)

comienzopara j ∈{‘f’,`g’} hacer

xk=j;opcion

F(x,k,n)=m: si k<v_mejor entoncesv_mejor=k;x_mejor=x;

finsi;(P>k ∧ F(x,k,n)≠m ∧ F(x,k,n)≠0 ∧(k<v_mejor) ∧ ¬Repetido(x,k,n)):

TRANSFORMA(n,m,k+1,x,x_mejor,v_mejor);fopcion

fparafin

Page 14: Tema 6 Vuelta AtrÁs

14

27

EjerciciosPERMUTACIONES

Dado un vector V de n elementos de tipo general ∂, implementar un algoritmo que sea capaz de hallar todas las permutaciones de sus elementos.

28

EjerciciosEL COLOREADO DE GRAFOS

Dado un grafo conexo y un número de colores m>0, llamamos colorear el grafo a asignar un número i (1 <= i <= m) a cada vértice, de forma que dos vértices adyacentes nunca tengan asignados números (o colores) iguales.

Deseamos diseñar dos algoritmos. El primero obtendrá todas las formas diferentes de colorear un grafo dadoEl segundo permitirá colorear un grafo dado empleando el mínimo número de colores diferentes

Page 15: Tema 6 Vuelta AtrÁs

15

29

EjerciciosLA EMPRESA NAVIERA

Supongamos una empresa naviera que dispone de una flota de Nbuques cada uno de los cuales transporta mercancías de un valor vi que tardan en descargarse un tiempo ti. Solo hay un muelle de descarga y su máximo tiempo de utilización es T.

Diseñar un algoritmo que determine el orden de descarga de los buques de forma que el valor descargado sea máximo sin sobrepasar el tiempo de descarga T. (Si se elige un buque para descargarlo, es necesario que se descargue en su totalidad).

30

EjerciciosEL REPARTO DE PAQUETES

Una empresa de transportes dispone de M vehículos para repartir N paquetes todos al mismo destino. Cada paquete tiene un peso Pi y tiene que estar entregado antes de un tiempo TPi. Por otra parte, cada vehículo puede transportar una carga máxima Cj, tarda un tiempo TVj en llegar al destino y consume una cantidad Lj de litros de combustible independiente de la carga que transporte.

Diseñar un algoritmo que obtenga la forma en que se deben transportar los objetos (en qué vehículo j debe ir cada objeto i) para que el consumo sea mínimo.

Page 16: Tema 6 Vuelta AtrÁs

16

31

EjerciciosEL LABERINTO

Una matriz bidimensional nxn puede representar un laberinto cuadrado. Cada posición contiene un entero que indica si la casilla es transitable (1) o no lo es (0). Las casillas [1,1] y [n,n]corresponden a la entrada y salida del laberinto y siempre serán transitables.Podemos desplazarnos de una casilla a otra adyacente empleando los movimientos: arriba, abajo, derecha o izquierda (no se permiten movimientos en diagonal).Dada una matriz con un laberinto, el problema consiste en diseñar un algoritmo que encuentre un camino, si existe, para ir de la entrada a la salida.

32

EjerciciosLA ASIGNACIÓN DE TURNOS

Estamos al comienzo del curso y los alumnos deben distribuirseen turnos de prácticas. Para solucionar este problema sepropone que valoren los turnos de práctica disponibles a los quedesean ir en función de sus preferencias. El número de alumnoses N y el de turnos disponibles es T. Se dispone una matriz depreferencias P con N filas y T columnas en la que cada alumnoescribe, en su fila correspondiente, un número entero (entre 0 yT) que indica la preferencia del alumno por cada turno (un valor 0indica que no quiere o no puede ir a dicho turno). Por otra parte,dispondremos de un vector C con T elementos que incluye lacapacidad de cada turno y que, por supuesto no podremossobrepasar.

Page 17: Tema 6 Vuelta AtrÁs

17

33

EjerciciosLA ASIGNACIÓN DE TURNOS

Por ejemplo, supongamos que hay 5 alumnos. Según el ejemplo en de matriz P, el alumno 1 no puede ir al tuno T1 y al que más preferencia asigna es al T3. Por otro lado, el vector contiene las capacidades máximas de cada turno.

Se pretende encontrar una solución para satisfacer el número máximo de alumnos según su orden de preferencia sin exceder la capacidad de los turnos.

P T1 T2 T3A1 0 1 2A2 1 2 3A3 3 2 1A4 0 0 1A5 2 1 0

CT1 3T2 2T3 4