You are on page 1of 10

Aplicaciones de las tcnicas de diseo de algoritmos en la solucin de problemas reales

Yeneit Delgado1, Joel Arencibia1 Departamento de Tcnicas de Programacin, Facultad 1, Universidad de las Ciencias Informticas {yeneit, joelar}@uci.cu

Resumen
En el presente trabajo se exponen aplicaciones prcticas de tres tcnicas de diseo de algoritmos: Divide y vencers, Algoritmos vidos y Vuelta atrs. Para cada una de las tcnicas, primeramente se caracteriza el esquema general de a misma y a continuacin se muestran algunos de ejemplos de su aplicacin en diversos problemas tanto de alguna rama de la ciencia como ingenieriles. El mismo puede resultar de gran utilidad en la imparticin de diferentes cursos de Diseo de algoritmos como una muestra de la diversa aplicabilidad que suelen tener estos algoritmos ms all de los problemas clsicos que muestra la bibliografa.

Introduccin
A travs de los aos, los cientficos de la computacin han identificado diversas tcnicas generales que a menudo producen algoritmos eficientes para la resolucin de muchas clases de problemas . Varios autores han expuesto las principales tcnicas de algoritmos mediante esquemas generales que permiten aplicar las mismas a diferentes problemas, estableciendo as una especie de pauta a seguir a la hora de implementar un algoritmo que siga dicha tcnica. Muchos de estos autores, ejemplifican el uso de las diferentes tcnicas de diseo de algoritmos mediante la solucin de problemas clsicos, que se repiten en una u otra bibliografa, tal es el caso de . Para aquellos que han estudiado un libro sobre Diseo de algoritmos, es muy comn haber escuchado del problema de las 8 reinas, las torres de Hanoi, el viajero vendedor. El problema est en que muy pocos de estos autores muestran la aplicacin de dichas tcnicas a la solucin de problemas de la vida cotidiana. El presente trabajo tiene como objetivo mostrar la aplicacin de diferentes tcnicas de diseo de algoritmos a la solucin de problemas de diversa ndole, tanto en la rama de las ciencias como de la ingeniera. Para ello, se describen tres tcnicas de diseo de algoritmo: Divide y Vencers, Algoritmos vidos y Vuelta atrs. De cada tcnica se explican las principales caractersticas de la misma y a continuacin se relacionan algunos ejemplos que demuestran su aplicabilidad a diferentes problemas reales.

Tcnicas
Divide y vencers
Divide y Vencers es una tcnica de diseo de algoritmos que consiste en resolver un problema a partir de la solucin de subproblemas del mismo tipo, pero de menor tamao. Si los subproblemas son todava relativamente grandes se aplicar de nuevo esta tcnica hasta alcanzar subproblemas lo suficientemente pequeos para ser solucionados directamente.. La resolucin de un problema utilizando esta tcnica consiste en plantear el problema de manera que pueda descomponerse en subproblemas del mismo tipo y de menor tamao, resolver independientemente cada uno de los suproblemas, ya sea de manera directa o aplicando recursivamente la tcnica y por ltimo combinar las soluciones obtenidas para dar solucin al problema general . A continuacin se muestran algunos ejemplos de aplicacin de esta tcnica en la solucin de algunos problemas. 1.1.1.Clculo de los valores propios de matrices tridiagonales El clculo de los valores propios de matrices tridiagonales simtricas es especialmente importante, no slo debido a la importancia intrnseca de esta clase de matrices, sino tambin porque aparecen en la solucin del problema de valores propios de matrices simtricas generales. Existen diversos mtodos para dar solucin a este problema, entre los que se pueden citar el mtodo de homotopa, los mtodos de tipo divide y vencers, y el mtodo de biseccin. En se propone una mejora a los mtodos tradicionales que usan la tcnica Divide y vencers, mediante un nuevo algoritmo que combina el uso de modificaciones de rango uno con la iteracin de Laguerre. Este algoritmo se compara con otros algoritmos de tipo divide y vencers basados en diferentes modificaciones en la fase de divisin y distintos mtodos para la aproximacin final de los valores propios. Dichos autores proponen una modificacin al algoritmo mostrado en la figura 1, mediante el uso de las iteraciones de Laguerre y Quasi-Laguerre en el clculo de races (*) Figura 1 Mtodo divide y vencers secuencial Dividir la matriz original en 2k submatrices de tamao 2p. Calcular los valores propios de las 2k de tamao 2p.

para i=1 hasta k (niveles de divisin) para j=1 hasta 2k-i (pares de submatrices consecutivas) Mezclar y ordenar los valores propios de las submatrices 2j-1 y 2j de tamao 2p+i-1 para que acten como separadores de una matriz de tamao 2p+i. para r=1 hasta 2p+i Aplicar algn mtodo de clculo de races para calcular el valor propio r de la submatriz j de tamao 2p+i. (*) finpara finpara finpara.

