lunes, 5 de abril de 2010


"Digas lo que digas, aunque no sepas muy bien lo que es, dilo con elegancia"

La distribución de planta es un concepto relacionado con la disposición de las máquinas, los departamentos, las estaciones de trabajo, las áreas de almacenamiento, los pasillos y los espacios comunes dentro de una instalación productiva propuesta o ya existente. La finalidad fundamental de la distribución de planta consiste en organizar estos elementos de manera que se asegure la eficiencia del flujo de trabajo, materiales, personas y/o información a través del sistema productivo.

Obtener una buena distribución de planta conlleva resolver un problema de objetivos múltiples, algunos de los cuales son: minimizar el costo de manipulación de materiales, utilizar el espacio y la mano de obra eficientemente, eliminar o disminuir los cuellos de botella, facilitar la comunicación y la interacción entre los propios trabajadores, con los supervisores y con los clientes, reducir la duración del ciclo de fabricación o del tiempo de servicio al cliente, eliminar los movimientos inútiles o redundantes, facilitar la entrada, salida y ubicación de los materiales, productos o personas, incorporar medidas de seguridad, entre otras.

En 1973, Richard Muther, propuso el método SLP (Systematic Layout Planning), el cual, como su nombre lo indica, permite una búsqueda sistemática para obtener buenas soluciones al problema de distribución de planta. Una de las etapas del método requiere la generación y evaluación de posibles soluciones del problema, atendiendo a las características propias de cada caso; sin embargo esa etapa requiere la modelación y un algoritmo exacto para garantizar solución óptima, debiendo limitarse al uso de plantillas para la generación de posibles soluciones.

Posteriormente, en 1995, Santamarina, propone el Método LAYGEN para generar y evaluar distribuciones de planta, el cual se basa en la estructura propuesta inicialmente por Tam para representar las posibles distribuciones por medio de árboles de corte. En el método LAYGEN se recurre al uso de dos fases, en la primera se emplean algoritmos genéticos para generar árboles de corte y se escoge, por medio de una función de evaluación, el que tenga mayor potencialidad; en la segunda fase, con el uso de algoritmos genéticos, se generan distribuciones de planta a partir del árbol de corte seleccionado y se escoge la mejor.

Finalmente, en 2006 Diego Más, en su tesis doctoral, retoma los trabajos de Santamarina, Tam y otros autores, y agrega la definición de potencial geométrico de los árboles de cortes básicos al algoritmo LAYGEN para completar su metodología, en la cual propone la forma de representar diferentes soluciones en la población generada y la evaluación correspondiente.

En este trabajo se presenta una implementación computacional del Método SLP, de manera tal que al generar y evaluar distribuciones de planta se aplique la técnica propuesta por Diego-Más. Se muestra el uso de los árboles de corte y sus codificaciones, en las dos fases de aplicación de LAYGEN, por medio de algoritmos genéticos.

Definición de distribución de planta.

A grandes rasgos el problema de la distribución de planta se origina en el campo de estudio de la ingeniería industrial y consta en diseñar una instalación de producción que elabore un producto especifico y que se reduzca su costo al mínimo[Hicks,1999], Para los ingenieros industriales es imposible desligarse de este campo ya que el hecho de producir algo o incluso el prestar un servicio implica cierto orden que induce un problema de esta índole ya que se trata de hacer el producto o prestar dicho servicio de la mejor manera posible o la óptima en caso de conocerse dicho resultado.

Métodos de solución del problema de distribución de planta.

La solución óptima de un problema de distribución de planta es muy difícil de encontrar ya que conforme se agregan departamentos el numero de operaciones necesarias para poderlo resolver son demasiadas y el tiempo de computo requerido es muy grande para poder aplicar algoritmos conocidos como exactos como por ejemplo branch and bound [Koopmans et.al., 57] cuya función principal es el resolver el problema de asignación cuadrática del que hablaremos mas adelante pero donde las actividades o departamentos cuentan con áreas idénticas y las posiciones donde se pueden asignar están fijas. Por otra parte existen una gran variedad de técnicas empleadas para encontrar una solución aproximada que muy probablemente no sea la óptima pero que si sea una muy buena solución para el problema dichas metodologías serán mencionadas a continuación algunas sin profundizar en su funcionamiento ya que no es el objetivo de este reporte.



