Вы находитесь на странице: 1из 10

PROBLEMA DE LA MOCHILA 0,1 PROGRAMACION DINAMICA, VUELTA ATRAS

EDGAR DUVAN LEAL ROPERO


1094270086

























UNIVERSIDAD DE PAMPLONA
FACULTAD DE INGENIERIAS Y ARQUITECTURAS
INGENERIA DE SISTEMAS
PAMPLONA, NORTE DE SANTANDER
OCTUBRE 3 2014



Problema de la mochila
Este problema consiste en una mochila con capacidad W con un conjunto de objetos donde
cada objeto tiene un peso y un costo, lo que sucede es que se necesitan ingresar en la mochila
los objetos de mayor costo sin sobrepasar su capacidad que en este caso sera W.
Programacin dinmica del problema de la mochila
Este problema se basa principalmente en que se tiene una mochila y se le va a colocar una
capacidad, que para el ejemplo se va a llamar W, a su vez se tiene una lista de tems desde 0,
1, 2,3... Hasta y se tiene el peso de cada tem, para el ejemplo 1, 3,1 hasta igualmente un
peso que se coloca en un arreglo; Se tiene una ganancia que produce cada tem, lo
primero que tendra que es hacer un arreglo para la ganancia.
Entonces este problema bsicamente trata en como acomodar el mximo de ganancia que se
puede colocar en la mochila, para ello acomodaremos esto en una expresin de manera que
.
Si se formula de esta manera se tiene una ganancia total que va a hacer la suma desde
hasta de la cantidad que se coloque cada tem por la ganancia que genera mencionado
tem. Entonces


Sin embargo se puede agregar infinitos tems de cada uno, pero se tiene una restriccin la cual
nos dice que no se puede pasar de la capacidad de la maleta.
El peso total que va a ser la sumatoria de todos los pesos que van desde hasta de
la cantidad de unidades que se agregan de cada tem esto multiplicado por el peso de cada
una de estas unidades menor o igual a la capacidad de la maleta. Entonces


Lo que se quiere es maximizar la ganancia total, ejemplo poner en la mochila el mayor nmero
de tems que me genere la mayor ganancia posible sin pasarse de la capacidad de la mochila.
Esto funciona de manera que se plantearan los objetivos en una funcin llamada valga la
redundancia objetivos, la vamos a plantear de manera recursiva para poder utilizar
programacin dinmica.
Esta funcin se va a comenzar hacerla primeramente definiendo, se va a llamar para el ejemplo
que recibe un parmetro y lo que se realiza es colocar el significado, la funcin va a
ser el mximo de ganancia para una maleta de capacidad w, con esto se va hacer una relacin
recursiva planteando programacin dinmica. Bsicamente la relacin recursiva debe resolver
la instancia en trminos de instancias anteriores es decir menos alguna cosa.



Entonces como se va a plantear:

= Capacidad de la maleta
Si ponemos unidad del tem, lo que sucede en esta parte es que se tiene la maleta
pero se parte en dos

Ganancia que da el tem y ese tem ocupa un espacio dentro de la capacidad total
de la maleta y el espacio total que ocupa fue el peso de mencionado tem.


Peso de ese tem lo que va aquedar es una mochila quitando la capacidad que se
utiliz menos el peso que se utiliz.

Entonces cual es la ganancia de esa maleta? Para esto lo que nos sirve es la relacin
recursiva, ya que no se sabe la ganancia de esa maleta pero se sabe que es el mximo de
ganancia que poda obtener una maleta de capacidad ms pequea. Entonces
Cul sera la capacidad para la para el ejemplo.

La ganancia total de esta maleta al colocar un tem i se va a ser.



Y entonces esa va a ser la ganancia total de poner una unidad del i-esimo tem.
El problema de ahora sera cual es el i-esimo tem?
La respuesta seria lo que me de esa suma es mximo, sea el que de una mayor ganancia,
porque eso es lo que se est buscando, y es lo que sugiere el problema, refirindonos a eso
nos sirve para plantear la expresin que en este caso el mximo valor de de menos
ms la ganancia de este tem para todos los que estn entre .
) ) ) )
Caso base o caso sencillo:
Este ejemplo se refiere a una maleta de capacidad 0 de mxima ganancia que se le va a poder
sacar fcilmente es 0.
)
Sencillamente lo que se podra hacer es una funcin recursiva pero la programacin dinmica
lo que usa es memorizar las soluciones para evitar al mximo la recursin, porque la funcin
recursiva de este programa sera muy ineficiente.

