SlideShare ist ein Scribd-Unternehmen logo
1 von 25
Algoritmos voraces


1. Método general.
2. Análisis de tiempos de ejecución.
3. Ejemplos.
  3.1. Problema de la mochila.
  3.2. Planificación de tareas.
4. Técnicas heurísticas.
  4.1. El problema del viajante.
  4.2. Coloración de grafos.

                                       1
Método general
• Los algoritmos voraces, ávidos o de avance rápido
  (greedy) se utilizan normalmente en problemas de
  optimización, donde una solución está formada por un
  conjunto de elementos entre un conjunto de candidatos
  (con un orden determinado o no).

• El algoritmo voraz funciona por pasos:
   – Partimos de una solución vacía.
   – En cada paso se escoge el siguiente elemento para añadir a
     la solución, entre los candidatos.
   – Una vez tomada esta decisión no se podrá deshacer.
   – El algoritmo acabará cuando el conjunto de elementos
     seleccionados constituya una solución.

                                                   2
Método general
• Esquema general de un algoritmo voraz:
  voraz (C: conjunto_candidatos; var S: conjunto_solución);
      S=Ø
      mientras (C ≠ Ø) y no solución (S) hacer
          x = seleccionar (C)
          C = C - {x}
          si factible (S ∪ {x}) entonces
              S = S ∪ {x}
      finmientras
      si no solución (S) entonces
          devolver “No se puede encontrar una solución”

• En cada paso tenemos los siguientes conjuntos:
   – Candidatos seleccionados para la solución S.
   – Candidatos seleccionados pero rechazados luego.
   – Candidatos pendientes de seleccionar C.


                                                       3
Método general

• Funciones:
   – solución (S). Comprueba si un conjunto de candidatos es
     una solución (independientemente de que sea óptima o no).
   – seleccionar (C). Devuelve el elemento más “prometedor” del
     conjunto de candidatos pendientes (no seleccionados ni
     rechazados).
   – factible (C). Indica si a partir del conjunto de candidatos C es
     posible construir una solución (posiblemente añadiendo otros
     elementos).
   – Insertar un elemento en la solución. Además de la inserción,
     puede ser necesario hacer otras cosas.
   – Función objetivo (S). Dada una solución devuelve el coste
     asociado a la misma (resultado del problema de
     optimización).

                                                       4
Problema del cambio de monedas

  Disponemos de monedas de distintos valores: de 1, 2, 5, 10, 20 y
  50 céntimos de euro, y de 1 y 2 euros.
  Supondremos una cantidad ilimitada de cada una.

  Construir un algoritmo que dada una cantidad P devuelva esa
  cantidad con monedas de estos tipos, usando un número mínimo
  de monedas.
  P. ej.: para devolver 3.89 €: 1 monedas de 2€, 1 moneda de 1€, 1
  moneda de 50 c€, 1 moneda de 20 c€, 3 monedas de 5 c€ y 2
  monedas de 2 c€.

• Podemos aplicar la técnica voraz: en cada paso añadir una
  moneda nueva a la solución actual, hasta que el valor llegue a P.
                                                     5
Problema del cambio de monedas

•   Candidatos iniciales: todos los tipos de monedas disponibles.
    Solución: conjunto de monedas que suman la cantidad P.
•   Una solución será de la forma (x1, x2, x3, x4, x5, x6, x7, x8), donde xi es
    el número de monedas de tipo i. Suponemos que la moneda i vale ci.
•   Funciones:
     – solución. El valor actual será solución si Σ xi·ci = P
     – objetivo. La función a minimizar es Σ xi, el número de monedas
        resultante.
     – seleccionar. Elegir en cada paso la moneda de valor más alto
        posible, pero menor que el valor que queda por devolver.
     – factible. Valdrá siempre verdad.
•   En lugar de seleccionar monedas de una en una, podemos usar la
    división entera y coger todas las monedas posibles de mayor valor.


                                                                6
Problema del cambio de monedas

Devolver-cambio (P: integer; C: array [1..N] of
  integer; var X: array [1..N] of integer);
  act = 0
  para i = 1,2,...,N
      X[i] = 0
  mientras act ≠ P
      j = el mayor elemento de C tal que C[j] ≤ (P - act)
      si j=0 then { Si no existe ese elemento }
              devolver “No existe solución”;
      X[j] = (P - act) div C[j]
       act = act + C[j]*X[j]



                                               7
Problema del cambio de monedas
• Para este sistema monetario encuentra siempre la
  solución óptima.

• Puede no encontrar la solución óptima: supongamos que
  tenemos monedas de 100, 90 y 1. Queremos devolver
  180.
   – Algoritmo voraz: 1 moneda de 100 y 80 monedas de 1: total 81
     monedas.
   – Solución óptima: 2 monedas de 90: total 2 monedas.


• Puede haber solución y no encontrarla.

• Puede no haber solución y no lo detecta.

                                                       8
Análisis de tiempos de ejecución
•   El orden de complejidad depende del número de candidatos, de las
    funciones básicas a utilizar, del número de elementos de la solución.
•   N: número de elementos de C. M: número de elementos de una solución.
•   Repetir, como máximo N veces y como mínimo M:
     – Comprobar si el valor actual es solución: f(M). Normalmente O(1) ó
        O(M).
     – Selección de un elemento entre los candidatos: g(N). Entre O(1) y
        O(N).
     – La función factible es parecida a solución, pero con una solución
        parcial h(M).
     – La unión de un nuevo elemento a la solución puede requerir otras
        operaciones de cálculo, j(N, M).