Los anteriores son solo algunos de los métodos que se han empleado para poder encontrar la solución del problema de distribución de planta, para crear una perspectiva de los intentos que se han hecho para resolverlo y su funcionamiento en general.

El método implementado en este trabajo sera el de un algoritmo genético o evolutivo en particular el planteado por [Diego-Mas, 06] y que es conocido como LAYAGEN-G, que se basa en el tipo de algoritmo antes mencionado y en un árbol de cortes para poder darle sentido a la forma de codificación del cromosoma genético, pero sera explicado en capítulos posteriores.

El problema de la asignación cuadrática.

El problema de asignación cuadrática o QAP es un problema de optimización combinatoria que puede establecerse como un conjunto de n elementos distintos que deben ser localizados en n localidades de forma óptima. Al ser un problema de optimización se necesita minimizar ya sea el flujo , los costos o las distancias. El QAP es un problema difícil de resolver y pertenece a la familia de problemas conocidos como NP-Duros que no son objeto de estudio en nuestro reporte.


Algoritmos Genéticos

Algoritmos genéticos aplicados a la distribución de planta

Implementación de LAYAGEN-G

LAYAGEN-G Paso 1 & 2

Ejemplos de Ejecución de LAYAGEN-G



Conclusiones

Podemos decir que lo que se planteo al inicio de este trabajo se cumplió satisfactoriamente debido a que se implemento con éxito el algoritmo propuesto en [Diego- Mas, 06] debido a que las soluciones que nos arrojo el algoritmo son muy cercanas o en ocasiones mejores a las obtenidas por los autores originales lo que significa si hay una mejora aunque mínima al usar este algoritmo genético.

Por otro lado podemos hacer una serie de observaciones acerca del algoritmo que se implemento en base a las diversas pruebas de ejecución que se realizaron, quizá la mas importante es que la población converge muy rápido lo que nos lleva a dar una alta probabilidad de mutación para mantener la diversidad contrario a lo que se maneja en general por la mayoría de los autores.

Otra muy importante es que la codificación basada en clusters resulta muy complicada para verificar factibilidad lo que hace que se requieran tiempos de ejecución para verificar que los operadores genéticos tienen sentido, lo cual desemboca en mayores tiempos de computo.

Hay algo que es muy necesario saber en el algoritmo y que el autor no explica y es la forma de obtener las distancias entre centros de los departamentos y que es vital para el funcionamiento, por lo que se tuvo que implementar dicho algoritmo que esta explicado en el capitulo 4.

Por ultimo los resultados obtenidos en nuestra implementación parecen no coincidir con los flujos totales del autor. Pero es que hay una serie de coeficientes que no menciona el autor que valores deben tomar por lo tanto pareciera que carecen de sentido pero poejemplo en [Díaz, 07] se obtiene un mejor resultado que el del autor ya que el si expone los valores de todos los coeficientes que va a utilizar.


Asesores

Dr. Javier Ramírez
Dr. Rafael López Bracho
Dr. Francisco Zaragoza

Profesores de la Universidad Autónoma Metropolitána
Unidad Azcapotzalco


Ejemplos de Ejecución de LAYAGEN-G

Problema de Francis & White (13 departamentos )

Se realizo el ejemplo que se encuentra en [Diego-Mas, 06] con los siguientes parámetros que son los mismos que propone el autor y que a continuación se mostraran.


Con la siguiente tabla de flujos


Tabla de Relaciones


Los siguientes son los parámetros del algoritmo genético de su primer y segundo paso



Resultados



Problema de Díaz (Pasillos)

El siguiente problema se encuentra en [Díaz 07] donde plantean un método para resolver problemas de distribución de planta mediante la creación de columnas donde se colocaran las actividades y lo que resta de las columnas deben ser pasillos.

Terreno 8 x 10

No hay tabla de flujos




El resultado obtenido fue



Problema Fabrica de Peluches

Terreno 12.05 X 12.05

Tabla de flujos

Tabla de relaciones


Parámetros del algoritmo genético


Resultados



Problema Venta de Lamina

Terreno 8 X 17

Tabla de flujos

Tabla de relaciones

Parámetros del algoritmo genético


Resultados



LAYAGEN-G Paso 1
Ahora después de haber realizado la codificación y decodificación de cada individuo nos queda aplicar el algoritmo genético en si a las codificaciones(recordemos que es la del árbol y la de los cortes ) El primer paso es generar la población inicial de arboles de corte con el sistema de clustering propuesto en [Diego-Mas, 06]

