Problema de La Mochila

download Problema de La Mochila

of 8

Transcript of Problema de La Mochila

  • 5/20/2018 Problema de La Mochila

    1/8

    PROBLEMA DE LA MOCHILA

    (KNAPSACK PROBLEM)

    1. INTRODUCCIN

    El problema de la mochila es un problema simple de entender: hay unapersona que tiene una mochila con una cierta capacidad y tiene que elegir quelementos pondr en ella. Cada uno de los elementos tiene un peso y aportaun beneficio. El objetivo de la persona es elegir los elementos que lepermitanmaximizar el beneficio sin excederse de la capacidad permitida.

    A la vez es un problema complejo, si por complejidad nos referimos a la

    computacional. Un problema se cataloga como inherentemente difcil si su

    solucin requiere de una cantidad significativa de recursos computacionales,sin importar el algoritmo utilizado.El problema de la mochila forma parte de

    una lista histrica de problemas NP Completos elaborada por RichardKarp

    en 1972.

    En el caso del problema de la mochila, si contramos con 4 productos, para

    saber cul es la mejor solucin podramos probar las 24= 16 posibilidades. El

    2 se desprende del hecho de que cada decisin es incluir o no al producto y el

    4 de la cantidad de productos. 16 posibilidades es un nmero manejable, sin

    embargo, si la cantidad de elementos por ejemplo ascendiera a 20, tendramos

    que analizar nada ms y nada menos que 220= 1,048,576 posibilidades.

    2. DEFINICIN FORMAL DEL PROBLEMA

    Supongamos que tenemos ndistintos tipos de tems, que van del 1 al n. De

    cada tipo de tem se tienen qitems disponibles, donde qies un entero positivo

    que cumple:

    Cada tipo de tem itiene un beneficioasociado dado por viy un peso(ovolumen) wi. Usualmente se asume que el beneficio y el peso no son

    negativos. Para simplificar la representacin, se suele asumir que los tems

    estn listados en orden creciente segn el peso (o volumen).

    Por otro lado se tiene una mochila, donde se pueden introducir los tems, que

    soporta un peso mximo(o volumen mximo) W.

  • 5/20/2018 Problema de La Mochila

    2/8

    El problema consiste en meter en la mochila tems de tal forma que

    se maximice el valor de los tems que contiene y siempre que no sesupere el peso mximo que puede soportar la misma. La solucinalproblema vendr dado por la secuencia de variables x1, x2, ..., xndonde el

    valor de xiindica cuantas copias se metern en la mochila del tipo de tem i.El problema se puede expresar matemticamente por medio del

    siguienteprograma lineal:

    Maximizar

    Tal que

    Y

    Si para i=1,2,...,n se dice que se trata del problema de la mochilla 0-1. Si uno o ms es infinito entonces se dice que se trata del problema dela mochila no acotadotambin llamado a veces problema de la mochilaentera. En otro caso se dice que se trata del problema de la mochilaacotado.

    3.ALGORITMO (PARADIGMA: DIVIDE AND CONQUER)

    Para que el algoritmo propuesto funcione correctamente los elementos a

    insertar en la mochila se han de ordenar en funcin de la relacin

    peso/beneficio:

    El Quicksort trabaja particionando el conjunto a ordenar en dos partes, para

    despus ordenar dichas partes independientemente. El punto clave del

    algoritmo est en el procedimiento que divide el conjunto. El proceso de

    divisin del conjunto debe cumplir las siguientes tres condiciones:

    a. El elemento pivote=a[i] est en su posicin final en el array para algn

    ndice i.

    b.

    Todos los elementos en a[first], ..., a[i-1] son menores o iguales a a[i].

    c. Todos los elementos en a[i+1], ..., a[last] son mayores que a[i].

    En este punto se aplica el mismo mtodo recursivamente a los dos

    subproblemas generados: a[first], ... , a[i-1] y a[i+1], ... , a[last]. El resultado

    final ser una matriz completamente ordenada, y por tanto no hace falta un

    paso subsiguiente de combinacin.

    http://es.wikipedia.org/wiki/Programaci%C3%B3n_linealhttp://es.wikipedia.org/wiki/Programaci%C3%B3n_lineal
  • 5/20/2018 Problema de La Mochila

    3/8

    4. EL ALGORITMO

    A.ANLISIS DEL PROBLEMA

    Para el anlisis tomaremos un caso en particular.

    Sea el conjunto de elementos (6) con las siguientes caractersticas:

    0 1 2 3 4 5VALOR 50 40 30 66 20 60PESO 60 40 20 30 10 50

    Y una mochila con capacidad de 100.

    a.VORAZ SIN ORDENAMIENTO

    Si tomamos los elementos tal cual son ingresados (sin ordenamiento

    previo). Tomaramos los 2 primeros:

    VALOR PESO FRACCIN50 60 140 40 1

    Valor mximo obtenido: 90

    b. MAYOR VALOR

    Si consideramos como parmetro de decisin el valor de los objetos a

    escoger, tomaramos los siguientes elementos:

    VALOR PESO FRACCIN66 30 160 50 150 60 1/3

    Para el caso de MOCHILA FRACCIONARIA debemos tomar solo una

    porcin del ltimo elemento para no excedernos en el peso.

    Valor mximo obtenido: 142.667

    VALOR PESO66 30

  • 5/20/2018 Problema de La Mochila

    4/8

    Para el caso de MOCHILA NO FRACCIONARIA tomamos el siguiente

    elemento con mayor valor cuyo peso sea menor o igual al pesorestante antes de sobrepasar la capacidad de la mochila.

    Valor mximo obtenido: 156

    Observamos mejores resultados respecto del caso anterior.

    c.

    MENOR PESO

    Si consideramos como parmetro de decisin el menor peso de los

    objetos a escoger, tendramos la siguiente solucin

    VALOR PESO FRACCIN20 10 130 20 166 30 140 40 1

    Valor mximo obtenido: 156

    Observamos mejores resultados respecto del caso anterior.

    d. MEJOR RENTABILIDAD

    Concluimos que si tomamos en cuenta algn parmetro de ordenacin

    previa de los vectores PESO y VALOR obtenemos mejores soluciones

    para el problema. Sin embargo, an podemos optimizar la solucin si

    consideramos los dos parmetros a la vez. Cmo? Relacionndolos.

    Cmo los relacionamos? Con un nuevo parmetro al que llamaremos:

    RENTABILIDAD, que viene a ser la relacin inversa entre VALOR y

    PESO.

    60 5030 20

  • 5/20/2018 Problema de La Mochila

    5/8

    De esta manera generamos un nuevo vector RENTA a partir de los 2

    iniciales:

    0 1 2 3 4 5VALOR 50 40 30 66 20 60PESO 60 40 20 30 10 50RENTA 0.83 1 1.5 2.2 2 1.2

    Para el caso de MOCHILA FRACCIONARIA tomaremos los elementos

    siguientes:

    RENTA VALOR PESO FRACCIN2.2 66 30 12 20 10 1

    1.5 30 20 11.2 60 50 4/5

    Valor mximo obtenido: 164

    Para el caso de MOCHILA NO FRACCIONARIA tomaremos los

    elementos siguientes:

    RENTA VALOR PESO2.2 66 30

    2 20 101.5 30 201 40 40

    Valor mximo obtenido: 156

    B. IMPLEMENTACIN DEL ALGORITMO

    a. ORDENAMIENTO

    Realizamos el ordenamiento mediante el algoritmo de ordenamiento

    Quicksort basado en el paradigma DnC (Divide y Conquer).

    void quicksort(float v[], float w[],int inf,int sup)

    { int i,j,div; double pivote, tmp, tmp2, a, b;div=(inf+sup)/2;

  • 5/20/2018 Problema de La Mochila

    6/8

    pivote=v[div]/w[div];

    i=inf; j=sup;do

    { while((v[i]/w[i])>pivote)i++;while((v[j]/w[j])

  • 5/20/2018 Problema de La Mochila

    7/8

    ALGORITMO FINAL:

    #include#include

    using namespace std;int n;

    void quicksort(float v[], float w[],int inf,int sup){ int i,j,div; double pivote, tmp, tmp2;

    div=(inf+sup)/2;

    pivote=v[div]/w[div];i=inf; j=sup;

    do{ while((v[i]/w[i])>pivote)i++;while((v[j]/w[j])

  • 5/20/2018 Problema de La Mochila

    8/8

    }

    system("cls");

    cout