•   Tiempo de ejecución genérico: t(N,M)∈O(N*(f(M)+g(N)+h(M))+M*j(N,
    M))

•   En la práctica los algoritmos voraces suelen ser bastante rápidos,
    encontrándose dentro de órdenes de complejidad polinomiales.

                                                            9
Problema de la mochila
• Tenemos n objetos, cada uno con un peso (wi) y un
  beneficio (vi). También tenemos una mochila en la que
  podemos meter objetos, con una capacidad de peso máximo
  M. (Supondremos todos los valores > 0)
• El objetivo es llenar la mochila, maximizando el valor de los
  objetos transportados, y respetando la limitación de
  capacidad máxima M.
• Supondremos que los objetos se pueden partir. De cada
  objeto i podremos coger un fracción xi, entre 0 y 1.
• Una solución será de la forma S = (x1, x2, ..., xn), cumpliendo:
                 n                                             n
   Restricción   ∑x
                 i=1
                        i   ⋅ wi ≤ M   Función objetivo    ∑x  i=1
                                                                     i   ⋅ vi
                                                          10
Problema de la mochila
•   Ejemplo: n = 3; M = 20
                  w = (18, 15, 10)
                   v = (25, 24, 15)
         Solución 1: S = (1, 2/15, 0), Valor total = 25 + 24*2/15 = 28.2
         Solución 2: S = (0, 2/3, 1), Valor total = 15 + 24*2/3 = 31
•   Diseño de la solución. Podemos utilizar un algoritmo voraz para
    resolver el problema.
     – Candidatos: Cada uno de los n objetos de partida.
     – Función solución: Tendremos una solución si hemos introducido en
       la mochila el peso máximo M (o si se han acabado los objetos).
     – Función seleccionar: Escoger el objeto más “prometedor”.
     – Función factible: Será siempre cierta (podemos añadir trozos de
       objetos).
     – Añadir a la solución: Añadir el objeto entero si cabe en la mochila, o
       en otro caso la proporción del mismo que quede para completarla.
     – Función objetivo: Suma de los beneficios de cada candidato por la
       proporción seleccionada del mismo.

                                                             11
Problema de la mochila

Mochila (M: integer; V, W: array [1..N] of integer; var X:
 array [1..N] of integer);
 para i = 1,2,...,N
     X[i] = 0
 peso_act = 0
 mientras peso_act < M
     j = el mejor objeto restante
     si peso_act + W[i] ≤ M
             X[i] = 1
             peso_act = peso_act + W[i]
     en otro caso
             X[i] = (M - peso_act)/W[i]
             peso_act = M


                                               12
Problema de la mochila


• Criterios para seleccionar el mejor objeto de los
  restantes:
   1. El objeto con más beneficio vi.
   2. El objeto menos pesado wi (para poder añadir
     muchos objetos).
   3. El objeto con mejor proporción vi/wi (coste por unidad
     de peso).

• El criterio 3 obtiene siempre la solución óptima.



                                                 13
Secuenciamiento de trabajos
• Tenemos n tareas requieren un tiempo unitario en
  ejecutarse, y un único procesador donde ejecutarlas.
• En cualquier instante T = 1, 2, ... podemos ejecutar una
  única tarea i. La ejecución de esta tarea provocará un
  beneficio gi.
• Restricción: una tarea i sólo puede ejecutarse si se hace
  antes de un plazo di. Cada tarea tiene un plazo de
  ejecución y un beneficio dados.
• En general puede que no sea posible ejecutar todas las
  tareas.
• Objetivo: dar una planificación de las tareas a ejecutar (i1,
  i2, ..., im) de forma que se maximice el beneficio obtenido:

                           ∑
                              m
                              k =1
                                     gi k
                                                   14
Secuenciamiento de trabajos
• Ejemplo: n = 4
             g = (100, 10, 15, 27)
             d = ( 2, 1, 2, 1)
   Soluciones:
      (1)   GTOTAL = 100                   (2, 1)   GTOTAL = 110
       (4, 3) GTOTAL = 42                  (4, 1)   GTOTAL = 127
• Comprobar todas las posibilidades tendría una complejidad n!
• Con un algoritmo voraz construimos la solución paso a paso.
• Una solución estará formada por un conjunto de candidatos, junto
  con un orden de ejecución de los mismos, S = (i1, i2, ..., im).
• Función solución: Tendremos la solución cuando hayamos
  tratado todos los candidatos.
• Función de selección: de los candidatos restantes elegir el que
  tenga mayor valor de beneficio.
                                                    15
       Solución (1,3) no óptima.
Secuenciamiento de trabajos
• Función factible: Dada una planificación (i1, i2, ..., ik) en un paso
  del algoritmo y un nuevo candidato j,
   – ¿Cuándo será factible la solución parcial que incluye a j?
   – ¿Dónde debería ser colocado j dentro de la planificación?
• Solución: buscar si existe alguna ordenación de {i1, i2, ..., ik, j}
  que respete los plazos de ejecución di. Problema: complejidad
  (k+1)!
• Parece lógico no comprobar todas las posibles ordenaciones,
  sino hacer una ordenación de forma que las tareas con plazos di
  más tempranos se ejecuten antes, y dejar para después las que
  tengan plazos mayores.
• Lema: Sea J un conjunto de k tareas, entonces existe una
  ordenación factible de J (es decir que respeta los plazos) sí y
  sólo sí la ordenación S = (s1, s2, ..., sk), con ds1 ≤ ds2 ≤ ... ≤ dsk es
  factible.
• Es decir, sólo es necesario probar la planificación en orden
  creciente de plazo de ejecución.                           16
Secuenciamiento de trabajos