Es un simple procedimiento que crea los objetos Codificador que como mencionamos anteriormente se trata de los individuos, se crean mediante una variable auxiliar y se depositan en un arreglo dinámico de objetos se crean tantos individuos como se haya especificado en la entrada de los datos después se invocan los siguientes métodos con la secuencia que a continuación se muestra.

El método .Carga captura los datos correspondientes al numero de actividades , las áreas, los ratios mínimos y máximos de cada actividad.

El método .Calcula Realiza la función de crear el árbol a partir de los clusters y por lo tanto su codificación y lo guarda en el objeto aux.datos y a la codificacion la coloca en aux.codificacion

Por ultimo el método .potencial_paso1 carga los datos de flujo y coste relacional así como los coeficientes de ponderación geométrica, relacional y de importancia flujo-relacional y calcula la capacidad de cada individuo que es con lo que mayormente trabaja el algoritmo genético, posteriormente solo se añade al arreglo de objetos.

Comenzaremos a explicar después de la generación de la población inicial primero que nada hay que crear una población auxiliar para meter los individuos que se van creando en esta generación así como los que van a sobrevivir, después viene una función encargada de ordenar a los individuos en base a su capacidad calculada mediante el método anteriormente mencionado- posteriormente se encuentra un procedimiento con el nombre de elite encargado de seleccionar al individuo mas apto de la generación actual compararlo con vector elite de tamaño k(la k la puede dar el usuario o dejarla predefinida) el autor comenta que el problema requiere de un valor k constante no muy grande ya que si no el algoritmo llegaría a lo que se conoce como óptimos locales[Diego-Mas, 06] y no se exploraría toda el área de búsqueda así que lo fijamos en 4 y solo se tomara un individuo de la población para ser elite, así pues ya elegido el mejor de la generación que en nuestro caso seria el que tiene un menor costo ya que se trata de minimizar, seria el ultimo elemento del arreglo ya que esta ordenado de mayor a menor al estar lleno el vector elite primero se compara si el mejor de la generación es mejor que el mejor de la elite y si es así se quita el peor de la elite y se introduce el nuevo individuo a la elite y luego a la población auxiliar.

Las siguientes 7 lineas de código son preliminares y necesarias para la selección tanto de los cruzados, mutados y sobrevivientes esto es debido a que el mecanismo de selección que como se menciono en capítulos anteriores es mediante ruleta elige al que tenga mayor capacidad pero la naturaleza del problema hace que se el mejor sea el de menor capacidad por lo tanto hay que hacer una transformación tomando el máximo valor y restándole todos las demás capacidades y represarlo a su propiedad correspondiente es decir:


Después de hacer la transformación de las capacidades tenemos que calcular la probabilidad de cada una de las capacidades de la siguiente forma


después ordenamos las probabilidades en forma descendente ya estando colocadas previamente en un vector de valores reales y calculamos la probabilidad acumulada para ya poder elegir a los individuos


Una vez calculando el vector de probabilidad acumulada nos quedara algo como esto


Suponiendo que fueran 8 individuos luego generamos un numero aleatorio entre 0 y 1 y el individuo sera el que se encuentre en el intervalo es decir

Siendo k el numero generado de forma aleatoria.

Como los individuos se encuentran ordenados de manera descendente bastara con seleccionar el individuo que tenga el mismo índice que la probabilidad elegida este proceso se debe repetir n⋅Pc donde Pc es la probabilidad de cruce pero asegurándonos que el numero de individuos a reproducirse es par.

Este mismo procedimiento sera empleado para seleccionar los individuos que sobreviven y los individuos que van a mutar solo variando que usando el complemento de la probabilidad de cruce y la probabilidad de mutación para los sobrevivientes y mutados respectivamente.

Ahora el proceso de cruce en el primer paso que es la siguiente linea a tratar contiene un problema que es que no todos cruces son factibles por lo que se debe seleccionar primero u punto de cruce factible para lo que se emplea el siguiente mecanismo.

Primero se verifica que sea viable si la parte izquierda de los 2 padres tiene losmismos elementos sin importar el orden

El anterior gráfico muestra dos individuos que su cruce es viable en donde se muestra pero el autor también pide que de preferencia exista también diversidad que se obtiene si los elementos de la izquierda o derecha se encuentran en diferente orden una vez que se haya seleccionado el punto de cruce como viable si tomamos en cuenta el ejemplo de la figura podemos observar que es tanto viable como diverso ya que los elementos poseen un orden diferente previamente elegido el cruce como viable el mecanismo se puede resumir en el siguiente esquema:

