DISEÑO Y PROGRAMACIÓN DE UN ALGORITMO GENÉTICO PARA DAR SOLUCIÓN A UN PROBLEMA DE TRANSPORTE CAMILO ANDRES RODRIGUEZ BLANCO VIVIANA ROMERO MONTOYA UNIVERSIDAD DE LA SABANA FACULTAD DE INGENIERÍA CHIA, PUENTE DEL COMÚN 2004 27 DISEÑO Y PROGRAMACIÓN DE UN ALGORITMO GENÉTICO PARA DAR SOLUCIÓN A UN PROBLEMA DE TRANSPORTE CAMILO ANDRES RODRIGUEZ BLANCO VIVIANA ROMERO MONTOYA Proyecto de grado Directores Juan Carlos Villamizar Maria Margarita Cervantes UNIVERSIDAD DE LA SABANA FACULTAD DE INGENIERÍA CHIA, PUENTE DEL COMÚN 2004 27 Este trabajo está dedicado a mi mamá y mi hermano que sin su apoyo y paciencia no hubiera sido posible. Viviana A mi papá, a mi mamá, a mi abuelita, a mi hermana y a Pao. Camilo 27 LISTA DE TABLAS pág. Tabla 1. Costo del método de construcción de un ciclo25 Tabla 2. Comparación de las operaciones de los métodos y sus resultados26 Tabla 3. Formato UML Empresa de Repartos45 Tabla 4. Formato UML Datos Específicos 46 Tabla 5. Formato UML Operaciones47 Tabla 6. Formato UML Tiempo47 Tabla 7. Formato UML Lista de datos47 Tabla 8. Formato UML Vista47 Tabla 9. Formato UML Mostrar datos48 Tabla 10. Formato UML Distribuidoras48 Tabla 11. Datos iniciales del problema50 Tabla 12. Demanda de cada punto de venta50 Tabla 13. Capacidades de cada centro de distribución51 Tabla 14. Distancias entre los centros de distribución y los puntos de venta51 Tabla 15. Costos de envío entre los centros de distribución y los puntos de venta52 Tabla 16. Resultados del modelo por Algoritmo Genético con probabilidad de 53 cruce 99 y probabilidad de mutación 1 Tabla 17. Resultados del modelo por Algoritmo Genético con probabilidad de 53 cruce 99 y probabilidad de mutación 2 Tabla 18. Resultados del modelo por Algoritmo Genético con probabilidad de cruce 98 y probabilidad de mutación 1 54 Tabla 19. Resultados del modelo por Algoritmo Genético con probabilidad de cruce 98 y probabilidad de mutación 2 54 Tabla 20. Resultados del modelo por Algoritmo Genético con probabilidad de 55 cruce 95 y probabilidad de mutación 1 27 Tabla 21. Resultados del modelo por Algoritmo Genético con probabilidad de cruce 85 y probabilidad de mutación 1 Tabla 22. Resultados de costos primera versión57 Tabla 23. Resultados de tiempo primera versión58 Tabla 24. Resultados de costos segunda versión59 Tabla 25. Resultados de tiempo segunda versión60 Tabla 26. Comparación de los costos entre las dos versiones del programa61 de algoritmos genéticos Tabla 27. Comparación del tiempo entre las dos versiones del programa62 de algoritmos genéticos 27 56 LISTA DE FIGURAS pág. Figura 1. Planteamiento del método de la esquina noreste15 Figura 2. Solución óptima del método de la esquina noreste 16 Figura 3. Solución óptima del método del costo mínimo 17 Figura 4. Penalizaciones del método de Vogel 18 Figura 5. Operaciones del método de Vogel 19 Figura 6. Solución óptima del método de Vogel 19 Figura 7. Construcción de un ciclo 21 Figura 8. Operaciones del método de construcción de un ciclo 23 Figura 9. Continuación de las operaciones del método de construcción de un ciclo 24 Figura 10. Solución óptima del método construcción de un ciclo 25 Figura 11. Planteamiento del problema 38 Figura 12. Cadena genética 41 Figura 13. Representación de los genes dentro de la cadena genética 42 Figura 14. Punto de cruce en la cadena genética 43 27 LISTA DE GRAFICOS pág. Gráfico 1. Formato UML del programa de AG49 Gráfico 2. Costos primera versión 58 Gráfico 3. Tiempo primera versión 59 Gráfico 4. Costos segunda versión 60 Gráfico 5. Tiempo segunda versión 61 Gráfico 6. Variación de costos entre las dos versiones del programa62 Gráfico 7. Variación de tiempo entre las dos versiones del programa63 27 LISTA DE ANEXOS pág. Anexo A. Manual de funcionamiento del programa Anexo B. Descripción del formato UML 75 27 68 RESUMEN En este trabajo se propone una forma no tradicional de encontrar las soluciones óptimas para un problema de transporte en el que inciden unas variables básicas como cantidad de centros de distribución, distancia entre ellos, número de centros de demanda y cantidad a transportar y otras igual de importantes como el costo de la gasolina, situaciones imprevistas, salario de los conductores, entre otras. Teniendo en cuenta que el transporte incide en un alto porcentaje sobre los costos logísticos es importante encontrar soluciones cercanas a las óptimas; para esto se diseñó y se planteó un Algoritmo Genético que busca encontrar estas soluciones por medio de técnicas de optimización flexibles y robustas. Con ayuda del lenguaje computacional JAVA se planteó un modelo al que se le aplicaron pruebas analizadas mediante procedimientos estadísticos donde se determinaron las variables que permiten al algoritmo arrojar soluciones confiables. ABSTRACT In this work a nontraditional form sets out to find the optimal solutions for a transport problem which basic variables like amount of distribution centers affect, distances among them, number of demand centers and other amount to transport and others with the same importance like the cost of the gasoline, unexpected situations, drivers incomes, among others. Considering that the transport affects a high percentage the logistic costs it is important to find solutions near the optimal ones; for this it was designed and considered a Genetic Algorithm that it looks for these solutions by means of flexible and robust techniques of optimization. With aid of computacional language JAVA a model was considered and tests analyzed by means of statistical procedures were applied to it where the variables were determined that allow the algorithm to throw reliable solutions. 27 CONTENIDO pág. INTRODUCCIÓN..............................................................................................................11 1 JUSTIFICACIÓN.......................................................................................................12 2 MARCO TEORICO ...................................................................................................13 2.1 METODOS DE OPTIMIZACIÓN PARA EL MODELO DE TRANSPORTE ........14 2.1.1 Método analítico ....................................................................................... 14 2.1.2 Métodos exhaustivos, aleatorios y heurísticos .......................................... 14 2.1.2.1 Método de solución inicial......................................................................14 2.1.2.2 Esquina Noroeste. .................................................................................15 2.1.2.3 Costo Mínimo. .......................................................................................17 2.1.2.4 Método De Vogel. ..................................................................................18 2.1.2.5 Método De Multiplicadores y construcción de un ciclo. ..........................20 2.1.3 Técnicas basadas en población................................................................ 27 2.1.4 Técnicas experimentales .......................................................................... 27 2.2 ALGORITMOS GENETICOS ............................................................................27 2.2.1 Computación Evolutiva ............................................................................. 27 2.2.2 Origen de los Algoritmos Genéticos.......................................................... 28 2.2.3 Definición de Algoritmo Genético.............................................................. 29 2.2.4 Características de los Algoritmos Genéticos............................................. 30 2.2.5 Selección.................................................................................................. 31 2.2.6 Cruce........................................................................................................ 33 2.2.7 Mutación................................................................................................... 34 2.3 EL MODELO DE TRANSPORTE Y SU RELACION CON LOS ALGORITMOS GENETICOS ....................................................................................................................35 3 PLANTEAMIENTO DEL PROBLEMA .......................................................................38 4 MODELO DEL PROBLEMA......................................................................................41 4.1 FUNCIÓN DECODIFICACIÓN ..........................................................................41 4.2 FUNCIÓN OBJETIVO .......................................................................................41 4.3 SELECCIÓN .....................................................................................................43 4.4 CRUCE .............................................................................................................43 4.5 MUTACION.......................................................................................................43 4.6 DESARROLLO DEL MODELO EN CODIGO JAVA 2.0.....................................44 5 CASOS DE PRUEBA................................................................................................50 6 ANALISIS DE RESULTADOS...................................................................................57 7 CONCLUSIONES Y RECOMENDACIONES ............................................................64 BIBILOGRAFIA.................................................................................................................66 27 INTRODUCCIÓN El método de transporte fue formulado por primera vez como un procedimiento especial para encontrar el costo mínimo al distribuir unidades homogéneas de un producto desde varios centros de distribución a varios puntos venta. Se han desarrollado muchos métodos los cuales llevan a soluciones que satisfacen los problemas, pero para acercarse más a la realidad es necesario involucrar nuevas variables. Por esto, para dar soluciones óptimas a este tipo de problemas se utilizará una herramienta conocida como Algoritmos Genéticos. Los Algoritmos Genéticos desarrollados por John Holland son algoritmos de búsqueda basados en los mecanismos de la selección natural; combinan la supervivencia de las secuencias mejores adaptadas con cambios aleatorios de información. En cualquier generación, se crea un nuevo conjunto de secuencias artificiales usando los mejores genes de los individuos de la generación anterior; ocasionalmente, una parte de las secuencias se cambia aleatoriamente. Cuando el algoritmo es capaz de resolver eficientemente un problema con unos parámetros determinados, aunque estos se modifiquen, el algoritmo sigue encontrando de forma eficaz la solución del problema. En este trabajo se propone una forma no tradicional de encontrar las soluciones óptimas para un problema de transporte en el que inciden unas variables básicas como cantidad de centros de distribución, distancia entre ellos, número de centros de demanda y cantidad a transportar y otras igual de importantes como el costo de la gasolina, situaciones imprevistas, salario de los conductores, entre otras. Teniendo en cuenta que el transporte incide en un alto porcentaje sobre los costos logísticos es importante encontrar soluciones cercanas a las óptimas; para esto se diseñará y se planteará un Algoritmo Genético que busca encontrar estas soluciones por medio de técnicas de optimización flexibles y robustas. Con ayuda del lenguaje computacional JAVA se planteará un modelo al que se le aplicarán pruebas, analizadas mediante procedimientos estadísticos donde se determinarán las variables que permiten al algoritmo arrojar soluciones confiables. 11 1 JUSTIFICACIÓN “En la naturaleza todos los seres vivos se enfrentan a problemas que deben resolver con éxito. La Computación Evolutiva interpreta la naturaleza como una inmensa máquina de resolver problemas y trata de encontrar el origen de dicha potencialidad para utilizarla en nuestros programas. Los Algoritmos Genéticos son una de las más conocidas y originales técnicas de resolución de problemas dentro de lo que se ha definido como Computación Evolutiva”1. A medida que las variables aumentan, como en el caso de estructuras con capacidad limitada, encontrar las soluciones, se vuelve mucho mas complicado y es necesario utilizar un método metaheurístico como por ejemplo un algoritmo genético. La aplicación más común de los algoritmos genéticos ha sido la solución de problemas de optimización, en donde han mostrado ser muy eficientes y confiables. La indiscutible necesidad actual en la búsqueda de soluciones propias para los problemas de estructura de transporte hace que los métodos utilizados hasta el momento arrojen en algunos casos soluciones poco fiables y que no garantizan exactitud, mientras que el algoritmo genético "castiga" a las malas soluciones y "premia" a las buenas, de forma que estas últimas son las que se propagan con mayor rapidez. El objetivo de los AG es optimizar una función en un rango que es difícil de explorar por métodos tradicionales. Solucionar el problema consistirá en encontrar la solución óptima, y por tanto, los Algoritmos Genéticos son en realidad un método de búsqueda muy especial, en el que las soluciones al problema son capaces de reproducirse entre sí, combinando sus características y generando nuevas soluciones. 1 Inteligencia Artificial. Freddy Pérez. Universidad de Puerto Rico. 1998 12 2 MARCO TEORICO El marco teórico que se desarrollará a continuación presenta una breve introducción sobre el problema de transporte, los métodos principales para su optimización, una sinopsis sobre los algoritmos genéticos que abarca desde su origen hasta sus características y principales operadores y finalmente se indicará la aplicación de estos algoritmos a diferentes problemas de transporte. La investigación de operaciones pretende optimizar un problema de decisión con la restricción de recursos limitados. En la investigación de operaciones existe una clasificación de métodos, dentro de los que se encuentran los probabilísticos o estocásticos, donde los datos se determinan a través de distribuciones de probabilidad y los métodos heurísticos que se emplean para aumentar la velocidad del proceso para alcanzar la optimización y para obtener una buena solución al problema. A pesar de que los métodos tradicionales de optimización arrojan resultados satisfactorios los algoritmos genéticos se encargan de desarrollar problemas más complejos, sin dejar a un lado los simples, con resultados y procedimientos más eficientes, por medio de criterios que le permiten comparar las opciones factibles. A continuación se presentarán los diferentes métodos de optimización para problemas de transporte, así como una introducción a la teoría de los AG. “Los AGs han sido específicamente desarrollados para abordar problemas de optimización de funciones y difieren de otros procedimientos de búsqueda fundamentalmente en los cuatro puntos que siguen: a) Trabajan con una codificación del conjunto de parámetros, no con los parámetros en si mismos. b) Buscan a partir de un conjunto de puntos -población- y no desde uno solo. c) Usan como información la función objetivo en vez de otros conocimientos auxiliares. d) Utilizan reglas de transición probabilística, no reglas deterministas”2. La programación lineal es una herramienta de modelos cuantitativos para manejar diferentes tipos de problemas y ayudar a la toma de decisiones. Se debe considerar el modelo de transporte como un problema de optimización a través del cual un administrador debe determinar la mejor forma de cómo hacer llegar los productos de sus diversos almacenes a sus consumidores, con el fin de satisfacer a los clientes, a un costo mínimo. “El modelo busca determinar un plan de transporte de una mercancía de varias fuentes a varios destinos. Entre los datos del modelo se cuenta: 2 PAREJO Carmen Cortés. Tesis Algoritmos Genéticos y problemas de visibilidad. Universidad de Sevilla. 1996. 13 1. Nivel de oferta en cada fuente y la cantidad de demanda en cada destino. 2. El costo de transporte unitario de la mercancía de cada fuente a cada destino”3. 3. La distancia entre los centros oferentes y la demanda El modelo se utiliza para realizar actividades como control de inventarios, programación del empleo, asignación de personal, flujo de efectivo, programación de niveles de reservas entre otras. 2.1 METODOS DE OPTIMIZACIÓN PARA EL MODELO DE TRANSPORTE Hay muchas formas de abordar problemas de optimización, a continuación se presentan diferentes métodos. 2.1.1 Método analítico “Si existe la función F y se puede derivar dos veces en todo su rango, se pueden hallar todos sus máximos, sean locales o globales. Sin embargo, la mayoría de las veces no se conoce la forma de la función F, y si se conoce, no tiene porqué ser diferenciable ni siquiera una vez. Incluso el tratamiento analítico para funciones de más de una variable es complicado”4. 2.1.2 Métodos exhaustivos, aleatorios y heurísticos “Los métodos exhaustivos recorren todo el espacio de búsqueda, quedándose con la mejor solución, y los heurísticos utilizan reglas para eliminar zonas del espacio de búsqueda consideradas poco interesantes. En los métodos aleatorios, se va muestreando el espacio de búsqueda acotando las zonas que no han sido exploradas; se escoge la mejor solución, y, además, se da el intervalo de confianza de la solución encontrada”5. A continuación se presentarán algunas aplicaciones de estos métodos. 2.1.2.1 Método de solución inicial. Mediante el uso del método simplex se pueden resolver los modelos de transporte y de cualquier otro tipo de problemas de programación lineal. Sin embargo debido a la estructura especial de modelo de transporte, se puede utilizar otro método que se ha diseñado para aprovechar las características de los problemas de transporte. 3 4 5 TAHA Hamdy, Investigación de operaciones, Quinta Edición, Editorial Alfaomega, España: 1995, 227p. MARTI, Rafael. Algoritmos Genéticos, 1992.www.uv.es/~rmarti/genet.html. Agosto 23 de 2003 MARTINEZ José J. Introducción a la Informática Evolutiva. Editorial Universal. España: 1999, 10p. 14 2.1.2.2 Esquina Noroeste. Este método se considera el más fácil, pero también el menos probable para dar una buena solución inicial y de bajo costo porque ignora la magnitud relativa de los costos. Antes de describir el procedimiento, es necesario establecer que el número de variables básicas, en cualquier solución de un problema de transporte es una menos de la que se espera. Normalmente, en los problemas de programación lineal, se tiene una variable básica para cada restricción. En los problemas de transporte con m recursos y n destinos el número de restricciones funcionales es m + n. Sin embargo, el número de variables básicas es igual a m + n – 1. El método de la esquina noreste comienza asignando la máxima cantidad posible a la demanda X11, de manera que se satisfaga totalmente la demanda (columna) o se agote la oferta (fila). Cuando se satisface la demanda se tacha la columna o cuando se agota la oferta se tacha la fila, indicando que las variables son iguales a cero. Cuando se satisfacen simultáneamente una fila o una columna se tacha sólo una de éstas. Esta condición garantiza la ubicación automática de variables básicas cero si las hay. El siguiente problema ejemplificará el método de la esquina noreste al igual que los otros métodos a continuación. Una empresa envía camiones cargados de granos desde tres silos a cuatro molinos. La oferta (en camiones cargados) y la demanda (también en camiones cargados), junto con los costos de transporte por carga de camión en las diferentes rutas, se resumen en la figura 1. Los costos de transporte por unidad, cij, se muestran la esquina noreste de cada cuadro. El propósito del modelo es determinar el costo mínimo del programa de envío entre los silos y los molinos. Esto equivale a determinar la cantidad xij enviada del silo i al molino j (i = 1,2,3; j = 1,2,3,4). Figura 1. Planteamiento del método de la esquina noreste Destino 1 2 10 3 0 4 20 Oferta 11 1 15 X11 Centro de Demanda 12 X12 7 X13 9 X14 20 2 25 X21 0 X22 14 X23 16 X24 18 3 5 X31 Demanda X32 5 X33 15 X34 15 10 45 Fuente: TAHA Hamdy, Investigación de operaciones, Sexta Edición, Editorial Alfaomega, España: 1995, 180p. 15 Los números en cada celda (parte superior derecha) indican el valor del transporte desde un punto de un centro de demanda hasta un destino o centro oferente. El método debe iniciarse en la esquina noreste por lo tanto en la celda X11 se asigna el valor de 5, pues el lo máximo que se puede para satisfacer al menos la demanda, entonces esta columna se debe tachar. La oferta excedente es de 10 unidades en la fila 1. En X12 se asignan 10 unidades para poder satisfacer la oferta y se tacha la fila 1. Falta satisfacer una demanda de 5 unidades en la columna 2. Se pasa a X22, pues ni la fila ni la columna han sido tachadas y se satisfacen las unidades de la demanda con 5. Por lo tanto se tacha la columna 2 y la oferta excedente es de 20 en la fila 2. En X23 se asignan 15 unidades y se satisface la demanda, es decir se tacha la columna 3. La oferta excedente es de 5 unidades en la fila 2. Con 5 unidades en X24 se agota la oferta y se tacha la fila 2. Falta satisfacer una demanda de 5 unidades en la columna 4. En X34 se asignan 5 y se satisface simultáneamente la demanda y se agota la oferta. El procedimiento está completo cuando queda exactamente una fila o una columna sin tachar. Se debe tachar la fila 3 o la columna 5, así sólo uno de las dos queda sin tachar y el proceso llega a su fin. Cuando se satisfacen al mismo tiempo una fila o una columna la siguiente variable que se agregará a la solución básica debe ser cero. El resumen de estas operaciones se puede apreciar en la siguiente figura. Figura 2. Solución óptima del método de la esquina noreste 1 1 5 2 3 15 10 5 2 15 3 5 4 15 15 5 25 5 5 10 45 Fuente: TAHA Hamdy, Investigación de operaciones, Sexta Edición, Editorial Alfaomega, España: 1995, 182p. Las variables básicas son X11 con 5 unidades, X12 con 10 unidades, X22 con 5, X23 con 15, X24 con 5 y X34 con 5. Las variables restantes son no básicas en nivel cero. El costo de transporte asociado es 5 x 10 + 10 x 0 + 5 x 7 + 15 x 9 + 5 x 20 + 5 x 18 = $ 410 16 2.1.2.3 Costo Mínimo. Este es un procedimiento que se utiliza tomando como base a las rutas o desplazamiento que tenga el menor costo. Se asigna el valor más grande posible a la variable con menor costo unitario de toda la tabla (si se presenta un empate, éste se rompe arbitrariamente). Se debe tachar la fila o columna satisfecha (como en el método de la esquina noroeste, si una columna y una fila se satisfacen de manera simultánea, sólo una puede tacharse). Después de ajustar la oferta y la demanda de todas las filas y columnas no tachadas, se repite el proceso asignando el valor más grande posible a la variable con el costo unitario no tachado más pequeño. Continuando con el ejemplo del método de la esquina noreste se ejemplificará el método del costo mínimo. El menor costo unitario de la tabla corresponde a las celdas X12 y X31. Arbitrariamente se escoge una de las dos, en este caso X12. Se asigna el máximo valor para satisfacer la demanda o la oferta, es decir, 15 unidades y se tacha la columna 2 a pesar que simultáneamente se satisface la fila 1 y la columna 2. Por lo tanto la oferta de la fila 1 es cero. El siguiente costo unitario menor está en X31, se asignan 5 unidades y se tacha la fila 3, por lo tanto la demanda en la columna 1 es cero. El siguiente elemento de menor costo no tachado es X23 con 15 unidades, que satisface la columna 3 y faltan 10 unidades de oferta en la fila 2. Continuando con X11 por tener el menor costo no tachado se le asigna el valor de cero pues la demanda de la columna 1 y la oferta de la fila 1 ya están satisfechas. Las otras variables básicas que se obtienen con X14 = 0 y X24= 10. La solución óptima en cuanto a costo es la siguiente. 0 x 10 + 15 x 0 + 0 x 11 + 15 x 9 + 10 x 20 + 5 x 0 = $ 335 Figura 3. Solución óptima del método del costo mínimo 1 2 10 1 0 12 3 0 15 20 7 9 2 0 3 4 15 14 16 11 0 10 15 20 18 25 5 5 5 15 15 10 45 Fuente: TAHA Hamdy, Investigación de operaciones, Sexta Edición, Editorial Alfaomega, España: 1995, 183p. 17 2.1.2.4 Método De Vogel. “Este método es heurístico y suele producir una mejor solución inicial que los métodos anteriores. De hecho, suele producir una solución inicial óptima, o próxima al nivel óptimo”6. Los pasos del procedimiento son los siguientes: 1. Se evalúa una penalización para cada fila (columna) restando el menor elemento de costo de la fila (columna) del elemento de costo menor siguiente en la misma fila (columna). 2. Se identifica la fila o columna con mayor penalización, rompiendo empates en forma arbitraria. Se asigna el mayor valor posible a las variables con el costo más bajo de la fila o columna seleccionado. Se ajusta la oferta y la demanda y se tacha la fila o columna satisfecha. Si un fila y una columna se satisfacen al mismo tiempo, sólo uno de ellos se tacha y a la fila (columna) restante se le asigna una oferta (demanda) cero. Cualquier fila o columna con oferta o demanda cero no debe utilizarse para calcular futuras penalizaciones (en el paso 3). 3. Después de ajustar la oferta y la demanda se deben tener en cuenta las siguientes consideraciones. a) si sólo hay una fila o columna sin tachar, se debe parar. b) si sólo hay una fila (columna) con oferta (demanda) positiva sin tachar, se determinan las variables básicas de la fila (columna) a través del método de costo mínimo. c) si todas las filas o columnas sin tachar tienen oferta y demanda cero asignadas, se deben determinar las variables básicas cero a través del método de costo mínimo. Hacer un alto. d) de lo contrario, se calculan las penalizaciones de las filas y columnas no tachadas y después se regresa al paso 2 (las filas y columnas con oferta y demanda cero asignadas no deben utilizarse para determinar estas penalizaciones). Estos pasos al igual que las penalizaciones se aprecian en la figura 4. Figura 4. Penalizaciones del método de Vogel 1 2 3 10 0 Penalización 4 11 20 1 15 12 7 9 20 25 0 14 16 18 5 2 3 Penalización 5 15 15 10 10 7 7 7 10 2 14 45 Fuente: TAHA Hamdy, Investigación de operaciones, Sexta Edición, Editorial Alfaomega, España: 1995, 184p. 6 TAHA Hamdy, Investigación de operaciones, Quinta Edición, Editorial Alfaomega, España: 1995, 249p 18 Se selecciona la fila 3, pues es la que mayor penalización tiene y el costo de X31 es el menor, entonces se le asignan 5 unidades y así la demanda y la oferta se satisfacen. Arbitrariamente se escoge la columna uno para ser tachada y la oferta para la fila 3 es cero. Nuevamente se penaliza la tabla, omitiendo la columna tachada y la fila 3 pues en este caso ya está satisfecha. Figura 5. Operaciones del método de Vogel 1 2 10 3 0 Penalización 4 20 11 1 12 7 0 14 2 3 11 15 15 9 20 16 18 25 2 5 - 5 Penalización 5 15 15 10 - 7 11 9 45 Fuente: TAHA Hamdy, Investigación de operaciones, Sexta Edición, Editorial Alfaomega, España: 1995, 184p. La fila 1 y la columna tres tienen las mismas penalizaciones, arbitrariamente se selecciona la columna 3 y se le asigna a X23 15 unidades para satisfacerla. Se tacha esta columna y la oferta de la segunda fila debe ser ajustada a 10 unidades para satisfacerla. Nuevamente es necesario realizar las penalizaciones. Figura 6. Solución óptima del método de Vogel Penalización 1 2 10 1 12 2 0 3 Penalización 3 0 5 10 4 20 7 9 15 14 5 11 10 16 15 11 25 13 5 - 20 18 0 5 15 15 10 - 7 11 9 45 Fuente: TAHA Hamdy, Investigación de operaciones, Sexta Edición, Editorial Alfaomega, España: 1995, 186p. 19 Si se continúa el proceso, los resultados que arroja el método son los siguientes. Se tacha la fila 2 y en X22 se asignan 10 unidades, posteriormente se tacha la columna 2 con 5 unidades para X12, se tacha la fila 1 para X14 con 10 unidades y finalmente X34 con cero. 5 x 0 + 10 x 11 + 10 x 7 + 15 x 9 + 5 x 0 + 0 x 18 = $ 315 A pesar de este resultado el rompimiento de empates arbitrariamente puede arrojar otros resultados no tan buenos. 2.1.2.5 Método De Multiplicadores y construcción de un ciclo. El método de multiplicadores es un procedimiento secuencial que empieza con una solución inicial factible del problema de transporte que es generada a partir de los métodos anteriores para encontrar la solución óptima. Para las variables básicas se asocian multiplicadores ui y vj con la fila i y la columna j; cij corresponde al costo de cada celda ij. Estas variables deben satisfacer la ecuación ui + vj = cij Por lo general al multiplicador u1 se le asigna el valor de 0. Las variables no básicas están dadas por la ecuación pq = up + vq - cpq Los pasos son los siguientes: 1. Se utiliza la solución actual para crear una trayectoria única del paso secuencial. 2. Se aplica la ecuación para las variables básicas con el fin de hallar el valor de los multiplicadores. 3. Se reemplaza este valor es la ecuación de las variables no básicas con el fin de hallar la más positiva y ésta se selecciona como variable de entrada. 4. Se regresa al paso 1 hasta que todas las variables no básicas arrojen valores negativos y así se encuentra la solución óptima. Continuando con el mismo ejemplo de la Figura 1 se seguirán los pasos anteriores. Las variables básicas son X11, X12, X22, X23, X24, X34 y las ecuaciones respectivas de acuerdo con el método de la esquina noroeste son X11: u1 + v1 = c11 = 10 X12: u1 + v2 = c12 = 0 20 X22: u2 + v2 = c22 = 7 X23: u2 + v3 = c23 = 9 X24: u2 + v4 = c24 = 20 X34: u3 + v4 = c34 = 18 Si se asume que u1 es cero, se pueden despejar los multiplicadores, entonces v1 = 10, v2 = 0, u2 = 7, v3 = 2, v4 = 13 y u3 = 5. Reemplazando estos valores en las ecuaciones de las variables no básicas se obtiene X13: 13 = u1 + v3 – c13 = 0 +2 - 20 = -18 X14: 14 = u1 + v4 – c14 = 0 +13 - 11 = 2 X21: 21 = u2 + v1 – c21 = 7 + 10 - 12 = 5 X31: 31 = u3 + v1 – c31 = 5 +10 - 0 = 15 X32: 32 = u3 + v2 – c32 = 5 +0 - 14 = -9 X33: 33 = u3 + v3 – c33 = 5 +2 - 16 = -9 X31 se selecciona como la variable que entra por ser la más positiva. Posteriormente se debe construir un ciclo cerrado dentro de la matriz de asignación empezando por la variable de entrada que se determinó con el método de multiplicadores. Este método utiliza segmentos horizontales y verticales que se deben conectar en las variables básicas como se muestra en la figura a continuación. Figura 7. Construcción de un ciclo 1 2 10 1 4 0 20 7 9 11 + 5 2 3 3 12 10 20 25 18 5 + 0 + 5 15 14 16 5 15 5 5 15 15 10 45 Fuente: TAHA Hamdy, Investigación de operaciones, Sexta Edición, Editorial Alfaomega, España: 1995, 188p. 21 Se le asigna una variable a la celda X31 con un signo (+) y por medio de los segmentos se asignan los signos intercalados. El valor que asume es el del menor número de unidades, en este caso 5 y de acuerdo con el signo se suman o restan las unidades para determinar el incremento. La solución básica es degenerada puesto que las variables X11, X22 y X34 son cero; una de estas se escoge aleatoriamente para que salga y se calculan nuevamente los multiplicadores. Variables básicas X11: u1 + v1 = c11 = 10; u1 0; v1 = 10 X12: u1 + v2 = c12 = 0; v2 = 0 X22: u2 + v2 = c22 = 7; u2 = 7 X23: u2 + v3 = c23 = 9; v3 = 2 X24: u2 + v4 = c24 = 20; v4 = 13 X31: u3 + v1 = c34 = 0; u3 = -10 Ahora se calcula el valor de las variables no básicas. La variable que sale es la menor que tenga el signo (-). X13: 13 = u1 + v3 – c13 = 0 +2 -20 = -18 X14: 14 = u1 + v4 – c14 = 0 +13- 11 = 2 X21: 21 = u2 + v1 – c21 = 7 + 10 -12 = 5 X32: 32 = u3 + v2 – c32 = -10 + 0 -14 = -24 X33: 33 = u3 + v3 – c33 = -10 + 2 - 16 = -24 X34: 34 = u3 + v4 – c34= -10 + 13 - 18 = -15 22 Figura 8. Operaciones del método de construcción de un ciclo 1 1 2 3 10 + 0 12 2 0 3 15 + 0 4 0 20 11 7 9 20 15 14 16 5 5 18 15 25 5 5 5 15 15 10 45 Fuente: TAHA Hamdy, Investigación de operaciones, Sexta Edición, Editorial Alfaomega, España: 1995, 189p. La variable que entra es X21 y la que sale X11 (aleatoriamente). Las unidades asignadas ahora a cada celda debe satisfacer tanto la demanda como la oferta. Variables básicas X12: u1 + v2 = c12 = 0; u1 0; v2 = 0 X21: u2 + v1 = c21 = 12; v1 = 5 X22: u2 + v2 = c22 = 7; u2 = 7 X23: u2 + v3 = c23 = 9; v3 = 2 X24: u2 + v4 = c24 = 20; v4 = 13 X31: u3 + v1 = c34 = 0; u3 = -5 Variables no básicas X11: 11 = u1 + v1 – c11 = 0 + 5 - 10 = -5 X13: 13 = u1 + v3 – c13 = 0 +2 -20 = -18 X14: 14 = u1 + v4 – c14 = 0 +13- 11 = 2 X32: 32 = u3 + v2 – c32 = -5 + 0 -14 = -19 X33: 33 = u3 + v3 – c33 = -5+ 2 - 16 = -19 X34: 34 = u3 + v4 – c34= -5+ 13 - 18 = -10 23 Ahora la variable de entrada es X14 y la de salida es X24. Figura 9. Continuación de las operaciones del método de construcción de un ciclo 1 2 10 1 12 2 0 3 15 + 0 3 4 0 20 11 7 9 20 15 14 16 10 5 18 15 25 5 5 5 15 15 10 Fuente: Autores RODRIGUEZ, Camilo, ROMERO, Viviana. Variables básicas X12: u1 + v2 = c12 = 0; u1 0; v2 = 0 X14: u1 + v4 = c14 = 12; v4 = 11 X21: u2 + v1 = c21 = 12; v1 = 5 X22: u2 + v2 = c22 = 7; u2 = 7 X23: u2 + v3 = c23 = 9; v3 = 2 X31: u3 + v1 = c34 = 0; u3 = -5 Variables no básicas X11: 11 = u1 + v1 – c11 = 0 + 5 - 10 = -5 X13: 13 = u1 + v3 – c13 = 0 +2 -20 = -18 X24: 24 = u2 + v4 – c24 = 7 +11- 20 = -2 X32: 32 = u3 + v2 – c32 = -5 + 0 -14 = -19 X33: 33 = u3 + v3 – c33 = -5+ 2 - 16 = -19 X34: 34 = u3 + v4 – c34= -5+ 11- 18 = -12 24 45 En este punto ninguna variable no básica arrojó un valor positivo, por lo tanto se ha llegado a la solución óptima. Figura 10. Solución óptima del método construcción de un ciclo 2 1 10 1 2 3 12 0 0 5 5 3 4 0 5 10 20 7 11 10 9 15 14 20 15 25 5 16 18 45 15 15 10 Fuente: TAHA Hamdy, Investigación de operaciones, Sexta Edición, Editorial Alfaomega, España: 1995, 190p. El resumen del cuadro anterior es el siguiente. Este método permite determinar el número de unidades que deben ser enviadas de determinado centro de demanda a su destino para así multiplicar las unidades por el costo y constituir el gran total. Tabla 1. Costo del método de construcción de un ciclo. Centro de oferta 1 1 2 2 2 3 Destino Unidades COSTO 2 4 1 2 3 1 5 10 0 10 15 5 $0 $ 110 $0 $ 70 $ 135 $0 $ 315 Fuente: Autores RODRIGUEZ, Camilo, ROMERO, Viviana. En la siguiente tabla de resultados se ilustran los métodos utilizados anteriormente con sus respuestas, iteraciones, costo, complejidad entre otras con el fin de realizar un paralelo entre los mismos. La complejidad estará determinada por alta, media y baja y será calificada de acuerdo con el tiempo que se tarda en solucionar el problema y la estructura en si del método. 25 Tabla 2. Comparación de las operaciones de los métodos y sus resultados. METODO Esquina noroeste Costo mínimo Vogel Multiplicadores y construcción de un ciclo ITERA CIONES CENTRO DE OFERTA DESTINO UNIDADES 6 1 1 2 2 2 3 1 2 2 3 4 4 5 10 5 15 5 5 6 1 2 2 3 2 3 4 1 15 15 10 5 6 1 1 2 2 3 2 4 2 3 1 5 10 10 15 5 4 1 1 2 2 3 2 4 2 3 1 5 10 10 15 5 COSTO $ 410 $ 335 $ 315 $315 Fuente: Autores RODRIGUEZ, Camilo, ROMERO, Viviana. 27 COMPLE JIDAD EN EL DESARROLLO VENTAJAS • Es el método más sencillo pues utiliza menos cálculos Baja Baja Media Alta • Es un método sencillo y se inicia por el menor costo unitario • Utiliza penalizaciones para llegar a la solución óptima • Se acerca a la solución óptima pues tomando las variables de entrada calcula multiplicadores. • Al buscar optimizar la solución toma el resultado más positivo de la variable no básica, de esta manera se acerca a la mejor solución DESVENTAJAS • Arroja un resultado poco confiable e ineficiente porque no considera el costo de las entregas y es poco flexible al no considerar otras variables. • A pesar de considerar el menor costo para asignar las unidades es un método poco flexible al no considerar otras variables. • El rompimiento aleatorio de empates puede arrojar resultados suboptimos. • A pesar de presentar el menor número de iteraciones las operaciones pueden ser extensas y confusas 2.1.3 Técnicas basadas en población Este tipo de técnicas pueden ser versiones de cualquiera de las anteriores, pero en vez de tener una sola solución, que se va alterando hasta obtener el óptimo, se persigue el óptimo cambiando varias soluciones; de esta forma es más fácil escapar de los mínimos locales tan temidos. Entre estas técnicas se hallan la mayoría de los algoritmos evolutivos. 2.1.4 Técnicas experimentales En algunos casos, el criterio de un experto es capaz de evaluar lo apropiada que es una solución a un tema determinado, por ejemplo, en problemas de diseño o de calidad. En este caso, se pueden utilizar cualquiera de las técnicas expuestas anteriormente, pero a la hora de evaluar una solución, un experto tendrá que darle una puntuación. 2.2 ALGORITMOS GENETICOS Los programas evolutivos en general y los algoritmos genéticos están siendo usados con éxito en la solución de problemas de optimización ya que presentan características de flexibilidad, robustez y adaptabilidad, pero para conocer a fondo este tema se presentará una introducción a la computación evolutiva, el origen, la definición y características de los algoritmos genéticos y sus principales operadores como lo son la selección, el cruce y la mutación. 2.2.1 Computación Evolutiva “La computación evolutiva parte de un hecho observado en la naturaleza: los organismos vivos poseen una destreza consumada en la resolución de los problemas que se les presentan, y obtienen sus habilidades, casi sin proponérselo, a través del mecanismo de la evolución natural. La evolución se produce, en casi todos los organismos, como consecuencia de dos procesos primarios: la selección natural y la reproducción sexual. La primera determina qué miembros de la población sobrevivirán hasta reproducirse (es un proceso sencillo: cuando un organismo falla una prueba de idoneidad, muere). La reproducción sexual garantiza la mezcla y recombinación de genes en la descendencia de un organismo”7. Las condiciones que determinan un proceso evolutivo en la naturaleza son: • • 7 Existe una población de entidades o individuos con capacidad para reproducirse Existe alguna diferencia o variedad entre estos individuos MARTINEZ José J. Introducción a la Informática Evolutiva. Editorial Universal. España: 1999, 22p. 27 • Esta variedad está relacionada con algunas diferencias en la habilidad para sobrevivir Los algoritmos genéticos se encuadran dentro de la clase de algoritmos que presentan ciertas analogías con los procesos biológicos de la naturaleza. Están incluidos en el marco de la bioinformática, área de especialización encargada de estudiar modelos y técnicas basándose en patrones biológicos y aprovechando las metodologías y técnicas informáticas. La bioinformática trata de dar solución a una gran variedad de problemas de un amplio dominio científico. Dentro de este campo, aparece la Computación Evolutiva, que es un enfoque alternativo para abordar problemas complejos de búsqueda y aprendizaje a través de modelos computacionales de procesos evolutivos. Las implementaciones concretas de tales modelos se conocen como algoritmos evolutivos. El propósito de los algoritmos evolutivos consiste en guiar una búsqueda estocástica haciendo evolucionar a un conjunto de estructuras y seleccionando de modo iterativo las más adecuadas. 2.2.2 Origen de los Algoritmos Genéticos Los Algoritmos Genéticos fueron introducidos por John Holland en 1970 inspirándose en el proceso observado en la evolución natural de los seres vivos. Cuando Holland se enfrentó a los algoritmos genéticos, los objetivos de su investigación fueron dos: • • imitar y explicar los procesos adaptativos de los sistemas naturales, y diseñar sistemas artificiales (normalmente programas) que retengan los mecanismos importantes de los sistemas naturales. “Los algoritmos desarrollados por Holland inicialmente eran sencillos pero dieron buenos resultados en problemas considerados difíciles. Los algoritmos genéticos están basados en integrar e implementar eficientemente dos ideas fundamentales: las representaciones simples como strings binarios de las soluciones del problema y la realización de transformaciones simples para modificar y mejorar estas representaciones”8. Para llevar a la práctica el esquema anterior y concretarlo en un algoritmo, hay que especificar los siguientes elementos: • • • • • • 8 Una representación cromosómica Una población inicial que suele ser generada aleatoriamente Una medida de evaluación Un criterio de selección / eliminación de cromosomas Una o varias operaciones de recombinación Una o varias operaciones de mutación MARTI, Rogelio, Computación evolutiva, 1992, www.uv.es/~rmarti/genet.html, Agosto 23 de 2004 28 2.2.3 Definición de Algoritmo Genético “Los algoritmos genéticos son métodos de optimización, que trata de resolver el mismo conjunto de problemas que se ha contemplado anteriormente, es decir, hallar (xi,...,xn) tales que F(xi,...,xn) sea máximo. En un algoritmo genético, tras parametrizar el problema en una serie de variables, (xi,...,xn) se codifican en un cromosoma. Todos los operadores utilizados por un algoritmo genético se aplicarán sobre estos cromosomas, o sobre poblaciones de ellos. En el algoritmo genético va implícito el método para resolver el problema; son sólo parámetros de tal método los que están codificados, a diferencia de otros algoritmos evolutivos como la programación genética. Hay que tener en cuenta que un algoritmo genético es independiente del problema, lo cual lo hace un algoritmo robusto, por ser útil para cualquier problema, pero a la vez débil, pues no está especializado en ninguno”9. En la Naturaleza lo único que hay que optimizar es la supervivencia, y eso significa a su vez maximizar diversos factores y minimizar otros. Un algoritmo genético, sin embargo, se usará para optimizar habitualmente sólo una función, no diversas funciones relacionadas entre sí simultáneamente. Este tipo de optimización, denominada optimización multimodal, también se suele abordar con un algoritmo genético especializado. Los algoritmos genéticos ocupan el lugar central dentro de la computación evolutiva. Las razones de esto son tanto teóricas como prácticas, siendo las más importantes: • Los algoritmos genéticos constituyen el paradigma más completo de la computación evolutiva. • Son muy flexibles, es decir, pueden adoptar con facilidad nuevas ideas, generales o específicas, que surjan dentro del campo de la computación evolutiva. Además se pueden hibridar fácilmente con otros paradigmas y enfoques, aunque no tengan ninguna relación con la computación evolutiva. • Los algoritmos genéticos son el paradigma con mayor base teórica de entre los de la computación evolutiva. Además, dicha base teórica es sencilla en su desarrollo y con grandes posibilidades de ampliación. • De entre todos los paradigmas de la computación evolutiva son los que menos conocimiento específico necesitan para su funcionamiento, y en consecuencia, los más versátiles. • Son fácilmente implementables en computadores con capacidades medias, proporcionando resultados aceptables, en cuanto a precisión y recursos empleados, para una gran cantidad de problemas difícilmente solubles por otros métodos. “Se puede afirmar que la búsqueda es ciega porque no se dispone de ningún conocimiento específico del problema, de manera que la búsqueda se basa exclusivamente en los valores de la función objetivo. Es también una búsqueda 9 MARTI, Rogelio, Computación evolutiva, 1992, www.uv.es/~rmarti/genet.html, Agosto 23 de 2004 29 codificada, ya que no se trabaja directamente sobre el dominio del problema, sino con representaciones de sus elementos; múltiple, porque busca simultáneamente entre un conjunto de candidatos; y estocástica, referida tanto a las fases de selección como a las de transformación, con lo que se obtiene control sobre el factor de penetración de la búsqueda”10. Todo esto hace que los algoritmos genéticos proporcionen una mayor robustez a la búsqueda, esto es, más eficiencia sin perder generalidad. Los algoritmos genéticos trabajan con una población; muchos otros métodos trabajan con un único punto. De este modo, los algoritmos genéticos encuentran seguridad en la cantidad. Al mantener una población de puntos bien adaptados se reduce la probabilidad de alcanzar un falso óptimo. Algunas veces los algoritmos genéticos consiguen gran parte de su amplitud ignorando la información que sea la del objetivo. “Otros métodos se basan fuertemente en tal información, y en problemas donde la información no está disponible o es difícil de conseguir, estos otros métodos fallan. Los algoritmos genéticos son generales porque explotan la información disponible en cualquier problema de búsqueda. Los algoritmos genéticos procesan similitudes en el código subyacente junto con información proveniente de la ordenación de las estructuras de acuerdo con sus capacidades de supervivencia en el entorno actual. Al explotar una información tan fácilmente disponible, los algoritmos genéticos se pueden aplicar en prácticamente cualquier problema”11. 2.2.4 Características de los Algoritmos Genéticos Aunque muchos aspectos están todavía por discutir, existen unos principios generales ampliamente aceptados por la comunidad científica con respecto a los algoritmos genéticos. 1. La evolución opera en los cromosomas en lugar de operar en los individuos a los que representan. 2. La selección natural es el proceso por el que los cromosomas con buenas estructuras se reproducen más a menudo que los demás. 3. En el proceso de reproducción tiene lugar la evolución mediante la combinación de los cromosomas de los progenitores. Se llama recombinación a este proceso en el que se forma el cromosoma del descendiente. También hay que tener en cuenta las mutaciones que pueden alterar dichos códigos. 4. La evolución biológica no tiene memoria en el sentido de que en la formación de los cromosomas únicamente se considera la información del período anterior. Los algoritmos genéticos presentan ventajas sobre otros algoritmos que los hacen preferibles para determinado tipo de aplicaciones. Algunas de las características de los algoritmos genéticos son: 10 11 MARTI, Rogelio, Computación evolutiva, 1992, www.uv.es/~rmarti/genet.html, Agosto 23 de 2004 Idem 30 • Son algoritmos estocásticos. Dos ejecuciones distintas pueden dar dos soluciones distintas. Esto es útil por el hecho de que hay gran cantidad de isómeros que corresponden a soluciones válidas, por lo que es interesante que distintas ejecuciones nos puedan dar isómeros distintos. • Son algoritmos de búsqueda múltiple, luego dan varias soluciones. Aunque habitualmente las energías de los individuos de la población final es similar, los individuos suelen ser distintos entre si. Se considera que, de todos los algoritmos de optimización estocásticos, los algoritmos genéticos son de los más exploratorios disponibles. • A diferencia de los otros algoritmos comentados, cuya convergencia y resultado final son fuertemente dependientes de la posición inicial, en los algoritmos genéticos, salvo poblaciones iniciales realmente degeneradas en las que el operador de mutación va a tener mucho trabajo, la convergencia del algoritmo es poco sensible a la población inicial si esta se escoge de forma aleatoria y es lo suficientemente grande. • La optimización es función de la representación de los datos. Este es el concepto clave dentro de los algoritmos genéticos, ya que una buena codificación puede hacer la programación y la resolución muy sencillas, mientras que una codificación errada obliga a estudiar que el nuevo genoma cumple las restricciones del problema, y en muchos problemas se tendrá que abortar los que no cumplan las restricciones, por ser estas demasiado complejas. Además, la velocidad de convergencia va a estar fuertemente influenciada por la representación. • Es una búsqueda paramétricamente robusta. Eso quiere decir que se ha de escoger realmente mal los parámetros del algoritmo para que no converja. Con tasas razonables, va a converger mejor o peor en una solución razonablemente buena si la representación es la adecuada. Esto es muy importante por la naturaleza de la búsqueda. • Los algoritmos genéticos son intrínsecamente paralelos. Esto significa que, independientemente de que lo se haya implementado de forma paralela o no, buscan en distintos puntos del espacio de soluciones de forma paralela. Ese paralelismo intrínseco permite que sean fácilmente paralelizables, es decir, que sea fácil modificar el código para que se ejecute simultáneamente en varios procesadores. Existen tres operaciones simples que toman la población inicial y generan poblaciones sucesivas que se esperan sean mejores a medida que avanza el tiempo. Estas operaciones son la selección, cruce y mutación que se describen a continuación e ilustran la manera de optimizar las funciones. 2.2.5 Selección Para aplicar los operadores genéticos se tiene que seleccionar un subconjunto de la población. Algunas de las técnicas son: 31 • • Selección directa: toma elementos de acuerdo a un criterio objetivo, como son los x mejores, los x peores, y son empleados con mucha frecuencia cuando se quieren seleccionar dos individuos distintos, y se selecciona el primero por un método aleatorio o estocástico. Selección aleatoria: puede ser realizado por selección equiprobable o selección estocástica. o o “Selección equiprobable: todos tienen la misma probabilidad de ser escogidos. Selección estocástica: la probabilidad de que un individuo sea escogido depende de una heurística. Los distintos procedimientos estocásticos son: Selección por sorteo: cada individuo de la población tiene asignado un rango proporcional o inversamente proporcional a su adaptación. Se escoge un número aleatorio dentro del rango global, y el escogido es aquel que tenga dicho número dentro de su rango. La probabilidad de ser escogido es proporcional o inversamente proporcional al grado de adaptación del individuo. Selección por escaños: se divide el rango del número aleatorio en un número predeterminado de escaños. Los escaños se reparten de acuerdo con la ley d'Hont, tomando como puntuación para repartir los escaños el grado de adaptación. Es más probable escoger un elemento de baja probabilidad por este método que en el de selección por sorteo. Selección por restos estocásticos: igual que el método de selección de escaños, sólo que los escaños no asignados directamente se asignan de forma aleatoria. La probabilidad de escoger un elemento de muy baja probabilidad es más alta que en el de selección por escaños. Por ruleta: se define un rango con las características de la selección por sorteo. El número al azar será un número aleatorio forzosamente menor que el tamaño del rango. El elemento escogido será aquel en cuyo rango esté el número resultante de sumar el número aleatorio con el resultado total que sirvió para escoger el elemento anterior. El comportamiento es similar al de una ruleta, donde se define un avance cada tirada a partir de la posición actual. Tiene la ventaja de que no es posible escoger dos veces consecutivas el mismo elemento, y que puede ser forzado a que sea alta la probabilidad de que no sean elementos próximos en la población, salvo que algunos de los otros operadores genéticos emplee un método de selección directa basado en la posición relativa de los individuos de la población. Por torneo: se escoge un subconjunto de individuos de acuerdo con una de las técnicas anteriores, habitualmente, aleatoria o estocástica y de entre ellos se selecciona el más adecuado por otra técnica generalmente determinística de tipo el mejor o el peor. Esta 32 técnica tiene la ventaja de que permite un cierto grado de elitismo pero sin producir una convergencia genética prematura”12. 2.2.6 Cruce Se denomina técnica de cruce a la forma de calcular el genoma del nuevo individuo en función del genoma del padre y de la madre. El operador de cruce es fuertemente responsable de las propiedades del algoritmo genético, y determinará en gran medida la evolución de la población. Existen gran cantidad de técnicas de cruce. Las técnicas básicas son: • • • • • Cruce básico: se selecciona un punto al azar de la cadena. La parte anterior del punto es copiada del genoma del padre y la posterior del de la madre. Cruce multipunto: igual que el cruce básico, sólo que estableciendo más de un punto de cruce. Cruce segmentado: existe una probabilidad de que un cromosoma sea punto de un cruce. Conforme se va formando la nueva cadena del descendiente, para cada gen, se verifica si ahí se va producir un cruce. Cruce uniforme: para cada gen de la cadena del descendiente existe una probabilidad de que el gen pertenezca al padre, y otra de que pertenezca a la madre. “Cruces para permutación: Existe una familia de cruces específicas para los problemas de permutación, siendo algunos de ellos: o o o Cruce de mapeamiento parcial: Se toma una subsecuencia del genoma del padre y procura preservar el orden absoluto de los fenotipos, es decir, orden y posición en el genoma; el resto del genoma es lo más parecido posible de la madre. Cruce de orden: Se toma una subsecuencia del genoma del padre y procura preservar el orden relativo de los fenotipos del resto del genoma lo más parecido posible de la madre. Cruce de ciclo: Se toma el primer gen del genoma del padre, poniéndolo en la primera posición del hijo, y el primer gen del genoma de la madre, poniéndolo dentro del genoma del hijo en la posición que ocupe en el genoma del padre. El fenotipo que está en la posición que ocupa el gen del genoma del padre igual al primer gen del genoma de la madre se va a colocar en la posición que ocupe en el genoma del padre, y así hasta rellenar el genoma del hijo”13. Es una buena idea que, tanto la codificación como la técnica de cruce, se hagan de manera que las características buenas se hereden; o al menos, no sea mucho peor que el peor de los padres. 12 SANTO ORCERO, David. Técnicas de Selección.1 997. www.orcero.Org/irbis//disertacion/ node200.html. Agosto 27 de 2003 13 Idem 33 2.2.7 Mutación Se define mutación como una variación de las informaciones contenidas en el código genético; es habitualmente, un cambio de un gen a otro producido por algún factor exterior al algoritmo genético. “Algunas de las razones que pueden motivar a incorporar mutaciones en los algoritmos son: • • • • Desbloqueo del algoritmo. Si el algoritmo se bloqueó en un mínimo parcial, una mutación puede sacarlo al incorporar nuevos fenotipos de otras zonas del espacio. Este problema no se ha resuelto con mutación, sino hibridizando con agregación simulada, lo que ha dado resultados excelentes. Acabar con poblaciones degeneradas. Puede ocurrir que, por haber un cuasimínimo o porque en pasos iniciales apareció un individuo demasiado bueno que acabó con la diversidad genética, la población tenga los mismos fenotipos. A priori se pueden plantear algunas soluciones, como el escalamiento de la función de adaptación; si ya se ha llegado a una población degenerada, es preciso que las mutaciones introduzcan nuevos genomas. Incrementar el número de saltos evolutivos. Los saltos evolutivos (aparición de un fenotipo especialmente valioso o salida de un mínimo local) son muy poco probables en un genético puro para un problema genérico. La mutación permite explorar nuevos subespacios de soluciones, por lo que, si el subespacio es bueno en términos de adaptación, se producirá un salto evolutivo después de la mutación que se expandirá de forma exponencial por la población. Enriquecer la diversidad genética. Es un caso más suave que el de una población degenerada (por ejemplo, que la población tenga una diversidad genética pobre), la mutación es un mecanismo de prevención de las poblaciones degeneradas”14. Sin embargo, si la tasa de mutación es excesivamente alta se tiene la deriva genética. Una estrategia muy empleada es una tasa de mutación alta al inicio del algoritmo, para aumentar la diversidad genética, y una tasa de mutación baja al final del algoritmo, para conseguir que converja. Existen varias técnicas distintas de mutación. Algunas de éstas son: • • • • 14 Mutación de gen: existe una única probabilidad de que se produzca una mutación de algún gen. De producirse, el algoritmo toma aleatoriamente un gen, y lo invierte. Mutación multigen: cada gen tiene una probabilidad de mutarse o no, que es calculada en cada pasada del operador de mutación multigen. Mutación de cromosoma: igual que la mutación de gen, solamente que, en vez de cambiar un gen, cambia un cromosoma completo. Puede sumar un valor aleatorio, un valor constante, o introducir un cromosoma aleatorio nuevo. Mutación multicromosoma: igual que la mutación de multigen, solamente que, en vez de cambiar un conjunto de genes, cambia un conjunto de cromosomas. Puede PAREJO Carmen Cortés. Tesis Algoritmos Genéticos y problemas de visibilidad. Universidad de Sevilla. 1996. 34 • • 2.3 sumar un valor aleatorio, un valor constante, o introducir un cromosoma aleatorio nuevo. Esta mutación es la que se produce implícitamente en la implementación de cruce. “Mutación de intercambio: existe una probabilidad de que se produzca una mutación. De producirse, toma dos genes/cromosomas aleatoriamente y los intercambia. Mutación de barajado: existe una probabilidad de que se produzca una mutación. De producirse, toma dos genes/cromosomas aleatoriamente y baraja de forma aleatoria los genes/cromosomas comprendidos entre los dos”15. EL MODELO DE TRANSPORTE Y SU RELACION CON LOS ALGORITMOS GENETICOS La planificación del transporte pasa por diferentes etapas, desde la percepción de alguna falla o vacío en determinada área, la recolección de información relacionada con el área mencionada, el procesamiento de esa información, el diagnóstico de la situación actual, la identificación de los problemas, la concepción de probables soluciones, su análisis incluyendo prediseños y estudios de prefactibilidad, para al final efectuar las recomendaciones correspondientes. Una de las primeras preocupaciones es contar con la información dentro de un sistema de datos, que le permita en todo momento recurrir a ella para sacar información específica o general dependiendo de lo que se busca. La utilización de modelos computarizados de transporte para estudios de redes, era en una época un instrumento muy requerido en las actividades de planificación de transporte, por lo que tuvieron un enorme desarrollo y aplicación en su momento. Sin embargo, la construcción de estos modelos resulta costosa y consumía mucho tiempo de recopilación de información y posterior calibración. A favor de estos modelos se puede mencionar que una vez construidos y calibrados resultan de gran ayuda en los análisis de diferentes situaciones y alternativas, actuales y futuras, reduciendo los tiempos de análisis. Por esto el uso de modelos computacionales de transporte será apropiado dentro de las disponibilidades y la profundidad del estudio, lo que permitirá obtener soluciones factibles y reales. No se puede dejar de mencionar que los modelos computarizados de antes han seguido evolucionando de tal manera que en la actualidad reducen los recursos humanos y financieros, además del tiempo que las modelaciones involucraban. Es decir que los modelos computarizados de transporte son herramientas de trabajo que se utilizan para 15 SANTO ORCERO, David. Técnicas de Selección.1 997. www.orcero.Org/irbis//disertacion/ node200.html. Agosto 27 de 2003 35 simular situaciones reales; el éxito de su utilización depende del mayor grado de aproximación. “Entre las herramientas de optimización más versátiles y eficientes, se cuenta con los algoritmos de evolución, entre ellos, los algoritmos genéticos. Estos algoritmos de optimización y el progreso notable de las tecnologías informáticas han logrado en años recientes, resolver problemas muy complejos que en el pasado eran inmanejables”16. Algunas aplicaciones de estas herramientas en el campo de la logística y el transporte son entre otras: la optimización del transporte de productos desde diversos puntos de suministro a destinos, almacenes y modalidades alternativas de transporte, la optimización de la distribución de productos, la óptima planificación de la producción y gestión de una flotilla, la óptima gestión de un almacén, obtención de mínimos recorridos, y otros diversos problemas asociados a la minimización de costos o maximización de beneficios, secuencias óptimas, mínimos tiempos de entrega, calendarios óptimos, etc. A continuación se presenta una aplicación de algoritmos genéticos a la solución de un problema de ruteo. Específicamente determinar nuevas rutas de transporte público, aplicando la estrategia desarrollada a la ciudad de Los Ángeles, Chile17. Se presentan las restricciones asociadas al problema y la forma como se adecuaron las técnicas existentes al problema particular. La gran variedad de objetivos, recursos y restricciones que suelen tener los problemas de transporte, en general, hacen difícil su tratamiento con métodos de optimización exactos. Esta aplicación presenta una aproximación a la resolución del problema de búsqueda de recorridos óptimos para líneas de transporte de pasajeros. La formulación del problema, por su naturaleza, fue planteada como un problema multiobjetivo, ya que en ella fueron incorporados de manera explícita tanto los beneficios para los operadores de las líneas como los beneficios de los usuarios de dichas líneas de transporte. El problema se ha enfrentado con el uso de algoritmos genéticos y se discuten los resultados obtenidos con el software desarrollado, al aplicarlo sobre la ciudad de Los Angeles, Chile. Para la implementación del software se eligió Microsoft Visual Basic 6.0, por su flexibilidad y capacidad gráfica. Este estudio se centra en el transporte de personas o transporte público al que se accede mediante el pago de una tarifa fija y que se lleva a cabo con servicios regulares establecidos en rutas señaladas, horarios determinados y paradas específicas. En la red de transporte se requiere un equilibrio entre la oferta y la demanda por transporte. La oferta está conformada por la red de caminos con sus costos asociados, los que están determinados en función de distancias, velocidad de flujo libre, capacidad y relación velocidad-flujo. La red de transporte público contiene especificaciones adicionales de los servicios ofrecidos en términos de sus rutas, capacidades y frecuencias. 16 WINTER, Gabriel,Optimizacion Global en Logística,2000. http://ceani.ulpgc.es/reports/logistica/ceanilogistica.html. Septiembre 30 de 2003 17 PINNINGHOFF, Maria Angelica. Recorridos Optimos de Líneas de Transporte Público Usando Algoritmos Genéticos http://www.inf.udec.cl/revista/down09.html. Septiembre 2 de 2003 36 La demanda está conformada por el número de viajes por unidad de tiempo entre orígenes y destinos y el modo de transporte que podría ser utilizado para un nivel de servicio dado. El nivel de servicio está definido principalmente por el tiempo de viaje, tarifa y comodidad. Si el nivel del servicio disminuye, se puede esperar una reducción en la demanda, cambios de destino, modos, etc. Los objetivos considerados en esta aplicación corresponden a la maximización del beneficio neto privado del operador, la maximización del beneficio neto de los usuarios del sistema de transporte, o una combinación de ambos, en cuyo caso se tratará del beneficio neto del sistema. Es necesario considerar dos funciones objetivo: la del público usuario que desea minimizar el costo del transporte, en cuanto a dinero y tiempo, y la del operador que pretende obtener el mayor ingreso al menor costo. Al aplicar los algoritmos genéticos se determinó que la población inicial está formada por una cantidad fija de rutas válidas. Para la selección se eligió como mecanismo la Ruleta. Para el cruce, se eligió el método simple. En este problema, la variación en un elemento del cromosoma significa fragmentar la ruta más que buscar la variabilidad. Por ello, se usó el reemplazo de un cromosoma completo, elegido al azar, con una probabilidad del 1%. El cromosoma reemplazante es generado de la misma forma de la población inicial. Los datos de entrada para el programa son: • La matriz de adyacencia • Descripción de los arcos (nombres de las calles) • Matriz de vecindad para los nodos • Datos adicionales (tarifa, velocidad de caminata, etc.) • Descripción de las líneas de transporte actualmente en uso Los resultados obtenidos por el programa son: • Ruta o rutas que satisfacen los requerimientos • Distancia recorrida, tiempo de viaje, ausencia, ingreso operador, costo operador, costo usuario y bondad de la ruta • Nombre de las calles que conforman la ruta • Recorrido de cada línea funcionando en la actualidad En conclusión esta aplicación de algoritmos genéticos arroja que una ruta que favorece al operador de la línea de transporte es una ruta más extensa, que invierte un poco más de tiempo, pero que aumenta sus ingresos porque evita zonas de gran ausencia de pasajeros, lo que permite mantener los precios en las tarifas de los usuarios. Este ejemplo es sólo uno de las múltiples opciones que se tienen con los algoritmos genéticos y que permite tener versatilidad y flexibilidad a la hora de plantear los modelos. 37 3 PLANTEAMIENTO DEL PROBLEMA El problema que se plantea es básicamente llevar productos desde uno o varios centros de distribución a uno o varios puntos de venta, determinando la mejor forma de hacer llegar los productos de diversos almacenes u oferentes a los consumidores, con el fin de satisfacer a los clientes a un costo mínimo. El modelo de transporte es un problema de optimización de redes donde debe determinarse cómo hacer llegar los productos desde los puntos de distribución hasta los puntos de venta, minimizando los costos de envío. En la siguiente figura se puede apreciar gráficamente lo anterior. Figura 11. Planteamiento del problema PV1 CD 1 PV4 CD 2 PV2 CD 3 PV5 PV3 Fuente: Autores RODRIGUEZ, Camilo, ROMERO, Viviana CD Centro de distribución PV Punto de venta Las variables son el punto de partida para el desarrollo de los problemas y considerando el tema de transporte las más relevantes de entrada serán: • • • • la distancia entre los centros y los puntos de venta la capacidad de producción de los centros de distribución la demanda de los puntos de venta los costos de envío 38 • la capacidad de cada camión La variable de salida será la cantidad que debe entregar cada centro de distribución a cada punto de venta. Las restricciones son aquellas características que limitan los problemas y están definidas para el transporte por: • • • • los costos de envío por unidad, donde éstos deben ser mayores que cero la cantidad de unidades de unidades enviadas debe ser menor a o igual a la capacidad de producción de los centros de distribución la cantidad que llega a los puntos de venta no debe ser menor a la que demanden la cantidad de camiones disponibles para cada uno de los centros de distribución debe ser mayor que cero. A partir de la anterior descripción se formuló la siguiente función objetivo. Min nd pv i =1 j =1 Cu Ce ij × ij + nd pv i =1 j =1 nviajes × dis km / galón ij ij ∗ Pg Sujeto a, Ce > 0 Cu Ctd Cadi > 0 Cd Ctd ca de Donde, nd = Número de centros de distribución pv = Número de puntos de venta de = demanda Cu = Cantidad de unidades enviadas desde el centro de distribución hasta el punto de venta ca = capacidad de producción Ce = Costos unitarios de envío nviajes = Número de viajes 39 dis = Distancia desde el centro de distribución al punto de venta Ctd = Capacidad total de producción del centro de distribución Cadi = Camiones disponibles Cd = Cantidad de unidades demandadas por el punto de venta Pg = Precio por galón Es decir, que la función objetivo busca minimizar el costo de envío de las unidades demandadas desde cada centro de distribución a cada punto de venta, adicionando la razón que existe entre el número de viajes por camión por la distancia que recorre cada camión desde cada centro de distribución hasta cada punto de venta y una constante que representa el rendimiento de un galón de combustible por kilómetro, por el precio de cada galón. La función objetivo está sujeta a unas restricciones tales como: los costos unitarios de envío que deben ser mayores que cero; la cantidad de unidades enviadas desde el centro de distribución debe ser menor o igual a la capacidad total del centro de distribución; los camiones disponibles para los centro de distribución debe ser mayor que cero; la capacidad de producción mayor o igual a la demanda, y finalmente la cantidad de unidades demandadas por el punto de venta debe ser menor o igual a la capacidad total del centro de distribución. 40 4 MODELO DEL PROBLEMA La cadena genética está compuesta por un número de cromosomas que representa en código binario, la cantidad que debe ser enviada desde un centro de distribución a un punto de venta. Es decir, que la cantidad de cromosomas dependerá del número de estos centros y puntos, y sus posibles combinaciones, teniendo en cuenta que sólo será posible enviar de un centro de distribución a un punto de venta. Figura 12. Cadena genética Gen 1 Gen 2 1 0 Gen n 1 1 0 1 CROMOSOMA 1 Centro de distribución 1 a Punto de venta 1 0 1 1 0 0 CROMOSOMA 2 Centro de distribución 1 a Punto de venta 2 1 . . 1 0 0 1 1 1 CROMOSOMA n Centro de distribución n a Punto de venta n Fuente: Autores RODRIGUEZ, Camilo, ROMERO, Viviana. Los cromosomas estarán compuestos por un número de genes, los cuales representan las posibles unidades a enviar generándose de manera aleatoria, y se determinan a partir del máximo número de unidades que se puedan enviar de un centro a un punto de venta, transformando el número entero a binario. Las dos funciones básicas, decodificación y objetivo, son las encargadas de determinar las cantidades desde cada centro de distribución hacia los puntos de venta, y el costo relacionado con las variables y las restricciones respectivamente. 4.1 FUNCIÓN DECODIFICACIÓN Debido a que las cantidades que representan los diferentes cromosomas que constituyen cada individuo están en código binario, se tendrá una función decodificación, la cual permitirá generar los valores enteros de las diferentes cantidades agrupándolos en una matriz. Las cantidades corresponden a los envíos desde cada centro de distribución a cada punto de venta. 4.2 FUNCIÓN OBJETIVO A partir de la matriz generada por la función decodificación se debe determinar la incidencia de las variables y las restricciones en el costo de transporte. Es decir, que se debe cumplir con ciertas restricciones, como los costos de envío por unidad, donde éstos 41 deben ser mayores que cero; la cantidad de unidades enviadas debe ser menor a o igual a la capacidad de producción de los centros de distribución; y la cantidad que llega a los puntos de venta no debe ser menor a la que demanden; y la cantidad de camiones disponibles para cada uno de los centros de distribución debe ser mayor que cero. El desarrollo de la cadena genética, la población inicial, la selección, el cruce y la mutación se realizó de la siguiente manera. En líneas generales los algoritmos genéticos operan del siguiente modo: inicialmente generan aleatoriamente valores numéricos en código binario (entre 0 y 1) a cada gen que interviene en la solución del problema. El conjunto formado por estos valores no será la solución al problema, pero conforman en los algoritmos genéticos un candidato inicial (en el tiempo o en la iteración cero) a ser la solución óptima del problema. A un candidato postulado a solución se le denomina individuo, los cuales operan en paralelo, es decir consideran en cada iteración del proceso un conjunto de soluciones a ser las mejores soluciones del problema que se resuelve y todas éstas configurarán una primera población genética de individuos. A partir de la población inicial, se generan las sucesivas poblaciones aplicando operadores denominados operadores genéticos de selección, cruce y mutación sobre los individuos de la generación o población anterior. Estos operadores tienen asignados distintos tipos de probabilidades, que caracterizan a los algoritmos genéticos como algoritmos heurísticos, no deterministas. Éste carácter es el que le da la gran potencialidad a los algoritmos genéticos, que los diferencia de métodos deterministas en que con los primeros se encuentran óptimos globales frente a óptimos locales de los métodos deterministas. Los algoritmos genéticos operan considerando un símil a la adaptación de los individuos al entorno y al principio de Darwin de la supervivencia de los mejores individuos. La supervivencia de las mejores soluciones está relacionada con seleccionar soluciones con buenos valores de la función objetivo del problema. En caso que el problema de optimización sea de minimización, es decir el problema a resolver trata de minimizar una función objetivo, el mejor individuo o solución óptima global será aquello cuyo valor de la función sea el de menor valor respecto a todas las otras posibles soluciones en el espacio total de búsqueda o conjunto total dónde se encuentra la solución óptima del problema, para el caso del modelo de transporte se busca minimizar el costo de envío desde los centros de distribución a los puntos de venta. Figura 13. Representación de los genes dentro de la cadena genética 0 1 0 0 0 1 1 0 Aleatorio entre 0 y 1 1 1 0 0 . . Gen n Fuente: Autores RODRIGUEZ, Camilo, ROMERO, Viviana. 42 4.3 SELECCIÓN Para la selección del mejor individuo se tuvo en cuenta el costo en que cada individuo de la población incurre al enviar la cantidad determinada. Utilizando el método de la ruleta se realizó esta selección, considerando la aptitud como el resultado de la resta del mayor costo entre todos los individuos y el costo correspondiente al de cada uno; esto llevará a que el de mayor aptitud corresponda al que tenía menor costo. El método de la ruleta, consiste en crear una ruleta en la que cada cromosoma tiene asignada una fracción del área total que es proporcional a su aptitud. Debido a que los individuos más aptos tienen asignada una mayor área de la ruleta, sus posibilidades de ser seleccionados para el paso siguiente son mejores que aquellos que tienen un área menor. Para este caso, fue necesario invertir el método, es decir tomar el mayor costo que es a su vez la mayor probabilidad y sustraerlo de la otras con el fin de variar las áreas y aumentar la probabilidad en el menor costo. 4.4 CRUCE El punto de cruce se determinó realizando un cruce básico, es decir, aleatoriamente y dependiendo de la probabilidad que se le asigne. Se eligió al azar un punto entre 1 y n (el largo del padre); se buscaron las conexiones en el cromosoma madre, entonces el hijo o la siguiente generación hereda desde el comienzo hasta el punto de corte del cromosoma la información del padre, y desde esa conexión hasta el final la información de la madre. Si no hay conexión se repite el proceso hasta encontrarla. Luego, se repite el proceso, pero comenzando con el cromosoma madre para encontrar el segundo hijo. Finalmente, se comparan los padres con sus generaciones y se eligen sólo los mejor evaluados. Figura 14. Punto de cruce en la cadena genética 1 1 0 0 0 1 0 1 PC 1 PC 2 1 1 0 1 . . PC n Fuente: Autores RODRIGUEZ, Camilo, ROMERO, Viviana. 4.5 MUTACION La mutación se realizó de manera aleatoria dependiendo de la probabilidad asignada. Si existe una mutación del centro de distribución 1 al punto de venta 1 se deben mutar todos los puntos de venta hasta n con el fin de que no se modifique la cantidad que se va a enviar. 43 4.6 DESARROLLO DEL MODELO EN CODIGO JAVA 2.0 El desarrollo del modelo de transporte en código Java 2.0 se conformó principalmente por 8 clases u objetos que son los encargados de darle el correcto funcionamiento al programa. Para desarrollar el programa del algoritmo fue necesario mejorar una primera versión que no involucraba la capacidad que cada camión podía transportar. El programa gráficamente se puede apreciar en el Anexo A., y se desarrolló un manual de funcionamiento para éste en el Anexo B. La primera clase solicita al usuario los datos iniciales de entrada como el número de individuos, el número de centros de distribución y puntos de venta y el número de generaciones. O también existe la opción de traer la información real de una base de datos que alimenta al programa. La segunda clase pide los datos específicos o puntuales necesarios para el problema tales como la demanda de los puntos de venta; la capacidad de producción de los centros de distribución; las distancias entre centros y puntos de venta; los costos de envío que incluyen el flete por unidad más los sueldos y seguros del conductor y sus ayudantes; la cantidad de kilómetros que se recorren en promedio por camión; y las probabilidades de cruce y mutación. De esta clase se derivan algunas otras. La siguiente clase es la capacidad de los camiones en donde se especifica por cada centro de distribución la cantidad de camiones disponibles y la capacidad que tienen con el fin de determinar si es necesario realizar uno o más viajes. La cuarta clase es la lista de datos que arroja el número de generaciones solicitadas indicando en cual de ellas está la matriz ideal. El quinto objeto es el de los resultados propiamente dichos, pues al seleccionar la matriz ideal se puede ver la solución. Aquí se aprecia la cadena genética y los costos desde cada centro de distribución a cada punto de venta, al igual que el número de viajes por cada punto de venta y el costo total del problema. La sexta clase calcula el tiempo de ejecución del programa en milésimas de segundo, es decir desde el momento en que se solicita que inicie, hasta cuando se desarrollan las operaciones del algoritmo genético. La siguiente clase, llamada vista, muestra los avisos ejecutando y detenido para determinar el momento en que el programa está desarrollando el algoritmo. Las anteriores clases eran clases gráficas. La última clase es la de operaciones que se desarrolla por medio de programación concurrente o multihilo. Las demandas por punto de venta se reparten de manera aleatoria en cada una de las distribuidoras. A partir de esto se hace la conversión de entero a binario para poder tener una cadena genética. Las cantidades solicitadas por los puntos de venta son constantes, varían son las cantidades que cada centro de distribución envía a los puntos de venta para minimizar los costos. 44 Con la cadena genética conformada se realizan todas las operaciones de los algoritmos genéticos. A partir de la primera generación se calculan los costos de los individuos, así se puede realizar por la selección por el método de la ruleta invertida. El punto de cruce se determina de manera aleatoria y el cruce se da de acuerdo con la probabilidad asignada. La mutación también es aleatoria y varia de acuerdo con la probabilidad asignada. A continuación se presenta la descripción de las clases en formato UML. En el Anexo B se presenta la descripción. Tabla 3. Formato UML Empresa de Repartos Fuente: Autores RODRIGUEZ Camilo, ROMERO, Viviana. 45 Tabla 4. Formato UML Datos Específicos Fuente: Autores RODRIGUEZ Camilo, ROMERO, Viviana. 46 Tabla 5. Formato UML Operaciones Fuente: Autores RODRIGUEZ, Camilo, ROMERO, Viviana Tabla 6. Formato UML Tiempo Fuente: Autores RODRIGUEZ Camilo, ROMERO, Viviana. Tabla 7. Formato UML Lista de datos Fuente: Autores RODRIGUEZ, Camilo, ROMERO, Viviana 47 Tabla 8. Formato UML Vista Fuente: Autores RODRIGUEZ Camilo, ROMERO, Viviana. Tabla 9. Formato UML Mostrar Datos Fuente: Autores RODRIGUEZ Camilo, ROMERO, Viviana. Tabla 10. Formato UML Distribuidoras Fuente: Autores RODRIGUEZ Camilo, ROMERO, Viviana. 48 El formato UML del programa se aprecia gráficamente a continuación. Gráfico 1. Formato UML del programa de AG UML EMPRESA REPARTOS DATOS ESPECIFICOS DISTRIBUIDORAS signal OPERACIONES TIEMPO VISTA LISTA DE DATOS Clase en 1 estado Clase en 1 estado MOSTRAR DATOS Fuente: Autores RODRIGUEZ, Camilo, ROMERO, Viviana 49 5 CASOS DE PRUEBA Al desarrollar las dos versiones del programa se pudo apreciar que en la segunda los costos mejoraron mientras que el tiempo de ejecución aumentó. Se realizaron varios casos de prueba con la información de la base de datos que tiene registrada el programa que se muestra en los cuadros a continuación. Para el programa de simulación estudiantil fueron introducidos los mismos datos y el costo único fue de $2.517.850. A continuación se mostrarán los resultados más representativos de que arrojaban las versiones del programa al variar las probabilidades de cruce y mutación. Tabla 11. Datos iniciales del problema Cantidad de Individuos Centros de distribución Puntos de venta Generaciones 50 20 15 100 Fuente: Autores RODRIGUEZ, Camilo, ROMERO, Viviana Tabla 12. Demanda de cada punto de venta Tabla de demanda Punto de venta Demanda 1 800 2 750 3 650 4 850 5 900 6 200 7 300 8 150 9 600 10 450 11 400 12 350 13 500 14 550 15 700 Fuente: Autores RODRIGUEZ, Camilo, ROMERO, Viviana 50 Tabla 13. Capacidades de cada centro de distribución Tabla capacidad planta Distribuidora Capacidad 1 2000 2 2500 3 2100 4 2300 5 2000 6 2500 7 1500 8 2200 9 1900 10 2800 11 3000 12 2300 13 2900 14 2200 15 2400 16 2700 17 2800 18 2500 19 2100 20 2600 Fuente: Autores RODRIGUEZ, Camilo, ROMERO, Viviana Tabla 14. Distancias entre los centros de distribución y los puntos de venta Tabla de distancias (m) Distribuidora 1 PV1 PV2 PV3 PV4 PV5 PV6 PV7 PV8 PV9 PV10 PV11 PV12 PV13 PV14 PV15 20 24 8 2 18 3 19 13 30 14 7 9 26 2 3 13 12 20 19 13 3 19 18 3 20 17 6 18 5 10 9 12 12 9 17 7 2 18 6 4 4 21 3 5 19 9 3 11 15 13 20 5 18 40 5 4 13 19 13 20 14 17 14 6 14 5 9 15 12 10 12 18 18 3 6 15 3 11 11 7 9 6 20 14 17 9 16 10 4 10 17 5 16 18 16 8 7 11 17 5 2 14 9 4 15 5 18 20 19 3 9 9 18 8 1 12 12 8 14 7 3 8 19 18 19 10 18 10 25 16 8 9 15 5 10 16 19 5 19 3 14 5 4 11 18 4 9 14 15 6 19 20 8 2 6 17 11 6 7 12 7 16 7 14 4 11 18 13 3 6 18 19 19 17 6 13 2 17 4 17 13 17 19 32 6 13 7 19 5 20 14 14 8 1 12 17 24 18 3 14 5 16 12 6 3 8 17 51 5 35 14 5 16 35 13 6 19 6 2 4 14 13 6 3 15 1 8 8 2 2 18 8 14 9 10 15 18 13 1 19 16 16 8 11 5 6 14 6 12 11 20 3 16 10 3 18 17 16 10 6 15 9 16 13 17 1 10 10 11 1 3 3 18 16 19 14 9 7 16 14 17 13 7 19 7 3 2 7 19 6 36 11 3 19 1 16 4 16 17 18 11 3 16 2 20 16 3 17 4 1 2 8 17 1 12 17 11 7 11 14 Fuente: Autores RODRIGUEZ, Camilo, ROMERO, Viviana Tabla 15. Costos de envío entre los centros de distribución y los puntos de venta Tabla de costos de envío ($) Distribuidora PV1 PV2 PV3 PV4 PV5 PV6 PV7 PV8 PV9 PV10 PV11 PV12 PV13 PV14 PV15 1 374 381 389 397 405 413 421 430 438 447 456 465 474 484 493 2 345 352 359 366 373 381 389 396 404 412 421 429 438 446 455 3 305 311 317 324 330 337 343 350 357 365 372 379 387 395 402 4 300 306 312 318 325 331 338 345 351 359 366 373 380 388 396 5 450 459 468 478 487 497 507 517 527 538 549 560 571 582 594 6 372 379 387 395 403 411 419 427 436 445 453 463 472 481 491 7 350 357 364 371 379 386 394 402 410 418 427 435 444 453 462 8 397 405 413 421 430 438 447 456 465 474 484 494 503 514 524 9 374 381 389 397 405 413 421 430 438 447 456 465 474 484 493 10 378 386 393 401 409 417 426 434 443 452 461 470 479 489 499 11 365 372 380 387 395 403 411 419 428 436 445 454 463 472 482 12 398 406 414 422 431 439 448 457 466 476 485 495 505 515 525 13 401 409 417 426 434 443 452 461 470 479 489 499 509 519 529 14 321 327 334 341 347 354 361 369 376 384 391 399 407 415 424 15 423 431 440 449 458 467 476 486 496 506 516 526 536 547 558 16 386 394 402 410 418 426 435 443 452 461 471 480 490 499 509 17 379 387 394 402 410 418 427 435 444 453 462 471 481 490 500 18 422 430 439 448 457 466 475 485 494 504 514 525 535 546 557 19 450 459 468 478 487 497 507 517 527 538 549 560 571 582 594 20 370 377 385 393 400 409 417 425 434 442 451 460 469 479 488 Fuente: Autores RODRIGUEZ, Camilo, ROMERO, Viviana Los resultados obtenidos después de ingresar los datos al modelo de transporte por algoritmo genético son los siguientes. Tabla 16. Resultados del modelo por Algoritmo Genético con probabilidad de cruce 99 y probabilidad de mutación 1 52 99 Probab. Cruce Algoritmo Genético 1 Primera versión Probab.mutación Costo total Tiempo duración (miliseg) Ejecución 1 $ 3.716.224 154547 Ejecución 2 $ 3.707.796 154422 Ejecución 3 $ 3.717.536 148250 Ejecución 4 $ 3.721.915 149359 Ejecución 5 $ 3.713.102 154460 Promedio $ 3.715.315 15,22 s Rango $ 14.119 0,6297 s 99 Probab. Cruce Algoritmo Genético 1 Segunda versión Probab.mutación Costo total Tiempo duración (miliseg) Ejecución 1 $ 3.702.974 1535472 Ejecución 2 $ 3.694.546 1532122 Ejecución 3 $ 3.704.286 1475804 Ejecución 4 $ 3.708.665 1499397 Ejecución 5 $ 3.699.852 1541022 Promedio $ 3.702.065 151,68 s Rango $ 14.119 6,52 s Fuente: Autores RODRIGUEZ, Camilo, ROMERO, Viviana Tabla 17. Resultados del modelo por Algoritmo Genético con probabilidad de cruce 99 y probabilidad de mutación 2 99 Probab. Cruce Algoritmo Genético 2 Primera versión Probab.mutación Costo total Tiempo duración (miliseg) Ejecución 1 $ 3.715.570 146453 Ejecución 2 $ 3.715.656 150203 Ejecución 3 $ 3.702.436 145875 Ejecución 4 $ 3.721.640 149258 Ejecución 5 $ 3.709.690 146111 Promedio $ 3.716.198 14,76 s Rango $ 19.204 0,4328 s 99 Probab. Cruce Algoritmo Genético 2 Segunda versión Probab.mutación Costo total Tiempo duración (miliseg) Ejecución 1 $ 3.704.110 1468931 Ejecución 2 $ 3.704.196 1512582 Ejecución 3 $ 3.690.976 1478153 53 Ejecución 4 Ejecución 5 Promedio Rango $ 3.710.180 $ 3.698.230 $ 3.701.538 $ 19.204 1522582 1475216 149,15 s 5,37 s Fuente: Autores RODRIGUEZ, Camilo, ROMERO, Viviana Tabla 18. Resultados del modelo por Algoritmo Genético con probabilidad de cruce 98 y probabilidad de mutación 1 98 Probab. Cruce Algoritmo Genético 1 Primera versión Probab.mutación Costo total Tiempo duración (miliseg) Ejecución 1 $ 3.722.759 153421 Ejecución 2 $ 3.721.367 147212 Ejecución 3 $ 3.718.671 152489 Ejecución 4 $ 3.711.845 151139 Ejecución 5 $ 3.721.556 156321 Promedio $ 3.719.240 15,21 s Rango $ 10.914 0,9109 s 98 Probab. Cruce Algoritmo Genético 1 Segunda versión Probab.mutación Costo total Tiempo duración (miliseg) Ejecución 1 $ 3.711.213 1532217 Ejecución 2 $ 3.709.821 1485212 Ejecución 3 $ 3.703.125 1493489 Ejecución 4 $ 3.700.299 1532113 Ejecución 5 $ 3.710.010 1556321 Promedio $ 3.706.894 151,99 s Rango $ 10.914 7,11 s Fuente: Autores RODRIGUEZ, Camilo, ROMERO, Viviana Tabla 19. Resultados del modelo por Algoritmo Genético con probabilidad de cruce 98 y probabilidad de mutación 2 98 Probab. Cruce Algoritmo Genético 2 Primera version Probab.mutación Costo total Tiempo duración (miliseg) Ejecución 1 $ 3.724.111 155238 Ejecución 2 $ 3.725.544 152149 54 Ejecución 3 Ejecución 4 Ejecución 5 Promedio Rango $ 3.722.667 $ 3.724.330 $ 3.728.178 $ 3.724.966 $ 5.511 151489 148214 148845 15,12 s 0,7024 s 98 Probab. Cruce Algoritmo Genético 2 Segunda version Probab.mutación Costo total Tiempo duración (miliseg) Ejecución 1 $ 3.712.565 1532654 Ejecución 2 $ 3.713.998 1495261 Ejecución 3 $ 3.711.121 1518489 Ejecución 4 $ 3.712.784 1458213 Ejecución 5 $ 3.716.632 1488835 Promedio $ 3.713.420 149,87 s Rango $ 5.511 7,44 s Fuente: Autores RODRIGUEZ, Camilo, ROMERO, Viviana Tabla 20. Resultados del modelo por Algoritmo Genético con probabilidad de cruce 95 y probabilidad de mutación 1 95 Probab. Cruce Algoritmo Genético 1 Primera version Probab.mutación Costo total Tiempo duración (miliseg) Ejecución 1 $ 3.729.002 149250 Ejecución 2 $ 3.728.418 148515 Ejecución 3 $ 3.729.773 149568 Ejecución 4 $ 3.728.990 152456 Ejecución 5 $ 3.727.709 147389 Promedio $ 3.728.778 14,94 s Rango $ 2.064 0,5067 s 95 Probab. Cruce Algoritmo Genético 1 Segunda version Probab.mutación Costo total Tiempo duración (miliseg) Ejecución 1 $ 3.717.456 1549252 Ejecución 2 $ 3.716.872 1548629 Ejecución 3 $ 3.718.227 1549368 Ejecución 4 $ 3.717.444 1531646 Ejecución 5 $ 3.716.163 1494389 Promedio $ 3.717.232 153,47 s Rango $ 2.064 5,50 s Fuente: Autores RODRIGUEZ, Camilo, ROMERO, Viviana 55 Tabla 21. Resultados del modelo por Algoritmo Genético con probabilidad de cruce 85 y probabilidad de mutación 1 85 Probab. Cruce Algoritmo Genético 1 Primera version Probab.mutación Costo total Tiempo duración (miliseg) Ejecución 1 $ 3.738.911 150047 Ejecución 2 $ 3.733.961 153214 Ejecución 3 $ 3.737.984 154921 Ejecución 4 $ 3.736.694 152553 Ejecución 5 $ 3.736.058 149528 Promedio $ 3.736.722 15,21 s Rango $ 4.950 0,5393 s 85 Probab. Cruce Algoritmo Genético 1 Segunda version Probab.mutación Costo total Tiempo duración (miliseg) Ejecución 1 $ 3.727.365 1510647 Ejecución 2 $ 3.722.415 1521456 Ejecución 3 $ 3.726.438 1565489 Ejecución 4 $ 3.725.148 1532478 Ejecución 5 $ 3.724.512 1474686 Promedio $ 3.725.176 152,10 s Rango $ 4.950 9,08 s Fuente: Autores RODRIGUEZ, Camilo, ROMERO, Viviana 56 6 ANALISIS DE RESULTADOS El algoritmo genético diseñado muestra como el costo y el tiempo de ejecución del programa varían de acuerdo a la probabilidad de mutación, de cruce y la cantidad de generaciones que desde un principio se definen. El tiempo de ejecución varía de acuerdo con el número de generaciones debido a que entre más generaciones se requieran hay mayor numero de individuos factibles en operación; esto se debe a que el programa debe realizar la selección, el cruce y la mutación para toda la población y todas las generaciones. Al ejecutar el programa del Algoritmo Genético el costo fue más alto comparando con el lenguaje de simulación estudiantil, esto se debe a que el primero involucra más variables las cuales son necesarias para la aproximación a una solución real. Si se suprimen las distancias, el precio de la gasolina, y los galones por kilómetro el resultado suele ser muy similar al simulado por el método estudiantil. Es decir que la base de ambos programas se considera la misma pero se hace más real teniendo en cuenta todas las nuevas variables que se involucran. Cuando el programa estaba corriendo y se desarrollaron los casos de prueba se pudo apreciar que la validación de las restricciones están bien ejecutadas; es decir que el programa verifica que se cumplan todas las restricciones. Con la segunda versión se pudo escoger el número de camiones y la capacidad que cada uno de ellos podía transportar. Los cambios en costos fueron evidentes, menos costos teniendo en cuenta los tipos de camiones y sus capacidades, pero el tiempo de ejecución aumentó, pues estuvo entre cuarenta segundos y dos minutos veinte segundos. Versión 1 Tabla 22. Resultados de costos primera versión Costo ($) Probabilidad cruce Probabilidad mutación 1 2 3 85 90 95 97 $ 3.736.722 $ 3.738.242 $ 3.739.245 $ 3.731.216 $ 3.732.108 $ 3.732.760 $ 3.728.778 $ 3.730.018 $ 3.730.800 $ 3.721.556 $ 3.721.998 $ 3.722.628 Fuente: Autores RODRIGUEZ, Camilo, ROMERO, Viviana Gráfico 2. Costos primera versión 57 98 99 $ 3.719.240 $ 3.715.315 $ 3.724.966 $ 3.716.198 $ 3.725.578 $ 3.716.570 Costos Primera Versión Prob mut 1 Prob mut 2 Prob mut 3 $ 3.745.000 ($) $ 3.740.000 $ 3.735.000 $ 3.730.000 $ 3.725.000 $ 3.720.000 $ 3.715.000 $ 3.710.000 85 90 95 97 98 99 (Prob. cruce) Fuente: Autores RODRIGUEZ, Camilo, ROMERO, Viviana Tabla 23. Resultados de tiempo primera versión Tiempo (s) Probabilidad cruce Probabilidad mutación 1 2 3 85 90 95 97 98 99 15,21 15,17 15,06 15,29 15,11 15,24 14,94 15,02 15,46 14,86 15,22 15,06 15,21 15,12 14,98 15,22 14,76 15,17 Fuente: Autores RODRIGUEZ, Camilo, ROMERO, Viviana 58 Gráfico 3. Tiempo primera versión Tiempo Primera Versión Prob mut 1 Prob mut 2 Prob mut 3 15,60 15,40 (s) 15,20 15,00 14,80 14,60 14,40 85 90 95 97 98 99 (Prob. cruce) Fuente: Autores RODRIGUEZ, Camilo, ROMERO, Viviana Versión 2 Tabla 24. Resultados de costo segunda versión Costo ($) Probabilidad cruce Probabilidad mutación 1 2 3 85 90 95 $ 3.725.176 $ 3.721.100 $ 3.725.801 $ 3.721.425 $ 3.726.213 $ 3.722.645 97 $ 3.717.232 $ 3.715.842 $ 3.717.616 $ 3.716.794 $ 3.718.756 $ 3.717.646 Fuente: Autores RODRIGUEZ, Camilo, ROMERO, Viviana 59 98 99 $ 3.706.894 $ 3.702.065 $ 3.713.420 $ 3.701.538 $ 3.715.574 $ 3.702.858 Gráfico 4. Costos segunda versión Costos Segunda Versión Prob mut 1 Prob mut 2 Prob mut 3 $ 3.730.000 $ 3.725.000 ($) $ 3.720.000 $ 3.715.000 $ 3.710.000 $ 3.705.000 $ 3.700.000 $ 3.695.000 85 90 95 97 98 99 (Prob. cruce) Fuente: Autores RODRIGUEZ, Camilo, ROMERO, Viviana Tabla 25. Resultados de tiempo segunda versión Tiempo (s) Probabilidad cruce Probabilidad mutación 1 2 3 85 90 95 97 98 99 152,10 153,26 152,41 150,25 151,89 153,22 153,47 151,54 152,80 151,69 152,45 152,67 151,99 149,87 152,42 151,68 149,15 151,62 Fuente: Autores RODRIGUEZ, Camilo, ROMERO, Viviana 60 Gráfico 5. Tiempo segunda versión Tiempo Segunda Versión Prob mut 1 Prob mut 2 Prob mut 3 154,00 153,00 (s) 152,00 151,00 150,00 149,00 148,00 85 90 95 97 98 99 (Prob. cruce) Se evidencia con el resumen de los resultados que a menor probabilidad de cruce mayor es el costo; referente al tiempo la variación no fue mucha, pues se manejó el mismo número de generaciones. A pesar de haber obtenido estas tendencias en los resultados no se puede concluir que a menor probabilidad de cruce, mayor será el costo pues sería necesario realizar un análisis estadístico profundo. A continuación se presentaran dos tablas donde se comparan los resultados de las dos versiones frente a la variable costo y al tiempo Tabla 26. Comparación de los costos entre la dos versiones del programa de algoritmos genéticos Costo ($) Probabilidad de cruce 95 97 90 1 -0,309% -0,271% -0,310% 2 -0,333% -0,286% 3 Promedio -0,349% -0,330% -0,271% -0,276% Probabilidad mutación 85 Promedio 98 99 -0,154% -0,332% -0,357% -0,289% -0,332% -0,140% -0,310% -0,394% -0,299% -0,323% -0,322% -0,134% -0,142% -0,269% -0,303% -0,369% -0,373% -0,286% Fuente: Autores RODRIGUEZ, Camilo, ROMERO, Viviana. 61 Tabla 27. Comparación de los tiempos entre las dos versiones del programa de algoritmos genéticos Probabilidad mutación Tiempo (s) Probabilidad de cruce 95 97 98 99 Promedio 85 90 1 900,28% 882,67% 926,97% 920,79% 899,15% 896,51% 904,395% 2 910,28% 905,23% 908,92% 901,64% 891,28% 910,63% 904,665% 3 912,02% 905,38% 888,36% 913,75% 917,49% 899,47% 906,077% Promedio 907,527% 897,759% 908,082% 912,061% 902,641% 902,205% Fuente: Autores RODRIGUEZ, Camilo, ROMERO, Viviana Gráfico 6. Variación del costo entre las dos versiones del programa Variación de costos entre las versiones Promedio 0,00% -0,05% 85 90 95 97 -0,10% -0,15% -0,20% -0,25% -0,30% -0,35% -0,40% Prob cruce Fuente: Autores RODRIGUEZ, Camilo, ROMERO, Viviana 62 98 99 Grafico 7. Variación de tiempo entre las dos versiones del programa. Variación de tiempo entre las versiones Promedio 915,0% 910,0% 905,0% 900,0% 895,0% 890,0% 85 90 95 97 98 99 Prob cruce Fuente: Autores RODRIGUEZ, Camilo, ROMERO, Viviana A partir de los resultados obtenidos anteriormente se comprueba la mejora en la segunda versión del programa. Los costos se redujeron en promedio entre 0.15 y 0.35%, mientras que el tiempo de ejecución del programa aumentó casi en un 1000%, lo que se puede interpretar como ineficiencia pero si se consideran la cantidad de generaciones, al igual que las dimensiones del problema, es razonable que su ejecución sea de 2 minutos en promedio. Al comparar los diferentes resultados obtenidos se determinó que para que éstos fueran más confiables la probabilidad de cruce no debía ser menor a 80%. Y se verificó que la probabilidad de mutación no debía ser mayor a 10%. La probabilidad de mutación más recomendable está en el rango de 1 - 3%, debido a que así se garantiza el eficiente funcionamiento del algoritmo al variar el individuo de una manera progresiva. El lenguaje de simulación estudiantil evalúa el problema teniendo en cuenta tres diferentes métodos, el resultado mediante el método de Vogel es aproximado al del programa del algoritmo genético, evidenciándose así que aunque es más real es muy aproximado a uno ideal, lo que hace pensar que tiene resultados mas óptimos. Al realizar las diferentes pruebas al algoritmo de pudo determinar que la función objetivo evalúa cada individuo de una manera adecuada, es fácil su ejecución y es flexible para adoptar nuevas variables. Además el programa resulto ser claro y explicito para su uso. 63 7 CONCLUSIONES Y RECOMENDACIONES Los algoritmos genéticos son técnicas de optimización muy flexibles y robustas que imitan los procesos de evolución natural de organismos complejos y tienen una gran capacidad para explorar en paralelo el espacio de soluciones en lugar de trabajar sobre un punto único, como hacen los algoritmos basados en el cálculo. Estos algoritmos establecen primero una relación entre una solución concreta y su codificación, después se crea una población inicial de soluciones y se le somete a procesos cíclicos de selección, cruce y mutación, mejorando la calidad de las soluciones en las próximas generaciones hasta alcanzar una solución óptima del problema. Las diferencias que existen entre los algoritmos genéticos y los métodos tradicionales tales como la esquina noreste, costo mínimo, método de Vogel, método de los multiplicadores entre otros se pueden resumir en cuatro aspectos: los AG trabajan con una codificación del conjunto de parámetros, no con los propios parámetros; buscan en una población de puntos, no en un solo punto; usan la información del resultado de cada evaluación (función objetivo), no sus derivadas; y utilizan reglas de transición probabilísticas no determinísticas. Para este modelo de transporte asociado al tipo de optimización del sistema de una red de centros de distribución y puntos de venta se determinaron algunas variables básicas representadas en parámetros de entrada tales como la capacidad de producción de los centros de distribución; la demanda exigida por los puntos de venta; la distancia entre estos centros de distribución y puntos de venta; la cantidad y capacidad de los camiones; y los costos de envío. La función de selección de los individuos se realizó por medio del método de la ruleta que consiste en crear una ruleta en la que cada cromosoma tiene asignada una fracción del área total que es proporcional a su aptitud. Debido a que los individuos más aptos tienen asignada una mayor área de la ruleta, sus posibilidades de ser seleccionados para el paso siguiente son mejores que aquellos que tienen un área menor. En el caso de minimizar como es en este modelo de transporte se utilizó el método pero de manera invertida, es decir, se restó el mayor de costo de todos los demás con el fin de tener una mayor probabilidad con el menor costo. La función de decodificación del modelo de transporte permitió generar los valores enteros de las cantidades que representan los diferentes cromosomas que constituyen cada individuo en código binario, agrupándolos en una matriz. Las cantidades corresponden a los envíos desde cada centro de distribución a cada punto de venta. La evaluación de esta función se realiza por medio de la comprobación de las cantidades solicitadas por los puntos de venta a cada centro de distribución. La función objetivo del modelo del problema buscaba minimizar el costo de envío de las unidades demandadas desde cada centro de distribución a cada punto de venta, adicionando la razón que existe entre el número de viajes por camión por la distancia que recorre cada camión desde cada centro de distribución hasta cada punto de venta y una constante que representa el rendimiento de un galón de combustible por kilómetro, por el 64 precio de cada galón. Esta función está sujeta a unas condiciones que se deben cumplir tales como los costos unitarios de envío que deben ser mayores que cero; la cantidad de unidades enviadas desde el centro de distribución debe ser menor o igual a la capacidad total del centro de distribución; el número de camiones disponibles para los centros de distribución debe ser mayor que cero y finalmente la cantidad de unidades demandadas por el punto de venta debe ser menor o igual a la capacidad total del centro de distribución. Los operadores genéticos empleados para el desarrollo del modelo fueron el cruce y la mutación que por medio de asignaciones aleatorias permitieron obtener generaciones óptimas. El modelo de transporte se desarrolló en código Java 2.0 y estuvo conformado por algunas clases u objetos. Una de ellas solicita al usuario la cantidad de individuos, el número de centros de distribución, el número de puntos de venta, al igual que el número de generaciones que se desee; se puede también utilizar la información real de una base de datos. Los datos específicos se deben introducir tales como demandas de puntos de venta, capacidad de producción de los centros de distribución, distancia entre éstos, costos de envío, cantidad y capacidad de los camiones para cada centro de distribución, y otros datos auxiliares como el precio del combustible y las probabilidades de los operadores entre otros. Se deben acceder los datos y ejecutar el programa que en un tiempo determinado arrojará la solución óptima frente a costos dentro de las generaciones solicitadas. Con este modelo de transporte se pueden realizar diversas pruebas variando las probabilidades de cruce y mutación; se determinó que a menor probabilidad de cruce mayor será el costo. A pesar de la tendencia de los resultados hacia la disminución de costos, es necesario realizar un análisis estadístico profundo que permita concluir las variaciones con respecto a las probabilidades. Si se comparan estos resultados del algoritmo genético con otros de un programa de simulación estudiantil se obtienen mayores costos en el primero debido a que éste involucra distancias, por ende los costos de combustible, al igual que las capacidades y cantidades de los camiones que permiten optimizar los envíos, es decir, contemplar la opción de hacer más viajes en los camiones para cumplir con las demandas de los puntos de venta. A partir de esto se puede sugerir subcontratar el servicio de transporte pues se cubren los costos de envío sólo hasta los puntos de venta y no ida y regreso, a pesar que sea necesario realizar varios viajes de los camiones. La aplicación que pueden tener los algoritmos genéticos a los problemas de transporte pueden ser diversas; su complejidad está determinada por el número de variables y las condiciones que se deseen involucrar en el modelo. Para el caso de este proyecto se consideraron algunas que permitieron comparar resultados y obtener soluciones óptimas y cercanas a la realidad, pero el ideal sería poder involucrar el mayor número variables y de gran importancia tales como el tiempo, las especificaciones de los productos a transportar, imprevistos, entre otras. Igualmente, el uso de técnicas computarizadas facilita los cálculos y reduce el tiempo de estos mismos; para el caso de este proyecto de grado el programa desarrollado fue eficiente y de uso sencillo y claro. 65 BIBILOGRAFIA CAMPOS, Javier. Algoritmos Genéticos, 1999. www.lsi.upc.es/~iea/transpas/9_geneticos/. Septiembre 5 de 2003 Cómo funciona el algoritmo genético?, 2000. http://www.geocities.com/aguilar_2000/ALGORITMOS_GENETICOS/algoritmo_genetico.h tml. Septiembre 10 de 2003 CONDARCO,Primitivo, Algoritmos Genéticos, 2001. www.bv.umsanet.edu.bo/revistas/ingenieria/numero01/articulos/modelos.htm. Septiembre 10 de 2003 COSTA, Carlos, Algoritmos Genéticos, 1997.ccp.servidores.net/genetico.html. Agosto 25 de 2003 ENCICLOPEDIA LIBRE UNIVERSAL, 1997. http://enciclopedia.us.es/wiki.phtml?title= Algoritmos+gen% E9ticos. Septiembre 2 de 2003 MARTI, Rafael. Algoritmos Genéticos, 1992.www.uv.es/~rmarti/genet.html. Agosto 23 de 2003 MARTINEZ José J. Introducción a la Informática Evolutiva. Editorial Universal. España: 1999, 10-50p. MERELO, Juan J. Algoritmos Genéticos, 1994.http://geneura.ugr.es/~jmerelo. Agosto 22 de 2003 PAREJO Carmen Cortés. Tesis Algoritmos Genéticos y problemas de visibilidad. Universidad de Sevilla. 1996. PÉREZ Freddy. Inteligencia Artificial. Universidad de Puerto Rico. 1998 PINNINGHOFF, Maria Angélica. Recorridos Óptimos de Líneas de Transporte Público Usando Algoritmos Genéticos http://www.inf.udec.cl/revista/down09.html. Septiembre 2 de 2003 REVISTA UNIVERSIDAD DE MEDELLÍN, Volumen 23, Enero – Marzo 77, Artículo Modelo de transporte oficina de planeamiento vial de Venezuela. SANTO ORCERO, David. Técnicas de Selección.1 997. www.orcero.Org/irbis//disertacion/ node200.html. Agosto 27 de 2003 SCHULTZ, Alan C, Algoritmos Genéticos, 2001, http://www.aic.nrl.navy.mil/galist. Septiembre 10 de 2003 TAHA, Hamdy, Investigación de operaciones, Sexta Edición, Editorial Alfaomega, España: 1995, Capitulo 5. 66 WINTER, Gabriel, Optimización Global en Logística, http://ceani.ulpgc.es/reports/logistica/ceanilogistica.html. Septiembre 30 de 2003 67 2000. ANEXO A. MANUAL DE FUNCIONAMIENTO DEL PROGRAMA Ventana 1 Al ejecutar el programa desde el JCreator se abre la primera ventana la cual permite ingresar por pantalla la cantidad de individuos que se deseen, la cantidad de centros de distribución al igual que la cantidad de puntos de venta. Por último se debe escribir la cantidad de generaciones. El botón llamado “Caso real” trae la información de una base de datos creada en Access para no tener que ingresar todos los datos cada vez que se requiera. Para continuar se debe dar clic en el botón iniciar. 68 Ventana 2 Cuando no se requiera el caso real, se deben ingresar los datos por pantalla, para este fin la ventana 2 debe ser utilizada. Esta ventana está dividida en seis tablas. Tabla de demanda: Se debe ingresar la demanda para cada punto de venta, el total de estos fue ingresado mediante la ventana 1 Tabla de capacidad de la planta: Se debe ingresar la capacidad de cada punto de venta; se deben tener en cuenta las restricciones. Tabla de camiones disponibles: Para cada centro de distribución se deben escribir la cantidad total de los camiones que se tienen disponibles. Posteriormente haciendo clic en el botón “capacidad camiones” se podrán ingresar para cada camión su capacidad respectiva. Tabla de distancias: Esta tabla funciona como una matriz; el tamaño está determinado por la cantidad de centros de distribución y el número de puntos de venta, donde cada posición es la distancia que existe desde un centro de distribución a un punto de venta determinado. Tabla de costos de envío: Tiene las mismas características de la Tabla de distancias pero se debe ingresar los costos unitarios de envió. Información adicional: En estos campos se debe digitar los Km que el camión alcanza a recorrer con un galón de combustible, el precio del galón del combustible. Para la probabilidad de cruce se aconseja escribir un valor mayor de 80% y para la probabilidad de mutación debe ser máximo 10%. Una vez ingresada esta información se debe dar clic en el botón “Accesar datos”. Una vez realizado el paso anterior se activa el botón “Ejecutar” y se hace clic para correr el programa. Cuando el programa está en ejecución en la parte superior derecha el programa se indica esta acción con letras rojas. También, si es necesario detener la ejecución se tiene activado dicho botón. Cuando el programa detiene su ejecución se activan dos nuevos botones, botón “Solución” y “Renombrar”. 69 Al hacer clic en el botón “Solución” se activa la ventana 3. Ventana 3 Se observa una lista de datos para cada generación y dos botones, “Cerrar” y “Ver solución”. El primero cierra la ventana, el segundo abre la siguiente ventana. 70 Ventana 4 La ventana solución muestra en 4 tablas los resultados de la ejecución del algoritmo. Tabla genética: muestra la cantidad a enviar desde cada centro de distribución a cada punto de venta pero sin codificar, es decir, muestra el cromosoma. Tabla de carga: muestra en números enteros la cantidad a enviar. Tabla de costos: En esta tabla se puede observar el costo en que se incurre para enviar la cantidad de la tabla de carga. Tabla de viajes: Muestra cuantos recorridos tiene que realizar cada camión para cumplir con la demanda. En la parte superior se observa el costo de transporte, el costo de envío y por ende los costos totales. 71 Se tiene la opción de guardar esta información; para este proceso se cuenta con la ventana 5, en donde se guardan los datos en pantalla de D.O.S. 72 Cuando el botón “Renombrar” está activado en la ventana 2 se puede recurrir a esta opción la cual permite volver a ejecutar el programa incluso cambiando algunos datos. 73 ANEXO B. DESCRIPCION DEL FORMATO UML UML (LENGUAJE DE MODELADO UNIFICADO) Es un lenguaje de modelado visual que tiene como propósito el modelado orientado a objetos y es utilizado para especificar, visualizar, construir y documentar un sistema de software; también se utiliza para entender, diseñar, configurar, mantener y controlar la información sobre los sistemas construidos. Existían diversos métodos y técnicas orientadas a objetos, con muchos aspectos en común pero utilizando distintas notaciones, lo que traía como consecuencia algunos inconvenientes para el aprendizaje, aplicación, construcción y uso de herramientas; esto generó la creación del UML como estándar para el modelamiento de sistemas de software principalmente, pero con posibilidades de ser aplicado a todo tipo de proyectos. Objetivos del UML • • • UML es un lenguaje de modelado de propósito general que pueden usar todos los modeladores. No tiene propietario y está basado en el común acuerdo de gran parte de la comunidad informática. Ser tan simple como sea posible pero manteniendo la capacidad de modelar toda la gama de sistemas que se necesita construir. UML necesita ser lo suficientemente expresivo para manejar todos los conceptos que se originan en un sistema moderno. Imponer un estándar mundial. Los conceptos y modelos de UML pueden agruparse en las siguientes áreas conceptuales: • • • • • Estructura estática Comportamiento dinámico Construcciones de implementación Organización del modelo Mecanismos de extensión La estructura utilizada para la descripción del algoritmo genético programado corresponde a la estática, en donde se debe tener bien definido su universo, centrándose en los conceptos claves de la aplicación, sus propiedades internas, y las relaciones entre cada una de ellas. Los conceptos de la aplicación son modelados como clases, cada una de las cuales describe un conjunto de objetos que almacenan información y se comunican para implementar un comportamiento. La información que almacena es modelada como atributos; la estructura estática se expresó mediante diagrama de clases. 74 En el gráfico 1 se observa un individuo por fuera del universo lo que indica que es un actor principal representando una persona que utiliza el programa. El cubo que encierra las señales representa el ambiente computacional en donde se desarrolló el algoritmo genético. Las diferentes clases están representadas por los rectángulos en donde cada uno está dividido en tres partes; la primera parte contiene el nombre de la clase, la segunda contiene las variables que se utilizaron en esta clase y la tercera parte nombra las funciones. Las clases están unidas por: Líneas continúas Líneas continúas con terminación en flecha Sucesión de líneas con terminación en flecha. Las líneas continuas representan la asociación que tiene una clase con la otra, es decir, una conexión bidireccional entre ellas; las líneas continuas con terminación en flecha representan la dependencia que tiene una clase con otra. Por último, la sucesión de líneas con terminación en flecha representa el requerimiento solicitado por una clase hacia la otra. La palabra “signal” hace relación a la señal que se le debe transmitir para que la siguiente clase funcione. Una clase puede llamarse a si misma como es evidente en el caso de la clase “mostrar datos”. El gráfico 1 es en resumen, una vista estática de las clases que tiene el algoritmo genético diseñado y programado en un lenguaje orientado a objetos, además, muestra la relación que existe entre las diferentes clases utilizadas. 75