Diferentes pruebas experimentales les permiten concluir que la combinacin de las iteraciones de Laguerre y Quasi-Laguerre con el mtodo divide y vencers convencional, mejora la convergencia en el clculo de las races y por ende minimizan las iteraciones para obtener el resultado. 1.1.2.Resolucin de Problemas en Paralelo En se presentan los esqueletos orientados a objeto DnC y BnB para la resolucin

de problemas de optimizacin combinatoria con las tcnicas Divide y Vencers y Ramificacin y Acotacin respectivamente. La implementacin de los esqueletos se ha realizado en C++. Se proporciona el cdigo secuencial y el cdigo paralelo de la parte invariante de los resolutores para ambos paradigmas. Adems, se pone a disposicin del usuario la plantilla de la parte que ha de rellenar. Las clases que componen dicha plantilla sirven para establecer la relacin entre el resolutor principal y el problema instanciado. Una vez que el usuario ha instanciado su problema, obtiene gratis un resolutor paralelo de su algoritmo, sin realizar ningn esfuerzo adicional. Se denomina esqueleto algortmico a un conjunto de procedimientos que constituyen el armazn con el que desarrollar programas para resolver un problema dado utilizando una tcnica particular. Este software presenta declaraciones de clases vacas que el usuario ha de rellenar para adaptarlo a la resolucin de un problema concreto. Estos esqueletos no dan solucin a problemas concretos pero proporcionan modularidad al diseo de algoritmos exactos, lo que supone una gran ventaja respecto a la implementacin directa del

algoritmo desde el principio, no slo en trminos de reutilizacin de cdigo sino tambin en metodologa y claridad de conceptos . En dicho artculo se presenta la librera MaLLBa, que se ha diseado de forma que la tarea de la persona que adapta el problema real al esqueleto sea lo ms simple posible. En un esqueleto MaLLBa se distinguen dos partes principales: una parte que implementa el patrn de resolucin y que es completamente proporcionada por la librera, y una parte que el usuario ha de acabar de completar con las caractersticas particulares del problema a resolver y que ser utilizada por el patrn de resolucin. La figura 1 muestra la arquitectura de dicha librera. Figura 2 Arquitectura de los esquelos MaLLBa

Algoritmos vidos (greedy)


Los algoritmos vidos, voraces o glotones (en ingls greedy) tienen como

caracterstica fundamental el hecho de que en cada paso seleccionan la mejor opcin en ese momento de la ejecucin, sin tener en cuenta posibles consecuencias futuras de dicha eleccin, que podra no ser la ms apropiada para alcanzar el resultado deseado. De ah que estos algoritmos no siempre encuentren el ptimo global, dando como solucin final en ocasiones ptimos locales. Muy a menudo son utilizados los algoritmos vidos como heursticas en busca de una solucin que, si bien no es el ptimo global, constituye una respuesta aceptable,

dependiendo del problema, en un tiempo varias veces menor que lo que lo hara un algoritmo que realice una bsqueda exhaustiva . Una variante de este tipo de algoritmos lo constituye la metaheurstica para optimizacin combinatoria GRASP (Greedy Randomized Adaptive Search Procedure), un proceso iterativo en el cual cada iteracin consta de dos fases: una fase constructiva, en la cual se obtiene una solucin factible para el problema y una fase de bsqueda local, en la que se obtiene un ptimo local en la vecindad de la solucin previamente construida (Festa y Resende, Anotada). Varias referencias sobre esta metaheurstica pueden encontrarse en (.A. Feo and M.G.C. Resende (1995)), (Festa y Resende, Anotada, 2002), (L. Pitsoulis and M. G. C. Resende, 2002) y (GREEDY RANDOMIZED ADAPTIVE SEARCH PROCEDURES MAURICIO G.C. RESENDE AND CELSO C. RIBEIRO, 2003). En la literatura se reporta una amplia gama de aplicaciones en las que se hace uso tanto de algoritmos vidos como de la metaheurstica GRASP en particular, entre las cuales pueden citarse optimizacin de la produccin de cartn ondulado , programacin de tareas , problemas de corte no guillotina en dos

dimensiones , determinacin de opciones de inversin


ellas.

y definicin de

territorios de atencin comercial . En esta seccin describiremos algunas de