Si al analizar todos los posibles cruces para el par de individuos actual ninguno es viable entonces se mandan los padres directamente y se procede con el siguiente par de individuos

Una observación que me gustaría hacer antes de proseguir. Es que el código fuente contiene la siguiente linea

IF seleccion.convergencia(FMain.poblacion) <> 0.0 THEN

Esta linea no realiza los pasos as ta el endif si algo conocido como la convergencia resulta ser 0.0 este aspecto se relaciona en gran medida con el cruce ya que como mencionamos debe existir diversidad y si todos los elementos de la población fueran el mismo al transformarlo y sumarlo daría 0.0 y generaría una división entre 0 al realizar el calculo de la probabilidad, es por eso que si se carece complemente de diversidad se dice que el algoritmo tuvo una convergencia prematura y solo se llega a la ultima iteración de manera automática y se pone como mejor el único individuo que quedo.

Aclarado el punto anterior ahora solo hay que seleccionar los sobrevivientes y los mutados como ya lo habíamos mencionado, solo hay que recordar que los sobrevivientes deben ser.

el -1 corresponde al individuo elite que ya fue agregado a la población auxiliar desde antes y los mutados tendrán que ser n⋅Probde mutacion . una vez seleccionados los individuos que van a mutar entonces se procede con la mutación que es monopunto pero como en el caso del cruce puede que no sea viable es por eso que en el código del codificador se agrego una propiedad que es la viabilidad que verifica si al crear un árbol este sera viable, en este caso no se pueden alterar los genes es decir pasar de una letra a otra por que carecería de lógica, en este caso se realiza un intercambio entre 2 genes y sus posiciones de manera aleatoria y se verifica si fue viable, si no fuera el caso se deshace la mutación y se intenta otra hasta que de un individuo viable. El procedimiento usa la palabra reservada TRY ya que se generara un error cuando un individuo no es viable. Además hay que guardar de algún modo la posición del individuo para saber a donde represarlo en la población una vez concluida la mutación se recalculan las capacidades para que ninguna este transformada y se reasignan a la población original procediendo a la siguiente generación.

LAYAGEN-G Paso 2

Una vez finalizado el primer paso se elige el mejor individuo que surgió en ese paso y se realiza una segunda población inicial pero con parámetros del algoritmo genetico diferentes así como otros parámetros de la distribución de planta adicionales de los que hablaremos mas adelante

La población inicial se genera de la siguiente forma:

• Se crea un nuevo codificador se le manda la codificación del mejor individuo del primer paso y se calcula la capacidad del primer paso

• Se crea un vector de cortes donde los elementos pueden ser pueden ser [0,1,2,3] de manera aleatoria esta sera la codificación del segundo paso y luego se calcula la capacidad del segundo paso con la siguiente formula


dode:

• dij es la distancia entre cada par de actividades

• fij es la carga de transporte entre cada par de actividad

• rij es la necesidad de proximidad

• gc Es el numero de actividades que cumplen las restricciones geométricas

• μi es la rigidez geométrica de la actividad i toma valores entre [0,1]

• li es el incumplimiento formal de la actividad i

• p Coeficiente de penalización geométrica varia de [1,∞)

Todos estos datos son capturados en la ultima pestaña del programa

• Por ultimo se coloca en el vector de población y se inicia el algoritmo genético

En este segundo es casi identifico al primer paso en casi todo solo que aquí hay que considerar la capacidad2 en lugar de la capacidad1 del primer paso ya que siempre sera la misma ya que es la misma codificación del primer paso, los demás cambios que hay que hacer son los siguientes

1. En el cruce no es necesario verificar la viabilidad ni la diversidad por lo que basta con hacer el cruce de manera directa con un k aleatorio.

2. La mutación tampoco requiere de verificación de viabilidad solo se hace de manera directa y esta vez si se cambia uno de los cortes por otro de los existentes diferente al que esta colocado actualmente.

3. En este caso se implemento que se pudiese obtener mas de una distribución de planta así que hay que agregar un ciclo mas que albergue a todo el algoritmo genético y que haga que se repita n veces para obtener n distribuciones de planta. En este caso no colocaremos el código fuente de esta parte pero para consultarlo en el Anexo se encuentran las direcciones de donde puede ser descargado.

