You are on page 1of 3

El Problema De La Mochila El problema de la mochila consiste en llenar una mochila con una serie de objetos que tienen una

serie de pesos con un beneficio asociado. Es decir, se dispone de n tipos de objetos y que no hay un nmero limitado de cada tipo de objeto (si fuera limitado no cambia mucho el problema). Cada tipo i de objeto tiene un peso Pi y un valor Bi beneficio asociado. La mochila tiene una capacidad de peso igual a M. Se trata de llenar la mochila de tal manera que se maximice el valor de los objetos incluidos pero respetando al mismo tiempo la restriccin de capacidad. Notar que no es obligatorio que una solucin ptima llegue al lmite de capacidad de la mochila. El objetivo es llenar la mochila, de capacidad M, de manera que se maximice el beneficio. El problema de la mochila es uno de los 21 problemas NP-completos de Richard Karp, expuestos en su artculo de 1972. Ha sido estudiado desde mitades del siglo XX y se encuentran referencias desde 1897, en un artculo de George Ballard Mathews. La formulacin del problema se bastante sencillo, pero su solucin es ms compleja. Los algoritmos existentes pueden resolver casos concretos pero la estructura singular del problema y el hecho que es un sub-problema otros problemas ms generales, hacen que actualmente todava sea estudiado por diferentes grupos de bsqueda cientfica. Existen diferentes variantes para este problema algunas son: * El problema de la mochila Variables continuas: El problema de la mochila en variables continas (LKP) se obtiene sacando la restriccin de que las variables sean nmeros enteros. Es decir que se permite coger simplemente una fraccin de los objetos dentro de la mochila: x [0,1] . * El problema de la mochila multe-objetivo: Una variante del problema consiste, a partir de objetos que tienen varios valores, maximizar varas funciones objetivo, es el problema de la mochila multe-objetivo (MOKP). * El problema de la mochila cuadrtico: En el problema de la mochila de elige mltiple (MCKP), los objetos se reagrupan en clases, y simplemente se tiene que coger un solo representante de cada clase. Por ejemplo, si se quiere disear una caja de herramientas. Si hay cinco llaves inglesas se puede elegir, o bien la menos pesada para poder coger un martillo bueno que es pesado, o elegir la clave ms verstil y un martillo de gama baja (poco pesado). La idea general es que no se puede coger ms de una clave ni ms de un martillo. * Problema de la mochila mltiple: El problema de la mochila mltiple (MKP) consiste a repartir un conjunto de objetos en varias mochilas de capacidades diferentes. El valor de un objeto depende ahora de la mochila en que se ha colocado. Por ejemplo, se puede considerar que un euro tiene ms valor en una cuenta a plazo fijo que en una cuenta corriente. El Problema de la Mochila 0 1 La mochila 0-1 es un caso especial del problema original de la mochila en el cual cada artculo de la entrada no se puede subdividir para llenar un envase en el cual esa entrada quepa parcialmente. Problema de la mochila 0-1 restringe el nmero de cada clase de artculo, xj, a cero o a uno. El problema 0-1 se puede formular matemticamente como: Maximize: bixi con 1 i n conforme a: pixi M con 1 i n no pone ningn lmite en el nmero de cada artculo. De inters particular est el caso especial del problema con estas caractersticas:

* Es un problema de la decisin * Es un problema de 0/1 * Para cada artculo, el coste iguala el valor: M = V Programacin Dinmica La programacin dinmica es un mtodo para reducir el tiempo de ejecucin de un algoritmo mediante la utilizacin de subproblemas superpuestos y subestructuras ptimas. El diseo de un algoritmo de Programacin Dinmica consta de los siguientes pasos: 1. Planteamiento de la solucin como una sucesin de decisiones y verificacin de que sta cumple el principio de ptimo. 2. Definicin recursiva de la solucin. 3. Clculo del valor de la solucin ptima mediante una tabla en donde se almacenan soluciones a problemas parciales para reutilizar los clculos. 4. Construccin de la solucin ptima haciendo uso de la informacin contenida en la tabla anterior. Problema de la Mochila 0/1 Programacin Dinmica for(int i=1;i<=n;i++) { V[i][0]=0; for( int j=1;j<=M;j++) { V[0][j]=0; if(j-p[i]>=0) V[i][j]= Max(V[i-1][j], b[i] + V[i-1][j-p[i]]); else V[i][j]=V[i-1][j]; } } int j=6; for(int i=n;i>=1;i--) { if(V[i][j]==V[i-1][j]) x[i-1]=0; else { x[i-1]=1; j =j-p[i]; } } Funcin de Tiempo de ejecucin: i=1n(j=1M1)+n= i=1nM=n*M+n Tn=nM+1 TnO(n.M) Programacin Vuelta Atrs (Backtracking) Es una estrategia para encontrar soluciones a problemas que satisfacen restricciones. El trmino "backtrack" fue acuado por primera vez por el matemtico estadounidense D. H. Lehmer en los aos 1950s. En su forma bsica, la idea de backtracking se asemeja a un recorrido en profundidad dentro de un grafo dirigido. El grafo en cuestin suele ser un rbol, o por lo menos no contiene ciclos. Sea cual sea su estructura, existe slo implcitamente. El objetivo del recorrido es encontrar soluciones para algn problema. Esto se consigue construyendo soluciones parciales a medida que progresa el recorrido; estas soluciones parciales limitan las regiones en las que se puede encontrar una solucin completa. El recorrido

tiene xito si, procediendo de esta forma, se puede definir por completo una solucin. En este caso el algoritmo puede bien detenerse (si lo nico que se necesita es una solucin del problema) o bien seguir buscando soluciones alternativas (si deseamos examinarlas todas). Por otra parte, el recorrido no tiene xito si en alguna etapa la solucin parcial construida hasta el momento no se puede completar. En tal caso, el recorrido vuelve atrs exactamente igual que en un recorrido en profundidad, eliminando sobre la marcha los elementos que se hubieran aadido en cada fase. Cuando vuelve a un nodo que tiene uno o ms vecinos sin explorar, prosigue el recorrido de una solucin. Problema de la Mochila 0/1 Programacin Vuelta Atrs mochila(int i, int r, int solucion, int optimo,int n,int Peso,int sol) { int k; int valor[]= {2,3,4,5}; int peso[]={1,2,3,4}; int s=4; for (k = i; k <s; k++) { if (peso[k] <= r) { mochila(k, r - peso[k], solucion + valor[k], optimo,n,Peso,sol+peso[k]); if (solucion + valor[k] > optimo) { optimo = solucion+valor[k]; Peso=sol+peso[k]; } } } } Funcin de Tiempo de ejecucin: Tn=i=0nti+n Tn-1=i=0n-1t(i)-(n-1)Por Propiedad Telescpica de la sumatoria Tn-1=Tn-T0-(n-1) T(0)=0 Tn-1-Tn=(n-1) -1-12(-Tn+1+Tn)=(n-1)-1-12 Tn=C11n+C2n1n+C3n21n+C3n31n Tn=C1+C2n+C3n2+C3n3

You might also like