Problema de La Mochila
-
Upload
gaby-alvarez -
Category
Documents
-
view
29 -
download
0
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