Algoritmos voraces - PowerPoint PPT Presentation

1 / 15
About This Presentation
Title:

Algoritmos voraces

Description:

... y adem s se pueda ejecutar dada la restricci n de la matriz M. ... Dadas N=3, T=3, B=(5,2,4), D=(2,1,2) y M =( (false, true, true), (false, false, false) ... – PowerPoint PPT presentation

Number of Views:162
Avg rating:3.0/5.0
Slides: 16
Provided by: josmanue4
Category:

less

Transcript and Presenter's Notes

Title: Algoritmos voraces


1
Algoritmos voraces
  • Práctica 1 de MTP
  • José Manuel Sánchez Díaz

2
Suposiciones y estrategia
  • Existen N trabajos numerados de 1 a N. Como se
    dispone de un tiempo de trabajo T, considero que
    dicha cantidad, ya que está medida en unidades de
    tiempo (medidas positivas) supongo T entero mayor
    que 0.
  • Por lo tanto lo que se pide en el enunciado es
    maximizar
  • S i1 hasta N xi bi
  • teniendo en cuenta que no se puede sobrepasar
    dicho tiempo T
  • S i1 hasta N xi di lt T
  • Siendo xi la fracción de trabajo tomada, real
    comprendido entre 0 y 1.
  • Supongo el caso S i1 hasta N xi di gt T ya que
    de lo contrario la solución devuelve trivialmente
    que el operario realiza todos los trabajos
    encargados.
  • La estrategia voraz consiste en elegir en cada
    momento el trabajo considerado como mejor de
    entre los restantes no elegidos en cada momento.
  • Que un trabajo sea mejor significa que es un
    trabajo cuyo beneficio por unidad de tiempo (bi /
    di) es el mayor posible y además al consultar en
    la matriz M si dicho trabajo se puede realizar
    teniendo en cuenta el trabajo añadido
    anteriormente. Primeramente elijo trabajos
    enteros (i.e. xi 1) con el mencionado ratio
    mayor, y cuando me quedo sin trabajos enteros
    elijo la fracción de trabajo con su ratio
    proporcional mayor (en este caso la xi será menor
    estrictamente que 1)
  • Si un trabajo con ratio mejor no se pudo elegir
    porque es incompatible realizarlo de manera
    consecutiva con el anterior añadido se elegiría
    el siguiente trabajo por orden de su mejor ratio
    beneficio-tiempo.

3
Algoritmo
  • fun crearYordenarMonticulo (BN de ent, DN de
    ent, N ent) dev Monticulo
  • var
  • Monticulo monticulo crearMonticulo()
  • RegBT arrayRegarray RegBTN
  • Fvar
  • para i desde 0 hasta N-1 hacer
  • RegBT aux new RegBT()
  • aux.ratioDi)/Bi
  • aux.posi
  • aux.tiDi
  • aux.beBi
  • monticulo.insertar(arrayRegi))
  • fpara
  • dev monticulo
  • ffun

4
Algoritmo (II)
  • fun TrabajosBenef(N de ent, DN de ent, N
    ent, T real, MNN de bool) dev INN de
    real
  • Monticulo monticulocrearYordenarMonticulo(B,D,N
    )
  • Inicializa INN
  • tiempo0 ant0
  • i0 acti
  • RegBT primeromonticulo.primero() (accede al
    primer elemento)
  • mientras (iltN and (tiempo (primero.getTi())
    lt T))
  • si( !Mactant)
  • I0iprimero.getPos()
  • I1i1
  • tiempotiempo (primero.getTi())
  • antprimero.getPos()
  • monticulo.eliminar(primero) (elimina la raíz)
  • primero(RegBT)monticulo.primero()
  • actprimero.getPos()
  • i
  • si no

5
Elementos del esquema
  • Es un problema de optimización, ya que se pide
    maximizar el beneficio entre todos los posibles
    trabajos.
  • El conjunto de candidatos son todos los trabajos,
    que están contenidos en el montículo ordenados
    por ratio beneficio/tiempo.
  • La función que determina si el conjunto de
    candidatos seleccionado constituye solución es
    que el tiempo del trabajo a añadir más el tiempo
    acumulado no sobrepase el tiempo T.
  • La función de selección se define de manera que
    el candidato más prometedor es el primer trabajo
    en el montículo y además se pueda ejecutar dada
    la restricción de la matriz M.
  • Las funciones de factibilidad y objetivo no
    aparecen explícitamente en el problema.

6
Optimalidad
  • La estrategia voraz que se usa no permite que el
    algoritmo alcance una solución óptima. Demuestro
    dicha afirmación mediante el siguiente
    contraejemplo
  • Dadas N3, T3, B(5,2,4), D(2,1,2)
  • y M ( (false, true, true),
  • (false, false, false),
  • (false, false, false) )
  • Se escogería primero la tarea de beneficio 5 y
    tiempo 2, y no se podría coger después ninguna de
    las otras dos por la restricción de la matriz M,
    con lo que no se llegaría a la solución óptima,
    que sería coger las otras dos tareas restantes,
    acumulando un beneficio de 6.

