Está en la página 1de 6

Algortmica III - Facultad de Ingeniera de Sistemas e Informtica

LABORATORIO
CURSO No. TEMA DURACIN ESTIMADA : : : : Algortmica III Laboratorio No.08 Programacin Dinmica 01:30 horas.

I.

OBJETIVOS El presente laboratorio tiene por objetivo: Desarrollar una aplicacin usando el mtodo de programacin dinmica. RESUMEN En esta prctica usted definir un proyecto completo en NetBeans con mltiples clases, en la cual se aplique el mtodo de programacin dinmica para la solucin del problema de la mochila. DEFINICIN DEL PROBLEMA Cree una aplicacin utilizando programacin dinmica para solucionar el problema de la mochila, que consiste en elegir de un grupo de objetos aquellos que maximicen el valor total que llevaremos en la mochila, suponiendo que cada objeto tiene un valor y un peso y no se pueden dividir, adems que la mochila tiene una capacidad mxima de peso que puede transportar. Tenemos N objetos de pesos p1, p2, p3, , pn y valores v1, v2, v3, , vn, adems e1, e2, e3, , en indica si se ha elegido el objeto (1) o no (0). La mochila tiene una capacidad de M Nuestro objetivo es maximizar

II.

III.

Con la restriccin

vi > 0, pi > 0 y ei {0, 1}, 1 i N Crearemos una tabla de tal manera que: , 0 1, , 1, 0, 0

Por ejemplo si tenemos cinco objetos: Objeto 1: Objeto 2: Objeto 3: Objeto 4: Objeto 5: peso = 1 peso = 2 peso = 5 peso = 6 peso = 7 valor = 1 valor = 6 valor = 18 valor = 22 valor = 28

Robert Espinoza Domnguez

Pg. 1

Algortmica III - Facultad de Ingeniera de Sistemas e Informtica Construiremos la tabla V de N objetos por 11 del peso mximo a transportar 0 1 2 3 4 5 0 0 1 2 3 4 5 6 7 8 9 10 11

0
1

0 0 0 0 0

0 1
6

0 1
7

1 1 1 1

6 6 6

7 7 7

0 1 7 7 7 7

0 1 7
18 18 18

0 1 7
19 22 22

0 1 7
24 24 28

0 1 7
25 28 29

0 1 7
25 29 34

0 1 7
25 29 35

0 1 7
25 40 40

El valor V(5, 11) = 40 el es valor mximo optimizado, y se han elegido los objetos 3 y 4. Crearemos una clase Objeto y una clase Mochila, luego crearemos una clase con la funcin main para probar nuestra aplicacin. IV. CONSTRUCCION DE LA APLICACIN

Crea la clase Objeto


public class Objeto { private int peso; private int valor; private int elegido; public Objeto(int p, int v) { peso = p; valor = v; elegido = 0; } public void setPeso(int p) { peso = p; } public int getPeso() { return peso; } public void setValor(int v) { valor = v; } public int getValor() { return valor; } public void setElegido(int e) { elegido = e;

Robert Espinoza Domnguez

Pg. 2

Algortmica III - Facultad de Ingeniera de Sistemas e Informtica } public int getElegido() { return elegido; } }

Crea la clase Mochila


