Sei sulla pagina 1di 8

ANALISIS DE LA SOLUCION DEL PROBLEMA DE LA MOCHILA POR ALGORITMOS VUELTA ATRS (BACK TRACKING)

YEIMI MURILLO

ING. GUILLERMO HERNANDEZ

CORPORACION UNIVERSITARIA DEL CARIBE CECAR

INTRODUCCION Bsicamente el problema de la mochila es un problema de optimizacin combinatoria. Modela una situacin anloga al llenar una mochila, incapaz de soportar ms de un peso determinado, con todo o parte de un conjunto de objetos, cada uno con un peso y valor especficos. Los objetos colocados en la mochila deben maximizar el valor total sin exceder el peso mximo. Este problema puede ser solucionado a travs de algoritmos vuelta atrs ya que cumple con los criterios necesarios para ser solucionado con este tipo de algoritmos como el hecho que posee restricciones y que es un problema de optimizacin

SOLUCION DEL PROBLEMA Bsicamente al solucionar este problema nuestro objetivo principal es maximizar nuestras ganancias sin superar el peso mximo de 15 kg que permite cargar la mochila lo que se hace a travs del algoritmo de back tracking es armar un rbol de posibles soluciones y de ellas elegir la o las optimas, dichas soluciones son combinaciones de numero de cajas a llevar en la mochila. Aplicando de manera recursiva el siguiente algoritmo escrito en lenguaje C que adems de aplicar recursividad, posee una funcin de poda del rbol de soluciones que funciona cuando al analizar una solucin parcial con respecto a una ya analizada la suma de los beneficios de los elementos restantes por analizar en la solucin parcial no supera el beneficio de la solucin analizada por tanto la solucin parcial se descarta y se procede con la bsqueda de una mejor
int carga ( int* g, int* p, int* sol, int M) { int pos = 0; // Posicion actual en la recorrida de elementos. int ganancia = 0; // Ganancia parcial acumulada. int m_ganancia = 0; // Mejor ganancia encontrada int disponible = M; // Espacio disponible restante. int restante = 0; // Ganancia restante disponible int * parcial = new int[n]; // Marcaremos con 1 si llevamos al i, o con 0 en caso contrario for (int i=0; i<n; i++) { parcial[i] = 0; // Inicializamos en cero los eltos elegido. restante += g[i]; // Ganancia de los elementos restantes, para la poda. } /* Llamamos a la funcin recursiva */ Back(g, p, parcial, ganancia, m_ganancia, disponible, restante, pos, sol); delete[] parcial; return m_ganancia; } void Back(int* g, int* p, int* parcial, int ganancia, int &m_ganancia, int disponible, int restante, int pos, int* sol) { /* El primer paso es verificar que queda espacio disponible. Ademas verificamos que podamos llegar a encontrar una mejor solucin, en caso contrario podamos. */ if ( (disponible > 0) && (ganancia + restante > m_ganancia)) { /* Si ya pasamos por todos los elementos, terminamos */ if (pos == n) {

/* Ya sabemos que encontramos una mejor solucion que m_ganancia */ m_ganancia = ganancia; for (int i=0; i<n; i++) sol[i] = parcial[i]; /* Si no llegamos al final, probamos el elemento actual */ } else { parcial[pos] = 1; /* Probamos elegir el elemento y actualizamos los valores de ganancia y peso */ Back(g, p, parcial, ganancia, ganancia+g[pos], m_ganancia, disponible-p[pos], restante-g[pos], pos+1, sol); parcial[pos] = 0; /* O bien no lo llevamos y probamos seguir sin este elemento */ Back(g, p, parcial, ganancia, ganancia, m_ganancia, disponible, restante-g[pos], pos+1, sol); } } }

Visto el algoritmo al implementarlo este produce como antes se haba mencionado un rbol de soluciones el cual es binario y se analiza cada posible combinacin de objetos que se puedan cargar en la mochila sin exceder la restriccin del peso mximo soportado por ella. A continuacin se observa dicho rbol con cada una de las posibles soluciones.

En cada iteracin el algoritmo decide si una caja ser tomada para el conjunto solucin de una solucin parcial en particular, en este caso se presentan cajas con ganancia y pesos diversos.

En esta primera parte del rbol que hace parte de la rama izquierda de la rama principal izquierda se observa que todas las soluciones son validas pues no superan los 15 kg que soporta la mochila pero ninguna es ptima dado que las ganancias son demasiado bajas, en caso de ser tomada alguna de estas soluciones como soluciones parciales serian descartadas por la funcin de poda que posee el algoritmo.

En la rama derecha de la rama principal izquierda se observa que las soluciones se acercan mas a ser optimas pero no lo son al seguir siendo muy bajas en ganancias, adems

encontramos tres soluciones ubicadas mas hacia la derecha de la rama que son invalidas por superar la restriccin de los 15 kg de peso.

La rama izquierda de la rama principal derecha nos muestra el conjunto de soluciones factibles puesto que las ganancias son mximas y el peso es mnimo. Cabe resaltar que en esta rama se encuentra la solucin ptima del problema ubicada en la esquina derecha de la rama siendo esta de 15 unidades en ganancias y 9 kg de peso.

En la rama derecha de la rama principal derecha se evidencia que todas las soluciones que ofrece son invalidas, por esta razn el algoritmo al comprobar en el primer nodo de esta rama que el acumulado supera los 15 kg descarta todas y cada una de las soluciones por debajo de ese nodo sin siquiera contemplarlas como posibles soluciones.

CONCLUSION Se puede concluir que la tcnica de algoritmos back tracking o vuelta atrs es una tcnica eficiente para dar solucin al problema de la mochila dado que llega a analizar todas sus posibles soluciones, adems de que si se optimiza con una funcin de poda del rbol como se hizo en el algoritmo antes presentado se logra una eficiencia mayor al permitirle al algoritmo anticipar soluciones no optimas y enfocarse en las soluciones verdaderamente importantes y por lo tanto se logra reducir el tiempo de respuesta del algoritmo.

Potrebbero piacerti anche