1.1.3.Optimizacin de la produccin de cartn ondulado En se utiliza la combinacin de un algoritmo voraz y un algoritmo gentico1 para la optimizacin del corte de planchas de cartn en la produccin de embalajes de cartn ondulado, donde la minimizacin de mermas de materia prima y el cumplimiento de los plazos de fabricacin son dos objetivos prioritarios de la planificacin de la produccin. En este proceso, en unas mquinas denominadas onduladoras, a partir de bobinas de papel se fabrica una plancha de cartn continuo que luego es cortada en hojas segn las especificaciones de los clientes para finalmente ser transformadas en embalaje. Las cuchillas de las onduladoras pueden cortar varias bandas de dos clases distintas de planchas, procedimiento denominado dplex, que impone la restriccin de que no puede permutarse el ancho y el largo de una hoja ya que
1

Metaheurstica que se basa en la teora de la evolucin de las especies de Darwin, simulando computacionalmente la seleccin natural en poblaciones de individuos.

resulta preciso mantener la direccin de la onda del cartn fijada en el diseo del embalaje. En el documento citado se analiza la planificacin asociada a este procedimiento que es el sistema ms utilizado en la industria y que puede ser clasificado, entre los problemas de corte y empaquetado, como un caso particular del corte a guillotina Strip Packing Problem, (SPP): el Strip Packing Problem for Corrugator Production (SPP-CP), que ha sido identificado como NP-completo (Rinaldi y Franz, 2007). El corte de piezas planas de algn material, aprovechando al mximo la superficie de materia prima disponible es un problema de optimizacin comn a diversos sectores industriales (los del papel, el metal y el vidrio, por ejemplo). En este caso se implement un algoritmo voraz para obtener una solucin inicial utilizada en el algoritmo gentico. Primeramente se obtuvieron todos los patrones productivos descartando aquellos que no cumplan con algunas restricciones y en uno de los pasos del algoritmo se examinan todos los patrones no utilizados y se selecciona aquel que proporcione un mejor valor de aptitud, de ah su clasificacin como algoritmo vido. Se obtuvieron buenos resultados, logrando que el algoritmo gentico convergiera rpidamente a buenas soluciones. 1.1.4.Determinacin de opciones de inversin En se utilizan algoritmos vidos combinados con otras heursticas para la

determinacin de las mejores opciones de inversin para una compaa. Tanto en el caso en que se tiene dinero para invertir como cuando por el contrario es necesario pedir prstamos, se pueden realizar acciones para obtener beneficios. En el primer caso se debe determinar cunto invertir, por cunto tiempo y qu opciones de inversin usar para obtener la mxima utilidad y de este modo aprovechar el efectivo sin sobreinvertir. En el segundo caso se busca pagar la menor cantidad de dinero por intereses generados una vez que se ha solicitado un prstamo, o sea, determinar por ejemplo cul es el monto a pedir ms apropiado, entre otros elementos. Este es un problema de optimizacin combinatoria, con un gran nmero de posibles soluciones, donde el objetivo es encontrar la mejor entre estas. Los autores proponen el algoritmo GIA (del ingls Greedy Investment Assignment), el cual toma un problema y devuelve un conjunto de posibles inversiones o prstamos, que sera la solucin al problema planteado, que consisti en tratar de maximizar el beneficio de las inversiones y de minimizar el costo de los crditos. El

procedimiento para la seleccin de posibles inversiones o prstamos es similar al que se utiliza en el problema de la mochila, clsico algoritmo voraz. En el algoritmo se utiliza adems la tcnica Divide y Vencers vista anteriormente, puesto que se divide el problema en subproblemas ms sencillos y luego se combinan las soluciones para obtener la solucin final. Los autores muestran que con el algoritmo voraz utilizado, no es posible optimizar en general la utilidad para un problema dado; sin embargo, el procedimiento utilizado puede encontrar utilidades muy cercanas al ptimo, llegando a alcanzarlo en ocasiones. Aunque el algoritmo propuesto es subptimo, es muy eficiente en tiempo de procesamiento.

Algoritmos con vuelta atrs (Backtracking)


El mtodo de vuelta atrs o retroceso (en ingls backtracking) basa su