• Estructura del algoritmo voraz:
   – Empezar con una secuencia vacía, con todos las tareas como
     candidatas.
   – Ordenar los candidatos según el valor de gi.
   – En cada paso, hasta que se acaben los candidatos, repetir:
      • Elegir entre los candidatos restantes el que tenga mayor
        beneficio.
      • Comprobar si es posible añadir la tarea elegida a la
        solución actual. Para ello introducir la nueva tarea en la
        posición adecuada, según el valor de plazo d.
      • Si el nuevo orden (s1, s2, ..., sk) es tal que dsi ≥ i, para todo i
        entre 1 y k, entonces el nuevo candidato es factible. Sino
        rechazar el candidato.
                                                            17
Secuenciamiento de trabajos
Trabajos(in d:array[1..n] of real; out s:array[0..n] of 0..n)
   d[0] = 0 ; s[0] = 0 ; k = 1 ; s[1] = 1
   para i = 2,3,..,n
       r=k
       mientras d[s[r]]>d[i] y d[s[r]]≠r
               r = r-1
       finmientras
       si d[s[r]]≤d[i] y d[i]>r
               para l = k,k-1,..,r+1
                       s[l+1] = s[l]
               finpara
               s[r+1] = i
               k = k+1
       finsi
finpara                                            18
Secuenciamiento de trabajos

• Orden de complejidad del algoritmo, suponiendo n
  tareas:
   – Primero, ordenar las tareas por orden creciente de
     plazo: O(n·log n)
   – Repetir para i desde 1 hasta n:
      • Elegir el próximo candidato: O(1).
      • Comprobar si la nueva planificación es factible, y
        añadirlo a la solución en caso afirmativo: O(i) en el
        peor caso.
      • En total, el algoritmo es de O(n2).
   – En promedio es una ordenación por inserción: θ(n2).


                                                 19
Técnicas heurísticas
• Existen muchos problemas para los cuales no se conocen
  algoritmos que puedan encontrar la solución de forma eficiente:
  problemas NP-completos.
• La solución exacta puede requerir un orden factorial o
  exponencial: el problema de la explosión combinatoria.
• Se hace necesario utilizar algoritmos heurísticos:
  Un algoritmo heurístico (o simplemente heurística) puede
  producir una buena solución (puede que la óptima) pero
  también puede que no produzca ninguna solución o dar una
  solución no muy buena. Normalmente, se basa en un
  conocimiento intuitivo del programador sobre un determinado
  problema.
• La estructura de algoritmo voraz se puede utilizar para construir
  procedimientos heurísticos: hablamos de heurísticas voraces.
• Objetivo: obtener buenas soluciones en un tiempo de ejecución
  corto.                                              20
El problema del viajante

• Problema: Dado un grafo no dirigido y con pesos G = (V, A),
  encontrar un ciclo simple de costo mínimo que pase por todos los
  nodos.                      10
                          2                       3
                          45                                20
                               40                  55
                                             25
                      1                                     4
                                    35            30
                               50        5             15
•   Es un problema NP, pero necesitamos una solución eficiente.
•   Problema de optimización, donde la solución está formada por un grupo
    de elementos en cierto orden: podemos aplicar el esquema voraz.
•   Posibilidades:
     1) Los nodos son los candidatos. Empezar en un nodo cualquiera. En
        cada paso moverse al nodo no visitado más próximo al último nodo
        seleccionado.
     2) Las aristas son los candidatos, pero garantizando que se forme un
                                                            21
        ciclo.
El problema del viajante
•   Heurística voraz 1)
     – Una solución será un cierto orden en el conjunto de nodos (c1, c2, ...,
       cn): el orden de visita de los nodos.
     – Inicialización: seleccionar un nodo cualquiera.
     – Función de selección: de los nodos candidatos seleccionar el más
       próximo al último (o al primero) de la secuencia actual (c1, c2, ..., ca).
     – Acabamos cuando tengamos n nodos.
•   Ejemplo.                                    2   10
                                                           3
    Empezando en el nodo 1.                 45
                                                         30        25
                                                 1                                4
    Solución: (1, 4, 5, 3, 2)
    Coste: 30+15+25+10+45=125                                  5             15

                                                          10
    Empezando en el nodo 3.                          2             3
                                            45                               20
    Solución: (5, 4, 3, 2, 1)           1                                    4
    Coste: 15+20+10+45+50=140
                                                 50       5             15   22
El problema del viajante
•   Heurística voraz 2)
     – Una solución será un conjunto de aristas (a1, a2, ..., an-1) que formen
        un ciclo hamiltoniano, sin importar el orden.
     – Empezar con un grafo sin aristas.
     – Selección: seleccionar la arista candidata de menor coste.
     – Factible: una arista se puede añadir a la solución actual si no se
        forma un ciclo (excepto para la última arista añadida) y si los nodos
        unidos no tienen grado mayor que 2.                     10
                                                              2      3
•   Ejemplo.                                             45               20
    Solución: ((2, 3), (4, 5), (3, 4), (1, 2), (1, 5)) 1
                                                                           4
    Coste = 10+15+20+45+50 = 140
•   Conclusiones:                                           50   5     15
     – Ninguno de las dos funciones de selección garantiza una solución
        óptima. Sin embargo, normalmente ambos dan soluciones buenas,
        próximas a la óptima.
     – Posibles mejoras: buscar heurísticas mejores; repetir la heurística 1
        con varios orígenes; o bien, a partir de la solución del algoritmo
        intentar hacer modificaciones locales para mejorar esa solución:
        búsqueda local.
                                                              23