public class Mochila { private int capacidad; private Objeto obj[]; private int V[][]; private boolean E[][]; public Mochila(int p[], int v[], int cap) { obj = new Objeto[p.length+1]; obj[0] = new Objeto(0,0); for (int i=1; i<=p.length; i++) { obj[i]= new Objeto(p[i-1],v[i-1]); } capacidad = cap; } //Mtodo aplicando Programacin Dinmica public int elegirObjetos() { int i,j; int n; n = obj.length-1; int m; m = capacidad;

V = new int[obj.length][capacidad+1]; E = new boolean[obj.length][capacidad+1]; for (i=0; i<=n; i++) { V[i][0]=0; E[i][0]= false; } for (j=0; j<=m; j++) { V[0][j] = 0; E[0][j] = false; } for (i=1; i<=n; i++) Robert Espinoza Domnguez Pg. 3

Algortmica III - Facultad de Ingeniera de Sistemas e Informtica { for (j=1; j<=m; j++) { if (j<obj[i].getPeso()) { V[i][j] = V[i-1][j]; E[i][j] = false; } else { if (V[i-1][j] > V[i-1][j-obj[i].getPeso()]+obj[i].getValor()) { V[i][j] = V[i-1][j]; E[i][j] = false; } else { V[i][j] = V[i-1][j-obj[i].getPeso()]+ obj[i].getValor(); E[i][j] = true; } } } } return V[n][m]; } public int max(int x, int y) { if (x>y) return x; else return y; } public void Componer() { int num; int elem = obj.length-1; int cap = capacidad; obj[0].setElegido(0); while (elem!=0 && cap !=0) { if (E[elem][cap]==true) { obj[elem].setElegido(1); cap = cap - obj[elem].getPeso(); } elem--; } } public int getV(int i, int j) { return V[i][j];

Robert Espinoza Domnguez

Pg. 4

Algortmica III - Facultad de Ingeniera de Sistemas e Informtica } public boolean getE(int i, int j) { return E[i][j]; } public int getValor(int i) { return obj[i].getValor(); } public int getPeso(int i) { return obj[i].getPeso(); } public int getElegido(int i) { return obj[i].getElegido(); } }

Crea la clase PruebaMochila


public class PruebaMochila { public static void main(String[] args) { int peso[]={1,2,5,6,7}; //Pesos de los objetos int valor[] ={1,6,18,22,28}; //Valores de los objetos int capacidad = 11; int valorMaximo; int n = peso.length; // Capacidad de la mochila // Mximo valor de objetos elegidos // Nmero de objetos

// Crea el objeto mochila Mochila miMochila = new Mochila(peso, valor, capacidad); //Calcula el valor mximo total de los objetos elegidos valorMaximo = miMochila.elegirObjetos(); System.out.printf("Valor mximo total = %d\n\n", valorMaximo); System.out.printf("Tabla de valores mximos\n"); System.out.printf("------------------------\n"); System.out.printf("\t |"); for (int j = 1; j<=capacidad; j++) System.out.printf("\t%d", j); System.out.println(); for (int j = 1; j<=capacidad; j++) System.out.print("-----"); System.out.println(); for (int i=1; i<=n; i++) { System.out.printf("\t%d|", i); Robert Espinoza Domnguez Pg. 5

Algortmica III - Facultad de Ingeniera de Sistemas e Informtica for (int j = 1; j<=capacidad; j++) System.out.printf("\t%d",miMochila.getV(i,j)); System.out.println(); } // Hallar la secuencia de objetos elegidos miMochila.Componer(); System.out.printf("\nObjetos elegidos\n"); System.out.printf("----------------\n\n"); for (int i = 1; i<=n; i++) if (miMochila.getElegido(i)==1) { System.out.printf("Objeto %d: \tPeso = %d, Valor = %d\n\n", i, miMochila.getPeso(i), miMochila.getValor(i)); } } } V. EJERCICIOS Crea una interfaz grfica que reemplace la clase PruebaMochila y prueba con los siguientes objetos: Objeto 1: Objeto 2: Objeto 3: Objeto 4: Objeto 5: Objeto 6: Objeto 7: Objeto 8: peso = 1 peso = 2 peso = 5 peso = 8 peso = 10 peso = 14 peso = 18 peso = 22 valor = 1 valor = 6 valor = 10 valor = 15 valor = 18 valor = 25 valor = 50 valor = 70

Capacidad de la mochila 60 Modifica la aplicacin para que el usuario ingrese los objetos y sus datos as como la capacidad de la mochila y devuelva el mximo valor optimizado y los objetos elegidos.

Robert Espinoza Domnguez

Pg. 6

También podría gustarte