7
Optimalidad (II)
  • El único caso en que la solución del algoritmo es
    la óptima es cuando la matriz M contiene en todos
    sus índices false de este modo nunca se tiene
    la restricción de no poder realizar dos tareas
    consecutivas, así que la estrategia voraz se
    simplifica siempre en elegir en cada momento el
    trabajo considerado como mejor de entre los
    restantes no elegidos en cada momento, como se ha
    explicado anteriormente en el punto 1. Esta
    estrategia conduce a una solución óptima siempre,
    ya que se pueden fraccionar los trabajos. La
    demostración es la siguiente
  • Se supone que los trabajos están ordenados en
    forma decreciente respecto del ratio
    beneficio/tiempo. Sea X(x1, x2, ..., xn) la
    solución construida por el algoritmo voraz.
  • Si todos los xi son 1, la solución es
    trivialmente óptima. Si no, existirá un menor
    índice j t.q. xjlt1, que indica el objeto
    fraccionado. Así xi1 si iltj y xi0 si igtj (los
    trabajos que ya no se escogen)
  • Llamo B(X) al beneficio total que se consigue con
    la solución voraz X, B(X) S i1 hasta N xi bi.
  • Considero una solución Y cualquiera, con lo que
  • B(X) B(Y) S i1 hasta N (xi yi) bi S
    i1 hasta N (xi yi) (bi/ti)ti
  • Cuando i lt j, como xi1 entonces xi yi gt 0, y
    se sabe que bi/ti gt 0 porque así se ordenaron
    los trabajos.
  • Cuando i gt j, como xi 0 entonces xi yi lt 0 y
    y se sabe que bi/ti lt 0.
  • Cuando i j quiere decir que bi/ti bj/tj. Por
    lo tanto
  • p.t. i entre 1 y N se deduce que (xi
    yi)(bi/ti) gt (xj yj)(bj/tj)
  • así pues,
  • B(X) B(Y) gt S i1 hasta N (xi yi)
    (bi/ti)ti (bi/ti) S i1 hasta N (xi yi) ti
  • Como todos los beneficios y tiempos son positivos
    y S i1 hasta N xi bi T y S j1 hasta N yj
    bj lt T se demuestra
  • B(X) B(Y) gt S i1 hasta N (xi yi) ti S
    i1 hasta N xiti - S i1 hasta N yiti gt 0
  • Con lo que se deduce que x es óptima, ya que no
    hay otra solución mejor posible

8
Complejidad
  • Todas las demás operaciones que no se indican son
    de coste constante
  • fun crearYordenarMonticulo (BN de ent, DN de
    ent, N ent) dev Monticulo
  • var
  • Monticulo monticulo crearMonticulo()
  • RegBT arrayRegarray RegBTN
  • Fvar
  • para i desde 0 hasta N-1 hacer // n vueltas
    del bucle -gtnlogn
  • RegBT aux new RegBT()
  • aux.ratioDi)/Bi
  • aux.posi
  • aux.tiDi
  • aux.beBi
  • monticulo.insertar(arrayRegi)) //
    insertar en montículos es de coste log(n)
  • fpara
  • dev monticulo
  • ffun

9
Complejidad (II)
  • fun TrabajosBenef(N de ent, DN de ent, N
    ent, T real, MNN de bool) dev INN de
    real
  • Monticulo monticulocrearYordenarMonticulo(B,D,N
    ) //complejidad nlogn
  • Inicializa INN
  • tiempo0 ant0
  • i0 acti
  • RegBT primeromonticulo.primero() (accede al
    primer elemento)
  • mientras (iltN and (tiempo (primero.getTi())
    lt T))// n vueltas del bucle -gt nlogn
  • si( !Mactant)
  • I0iprimero.getPos()
  • I1i1
  • tiempotiempo (primero.getTi())
  • antprimero.getPos()
  • monticulo.eliminar(primero) (elimina la
    raíz)//eliminar en montículos es de coste log(n)
  • primero(RegBT)monticulo.primero()
  • actprimero.getPos()
  • i
  • si no

10
Clase interna RegBT
11
Clase Trabajos
12
Implementación
  • El código fuente en Java (usando JDK
    1.4.2_03-b02) se encuentra adjuntado en este
    mismo fichero zip, en la ruta Practica1/src
  • El código compilado se encuentra adjuntado en
    este mismo fichero zip, en la ruta
    Practica1/classes
  • El archivo nativo ejecutable se llama
    Practica1.jar y se encuentra en la ruta
    Practica1/
  • El archivo ejecutable para la consola de Windows
    se llama Practica1.exe y se encuentra en la
    ruta Practica1/
  • La documentación en formato javadoc generada se
    encuentra adjuntada en este mismo fichero zip, en
    la ruta Practica1/doc

13
Comparación tiempos
  • Tiempo medido en milisegundos

14
Consideraciones tiempo
  • Tiempos reales tomados de la ejecución del
    algoritmo implementado para N5, N10, N20,
    N40, en milisegundos.
  • La barra de tiempo teórico se calcula dado el N,
    con NlogN.
  • Como se puede observar, cuanto mayor es N, mayor
    se aproxima el tiempo real al tiempo teórico
    calculado en el apartado de complejidad. También
    influye cómo está construida la matriz de
    booleanos M.
  • Nota las mediciones de tiempo se midieron en un
    equipo con sistema operativo Windows XP SP2,
    procesador Intel Pentium III con frecuencia de
    450 MHz. Es obvio que se pueden producir
    variaciones en las mediciones de tiempos del
    mismo algoritmo sobre diferentes plataformas.

15
Ruegos y preguntas
Write a Comment
User Comments (0)
About PowerShow.com