Coloración de grafos
• Problema: dado un grafo no dirigido, realizar una coloración
  utilizando el número mínimo de colores.
• Coloración: asignación de un color a cada nodo, de forma que
  dos nodos unidos con un arco tengan siempre distinto color.
                                         4
                      1           3               2

                                         5
 • Una solución será un conjunto de pares de la forma (nodo, color)
   cumpliendo que para todo (ni, ci) y (nj, cj), si (ni, nj) es una arista del
   grafo, entonces ci ≠ cj.
 • Podemos usar una heurística voraz para obtener una solución:
    – Empezar con un color c1, y todos los nodos sin colorear.
     – Para cada uno de los nodos que no tienen asignado un color,
       comprobar si es posible asignarles el color actual. Repetir hasta
       comprobar todos los candidatos.
     – Si quedan nodos sin colorear, escoger otro color y 24
                                                           volver al paso
       anterior.
Coloración de grafos
• Ejemplo.                                        4

                               1          3            2
Solución: ((1, 1), (2, 1), (3, 2),
              (4, 3), (5, 3))                   5
Número de colores = 3
• La estructura básica del esquema voraz se repite varias veces,
   una por cada color, hasta que todos los nodos estén coloreados.
• Función de selección: seleccionar cualquier candidato restante.
• Función factible: se puede asignar un color al candidato actual si
   ninguno de sus adyacentes tiene ese mismo color.
• El algoritmo no garantiza la solución óptima (en el ejemplo 2
   colores).                          4

                      1        3              2

                                      5
• ¿Cuál será el tiempo de ejecución en el peor caso? 25

Weitere ähnliche Inhalte

Was ist angesagt? (16)

Ayudantia 8 (soluci¢n)
Ayudantia 8 (soluci¢n)Ayudantia 8 (soluci¢n)
Ayudantia 8 (soluci¢n)
 
Teoria Edo
Teoria EdoTeoria Edo
Teoria Edo
 
Cap1
Cap1Cap1
Cap1
 
T6
T6T6
T6
 
Ejemplos vARIOS
Ejemplos vARIOSEjemplos vARIOS
Ejemplos vARIOS
 
PROBLEMA DE LA MOCHILA
PROBLEMA DE LA MOCHILAPROBLEMA DE LA MOCHILA
PROBLEMA DE LA MOCHILA
 
Solucionparcial3 Cvusta2009 02
Solucionparcial3 Cvusta2009 02Solucionparcial3 Cvusta2009 02
Solucionparcial3 Cvusta2009 02
 
Problemas variables aleatorias
Problemas variables aleatorias Problemas variables aleatorias
Problemas variables aleatorias
 
FCD Guía 1.funciones
FCD Guía 1.funcionesFCD Guía 1.funciones
FCD Guía 1.funciones
 
FCD Guía 2. limites y continuidad
FCD Guía 2. limites y continuidadFCD Guía 2. limites y continuidad
FCD Guía 2. limites y continuidad
 
Solucionparcial4 Cvusta2009 02
Solucionparcial4 Cvusta2009 02Solucionparcial4 Cvusta2009 02
Solucionparcial4 Cvusta2009 02
 
Solucionquiz4 Cvusta2009 02
Solucionquiz4 Cvusta2009 02Solucionquiz4 Cvusta2009 02
Solucionquiz4 Cvusta2009 02
 
Cap1
Cap1Cap1
Cap1
 
Ecuaciones de 1er orden
Ecuaciones de 1er ordenEcuaciones de 1er orden
Ecuaciones de 1er orden
 
5 repaso de_matrices
5 repaso de_matrices5 repaso de_matrices
5 repaso de_matrices
 
5 repaso de_matrices
5 repaso de_matrices5 repaso de_matrices
5 repaso de_matrices
 

Andere mochten auch

Enfermedades infecciosas por Mº Jesus Prados, Olga Carretero y Cristina Chacon
Enfermedades infecciosas por Mº Jesus Prados, Olga Carretero y Cristina ChaconEnfermedades infecciosas por Mº Jesus Prados, Olga Carretero y Cristina Chacon
Enfermedades infecciosas por Mº Jesus Prados, Olga Carretero y Cristina ChaconIES Alhamilla de Almeria
 
Evaluacion de suficiencia
Evaluacion de suficienciaEvaluacion de suficiencia
Evaluacion de suficienciaUNACH
 
Salud y Biodiversidad Teofilo Monteiro
Salud y Biodiversidad Teofilo MonteiroSalud y Biodiversidad Teofilo Monteiro
Salud y Biodiversidad Teofilo Monteiro2010 colombia
 
Tarea 5 de la UDI
Tarea 5 de la UDITarea 5 de la UDI
Tarea 5 de la UDIjeromof
 

Andere mochten auch (7)

EL CÓMIC
EL CÓMICEL CÓMIC
EL CÓMIC
 
Boletín de Emprendimiento No.12 -febrero 2011
Boletín de Emprendimiento No.12 -febrero 2011Boletín de Emprendimiento No.12 -febrero 2011
Boletín de Emprendimiento No.12 -febrero 2011
 
Presionia
PresioniaPresionia
Presionia
 
Enfermedades infecciosas por Mº Jesus Prados, Olga Carretero y Cristina Chacon
Enfermedades infecciosas por Mº Jesus Prados, Olga Carretero y Cristina ChaconEnfermedades infecciosas por Mº Jesus Prados, Olga Carretero y Cristina Chacon
Enfermedades infecciosas por Mº Jesus Prados, Olga Carretero y Cristina Chacon
 
Evaluacion de suficiencia
Evaluacion de suficienciaEvaluacion de suficiencia
Evaluacion de suficiencia
 
