Algoritmo de Greedy

download Algoritmo de Greedy

of 12

Transcript of Algoritmo de Greedy

  • 8/17/2019 Algoritmo de Greedy

    1/12

     

    ALGORITMO DE GREEDY

    Cruzado Berrú Luis

    Paredes Quispe Angelic

  • 8/17/2019 Algoritmo de Greedy

    2/12

     

    INTRODUCCION

    El método Greedy es generalmente utilizado para resolver problemas de optimización,

    es decir, problemas en los cuales se tiene un conjunto de candidatos, de los cuales sedebe elegir un subconjunto que satisfaga una cierta condición de optimalizad y

    eventualmente condiciones de factibilidad.

    El método Greedy consiste en analizar el conjunto de candidatos y tomar, en cada

    etapa una decisión optima (elegir el mejor candidato). Esta decisión es tomada

    localmente, ósea sin tener en cuenta las decisiones de etapas pasadas o de etapas

    futuras.

    De acuerdo a lo anterior se puede resumir que el método Greedy trabaja en etapas y

    en cada etapa se toma una decisión localmente optima, de manera de generar la

    solución óptima al problema.

    Claramente el hecho de generar la solución optima a partir de una sucesión de

    decisiones localmente optimas en varias etapas, no es válido para cualquier problema

    ni aun para instancias del mismo problema.

    CARACTERÍSTICAS GENERALES.

     

    Se utilizan generalmente para resolver problemas de optimización

    (obtener el máximo o el mínimo).

     Toman decisiones en función de la información que está disponible

    en cada momento.

     Suelen ser rápidos y fáciles de implementar.

     No siempre garantizan alcanzar la solución óptima.

    Para poder resolver un problema usando el enfoque Greedy, tendremos

    que considerar 6 elementos:

    IMPORTANTE

    EL ENFOQUE “GREEDY” NO NOS GARANTIZA OBTENER SOLUCIONES ÓPTIMAS.

  • 8/17/2019 Algoritmo de Greedy

    3/12

    1)  Conjunto de candidatos (elementos seleccionables)

    2)  Solución parcial (candidatos seleccionados).

    3)  Función de selección (determina el mejor candidato del conjunto de

    candidatos seleccionables).

    4) 

    Función de factibilidad (determina si es posible completar lasolución parcial para alcanzar una solución del problema).

    5)  Criterio que define lo que es una solución (indica si la solución

    parcial obtenida resuelve el problema).

    6)  Función objetivo (valor de la solución alcanzada).

    ESQUEMA GENERAL.

    Ejemplo 1 (problema de las monedas)

    Dada una cantidad de dinero y un conjunto de monedas de distintos valores, cambiar a

    monedas el dinero utilizando la mínima cantidad de monedas.

    Se plantea el siguiente algoritmo para resolver el problema:

    Mientras dinero > 0 hacer

    Sea i la moneda de mayor valor que cumple

    valor (i)

  • 8/17/2019 Algoritmo de Greedy

    4/12

    K: = dinero div valor (i)

    dinero = dinero - k * valor (i)

    Se puede observar que es un algoritmo basado en el método Greedy, trabaja por etapas y

    toma en cada una de ellas la decisión localmente óptima: tomar tantas veces como sea posible

    la moneda de mayor valor.

    A continuación se verá que sucede para distintas instancias del problema:

    a)  Dinero = 10

    Monedas con valores 3 y 2

    No se puede resolver con el algoritmo planteado, aunque existe una solución al

    problema.

    b) 

    Dinero = 15

    Monedas con valores 11, 5 y 1

    El resultado que se obtenido usando el algoritmo planteado:

    1 moneda de 11

    4 monedas de 1

    Por lo tanto aunque el algoritmo halla una solución al problema, esta no es óptima dado que la

    solución óptima está dada por 3 monedas de 5.

    c)  Dinero = 15

    Monedas con valores 10, 5 y 1

    El resultado que se obtiene usando el algoritmo planteado:1 moneda de 10

    1 moneda de 5

    Lo cual constituye la solución óptima.

    Como conclusión puede decirse que este problema no es resoluble por el método Greedy,

    dado que hallar la solución optima tomando la moneda de mayor valor (decisión localmente

    optima) en cada etapa conduce a la solución optima dependiendo del valor delas monedas.

    Problema de la Mochila en Programación Entera resuelto

    El Problema de la Mochila (conocido también como Knapsack Problem o simplemente KP) es

    un problema clásico de la Investigación de Operaciones y en particular de la Programación

    Entera. Consiste en un excursionista que debe preparar su mochila, la cual tiene una capacidad

    limitada y por tanto no le permite llevar todos los artículos que quisiera tener en la excursión.

  • 8/17/2019 Algoritmo de Greedy

    5/12

    Cada artículo que el excursionista puede incluir en la mochila le reporta una determinada

    utilidad. Luego el problema consiste en seleccionar un subconjunto de objetos de forma tal

    que se maximice la utilidad que el excursionista obtiene, pero sin sobrepasar la capacidad de

    acarrear objetos.

    En este contexto existen varias aplicaciones que guardan una similitud conceptual con el

    Problema de la Mochila y en consecuencia nos podemos beneficiar de la formulación y

    resolución de un modelo de optimización matemática para dicho propósito. Consideremos el

    siguiente ejemplo:

    Problema de la Mochila

    Un armador tiene un carguero con capacidad de hasta 700 toneladas. El carguero transporta

    contenedores de diferentes pesos para una determinada ruta. En la ruta actual el cargueropuede transportar algunos de los siguientes contenedores:

    El analista de la empresa del armador desea determinar el envío (conjunto de contenedores)

    que maximiza la carga transportada. Para ello se propone el siguiente modelo de

    Programación Entera:

    Variables de Decisión:

    Función Objetivo: Consiste en maximizar la carga que transportará el carguero.

  • 8/17/2019 Algoritmo de Greedy

    6/12

    Restricciones: El peso de la carga transportada no puede exceder la capacidad

    máxima del carguero.

    Al implementar computacionalmente el problema anterior haciendo uso de

    OpenSolver se alcanzan los siguientes resultados:

    La solución óptima consiste en transportar los contenedores C1, C2, C3, C4, C8, C9 y

    C10, con un valor óptimo de 700 (toneladas), es decir, se utiliza la capacidad completa

    del carguero. Notar que otra solución óptima consiste en transportar los contenedores

    C1, C3, C4, C5, C6, C7, C8 y C9 lo que reporta un similar valor en la función objetivo.

    Problema de la mochila simple

    Observar que en un problema de la mochila 0-1, si para cada tipo de ítem el beneficio y

    los pesos son idénticos (vi=wi), entonces el problema quedaría formulado de la

    siguiente forma

    Por tanto si existe un vector xi tal que , entonces esa será una

    solución al problema. Si existe una solución xi de este tipo, resolver el problema de la

    mochila realmente es resolver el problema de la suma de subconjuntos. Además si el

    conjunto de los pesos de los elementos es una secuencia súper-creciente, es decir, se

    verifica que:

  • 8/17/2019 Algoritmo de Greedy

    7/12

    Entonces se dice que se trata de un problema de la mochila simple o también

    problema de la mochila tramposa. Este tipo de problemas tiene importantes

    aplicaciones en el mundo de la criptografía.

    PROBLEMA DE LA MOCHILA DE MÚLTIPLE ELECCIÓN

    Si en un problema de la mochila 0-1 los ítems están subdivididos en k clases,denotadas por Ni, y exactamente un ítem tienen que ser tomado de cada clase,

    entonces hablamos del problema de la mochila de múltiple elección.

    PROBLEMA DE LA MOCHILA MÚLTIPLE

    Si en un problema de la mochila 0-1 tenemos "n" ítems y m mochilas con capacidades

    Wi entonces tenemos el problema de la mochila múltiple.

    Un caso especial del problema de la mochila múltiple es cuando los beneficios son

    iguales a los pesos y todas las mochilas tienen la misma capacidad. Entonces se le

    llama problema de la múltiple suma de subconjuntos.

    Código de algoritmo de GREEDY

    MONEDAS:

    #include

    #define max 30

    int C[max];

    using namespace std;

    //saca el tamaño del vector--------------------------------

    int tama(int tabla[max])

    {

    int tam=0;

    while (tabla[tam]!=' ')

    tam++;

    return tam;

    }

    //ordena vector --------------------------------

    void burbuja (int n )

    {

    int B;

  • 8/17/2019 Algoritmo de Greedy

    8/12

     

    for (int i=n-1;i>=1;i--)

    for(int j=0;jC[j+1])

    {

    B=C[j];C[j]=C[j+1];

    C[j+1]=B;

    }

    }

    //principal

    int main(){

    int i=0,m,mon,t,n,cant[max],l,sol[max];

    char continuar;

    cout

  • 8/17/2019 Algoritmo de Greedy

    9/12

     do{

    n=n+C[m];

    if(n>mon)//verifica

    { n=n-C[m];

    if(m==-1) {cout

  • 8/17/2019 Algoritmo de Greedy

    10/12

    }

    }

    /* Mostrando solucion

    ------------------------------------------------------------------------*/

    void mostrar_datos(int n)

    {cout

  • 8/17/2019 Algoritmo de Greedy

    11/12

    ------------------------------------------------------------------------*/

    void devolver_solucion()

    {

    cout

  • 8/17/2019 Algoritmo de Greedy

    12/12

    ingresar_actividades( N );

    system("cls");

    algoritmo_seleccion( N ) ;

    cout