Elaboración del diagrama de bloques

Esta parte podría ser opcional pero resulta de suma importancia poder ver de forma gráfica como es que se vería nuestra(s) distribuciones de planta tentativas.

En este caso se utilizaron las ya antes mencionadas equinas superiores izquierdas que se encuentran dentro de los datos de cada individuos y en nuestro caso de los individuos que se consideran los mejores. Se utiliza un objeto que se llama drawingarea y otro que se llama picture dependiendo de donde queremos que se dibuje nuestra distribución de planta, en pantalla o en una imagen. En el caso del drawing area dibujara solo el mejor de las n ejecuciones y el objeto que guarda las imágenes guardara las n distribuciones.

Además de todo lo anterior se implemento el código para generar un reporte con las medidas de los altos y anchos así como flujos, costos geométricos y costos totales para ambos pasos del algoritmo sin olvidarnos de su codificación y cortes.

Implementación de LAYAGEN-G

En este capitulo se explicara a detalle como se implemento el algoritmo modificado LAYAGEN-G propuesto primero por Santamarina en [Santamarina 95] y modificado posteriormente para su mayor adaptación a los algoritmos genéticos por José Antonio Diego Mas en [Diego-Mas 06] El análisis se hará parte por parte del software mostrando capturas de pantalla y los mecanismos que se emplearon detrás de la implementación así como su código fuente del componente a tratar(para ver el código fuente completo ver anexo 1)

Captura de los datos

Esta primer pantalla se refiere a la captura de los datos de definición del problema de distribución de planta incluyendo los parámetros del primer paso del algoritmo genético.

En esta segunda pantalla contiene La tabla conocida como de flujo de materiales, con la simetría desactivada ya que muchos autores consideran que no es lo mismo lo que se transporta del departamento i al j que lo del departamento j al i ademas de los coeficientes Relacional y Geométrico.

En esta tercer pantalla se meten los datos referentes a proximidad así como el valor numérico equivalente y el botón que ejecuta el primer paso del algoritmo genético.

Esta pantalla se activara cuando finalice la ejecución del primer paso del algoritmo genético en ella se colocaran todos los parámetros del segundo paso del algoritmo genético. Introducir los datos ya no es necesario ya que serán los mismos que en el primer paso. El fragmento de codigo fuente mostrado a continuación a pesar de ser relativamente largo no posee mucha dificultad su entendimiento ya que solo es tomar lo que tenemos en los controles de formulario antes mencionados y posteriormente cargarlos a variables facilmente manejables y posteriormente a nuestra estructura de árbol que en nuestro caso se llamara codificador pero hablaremos de ella mas adelante.

Podemos corroborar que el código es bastante sencillo de interpretar ya que en esta sección no se implemento nada del código que corresponde al algoritmo LAYAGEN-G

• En la primera parte solo se da una serie de declaraciones de variables publicas, ya que serán utilizadas por otros módulos durante la ejecución del algoritmo posteriormente viene una serie de valores a cargarse desde la apertura del formulario. Estos son conocidos como valores por default pero ya en ejecución del código pueden ser cambiados, solo sirven como una referencia

• En la primer pantalla donde definimos los datos del problema de distribución de planta a resolver cuenta con validaciones con respecto a las áreas de los departamentos que no pueden se mayor que el are del terreno que tenemos además de que debe estar completamente abarcado todo el terreno así que si la suma de nuestras áreas es

menor bastara con dar un doble click en la gradilla para que aparezca un dialogo donde nos pregunta cuantos departamentos son necesarios para redistribuir el área restante, al dar aceptar nuestro valor en el campo actividades abra cambiado bastara con oprimir el botón definir nuevamente ya que es el encargado de cargar los valores de los campos y parámetros del algoritmo en las variables

• Posteriormente en la segunda pantalla se cargan los datos de los flujos al presionar el botón siguiente. La tabla contiene sus respectivas rutinas para poder mostrar y almacenar los datos.

• En la tercer pantalla se hace una lectura de las letras pero antes de pasarlas a la matriz se hace el cambio de las letras por su respectivo valor numérico en este caso si cuenta con simetría la matriz así que solo se llena la diagonal superior y la diagonal inferior se llenara automáticamente.

