07.05.2013 Views

PAII-26: algoritmos glotones - Cimat

PAII-26: algoritmos glotones - Cimat

PAII-26: algoritmos glotones - Cimat

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>PAII</strong>-<strong>26</strong>: <strong>algoritmos</strong> <strong>glotones</strong><br />

Dr. J.B. Hayet<br />

CENTRO DE INVESTIGACIÓN EN MATEMÁTICAS<br />

Mayo 2008<br />

,<br />

J.B. Hayet Programación, Mayo 2008 1 / <strong>26</strong>


Outline<br />

1 Unos ejemplos<br />

2 Un intento de caracterización<br />

,<br />

J.B. Hayet Programación, Mayo 2008 2 / <strong>26</strong>


Algoritmos <strong>glotones</strong><br />

a veces programación dinámica puede ser demasiado para un<br />

problema: puede existir manera de resolverla mucho mas sencilla<br />

en particular, puede funcionar (pero puede, solo) lo de no<br />

construir una solución globalmente optima sino construir la<br />

solución por elecciones localmente optimas que llegan a este<br />

optimo global<br />

eso es el propósito de los <strong>algoritmos</strong> <strong>glotones</strong><br />

no siempre posible pero muy poderoso cuando se puede<br />

,<br />

J.B. Hayet Programación, Mayo 2008 3 / <strong>26</strong>


Outline<br />

1 Unos ejemplos<br />

Unos ejemplos<br />

2 Un intento de caracterización<br />

,<br />

J.B. Hayet Programación, Mayo 2008 4 / <strong>26</strong>


Unos ejemplos<br />

Ejemplo: selección de actividades<br />

Consideremos:<br />

N actividades ai que podamos realizar durante un recorrido<br />

turístico<br />

cada actividad empieza en ei y termina en ti<br />

cual es el conjunto máximo de actividades que podemos tomar<br />

de tal manera que los intervalos de tiempo de las actividades<br />

seleccionadas no se traslapan?<br />

Vamos a ver que existe una resolución por programación dinámica<br />

pero que se puede hacer aun mejor con un algoritmo glotón<br />

,<br />

J.B. Hayet Programación, Mayo 2008 5 / <strong>26</strong>


Unos ejemplos<br />

Ejemplo: selección de actividades<br />

Estructura de la solución:<br />

naturalmente la caracterización de los problemas tiene que<br />

incluir las actividades y sus rangos<br />

sean los sub-problemas i, j definidos por buscar actividades que<br />

no se traslapan entre:<br />

Tij = {ak , ti ≤ ek < tk ≤ ej}<br />

o sea “las actividades que se puedan hacer sin problema<br />

después de la i y antes de la j”<br />

poner t0 = 0 y eN+1 = ∞<br />

,<br />

J.B. Hayet Programación, Mayo 2008 6 / <strong>26</strong>


Unos ejemplos<br />

Ejemplo: selección de actividades<br />

Estructura de la solución:<br />

tal cual el rango de i, j sería 0 ≤ i, j ≤ N + 1<br />

pero podemos hacer mejor (y ahorrar espacio memoria):<br />

ordenamos t0 ≤ t1 ≤ · · · ≤ tN<br />

así estamos seguros de qué Tij es vacio para i ≥ j:<br />

Tij = {ak , ti ≤ ek < tk ≤ ej < tj} = ∅<br />

entonces reducimos nuestro espacio de sub-problemas a la<br />

búsqueda de un sub-conjunto máximo en los Tij con<br />

0 ≤ i < j ≤ N + 1<br />

,<br />

J.B. Hayet Programación, Mayo 2008 7 / <strong>26</strong>


Unos ejemplos<br />

Ejemplo: selección de actividades<br />

Estructura de la solución:<br />

dada una solución al sub-problema Tij, supongamos que<br />

elijamos una de las actividades, ak<br />

podemos, con el argumento de siempre, decir que esta solución<br />

esta formada por las soluciones de los problemas sobre Tik y<br />

sobre Tkj a los cuales se añade ak<br />

como problema trivial permitiendo empezar la recursión: Tii = ∅<br />