Salud y Biodiversidad Teofilo Monteiro
Salud y Biodiversidad Teofilo MonteiroSalud y Biodiversidad Teofilo Monteiro
Salud y Biodiversidad Teofilo Monteiro
 
Tarea 5 de la UDI
Tarea 5 de la UDITarea 5 de la UDI
Tarea 5 de la UDI
 

Ähnlich wie Avarap (20)

Programación Dinámica
Programación DinámicaProgramación Dinámica
Programación Dinámica
 
2 algoritmos voraces
2 algoritmos voraces2 algoritmos voraces
2 algoritmos voraces
 
Algoritmo voraces
Algoritmo voracesAlgoritmo voraces
Algoritmo voraces
 
Diapositiva prog no numerica 2 algoritmo voraces
Diapositiva prog no numerica 2 algoritmo voracesDiapositiva prog no numerica 2 algoritmo voraces
Diapositiva prog no numerica 2 algoritmo voraces
 
Vuelta Atras
Vuelta AtrasVuelta Atras
Vuelta Atras
 
El Problema del Agente Viajero_f.pptx
El Problema del Agente Viajero_f.pptxEl Problema del Agente Viajero_f.pptx
El Problema del Agente Viajero_f.pptx
 
Vuelta Atras
Vuelta AtrasVuelta Atras
Vuelta Atras
 
Metodo Simplex
Metodo SimplexMetodo Simplex
Metodo Simplex
 
Método simplex1
Método simplex1Método simplex1
Método simplex1
 
Método simplex.
Método simplex. Método simplex.
Método simplex.
 
INVESTIGACIÓN DE OPERACIONES
INVESTIGACIÓN DE OPERACIONESINVESTIGACIÓN DE OPERACIONES
INVESTIGACIÓN DE OPERACIONES
 
Ecuacion De 1er Grado
Ecuacion De 1er GradoEcuacion De 1er Grado
Ecuacion De 1er Grado
 
Presentación de optimizacion
Presentación de optimizacionPresentación de optimizacion
Presentación de optimizacion
 
Presentación de optimizacion
Presentación de optimizacionPresentación de optimizacion
Presentación de optimizacion
 
Programación dinámica
Programación dinámica Programación dinámica
Programación dinámica
 
Programación lineal
Programación linealProgramación lineal
Programación lineal
 
Algoritmos de vuelta atrás
Algoritmos de vuelta atrásAlgoritmos de vuelta atrás
Algoritmos de vuelta atrás
 
Programacion dinamica 22
Programacion dinamica 22Programacion dinamica 22
Programacion dinamica 22
 
Divide y Venceras
Divide y VencerasDivide y Venceras
Divide y Venceras
 
Investigacion Operativa Aspectos Generales
Investigacion Operativa Aspectos GeneralesInvestigacion Operativa Aspectos Generales
Investigacion Operativa Aspectos Generales
 

Mehr von Robin Sanchez

10.1.n. normas para el diseño de locales ebr
10.1.n. normas para el diseño de locales ebr10.1.n. normas para el diseño de locales ebr
10.1.n. normas para el diseño de locales ebrRobin Sanchez
 
EXAMEN GEOMETRIA PLANA Y TRIGONOMETRIA
EXAMEN GEOMETRIA PLANA Y TRIGONOMETRIAEXAMEN GEOMETRIA PLANA Y TRIGONOMETRIA
EXAMEN GEOMETRIA PLANA Y TRIGONOMETRIARobin Sanchez
 
“Diseño de un criptosistema para la codificación y decodificación de imágenes...
“Diseño de un criptosistema para la codificación y decodificación de imágenes...“Diseño de un criptosistema para la codificación y decodificación de imágenes...
“Diseño de un criptosistema para la codificación y decodificación de imágenes...Robin Sanchez
 
Materiales empleados en la construccion de goletas transoceanicas
Materiales empleados en la construccion de goletas transoceanicasMateriales empleados en la construccion de goletas transoceanicas
Materiales empleados en la construccion de goletas transoceanicasRobin Sanchez
 
Metodología de los sistemas de produccion para criptografiado optimo
Metodología de los sistemas de produccion para criptografiado optimoMetodología de los sistemas de produccion para criptografiado optimo
Metodología de los sistemas de produccion para criptografiado optimoRobin Sanchez
 

Mehr von Robin Sanchez (6)

10.1.n. normas para el diseño de locales ebr
10.1.n. normas para el diseño de locales ebr10.1.n. normas para el diseño de locales ebr
10.1.n. normas para el diseño de locales ebr
 
EXAMEN GEOMETRIA PLANA Y TRIGONOMETRIA
EXAMEN GEOMETRIA PLANA Y TRIGONOMETRIAEXAMEN GEOMETRIA PLANA Y TRIGONOMETRIA
EXAMEN GEOMETRIA PLANA Y TRIGONOMETRIA
 
“Diseño de un criptosistema para la codificación y decodificación de imágenes...
“Diseño de un criptosistema para la codificación y decodificación de imágenes...“Diseño de un criptosistema para la codificación y decodificación de imágenes...
“Diseño de un criptosistema para la codificación y decodificación de imágenes...
 
Materiales empleados en la construccion de goletas transoceanicas
Materiales empleados en la construccion de goletas transoceanicasMateriales empleados en la construccion de goletas transoceanicas
Materiales empleados en la construccion de goletas transoceanicas
 
Fractales
FractalesFractales
Fractales
 
Metodología de los sistemas de produccion para criptografiado optimo
Metodología de los sistemas de produccion para criptografiado optimoMetodología de los sistemas de produccion para criptografiado optimo
Metodología de los sistemas de produccion para criptografiado optimo
 