• Al dar click en ejecutar paso 1 se ejecutara el modulo paso1 que a continuación se mostrara. Debemos verificar que todos los datos fueron colocados en su totalidad ya que no se ha resuelto que avise cuando falten datos y que no comience la ejecución.

La clase Codificador

La clase codificador contiene todas las especificaciones necesarias para la estructura de datos necesaria para poder evaluar el potencial de una codificación especifica al mismo tiempo contiene todos los datos que esta estructura puede proporcionar como son la capacidad del árbol en el primer paso y en el segundo y cambien cuales son sus 2 codificaciones ya que el algoritmo posee dos codificaciones una para el primer paso del algoritmo y una para ejecutar su segundo paso. El mecanismo empleado para generar las dos codificaciones se mostrara así como la estructura del algoritmo en general se mostrara a continuación:

A continuación se muestra el mecanismo de generación de los arboles de cortes y como se codifica al mismo tiempo. En nuestro código en particular el se opto por generar una lista donde cada nodo de la lista es un árbol y se van armando como muestra el siguiente diagrama

Aquí podemos ver de forma general como es que se crearon los arboles a partir de sus respectivos nodos, como lo mencione antes en nuestro caso la caja de donde se extraen los nodos es una lista ligada de arboles Los arboles están descritos en la clase ArbolB y la lista ligada es la clase ListaA

Ahora en cada nodo del árbol contiene información importante tanto con respecto al árbol como de su geometría en el estado actual es decir los cortes que tenga en ese momento aunque cabe destacar que solo se tomara este aspecto hasta el segundo paso ya que en este primer paso encontraremos el árbol cuyo potencial de adyacencia sea el mas pequeño posible lo que quiere decir que dentro del árbol(no en la distribución) cada par de actividades este lo mas cerca posible es por eso que se implementa algo conocido como potencial de adyacencia que es la distancias entre los nodos pasando por la raíz y se define de la siguiente forma.


Donde

• P(i,j) es el potencial de adyacencia entre el nodo i y el nodo j co i={1,2...n};j{1,2,...n}

• s es la distancia de el nodo i a la raíz

• s' es la distancia del nodo j a la raíz

Lo siguiente a tomar en cuenta es de suma importancia para el algoritmo genético y se trata de la función evaluadora que es casi la misma que en [Diego-Mas, 06] pero adaptada solo para el caso particular de nuestra implementación. Dicha función esta compuesta por 2 potenciales el relacional y el geométrico en nuestro caso se implemento el geométrico además del relacional pero el primero no tiene mucho sentido ya que solo se utiliza cuando nuestro terreno inicial es variable, la función evaluadora sera la siguiente para el primer paso :

Donde

• Cg, Cr Son Coeficientes de ponderación

• Pgac y Prac Potencial geométrico y relacional respectivamente

Como se menciono anteriormente el potencial geométrico en el primer paso es irrelevante pero se calcula mediante el mínimo incumplimiento geométrico de las actividades que esta definido de la siguiente forma.

Donde

• li es el incumplimiento geométrico de la actividad i

• αi es el ratio actual de la actividad i

• αimin es el ratio minimo de la actividad i

• a es αimax en caso de que αimax <>

Como mencionamos antes el potencial geométrico es el mínimo incumplimiento de una actividad dependiendo del corte que tenga pero como se menciono anteriormente el autor dice que este valor sera significativo o tendrá coherencia solo cuando el terreno sea variable o no se conozca la forma y se busque que tenga una forma óptima, no obstante el valor del incumplimiento si sera utilizado en el segundo paso ya que en ese caso su significado es para la forma de cada uno de los departamentos y se va tratar de disminuir en lo posible su costo geométrico para que sea factible en relación a los requerimientos de la planta pero departamento a departamento ya con el terreno fijo.

En lo que respecta al potencial relacional este sera definido a continuación

• P(i , j) Es el potencial de adyacencia entre los nodos i , j

• fi, j ,ri,j Flujo de materiales y relaciones de proximidad para las actividades i,j

• α es un coeficiente de ponderación para la importancia entre f (i,j) y r(i,j)

• n numero de actividades

Para poder encontrar los centros geométricos, se requiere que sea una generalización ya que como no siempre da la misma forma (figura) no se puede hacer una forma específica del cálculo, y para esto se trabajó de la siguiente manera: Se utilizó el mismo procedimiento que del autor para interpretar los cortes y hacer la imagen correspondiente. Y de este mismo procedimiento se utilizó para hacer el cálculo de los centros de cada departamento.