,<br />

J.B. Hayet Programación, Mayo 2008 8 / <strong>26</strong>


Unos ejemplos<br />

Ejemplo: selección de actividades<br />

Solución recursiva: el número máximo Nij de actividades que se<br />

pueda colocar sin traslape entre ai y aj (un sub-conjunto de Tij) es<br />

dado por:<br />

N[i][j] =<br />

<br />

0 si i = j o si Tij = ∅<br />

max 1 + N[i][k] + N[k][j]<br />

i


Unos ejemplos<br />

Ejemplo: selección de actividades<br />

Implementación:<br />

se deduce de la formula recursiva una implementación<br />

bottom-up inmediata basada en arreglos<br />

rellenar el arreglo, otra vez, sub-diagonal por sub-diagonal<br />

complejidad en tiempo: en O(N 3 ), ya que hay que hacer O(N)<br />

comparaciones, adiciones, para cada elemento<br />

complejidad en espacio: O(N 2 )<br />

Se podrá hacer mejor?<br />

,<br />

J.B. Hayet Programación, Mayo 2008 10 / <strong>26</strong>


Unos ejemplos<br />

Ejemplo: selección de actividades<br />

Considerar el problema de Tij, y sea am la actividad de Tij que tenga<br />

el valor tm mínimo, entonces:<br />

1 am pertenece necesariamente al sub-conjunto máximo de<br />

actividades sin traslape dentro de Tij<br />

2 Tim = ∅<br />

La segunda se prueba inmediatamente por contradicción; para la<br />

primera, considerar Sij el sub-conjunto buscado. Sea al la actividad<br />

de tl mínima entre este sub-conjunto: si al = am entonces esta ok,<br />

sino, al = am. Construyendo S ′<br />

ij = Sij\{al} ∪ {am}, llegamos a una<br />

contradicción<br />

,<br />

J.B. Hayet Programación, Mayo 2008 11 / <strong>26</strong>


Unos ejemplos<br />

Ejemplo: selección de actividades<br />

Con esta propiedad tenemos otra manera de ver las cosas:<br />

en programación dinámica, tenemos cada vez dos<br />

sub-problemas y O(N) elecciones que hacer, y tenemos que<br />

adoptar una estrategia bottom-up para hacerlo<br />

usando la propiedad, vemos que hay solo 1 sub-problema cada<br />

vez con solo 1 elección posible que hacer cada vez (elegir la<br />

actividad de tiempo de terminación mas chica entre las de Tij)<br />

mejor, podemos adoptar una estrategia top-down sin problemas<br />

porque la propiedad te da directamente la elección que hacer<br />

desde Tij sin tener que evaluar los Tmj antes<br />

,<br />

J.B. Hayet Programación, Mayo 2008 12 / <strong>26</strong>


Unos ejemplos<br />

Ejemplo: selección de actividades<br />

Estrategia glotona (greedy):<br />

partir de T0(N+1) y elegir am1 la actividad de tm1 mínima entre<br />

todas las de T0(N+1)<br />

seguir con Tm1(N+1) y elegir am2 la actividad de tm1 mínima<br />

entre las de Tm1(N+1)<br />

seguir con Tm2(N+1) y elegir am3 la actividad de tm3 mínima<br />

entre las de Tm2(N+1)<br />

. . .<br />

hasta que Tmk(N+1) = ∅<br />

,<br />

J.B. Hayet Programación, Mayo 2008 13 / <strong>26</strong>


Unos ejemplos<br />

Ejemplo: selección de actividades<br />

Implementación muy simple:<br />

s t d : : v e c t o r e , t , s o l u t i o n ;<br />

. . . // Aqui r e l l e n a m o s l o s v e c t o r e s con l o s d a t o s<br />

i n t N = e . s i z e ( ) ;<br />

i n t m = 0 ; s o l u t i o n . push back (m) ;<br />

f o r ( i n t i =0; i =t . at (m) ) {<br />

m = i ;<br />

s o l u t i o n . push back (m) ;<br />

}<br />

}<br />

,<br />