Programacin Vuelta atrs (Backtraking)
Problema de la mochila, los problemas de optimizacin vuelta atrs intentan maximizar un
beneficio o minimizar un coste, aqu por ejemplo lo que se tiene que maximizar o bien el
beneficio de alguna funcin o minimizar al coste sobre algn tipo de elemento.
Este problema de la mochila lo que intenta es maximizar la ganancia que se obtiene en una
mochila.
Ejemplo: Tenemos una mochila de capacidad 15 kg y lo que nos dicen es que debemos meter
es un conjunto de objetos, donde el objeto tiene una ganancia asociada.
Dividiremos el trabajo en 3 pasos los cuales son:
1. vuelta atrs= Como se representa la solucin de este problema. Lo que se puede hacer es
colocar un vector de n elementos donde estos n elementos contienen desde 0 hasta n entonces
se podra representar si se toma o no el elemento 0.

Cada celda del array representa un elemento de la mochila, y dentro de estos se colocan los
valores si se toman o no para ingresarlo dentro de la misma.
Entonces si coloca un 0 en el array quiere decir que no se tom el elemento.
0 > No tomo el elemento
1 > Si tomo el elemento
Ejemplo: Para un vector que se tiene 4 elementos y se tiene la siguiente solucin esto va a
decir:


Que no se toma el primer elemento es 0, tomo el siguiente es1, lo mismo con el siguiente 1, no
tomo el ltimo elemento por lo tanto 0, por lo cual se tomaran 2 del centro y los de los lados se
dejan mencionados respectivamente.
2. Representacin de un rbol:
Se representa esquemticamente como hacer el rbol de bsqueda de profundidad como
siempre de vuelta atrs.
Entonces lo primero que se hace es crear un nodo raz, para el ejemplo tomo 4 elementos.

En esta etapa los elementos no han sido tomados esta etapa se llama o se conoce como etapa
inicial.

Entonces se comienza con vuelta atrs, bsqueda en profundidad lo que se hace es tomar la
primera rama y se dice como estamos en la etapa inicial entonces no tomo el primer elemento,
el segundo no lo s, el tercero no lo s, y el cuarto no lo s.


Ahora no tomo el primer elemento, no tomo el segundo elemento, el tercero no lo se y el cuarto
no lo s.
Ahora bajamos el siguiente nodo:

Etapa 2 del elemento 3, el primero no lo tomo, el segundo tampoco, el tercero no y el cuarot no
lo s.
Ahora bajamos al siguiente nodo.

Etapa 3, elemento 4, el primero no lo tomo, el segundo tampoco, el tercero no y el cuarto
tampoco por lo que el beneficio es 0, se pueden buscar ms soluciones y por consiguiente lo
que se hace es decir que no se escoge el cuarto elemento, se toma el nodo 5 que est a la
misma altura del 4 y en vez de no tomar el cuarto elemento esta vez si tomarlo colocando en
vez del 0 colocarle el 1, el vector cambiaria y quedara as.

Compruebo si esto es vlido es decir si el peso del cuarto elemento que se coloco en la
mochila no supera el peso total de mochila, pues esta solucin es buena y el beneficio ser lo
que contenga, lo que se ira haciendo es de manera analgica timando el elemento siguiente
para quedar de la siguiente forma.

Es necesario llegar hasta la solucin y decir que se ha encontrado una solucin que no se
puede bajar ms y luego demostrar que hace saltos hacia atrs.


La mejor solucin de todos lo diferentes tipos de soluciones, ser aquellas que den un mayor
beneficio del que se tiene, la mayor solucin que se tiene en la primera instancia es 0, entonces
se van mirando los elementos hasta ir mejorando el beneficio que se tiene, se actualiza y la
mejor solucin est dada por este nodo y as sucesivamente comparando uno a uno.
3. Codificacin: (Siguiendo esquema recursivo)
Se trabajan dos constantes
CONST N=; /*Numero de objetos en el ejemplo eran solamente 4*/
CONST CAPACIDAD=; /*Capacidad de la mochila en el ejemplo kg */
/* Tambin se necesita una estructura para representar el peso y el beneficio de cada objeto*/
TYPE Objeto = RECORD peso, beneficio: int END;
/* Se crea el array */
Objetos = ARRAY { 1..n } OF Objeto;
/*Por ltimo se da la solucin y mochila final que me dice de todas las que a encontrado cual es
la mejor para cada caso correspondiente*/
Solucin_actual, mochila_final = ARRAY { 1...n} OF int;

Вам также может понравиться