funcionamiento en la bsqueda en profundidad en un rbol cuya existencia es implcita y que suele llamarse rbol de expansin. En dicho rbol, cada nodo de nivel k representa una parte de la solucin y est formado por k etapas que se suponen ya realizadas. Sus hijos son las prolongaciones posibles al aadir una nueva etapa. Para examinar el conjunto de posibles soluciones es suficiente recorrer este rbol construyendo soluciones parciales a medida que se avanza en el recorrido. Cuando se recorre el rbol pueden suceder dos cosas. Si, por un lado, alcanzamos una hoja del rbol, que representa una solucin, podemos concluir si lo que se buscaba era una solucin al problema o seguir recorriendo el rbol en busca de nuevas soluciones. Si, por otro lado, alcanzamos un nodo fracaso, aquel que no tiene sentido expandir porque no nos conducir a ninguna solucin, el algoritmo vuelve atrs, al nodo previamente visitado, para buscar nuevos caminos a seguir en la bsqueda de la solucin . A continuacin se muestran algunos ejemplos de aplicacin de esta tcnica en la solucin de problemas. 1.1.5.Algoritmos para satisfaccin de restricciones Una red de restricciones se define como una terna (X, D, C) donde X es un conjunto de variables, D un conjunto de dominios de cada variable definida en X y C un conjunto de restricciones. En se proponen tres tcnicas para resolver el problema de satisfaccin de restricciones (CSP de sus siglas en ingls) asociado a una red de restricciones: Bsqueda, Inferencia e Hbrida. Para aplicar cada uno de

estas formas de resolver

el CSP se describen varios mtodos, entre ellos

bactracking, el cual usan en la bsqueda. El algoritmo de backtracking realiza una bsqueda en profundidad sobre el rbol del problema En cada nodo el algoritmo comprueba si las restricciones totalmente asignadas ests satisfechas. Si es as, el algoritmo prosigue con la bsqueda en profundidad. Si no, la rama actual no contiene soluciones y se realiza una vuelta atrs sobre la ltima variable asignada. Backtracking, tal como se describe en , realiza una vuelta atrs cronolgica: cuando detecta una inconsistencia en la rama actual, vuelve sobre la ltima variable asignada y cambia su valor. Dichos autores hacen referencia a otras variantes de backtracking que pudieran utilizarse como backtracking inteligente o look back, que permiten volver sobre una de las variables causantes de la inconsistencia, aunque no sea la ltima. 1.1.6.Dibujo automtico de distribuciones en planta a partir de un grafo de adyacencias En se presentan algoritmos capaces de automatizar el desarrollo del proyecto

arquitectnico por ordenador, llegando hasta la generacin automtica de esquemas adimensionales de distribucin del espacio en las dos dimensiones de la planta de un edificio a partir de las condiciones impuestas por el proyectista. La bsqueda de soluciones para el trazado de esquemas adimensionales de distribucin de edificios en planta se ha realizado tratando de reconstruir el proceder del hombre ante este tipo de cuestiones mediante el desarrollo de dos algoritmos: uno para el trazado de los locales exteriores, basado en la divisin en partes iguales de los lados de la planta. Y un segundo algoritmo para el trazado de locales interiores, basado en una tcnica de bsqueda heurstica profunda, con evaluacin de nodos intermedios y vuelta atrs (backtracking). Los autores definen el algoritmo para el diseo de la planta mediante los siguientes pasos: a) en caso de planta no rectangular reducir la misma a planta rectangular mediante la adicin de recintos ficticios adecuados, que a su vez deben ser incluidos en los grafos a comprobar, b) comprobar la realizabilidad del grafo sobre la planta rectangular, c) generar las posibles soluciones topolgicamente correctas sobre plantas rectangulares,

d) dibujar en forma adimensional las soluciones topolgicamente correctas, e) imponer las condiciones dimensionales, de orientacin, etc., para dibujar las plantas dimensionadas. Para abordar el paso d del algoritmo se plantean dos algoritmos: uno para el trazado de los locales exteriores, basado en la divisin en partes iguales de los lados del rectngulo principal (a partir de ahora la planta) y un segundo algoritmo para el trazado de locales interiores, basado en una tcnica de bsqueda heurstica exhaustiva, con evaluacin de nodos intermedios y backtracking.

Conclusiones
Las tcnicas de diseo de algoritmos, a pesar de estas descritas en libros clsicos que datan de hace ya muchos aos, son aplicables en la solucin de diversos problemas reales, presentes en diferentes reas del conocimiento. La tcnica divide y vencers ha sido utilizada, en combinacin con las iteraciones de Laguerre y Quasi-Laguerre, en el clculo de los valores propios de matrices tridiagonales, de gran aplicacin a diferentes problemas que utilicen el clculo matricial. Por otro lado, su uso ha sido combinado con el diseo de algoritmos paralelos, para proveer esqueletos que permiten a futuros programadores, aplicar las mismas a diferentes problemas de optimizacin combinatoria. La tcnica de algoritmos vidos o greedy, por su parte, ha sido empleada en la solucin de diferentes problemas de optimizacin; tal es el caso de las mejoras en la produccin de cartn ondulado, reduciendo de merma de materias primas y la maximizacin de ganancias en la determinacin de opciones de inversin. La tcnica de vuelta atrs o backtracking se ha utilizado en la solucin a problemas con restricciones y en la automatizacin del diseo de locales de las plantas de un edificio.

Referencias Bibliogrficas