J.B. Hayet Programación, Mayo 2008 14 / <strong>26</strong>


Unos ejemplos<br />

Ejemplo: selección de actividades<br />

Estrategia glotona (greedy): remarcar que<br />

los sub-problemas que tenemos cada vez son todos de tipo<br />

sobre Tmk(N+1)<br />

las actividades son elegidas en orden creciente de tmi<br />

es glotón en el sentido de que haces una optimización local sin<br />

tener que resolver los sub-problemas que quedan: dejamos cada<br />

vez un tiempo máximo no-organizado (o sea lo máximo de<br />

“libertad” en las elecciones siguientes)<br />

,<br />

J.B. Hayet Programación, Mayo 2008 15 / <strong>26</strong>


Unos ejemplos<br />

Ejemplo: selección de actividades<br />

Complejidad total:<br />

O(N log N) para ordenar las actividades por su ti<br />

θ(N) para construir la solución (cada actividad es examinada<br />

solo una vez)<br />

no costo adicional en memoria<br />

por un lado, es una estructura con que “tenemos suerte”<br />

,<br />

J.B. Hayet Programación, Mayo 2008 16 / <strong>26</strong>


Outline<br />

1 Unos ejemplos<br />

Un intento de caracterización<br />

2 Un intento de caracterización<br />

,<br />

J.B. Hayet Programación, Mayo 2008 17 / <strong>26</strong>


Un intento de caracterización<br />

Esquema de resolución<br />

El esquema que seguimos<br />

Aislar la sub-estructura optima del problema<br />

Deducir una estrategia de resolución recursiva<br />

Mostrar que en cada etapa de decisión, hay una elección que es<br />

elección greedy, que garantiza la optimalidad<br />

Mostrar que esta elección solo deja un sub-problema no trivial<br />

Re-formular la resolución recursiva y hacerla iterativa<br />

,<br />

J.B. Hayet Programación, Mayo 2008 18 / <strong>26</strong>


Un intento de caracterización<br />

Esquema de resolución mas rapido<br />

Lo que hubieramos podido hacer también en este caso es un atajo<br />

pensando ya desde el principio en usar un algoritmo glotón:<br />

reducir el problema óptimo a una elección necesaria mas la<br />

resolución de un sub-problema<br />

mostrar que hay una elección greedy posible y que cuando la<br />

haces, lo que queda es un sub-problema cuya solución,<br />

combinada con la elección greedy da una solución optima al<br />

problema original<br />

pero a priori sería suerte encontrar esa estructura precisa. . . ademas<br />

casi-siempre hay asociada una resolución por programación dinámica<br />

Ej.: partir de sub-problemas Ti = {al/ti ≤ el} y mostrar que al<br />

elegir la actividad de Ti con tm mínima cada vez te lleva a una<br />

solución óptima<br />

,<br />

J.B. Hayet Programación, Mayo 2008 19 / <strong>26</strong>


Un intento de caracterización<br />

Elección glotona<br />

corresponde a hacer una elección que parece la mejor en un<br />

momento dado sin considerar los resultados de los<br />

sub-problemas: por ejemplo, “elegir la actividad que deja lo<br />

máximo de posibilidades para los sub-problemas que quedan”<br />

paradigma opuesto al de programación dinámica: en PD,<br />

decides en función de la investigación que hiciste de todos los<br />

sub-problemas que se presentan en un momento dado<br />

GA: top-down / PD: bottom-up<br />

,<br />

J.B. Hayet Programación, Mayo 2008 20 / <strong>26</strong>


Un intento de caracterización<br />

Sub-estructura óptima<br />

igual que en programación dinámica: la solución global optima<br />

tiene que contener soluciones optimas de sub-problemas: la<br />

solución sobre Tij, si contiene una actividadak, esta<br />

estructurada por las soluciones de Tik y Tkj<br />

en GA, puedes tomarlo al revés y probar por inducción que<br />

combinar una elección greedy con una resolución de<br />

sub-problemas de tamaño creciente te lleva a la solución<br />

,<br />

J.B. Hayet Programación, Mayo 2008 21 / <strong>26</strong>