En este problema en particular son a lo más rectángulos las figuras que se forman, tomando en cuenta este detalle muy importante y considerando el origen como la parte inferior izquierda de la figura, se requiere de 4 datos muy importantes:

- TA Tope Superior del área disponible

- TD Tope Derecha del área disponible

- A Ancho del rectángulo

- L Largo del rectángulo

Considerando que el algoritmo es recursivo es probable que puede llegar a ser confuso, asi que se utilizará un ejemplo para su más fácil comprensión, consideremos el siguiente árbol y datos:


Considerando que el Largo total y el Ancho total sean de 10 (ya sean metros, centímetros, etc.). Se procede de la siguiente manera:

Procedimiento de manera generalizada:

Se envía la información inicial de TA, TD, A, L, junto con el nodo raíz del árbol. Se revisa el nodo, en el caso de ser corte, se revisa que tipo de corte es, se realizan los reajustes adecuados dependiendo del corte, y se calculan los centros del subárbol izquierdo y del subárbol derecho. Pero si el nodo actual ya es un departamento se hacen los cálculos pertinentes con los datos actuales y se calculan los centros. Para ejemplificar el procedimiento exacto se utilizara el ejemplo anteriormente especificado.

Datos de entrada inicial:

TA = 10 Se considera como 10 dado a que es el ancho disponible es igual al ancho total

TD = 10 Se considera como 10 dado a que es el largo disponible es igual al largo total

A =10 Se considera 10 dado a que es el área total por lo tanto tiene el ancho total

L = 10 Se considera 10 dado a que es el área total por lo tanto tiene el largo total


En la tabla anterior se ve como hace el cálculo del nodo 9 que es particularmente el nodo raíz, pero eso no es relevante, como no es departamento se hace checa que tipo de corte es, en este caso es un corte 3 (Vertical derecha) es decir, toda el área que le corresponde al 8 se va a la derecha del corte, entonces se toma el área que le corresponde a 8 que es 90. Ahora se divide entre el lado que no se va a mover, en este caso el Ancho (A=10) por qué el que va a recibir el corte es a lo largo por ser un corte vertical, y al resultante se tiene que enviar a los siguientes. Por ser el algoritmo recursivo el siguiente a evaluar es el 8.



Ahora en este siguiente paso se debe notar que recibe es el mismo que envía el cálculo del nodo 9, en este paso se repite revisar si es departamento, si no es , se repiten los cálculos, es un corte tipo 2, se revisa el área del hijo izquierdo (en este caso es 40), y se divide entre el lado que no se va a mover que en este caso es el Largo (L=9 en este momento). Nótese que los valores han cambiado ahora se llega a apreciar mejor por que las 4 variables aunque al comienzo se veían similares, los topes superior y a la derecha indican hasta que valor pueden llegar, y así es mas simple calcular los centros, pero volviendo a los cálculos, el resultado da 4.44, y ese calor se debe pasar a los dos nuevos valores a ser calculados, considere que todos los valores que cambian son dados a la resta o al cambio de manera directa del valor obtenido, y por el algoritmo el siguiente a ser evaluado es el nodo 1.



Ahora en este caso el nodo 1 ya no es un corte si no ya es un departamento, en este caso ya solo es calcular el centro geométrico, aquí es donde se mostrará exactamente por qué la necesidad de las 4 variables. El cálculo es relativamente sencillo, al tener el largo y el ancho simplemente se dividen entre 2 para obtener la mitad y por ende el centro geométrico y se le restan estos valores a los topes superior y el tope de la derecha, y así obtenemos los valores X y Y correspondientes. El uso real del tope superior y el tope de la derecha es ubicar el departamento en el área de trabajo, sin tener que hacer cálculos adicionales para encontrarlo. Así ya no tenemos la incertidumbre si está en la esquina o por en medio. Pero regresando a los cálculos, ya hemos llegado al tope izquierdo del árbol, entonces ahora se regresa al nodo 8, pero ahora se calcula su hijo derecho, en este caso el Nodo 7

Ahora con los nuevos valores se vuelven a hacer los cálculos, y se continua hasta terminar todo el árbol, ya con todos los cálculos hechos, así es como quedan los puntos y un aproximado de la forma geométrica de cómo queda la imagen.




Datos obtenidos a partir del algoritmo

Distribución de planta con los datos de la tabla anterior