Avarap

  • 1. Algoritmos voraces 1. Método general. 2. Análisis de tiempos de ejecución. 3. Ejemplos. 3.1. Problema de la mochila. 3.2. Planificación de tareas. 4. Técnicas heurísticas. 4.1. El problema del viajante. 4.2. Coloración de grafos. 1
  • 2. Método general • Los algoritmos voraces, ávidos o de avance rápido (greedy) se utilizan normalmente en problemas de optimización, donde una solución está formada por un conjunto de elementos entre un conjunto de candidatos (con un orden determinado o no). • El algoritmo voraz funciona por pasos: – Partimos de una solución vacía. – En cada paso se escoge el siguiente elemento para añadir a la solución, entre los candidatos. – Una vez tomada esta decisión no se podrá deshacer. – El algoritmo acabará cuando el conjunto de elementos seleccionados constituya una solución. 2
  • 3. Método general • Esquema general de un algoritmo voraz: voraz (C: conjunto_candidatos; var S: conjunto_solución); S=Ø mientras (C ≠ Ø) y no solución (S) hacer x = seleccionar (C) C = C - {x} si factible (S ∪ {x}) entonces S = S ∪ {x} finmientras si no solución (S) entonces devolver “No se puede encontrar una solución” • En cada paso tenemos los siguientes conjuntos: – Candidatos seleccionados para la solución S. – Candidatos seleccionados pero rechazados luego. – Candidatos pendientes de seleccionar C. 3
  • 4. Método general • Funciones: – solución (S). Comprueba si un conjunto de candidatos es una solución (independientemente de que sea óptima o no). – seleccionar (C). Devuelve el elemento más “prometedor” del conjunto de candidatos pendientes (no seleccionados ni rechazados). – factible (C). Indica si a partir del conjunto de candidatos C es posible construir una solución (posiblemente añadiendo otros elementos). – Insertar un elemento en la solución. Además de la inserción, puede ser necesario hacer otras cosas. – Función objetivo (S). Dada una solución devuelve el coste asociado a la misma (resultado del problema de optimización). 4
  • 5. Problema del cambio de monedas Disponemos de monedas de distintos valores: de 1, 2, 5, 10, 20 y 50 céntimos de euro, y de 1 y 2 euros. Supondremos una cantidad ilimitada de cada una. Construir un algoritmo que dada una cantidad P devuelva esa cantidad con monedas de estos tipos, usando un número mínimo de monedas. P. ej.: para devolver 3.89 €: 1 monedas de 2€, 1 moneda de 1€, 1 moneda de 50 c€, 1 moneda de 20 c€, 3 monedas de 5 c€ y 2 monedas de 2 c€. • Podemos aplicar la técnica voraz: en cada paso añadir una moneda nueva a la solución actual, hasta que el valor llegue a P. 5
  • 6. Problema del cambio de monedas • Candidatos iniciales: todos los tipos de monedas disponibles. Solución: conjunto de monedas que suman la cantidad P. • Una solución será de la forma (x1, x2, x3, x4, x5, x6, x7, x8), donde xi es el número de monedas de tipo i. Suponemos que la moneda i vale ci. • Funciones: – solución. El valor actual será solución si Σ xi·ci = P – objetivo. La función a minimizar es Σ xi, el número de monedas resultante. – seleccionar. Elegir en cada paso la moneda de valor más alto posible, pero menor que el valor que queda por devolver. – factible. Valdrá siempre verdad. • En lugar de seleccionar monedas de una en una, podemos usar la división entera y coger todas las monedas posibles de mayor valor. 6
  • 7. Problema del cambio de monedas Devolver-cambio (P: integer; C: array [1..N] of integer; var X: array [1..N] of integer); act = 0 para i = 1,2,...,N X[i] = 0 mientras act ≠ P j = el mayor elemento de C tal que C[j] ≤ (P - act) si j=0 then { Si no existe ese elemento } devolver “No existe solución”; X[j] = (P - act) div C[j] act = act + C[j]*X[j] 7
  • 8. Problema del cambio de monedas • Para este sistema monetario encuentra siempre la solución óptima. • Puede no encontrar la solución óptima: supongamos que tenemos monedas de 100, 90 y 1. Queremos devolver 180. – Algoritmo voraz: 1 moneda de 100 y 80 monedas de 1: total 81 monedas. – Solución óptima: 2 monedas de 90: total 2 monedas. • Puede haber solución y no encontrarla. • Puede no haber solución y no lo detecta. 8
  • 9. Análisis de tiempos de ejecución • El orden de complejidad depende del número de candidatos, de las funciones básicas a utilizar, del número de elementos de la solución. • N: número de elementos de C. M: número de elementos de una solución. • Repetir, como máximo N veces y como mínimo M: – Comprobar si el valor actual es solución: f(M). Normalmente O(1) ó O(M). – Selección de un elemento entre los candidatos: g(N). Entre O(1) y O(N). – La función factible es parecida a solución, pero con una solución parcial h(M). – La unión de un nuevo elemento a la solución puede requerir otras operaciones de cálculo, j(N, M). • Tiempo de ejecución genérico: t(N,M)∈O(N*(f(M)+g(N)+h(M))+M*j(N, M)) • En la práctica los algoritmos voraces suelen ser bastante rápidos, encontrándose dentro de órdenes de complejidad polinomiales. 9
  • 10. Problema de la mochila • Tenemos n objetos, cada uno con un peso (wi) y un beneficio (vi). También tenemos una mochila en la que podemos meter objetos, con una capacidad de peso máximo M. (Supondremos todos los valores > 0) • El objetivo es llenar la mochila, maximizando el valor de los objetos transportados, y respetando la limitación de capacidad máxima M. • Supondremos que los objetos se pueden partir. De cada objeto i podremos coger un fracción xi, entre 0 y 1. • Una solución será de la forma S = (x1, x2, ..., xn), cumpliendo: n n Restricción ∑x i=1 i ⋅ wi ≤ M Función objetivo ∑x i=1 i ⋅ vi 10
  • 11. Problema de la mochila • Ejemplo: n = 3; M = 20 w = (18, 15, 10) v = (25, 24, 15) Solución 1: S = (1, 2/15, 0), Valor total = 25 + 24*2/15 = 28.2 Solución 2: S = (0, 2/3, 1), Valor total = 15 + 24*2/3 = 31 • Diseño de la solución. Podemos utilizar un algoritmo voraz para resolver el problema. – Candidatos: Cada uno de los n objetos de partida. – Función solución: Tendremos una solución si hemos introducido en la mochila el peso máximo M (o si se han acabado los objetos). – Función seleccionar: Escoger el objeto más “prometedor”. – Función factible: Será siempre cierta (podemos añadir trozos de objetos). – Añadir a la solución: Añadir el objeto entero si cabe en la mochila, o en otro caso la proporción del mismo que quede para completarla. – Función objetivo: Suma de los beneficios de cada candidato por la proporción seleccionada del mismo. 11
  • 12. Problema de la mochila Mochila (M: integer; V, W: array [1..N] of integer; var X: array [1..N] of integer); para i = 1,2,...,N X[i] = 0 peso_act = 0 mientras peso_act < M j = el mejor objeto restante si peso_act + W[i] ≤ M X[i] = 1 peso_act = peso_act + W[i] en otro caso X[i] = (M - peso_act)/W[i] peso_act = M 12
  • 13. Problema de la mochila • Criterios para seleccionar el mejor objeto de los restantes: 1. El objeto con más beneficio vi. 2. El objeto menos pesado wi (para poder añadir muchos objetos). 3. El objeto con mejor proporción vi/wi (coste por unidad de peso). • El criterio 3 obtiene siempre la solución óptima. 13
  • 14. Secuenciamiento de trabajos • Tenemos n tareas requieren un tiempo unitario en ejecutarse, y un único procesador donde ejecutarlas. • En cualquier instante T = 1, 2, ... podemos ejecutar una única tarea i. La ejecución de esta tarea provocará un beneficio gi. • Restricción: una tarea i sólo puede ejecutarse si se hace antes de un plazo di. Cada tarea tiene un plazo de ejecución y un beneficio dados. • En general puede que no sea posible ejecutar todas las tareas. • Objetivo: dar una planificación de las tareas a ejecutar (i1, i2, ..., im) de forma que se maximice el beneficio obtenido: ∑ m k =1 gi k 14
  • 15. Secuenciamiento de trabajos • Ejemplo: n = 4 g = (100, 10, 15, 27) d = ( 2, 1, 2, 1) Soluciones: (1) GTOTAL = 100 (2, 1) GTOTAL = 110 (4, 3) GTOTAL = 42 (4, 1) GTOTAL = 127 • Comprobar todas las posibilidades tendría una complejidad n! • Con un algoritmo voraz construimos la solución paso a paso. • Una solución estará formada por un conjunto de candidatos, junto con un orden de ejecución de los mismos, S = (i1, i2, ..., im). • Función solución: Tendremos la solución cuando hayamos tratado todos los candidatos. • Función de selección: de los candidatos restantes elegir el que tenga mayor valor de beneficio. 15 Solución (1,3) no óptima.
  • 16. Secuenciamiento de trabajos • Función factible: Dada una planificación (i1, i2, ..., ik) en un paso del algoritmo y un nuevo candidato j, – ¿Cuándo será factible la solución parcial que incluye a j? – ¿Dónde debería ser colocado j dentro de la planificación? • Solución: buscar si existe alguna ordenación de {i1, i2, ..., ik, j} que respete los plazos de ejecución di. Problema: complejidad (k+1)! • Parece lógico no comprobar todas las posibles ordenaciones, sino hacer una ordenación de forma que las tareas con plazos di más tempranos se ejecuten antes, y dejar para después las que tengan plazos mayores. • Lema: Sea J un conjunto de k tareas, entonces existe una ordenación factible de J (es decir que respeta los plazos) sí y sólo sí la ordenación S = (s1, s2, ..., sk), con ds1 ≤ ds2 ≤ ... ≤ dsk es factible. • Es decir, sólo es necesario probar la planificación en orden creciente de plazo de ejecución. 16
  • 17. Secuenciamiento de trabajos • Estructura del algoritmo voraz: – Empezar con una secuencia vacía, con todos las tareas como candidatas. – Ordenar los candidatos según el valor de gi. – En cada paso, hasta que se acaben los candidatos, repetir: • Elegir entre los candidatos restantes el que tenga mayor beneficio. • Comprobar si es posible añadir la tarea elegida a la solución actual. Para ello introducir la nueva tarea en la posición adecuada, según el valor de plazo d. • Si el nuevo orden (s1, s2, ..., sk) es tal que dsi ≥ i, para todo i entre 1 y k, entonces el nuevo candidato es factible. Sino rechazar el candidato. 17
  • 18. Secuenciamiento de trabajos Trabajos(in d:array[1..n] of real; out s:array[0..n] of 0..n) d[0] = 0 ; s[0] = 0 ; k = 1 ; s[1] = 1 para i = 2,3,..,n r=k mientras d[s[r]]>d[i] y d[s[r]]≠r r = r-1 finmientras si d[s[r]]≤d[i] y d[i]>r para l = k,k-1,..,r+1 s[l+1] = s[l] finpara s[r+1] = i k = k+1 finsi finpara 18
  • 19. Secuenciamiento de trabajos • Orden de complejidad del algoritmo, suponiendo n tareas: – Primero, ordenar las tareas por orden creciente de plazo: O(n·log n) – Repetir para i desde 1 hasta n: • Elegir el próximo candidato: O(1). • Comprobar si la nueva planificación es factible, y añadirlo a la solución en caso afirmativo: O(i) en el peor caso. • En total, el algoritmo es de O(n2). – En promedio es una ordenación por inserción: θ(n2). 19
  • 20. Técnicas heurísticas • Existen muchos problemas para los cuales no se conocen algoritmos que puedan encontrar la solución de forma eficiente: problemas NP-completos. • La solución exacta puede requerir un orden factorial o exponencial: el problema de la explosión combinatoria. • Se hace necesario utilizar algoritmos heurísticos: Un algoritmo heurístico (o simplemente heurística) puede producir una buena solución (puede que la óptima) pero también puede que no produzca ninguna solución o dar una solución no muy buena. Normalmente, se basa en un conocimiento intuitivo del programador sobre un determinado problema. • La estructura de algoritmo voraz se puede utilizar para construir procedimientos heurísticos: hablamos de heurísticas voraces. • Objetivo: obtener buenas soluciones en un tiempo de ejecución corto. 20
  • 21. El problema del viajante • Problema: Dado un grafo no dirigido y con pesos G = (V, A), encontrar un ciclo simple de costo mínimo que pase por todos los nodos. 10 2 3 45 20 40 55 25 1 4 35 30 50 5 15 • Es un problema NP, pero necesitamos una solución eficiente. • Problema de optimización, donde la solución está formada por un grupo de elementos en cierto orden: podemos aplicar el esquema voraz. • Posibilidades: 1) Los nodos son los candidatos. Empezar en un nodo cualquiera. En cada paso moverse al nodo no visitado más próximo al último nodo seleccionado. 2) Las aristas son los candidatos, pero garantizando que se forme un 21 ciclo.
  • 22. El problema del viajante • Heurística voraz 1) – Una solución será un cierto orden en el conjunto de nodos (c1, c2, ..., cn): el orden de visita de los nodos. – Inicialización: seleccionar un nodo cualquiera. – Función de selección: de los nodos candidatos seleccionar el más próximo al último (o al primero) de la secuencia actual (c1, c2, ..., ca). – Acabamos cuando tengamos n nodos. • Ejemplo. 2 10 3 Empezando en el nodo 1. 45 30 25 1 4 Solución: (1, 4, 5, 3, 2) Coste: 30+15+25+10+45=125 5 15 10 Empezando en el nodo 3. 2 3 45 20 Solución: (5, 4, 3, 2, 1) 1 4 Coste: 15+20+10+45+50=140 50 5 15 22
  • 23. El problema del viajante • Heurística voraz 2) – Una solución será un conjunto de aristas (a1, a2, ..., an-1) que formen un ciclo hamiltoniano, sin importar el orden. – Empezar con un grafo sin aristas. – Selección: seleccionar la arista candidata de menor coste. – Factible: una arista se puede añadir a la solución actual si no se forma un ciclo (excepto para la última arista añadida) y si los nodos unidos no tienen grado mayor que 2. 10 2 3 • Ejemplo. 45 20 Solución: ((2, 3), (4, 5), (3, 4), (1, 2), (1, 5)) 1 4 Coste = 10+15+20+45+50 = 140 • Conclusiones: 50 5 15 – Ninguno de las dos funciones de selección garantiza una solución óptima. Sin embargo, normalmente ambos dan soluciones buenas, próximas a la óptima. – Posibles mejoras: buscar heurísticas mejores; repetir la heurística 1 con varios orígenes; o bien, a partir de la solución del algoritmo intentar hacer modificaciones locales para mejorar esa solución: búsqueda local. 23
  • 24. Coloración de grafos • Problema: dado un grafo no dirigido, realizar una coloración utilizando el número mínimo de colores. • Coloración: asignación de un color a cada nodo, de forma que dos nodos unidos con un arco tengan siempre distinto color. 4 1 3 2 5 • Una solución será un conjunto de pares de la forma (nodo, color) cumpliendo que para todo (ni, ci) y (nj, cj), si (ni, nj) es una arista del grafo, entonces ci ≠ cj. • Podemos usar una heurística voraz para obtener una solución: – Empezar con un color c1, y todos los nodos sin colorear. – Para cada uno de los nodos que no tienen asignado un color, comprobar si es posible asignarles el color actual. Repetir hasta comprobar todos los candidatos. – Si quedan nodos sin colorear, escoger otro color y 24 volver al paso anterior.
  • 25. Coloración de grafos • Ejemplo. 4 1 3 2 Solución: ((1, 1), (2, 1), (3, 2), (4, 3), (5, 3)) 5 Número de colores = 3 • La estructura básica del esquema voraz se repite varias veces, una por cada color, hasta que todos los nodos estén coloreados. • Función de selección: seleccionar cualquier candidato restante. • Función factible: se puede asignar un color al candidato actual si ninguno de sus adyacentes tiene ese mismo color. • El algoritmo no garantiza la solución óptima (en el ejemplo 2 colores). 4 1 3 2 5 • ¿Cuál será el tiempo de ejecución en el peor caso? 25