Un intento de caracterización<br />

Glotón o programación dinámica?<br />

Ejemplos:<br />

la mochila, variante 0-1 (un objeto es tomado o dejado)<br />

la mochila, variante fraccionaria (puedes tomar fracción de un<br />

objeto)<br />

Los dos casos (queremos optimizar el valor transportado<br />

manteniendo el volumen abajo de V ) tienen sub-estructura optima:<br />

0-1: considerando un objeto j de la solución, de volumen vj, si<br />

lo sacas tienes un sub-problema de misma naturaleza que es<br />

óptimo (con el argumento de siempre), entre n − 1 objetos y<br />

con limite V − vj<br />

fraccionaria: igual con lo de sacar un volumen w de lo que hay<br />

del objeto j: queda un sub-problema con n − 1 objetos, vj − v<br />

unidades de j y un limite de V − v<br />

Como funcionaría la programación dinámica en los dos casos?<br />

,<br />

J.B. Hayet Programación, Mayo 2008 22 / <strong>26</strong>


Un intento de caracterización<br />

Glotón o programación dinámica?<br />

Ver clase PA-I:<br />

0-1: recursión de forma (si vi ≤ v))<br />

complejidad en O(NV )<br />

Civ = max{C(i−1)(v−vi ) + ci, C(i−1)v}<br />

fraccionaria: extensión inmediata<br />

complejidad en O(NV 2 )<br />

Civ = max {C(i−1)(v−w) + wγi}<br />

0≤w≤vi<br />

Habrá propiedad de elección greedy en uno de esos casos?<br />

,<br />

J.B. Hayet Programación, Mayo 2008 23 / <strong>26</strong>


Un intento de caracterización<br />

Glotón o programación dinámica?<br />

En el segundo caso, sí:<br />

ordenar los objetos por su precio decreciente por unidad de<br />

volumen γi y elegir el objeto i en cantidad máxima<br />

si tengo volumen v de libre, que tengo mi solución óptima y<br />

que estoy mirando al objeto i. Si vi < v y que tomo w < vi de<br />

este objeto entonces me añadirá un precio wγt, ademas de lo<br />

que gano en el óptimo del problema para v − w:<br />

Civ = C(i−1)(v−w) + wγi<br />

i−1 <br />

= w (j) γj + wγi<br />

= i−1 <br />

≤<br />

j=0<br />

i−1<br />

j=0<br />

w (j) γj + viγi − (vi − w)γi<br />

<br />

(w (j) − δj)γj + viγi<br />

j=0<br />

,<br />

J.B. Hayet Programación, Mayo 2008 24 / <strong>26</strong>


Un intento de caracterización<br />

Glotón o programación dinámica?<br />

En el primer caso, no:<br />

se pude exhibir fácilmente contra ejemplos al método por<br />

densidad de costo: objetos de 60 pesos, 10L, 100 pesos, 20L,<br />

120 pesos, 30L con capacidad de 50L<br />

se podría de hecho proponer otra estrategia que sería poner el<br />

objeto de precio mas grande que quede en el volumen actual<br />

pero otra vez deja contra-ejemplos: objetos de 90 pesos, 27L,<br />

85 pesos, <strong>26</strong>L, 80 pesos 24L<br />

fundamentalmente, el problema es que cualquiera elección en el<br />

caso “discreto” modifica la estructura combinatoria de los<br />

sub-problemas; en el caso continuo, no pasa eso<br />

,<br />

J.B. Hayet Programación, Mayo 2008 25 / <strong>26</strong>


Un intento de caracterización<br />

Glotón o programación dinámica?<br />

Vimos ya unos <strong>algoritmos</strong> basados en el paradigma de de greedy<br />

choice (o sea construyendo una solución óptima por elecciones<br />

localmente óptimas) y en programación dinámica:<br />

Programación dinámica Greedy<br />

Floyd (CM) Dijsktra (CM)<br />

Warshall (CT) Prim (AGM)<br />

Kruskal (AGM)<br />

,<br />

J.B. Hayet Programación, Mayo 2008 <strong>26</strong> / <strong>26</strong>

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!