• No se han encontrado resultados

Optimización de un sistema de producción Kanban implementando un algoritmo evolutivo multiobjetivo

N/A
N/A
Protected

Academic year: 2020

Share "Optimización de un sistema de producción Kanban implementando un algoritmo evolutivo multiobjetivo"

Copied!
174
0
0

Texto completo

(1)Optimización de un sistema de producción Kanban implementando un algoritmo evolutivo multiobjetivo. Trabajo de Tesis Presentado al Departamento de Ingenierı́a Industrial por. Carlos Andrés Valderrama Andrade. Para optar al Tı́tulo de Ingeniero Industrial. Departamento de Ingenierı́a Industrial Universidad de los Andes Marzo 25, 2004.

(2) Optimización de un sistema de producción Kanban implementando un algoritmo evolutivo multiobjetivo. Aprobado por:. Eliécer Gutierrez, M. Sc., Asesor. Fecha de Aprobación.

(3) II.03(2)134. ”The essence of knowledge is, having it, to apply it; not having it, to confess your ignorance.” Confucius.. iii.

(4) II.03(2)134. RECONOCIMIENTOS. Agradezco el apoyo y los consejos de mis padres, la excelente e invaluable asesorı́a de Eliécer Gutierrez, las múltiples ayudas de José Tiberio Hernández y Roberto Zarama para lograr sacar adelante este proyecto, de Natalia Santamarı́a con la elaboración del documento. Un agradecimiento especial a mi amigo Diego Infante, quien siempre estuvo allı́ tendiéndome la mano, apoyándome. BÑ, un apoyo incondicional, una amistad excepcional, muchas gracias.. iv.

(5) II.03(2)134. RESUMEN. Este documento ilustra la optimización de un sistema Kanban mediante un algoritmo evolutivo multiobjetivo. El algoritmo multiobjetivo optimiza con base en simulaciones del sistema de producción Kanban (i.e. metodologı́a de optimización de la simulación). Se presentan experimentos con número de estaciones variable al igual que los tiempos de servicio, arribo y el número máximo de tarjetas, se trata de optimizar la cantidad de Kanbans (tarjetas) entre estaciones. Para esto se utilizan clases en java que realicen la simulación y otras para desarrollar el algoritmo optimizador. Ası́ se prueba el desempeño con diversas configuraciones del sistema encontrando aproximaciones a las fronteras eficientes en cada iteración. Se obtienen resultados que permiten una mayor comprensión de los sistemas Kanban y las bondades de la optimización utilizando simulación y algoritmos evolutivos.. v.

(6) II.03(2)134. TABLA DE CONTENIDO DEDICATORIA. III. RECONOCIMIENTOS. IV. RESUMEN. V. LISTA DE TABLAS. VIII. LISTA DE FIGURAS. X. I.. 1. INTRODUCCIÓN. II. PLANTEAMIENTO DEL PROBLEMA. 3. 2.1. Descripción del problema . . . . . . . . . . . . . . . . . . . . . . . .. 3. 2.2. Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 5. III. MARCO TEÓRICO. 6 . . . . . . . . . . . . . . . . . .. 6. 3.2. Optimización multiobjetivo . . . . . . . . . . . . . . . . . . . . . . .. 7. 3.1. Optimización utilizando simulación. 3.3. Algoritmos genéticos multiobjetivo . . . . . . . . . . . . . . . . . . . 12 3.4. Non-Dominated Sorting Genetic Algorithm (NSGA-II) . . . . . . . . 14 3.5. Heurı́stica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 3.6. Estadı́sticos de desempeño . . . . . . . . . . . . . . . . . . . . . . . 19 IV. IMPLEMENTACIÓN. 23. 4.1. Representación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 4.2. Función de adaptabilidad . . . . . . . . . . . . . . . . . . . . . . . . 25 4.3. Dominancia Estocástica . . . . . . . . . . . . . . . . . . . . . . . . . 28 4.4. Herramientas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35. vi.

(7) 4.4.1. Librerı́as . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 4.4.2. Modificaciones y ajustes a las librerı́as . . . . . . . . . . . . . 38 4.4.3. Utilización de las librerı́as . . . . . . . . . . . . . . . . . . . . 40 V. EXPERIMENTACIÓN. 46. 5.1. Diseño de los experimentos . . . . . . . . . . . . . . . . . . . . . . . 46 5.2. Calibración y selección de parámetros . . . . . . . . . . . . . . . . . 51 5.3. Calibración de la simulación . . . . . . . . . . . . . . . . . . . . . . 57 5.4. Análisis de resultados . . . . . . . . . . . . . . . . . . . . . . . . . . 62 5.4.1. Comportamiento de la herramienta . . . . . . . . . . . . . . 62 5.4.2. Análisis experimental . . . . . . . . . . . . . . . . . . . . . . 66 VI. CONCLUSIONES E INVESTIGACIÓN FUTURA Apéndice A.. — PARÁMETROS EXPERIMENTOS. 99 104. Apéndice B. — RESULTADOS NUMÉRICOS DE LAS FRONTERAS EFICIENTES 106 Apéndice C.. — CÓDIGO CALIBRACIÓN SIMULACIÓN. 127. Apéndice D.. — CÓDIGO DISTRIBUCIÓN T-STUDENT. 132. Apéndice E.. — CÓDIGO HEURÍSTICA EN JAVA. 137. Apéndice F.. — CÓDIGO HERRAMIENTA EN JAVA. 146. REFERENCIAS. 161. vii.

(8) II.03(2)134. LISTA DE TABLAS 1.. Parámetros modelos A, B y C . . . . . . . . . . . . . . . . . . . . . . 47. 2.. Determinación del número máximo de Tarjetas entre estaciones . . . 48. 3.. Casos calibración . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51. 4.. Resultados calibración herramienta . . . . . . . . . . . . . . . . . . . 54. 5.. Parámetros herramienta . . . . . . . . . . . . . . . . . . . . . . . . . 55. 6.. Resultados experimentales condensados . . . . . . . . . . . . . . . . . 63. 7.. Resultados estadı́sticos de Mann-Whitney-Wilcoxon (ξW IP y ξT H ) . . 65. 8.. Cambios en W IP y T H en el caso 1 . . . . . . . . . . . . . . . . . . 66. 9.. Resultados fronteras eficientes de los casos 3,8 y 9 . . . . . . . . . . . 69. 10.. Resultados fronteras eficiente de los casos 1,4 y 5 . . . . . . . . . . . 72. 11.. Resultados fronteras eficiente de los casos 2,6 y 7 . . . . . . . . . . . 73. 12.. Tabla de cambios en T H y W IP para los casos 4,6 y 8 . . . . . . . . 74. 13.. Tabla de cambios en T H y W IP para los casos 5,7 y 9 . . . . . . . . 75. 14.. Promedios de cambios en las medidas de desempeño para los casos 4,6,8,5,7 y 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75. 15.. Resultados de los casos 2 y 3 . . . . . . . . . . . . . . . . . . . . . . . 77. 16.. Cambio relativo y estabilidad de los casos 1-9 (WIP) . . . . . . . . . 78. 17.. Cambio relativo y estabilidad de los casos 1-9 (Throughput) . . . . . 79. 18.. Modelo A primera parte con 4 estaciones . . . . . . . . . . . . . . . . 104. 19.. Modelo C con 10 estaciones . . . . . . . . . . . . . . . . . . . . . . . 105. 20.. Modelo B con 6 estaciones . . . . . . . . . . . . . . . . . . . . . . . . 105. 21.. Llegadas experimentos . . . . . . . . . . . . . . . . . . . . . . . . . . 105. viii.

(9) 22.. Resultados caso 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107. 23.. Resultados caso 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108. 24.. Resultados caso 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109. 25.. Resultados caso 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110. 26.. Resultados caso 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111. 27.. Resultados caso 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112. 28.. Resultados caso 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113. 29.. Resultados caso 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114. 30.. Resultados caso 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115. 31.. Resultados caso 10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116. 32.. Resultados caso 11 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117. 33.. Resultados caso 12 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118. 34.. Resultados caso 13 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119. 35.. Resultados caso 14 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120. 36.. Resultados caso 15 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121. 37.. Resultados caso 16 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122. 38.. Resultados caso 17 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123. 39.. Resultados caso 18 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124. 40.. Resultados caso 19 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125. 41.. Resultados caso 20 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126. ix.

(10) II.03(2)134. LISTA DE FIGURAS 1.. Sistema de producción Kanban . . . . . . . . . . . . . . . . . . . . .. 4. 2.. Modelo de Simulación . . . . . . . . . . . . . . . . . . . . . . . . . .. 7. 3.. Proceso de optimización utilizando simulación . . . . . . . . . . . . .. 8. 4.. Frontera de Pareto y conjunto óptimo de Pareto . . . . . . . . . . . .. 9. 5.. Mapeo realizado en la obtención de la frontera de Pareto . . . . . . . 11. 6.. Obtención de S 0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20. 7.. Muestra posibles conglomerados . . . . . . . . . . . . . . . . . . . . . 21. 8.. Representación del cromosoma . . . . . . . . . . . . . . . . . . . . . . 24. 9.. Recombinación de punto único . . . . . . . . . . . . . . . . . . . . . . 25. 10.. CDF y PDF medidas de desempeño cualquiera . . . . . . . . . . . . . 29. 11.. CDF y PDF baja diferencia de medias . . . . . . . . . . . . . . . . . 30. 12.. Gráfico de resultado de resta de CDF normal imposibilitando más de un cruce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32. 13.. Casos dominancia estocástica . . . . . . . . . . . . . . . . . . . . . . 33. 14.. CDF, PDF y muestra de lı́neas de prueba a σ . . . . . . . . . . . . . 34. 15.. Utilización librerı́as herramienta . . . . . . . . . . . . . . . . . . . . . 42. 16.. Utilización librerı́as herramienta . . . . . . . . . . . . . . . . . . . . . 43. 17.. Utilización librerı́as herramienta . . . . . . . . . . . . . . . . . . . . . 44. 18.. Diagrama funcionamiento de la herramienta . . . . . . . . . . . . . . 50. 19.. Gráficas comportamiento con S’ . . . . . . . . . . . . . . . . . . . . . 52. 20.. 0 Gráficas comportamiento con Smod . . . . . . . . . . . . . . . . . . . 53. 21.. Fronteras con varias semillas . . . . . . . . . . . . . . . . . . . . . . . 55. x.

(11) 22.. Correlación entre corridas . . . . . . . . . . . . . . . . . . . . . . . . 56. 23.. Muestra gráfica resultados con frontera eficiente seccionada . . . . . . 67. 24.. Gráficas fronteras eficientes de los casos 3,8 y 9 . . . . . . . . . . . . 68. 25.. Gráficas fronteras eficientes de los casos 1,4 y 5 . . . . . . . . . . . . 70. 26.. Gráficas fronteras eficientes de los casos 2,6 y 7 . . . . . . . . . . . . 71. 27.. Resultados frontera eficiente de los casos 10 y 11 . . . . . . . . . . . . 82. 28.. Gráficas fronteras eficientes de los casos 10,11 y 12 . . . . . . . . . . . 83. 29.. Resultados frontera eficiente del caso 12. 30.. Resultados casos 13 y 14 con Tarjetas aumentados . . . . . . . . . . . 87. 31.. Gráficas fronteras eficientes 13 y 14 . . . . . . . . . . . . . . . . . . . 88. 32.. Resultados casos 15 y 16 con Tarjetas reducidos . . . . . . . . . . . . 90. 33.. Gráficas fronteras eficientes 15 y 16 . . . . . . . . . . . . . . . . . . . 91. 34.. Resultados casos 17 y 18 con variación de cuellos de botella . . . . . . 93. 35.. Gráficas fronteras eficientes 17 y 18 . . . . . . . . . . . . . . . . . . . 94. 36.. Resultados casos 19 y 20 con variación de cuellos de botella . . . . . . 95. 37.. Gráficas fronteras eficientes 19 y 20 . . . . . . . . . . . . . . . . . . . 96. 38.. Dendrograma caso 14 . . . . . . . . . . . . . . . . . . . . . . . . . . . 103. xi. . . . . . . . . . . . . . . . . 84.

(12) II.03(2)134. Capı́tulo I. INTRODUCCIÓN El sistema de producción Kanban (del japonés kan-tarjetas, ban-señal [20]) fue implementado por Toyota alrededor de los años cincuenta, como una alternativa para controlar el material en flujo en una lı́nea de ensamble. La idea detrás de este sistema es que el proveedor o la bodega sólo debe enviar el material cuando sea necesario reduciendo el almacenamiento en el área de producción. Las estaciones de trabajo producen o entregan componentes sólo cuando reciben una autorización de una tarjeta indicando que más partes son necesarias para la producción. Una propiedad de este sistema es precisamente que permite controlar el trabajo en proceso (work-in-process), ya que su magnitud depende directamente de la cantidad de autorizaciones (Kanbans) disponibles, manteniendo un nivel de tasa de producción (throughput) objetivo. Cambios mı́nimos en la configuración de un sistema Kanban pueden afectar significativamente el trabajo en proceso y la tasa de producción. De hecho el cambio del número de tarjetas ocasiona variaciones significativas en estas dos medidas, alterándose el funcionamiento del sistema (i.e. dejando estaciones subutilizadas o estaciones con exceso de inventario de trabajo en proceso). De ahı́ la importancia de la determinación del número de tarjetas en un sistema Kanban. En la actualidad son prácticamente inexistentes los modelos analı́ticos para determinar el número óptimo de tarjetas para un sistema Kanban. Una de las herramientas más apropiadas para analizar estos sistemas, por su versatilidad y cercanı́a a casos reales, es la simulación. La simulación resulta verdaderamente útil para la determinación del número de tarjetas óptimo al vincularla con un algoritmo. 1.

(13) II.03(2)134 optimizador. Donde las variables a optimizar son el trabajo en proceso y la tasa de producción. La primera en un proceso de minimización y la segunda de maximización. Cabe anotar que en un sistema de producción se desea obtener la mayor tasa de producción con el menor inventario posible, lo que se perfila como un par de objetivos enfrentados. Esto motiva la propuesta de utilizar un algoritmo genético multiobjetivo para optimizar el número de tarjetas en un sistema Kanban a través de su simulación, con el fin de obtener soluciones con diferentes perfiles de los enteros en una frontera eficiente. Estos perfiles permiten al usuario tener la posibilidad de elegir, dentro de un conjunto de soluciones óptimas,1 la más conveniente según su criterio. Se realizan experimentos con los cuales se prueban las bondades de la herramienta y se dilucidan comportamientos interesantes en el sistema Kanban y los mecanismos de control.. 1. Ver Sección 3.2.2.. 2.

(14) II.03(2)134. Capı́tulo II. PLANTEAMIENTO DEL PROBLEMA 2.1.. Descripción del problema. Un sistema Kanban de única tarjeta consiste en un sistema de producción en cual el transporte del producto y su producción están condicionadas por la presencia de tarjetas entre cada una de las estaciones que autorizan dichas operaciones. En la Figura 1 tenemos un sistema de producción en lı́nea implementando el modelo Kanban. Como se puede apreciar, los Kanbans son los que dan la autorización tanto de transporte como de producción en el sistema y son un grupo único de tarjetas.1 En un sistema Kanban las partes pasan de una estación a otra, obedeciendo las autorizaciones y haciendo la respectiva cola. Antes de la primera estación se encuentra la cola en papel, que simplemente equivale a la materia prima que espera a que esté disponible la primera estación y que no se encuentra como tal fı́sicamente en la estación de trabajo. Los Kanbans entre la estación uno y la dos demandan la materia prima, que pasa a ser procesada por la estación uno, luego se pasa la autorización de transporte a la cola de la estación 2, donde se regresa la tarjeta tomada anteriormente y se recibe una nueva autorización de producción de los Kanbans entre las estaciones dos y tres. Ası́ continúa el sistema hasta llegar a la estación seis, en donde se tiene el producto terminado. El programa propuesto en este trabajo (el cual se denominará herramienta de ahora en adelante) determina el número de Kanbans entre estaciones, necesario para minimizar el trabajo en proceso (WIP) y maximizar el throughput (TH) de un 1 Esta es la convención adoptada para esta herramienta, existen otros tipos de implementaciones con más de un tipo de tarjetas e.g. una para autorizar transporte y otra para la producción. 3.

(15) II.03(2)134. Figura 1: Sistema de producción Kanban sistema de producción en lı́nea particular. Debido a la complicación del manejo de varios objetivos y a que no hay fórmulas analı́ticas generales para determinar el WIP y el TH de un sistema de producción Kanban, siguiendo las recomendaciones en [8] y [22] , en las que se aconseja manejar este tipo de problemas a través de la simulación para sobrellevar la dificultad del desarrollo analı́tico, se optó por utilizar un algoritmo genético multiobjetivo integrado con una simulación del sistema. El algoritmo más concretamente es el NSGA-II (Non Dominated Sorting Genetic Algorithm II) el cual es tratado con detalle en [9]. Con la utilización de la simulación se libera la restricción de una definición analı́tica y se tiene la posibilidad de optimizar de manera fidedigna el sistema Kanban. Se realizaron varios experimentos con diferentes configuraciones del sistema de producción Kanban. Se variaron las distribuciones de los tiempos de proceso, el número máximo de tarjetas por paquete, la variabilidad de los tiempos de proceso, la tasa de llegada y la ubicación de los cuellos de botella. Estos experimentos muestran resultados interesantes sobre el funcionamiento del sistema Kanban. El efecto de controlar las medidas de desempeño antes y después de un cuello de botella e incluso la posibilidad de separar este control por cuello de botella en un sistema grande o disponer de este control en sólo una parte del sistema (i.e. polı́tica hı́brida). Se plantean entonces estas y otras observaciones permitidas por el enfoque tomado en este estudio, las cuales se tratarán en detalle más adelante. El conformación el documento se desglosa a continuación. El primer capı́tulo introduce el planteamiento de la tesis, el segundo capı́tulo describe el problema a tratar y los objetivos del trabajo. El tercer capı́tulo continúa con el marco teórico del. 4.

(16) II.03(2)134 proyecto. El cuarto capı́tulo ilustra la implementación de la herramienta, el quinto capı́tulo dilucida la experimentación realizada junto con los resultados y finalmente el sexto capı́tulo propone las conclusiones y aportes del trabajo realizado.. 2.2.. Objetivos. El objetivo general del trabajo es desarrollar una herramienta que permita optimizar el número de tarjetas a utilizar en la configuración de un sistema Kanban. Los objetivos especı́ficos son: 1 - Utilizar las librerı́as JGAlib, JGANSGAIIlib y KanbanSimulation, para desarrollar la herramienta de opimización utilizando simulación. 2 - Utilizar medidas de desempeño estadı́sticamente significativas para evaluar la herramienta. 3 - Desarrollar un criterio de selección de los individuos en el algoritmo genético para el caso de optimización estocástica. 4 - Desarrollar experimentos para probar el funcionamiento de la herramienta y analizar su aplicación al sistema Kanban. 5 - Realizar la calibración de la herramienta (i.e. determinar los parámetros del algoritmo genético y de la simulación).. 5.

(17) II.03(2)134. Capı́tulo III. MARCO TEÓRICO 3.1.. Optimización utilizando simulación. La optimización utilizando simulación puede definirse como el proceso de encontrar los mejores valores para las variables de decisión dentro de todos los valores posibles, sin ahondar en una enumeración exhaustiva de los mismos. En este proceso se tiene como objetivo minimizar los recursos gastados mientras se maximiza la información obtenida en el experimento de simulación [6]. Un modelo de simulación en general comprende un conjunto de n variables de entrada (variables de decisión) X = {x1 , x2 , ..., xn } y un conjunto de m variables aleatorias de salida (medidas de desempeño) A = {a1 (x, λ), a2 (x, λ), ..., am (x, λ)} y un conjunto de p parámetros Λ = {λ1 , λ2 , ..., λp } . Los parámetros son variables que determinan el funcionamiento del sistema y están fuera del control del decisor. Las variables de decisión, en cambio, están bajo control del decisor e igualmente son definitorias del funcionamiento del sistema. Al ingresar en el modelo los parámetros y las variables de decisión, se realizan los procesos propios del experimento y se obtienen como resultado las medidas de desempeño (ver Figura 1). Estas últimas dan al decisor una descripción de lo que sucede con el modelo experimental, mas no le permiten inferir sobre modificaciones pertinentes en las variables de decisión del sistema [22]. La optimización, por su lado, toma unas variables de decisión y busca valores óptimos de acuerdo con funciones objetivo, como se puede apreciar en la siguiente definición:. 6.

(18) II.03(2)134. Figura 2: Modelo de Simulación − → Definición 3.1.1. Sea x* = [x1 , x2 , ..., xn ] un vector de variables de decisión donde →→ − → − → → → x ∈ X y X es el conjunto de soluciones factibles y sea f (− x ) = [f1 (− x ), f2 (− x ), ..., fm (− x )], →− − → → un vector de funciones objetivo. Entonces se debe hallar x* = arg opt− f ( x ) [22]. x ∈X. Los sistemas de simulación pueden presentar una gran cantidad de medidas de desempeño. En la optimización utilizando simulación se utilizan medidas de desempeño producto de varias replicaciones en el sistema de simulación. De esta forma las medidas de desempeño se obtienen en valor esperado, siendo estas fidedignas con una confianza determinada por el decisor. El proceso de optimización utilizando simulación (ver Figura 3)[4], se lleva a cabo obteniendo medidas de desempeño con base en valores de las variables de decisión, dependiendo de los resultados de estos valores, se hace un cambio a las variables de decisión y se simula el sistema nuevamente. El proceso se continúa hasta que se cumple el criterio de optimalidad definido por el decisor.. 3.2.. Optimización multiobjetivo. La optimización multiobjetivo (también llamada optimización multicriterio) puede definirse según [7] como el problema de encontrar un vector de variables de decisión que satisfaga las restricciones y optimice un vector de funciones objetivo. Esta optimización del vector de funciones objetivo consiste en encontrar los valores que hacen que los resultados obtenidos para cada función objetivo, cumplan con los criterios del agente decisor. Se puede entonces plantear en forma general el problema de optimización multiobjetivo de acuerdo con la siguiente definición: → Definición 3.2.1. Sean − x = [x1 , x2 , ..., xn ]T un vector de variables de decisión, →− − → f (→ x ) un vector de funciones objetivo, gi (− x ) el conjunto de restricciones inactivas. 7.

(19) II.03(2)134. Figura 3: Proceso de optimización utilizando simulación → y hi (− x ) el conjunto de restricciones activas. El problema de optimización multiobjetivo se plantea como: optimizar. − − → − → → f (→ x ) = [f1 (→ x ), f2 (− x ), ..., fk (− x )]T. s.a. → g (− x)≤0. i = 1, 2, ..., m. → hi (− x)=0. i = 1, 2, ..., n. i. La meta es buscar un conjunto particular x∗1 , x∗2 , ..., x∗n dentro de la región delimitada por las restricciones del problema (región factible Ω), tal que se logren valores óptimos en todas las funciones objetivo. En el problema planteado se utiliza la palabra optimizar, esto debido a que en un problema multiobjetivo, se pueden tener funciones objetivo que se quieren maximizar y otras que se quieren minimizar al mismo tiempo. Es muy usual, sin embargo, convertir las funciones en un mismo tipo ya sea maximización o minimización (ver [7]). Debido a las diversas relaciones que hay entre las funciones objetivo, en este → ∈ Ω tipo de problemas no se da usualmente el caso en que se encuentre un − x∗ → → − tal que f (− x∗) sea óptimo en todas sus componentes. Para efectos de facilitar la explicación se asume que los objetivos son de minimización en su totalidad, sin pérdida de generalidad. 8.

(20) II.03(2)134. F1, F2. F1. Puntos tangentes. x. Puntos en el borde. F2. Figura 4: Frontera de Pareto y conjunto óptimo de Pareto La definición tradicional de optimalidad no se puede aplicar en este tipo de problemas, debido a que se tienen varias funciones objetivo y la idea es encontrar compromisos que sean favorables en lugar de una solución global. La definición más utilizada para estos casos en que se presenta una población de puntos óptimos es el óptimo de Pareto. La optimalidad de Pareto se define según [7] como: → ∈ Ω tal que para cada Definición 3.2.2. Un punto óptimo de Pareto es un − x∗ → ∀i ∈ I o existe al menos un → − → x ∈ Ω e I = 1, 2, ..., k ocurre que,fi (− x ) = fi (− x∗) → → i ∈ I tal que f (− x ) > f (− x∗). i. i. Los óptimos en el sentido de Pareto se encuentran en el locus de los puntos tangentes de las funciones objetivo, o en lo que es una frontera del conjunto factible Ω como puede observarse en la Figura 4, donde en la parte del borde resaltado en azul, se encuentra la frontera de Pareto y en la otra gráfica se ilustra el otro posible caso en el que contiene los puntos tangentes señalados con las flechas. Es de aclarar que Fi identifica la función objetivo i. Esto es lo que se denomina la frontera de Pareto o frontera eficiente (PF∗). → − Definición 3.2.3. Para un problema multiobjetivo cualquiera f (x), el conjunto → − → − óptimo de Pareto P ∗ es: {x ∈ Ω|¬∃x0 ∈ Ω =⇒ f (x0 )  f (x)}. Se define Ptrue como 9.

(21) II.03(2)134 el conjunto real de óptimos de Pareto, obtenido por métodos analı́ticos para un problema dado. El conjunto óptimo de Pareto entonces se puede ver como una agrupación de soluciones indiscernibles unas de otras en cuanto a su optimalidad, es decir, se encuentran definiendo una curva de indiferencia. Para aclarar este concepto se puede referir a la Figura 4 en la que supongamos se tienen dos funciones objetivo de minimización (F1 , F2 ), de tal forma que los mejores puntos están evidentemente en la región más cercana a la parte inferior de la región señalada en el dibujo. Cualquier punto encima de la franja azul no será preferido en comparación con los que efectivamente si están en ella. Ahora, entre los puntos que están en esa franja no es posible definir cual se prefiere, por lo que son puntos de indiferencia, o equivalentes en el sentido de Pareto. Definición 3.2.4. La frontera de Pareto se define según [7] formalmente para → − un problema multiobjetivo f (x) y un conjunto óptimo de Pareto (ver Definición → − → 2.2.3.)P∗ como PF∗ := {− u = f = (f1 (x), ..., fk (x))| x ∈ P∗} . Se define entonces PF true como la frontera real que se obtiene analı́ticamente para un problema dado. La frontera eficiente es el conjunto de evaluaciones de las soluciones indiscernibles, para cada una de las funciones objetivo presentes en el problema multiobjetivo. Es de aclarar que en la literatura se refiere a las soluciones en la frontera de Pareto como eficientes o no inferiores y a sus vectores correspondientes no dominados. → Definición 3.2.5. Un vector − x = (x1 , ..., xn ) es parcialmente menor que un vector → − y = (y , ..., y ) si ∀i ∈ {1, ..., n}, x ≤ y ∧ ∃i ∈ {1, ..., n} : x < y 1. n. i. i. i. i. En el problema de optimización multiobjetivo, lo que se trata es de mapear valores de las variables de decisión (x1 , ..., xn ) en el espacio de las funciones objetivo, obteniendo entonces la frontera de Pareto. Esta última, es pues, la gráfica resultante de la interacción entre las diferentes funciones objetivo, como se ilustra en la Figura 5. Entonces el conjunto óptimo de Pareto es el conjunto de puntos que se encuentran en el espacio de las variables de decisión, mientras que la frontera eficiente se encuentra en el espacio de las evaluaciones de las variables de decisión en las funciones objetivo. 10.

(22) II.03(2)134. F2. x2. Φ = {F ∈ ℜ 3 }. Ω = {x ∈ ℜ3 }. x3. x1. F3. F1. Figura 5: Mapeo realizado en la obtención de la frontera de Pareto Las soluciones que se encuentran en la frontera de Pareto, son denominadas no dominadas, ya que por definición son vectores parcialmente menores (ver Definición 3.2.5) que los demás vectores solución en Ω. Esta frontera de Pareto es lo que se quiere encontrar al resolver un problema multiobjetivo y de estas soluciones el decisor escoge las que se ajusten más a su criterio.. 11.

(23) II.03(2)134. 3.3.. Algoritmos genéticos multiobjetivo. Los algoritmos genéticos han sido diseñados para enfrentar problemas irregulares, para los que métodos de búsqueda enumerativos y determinı́sticos no son apropiados. Por lo tanto son algoritmos de búsqueda estocástica basados en una analogı́a con el proceso evolutivo generado por la selección natural [11]. Se parte de un conjunto de posibles soluciones (individuos) llamado población (P(t)) escogidos de manera aleatoria. Estos individuos son representados tı́picamente por un arreglo o arreglos binarios correspondientes a su genotipo(base binaria), que define al individuo cuando es expresado en su fenotipo (base decimal). Se escogen individuos de la población de acuerdo con su capacidad de adaptación, medida con una función de adaptabilidad. Los individuos escogidos pueden reproducirse, con lo que se recombinan sus genes (crossover ) e incluso mutan (mutation) produciendo una población C(t). Esta operación se lleva a cabo con la ayuda de operadores genéticos. La nueva generación de individuos entra a formar parte de la población si sus propiedades de adaptabilidad son adecuadas. Se continúa la depuración de la población por una cantidad de generaciones T que se desee. En forma sucinta se puede expresar la base del algoritmo genético en los siguientes pasos [4]: Inicializar P(t) Evaluar P(t) Mientras T < t Recombine P(t) Mute P(t) Genere C(t) Evaluar C(t) Generar P(t+1) a partir de P(t) y C(t) t→t+1 Donde T se refiere al número de generaciones totales y t toma valores en el conjunto G = {1, 2, ..., T } de generaciones. Inicializar P(t) implica que se debe. 12.

(24) II.03(2)134 generar una población de individuos, cada uno con caracterı́sticas propias únicas. Este proceso se puede implementar con diferentes tipos de codificación dependiendo del criterio del programador [11]. Evaluar P(t) consiste en asignarle un valor representativo a cada individuo, de acuerdo con una función de adaptabilidad. Este valor es primordial para poder escoger los individuos que pueden reproducirse (los más aptos). Los procesos Recombine y Mute se realizan para intercambiar información en la población inicial y crear diversificación en la población respectivamente. Es de anotar que en estos procesos la intención igualmente es inducir posibles mejoras en la población mediante su variación. Genere C(t) se refiere a obtener la población fruto de la reproducción de algunos individuos en la población inicial. Se evalúan estos individuos y se llega a obtener una nueva población resultante de algunos individuos de la población anterior y otros que fueron fruto de la reproducción de los seleccionados. Al llegar a la última generación, el algoritmo termina con una población constituida por individuos dentro de los cuales se encuentra el óptimo hasta esa iteración. En el caso de los algoritmos genéticos multiobjetivo basados en la determinación de frontera de Pareto, un proceso equivalente resulta en un conjunto de individuos óptimos en el sentido de Pareto.1 Se presenta una frontera eficiente o de Pareto de la cual se pueden escoger los valores más convenientes para el decisor. Estos algoritmos genéticos presentan una gran propiedad, en una sola corrida producen una frontera de Pareto que permite al usuario flexibilidad. Es en gran parte por estas razones que son muy utilizados para resolver problemas de optimización multiobjetivo [7].. 1. Existen otros algoritmos genéticos multiobjetivo en los que se determina un agregado ponderado de los objetivos, lo que genera una única medida de adaptabilidad (ver [7]). 13.

(25) II.03(2)134. 3.4.. Non-Dominated Sorting Genetic Algorithm (NSGA-II). Este algoritmo diseñado por Srinivas y Deb [9], como respuesta a las crı́ticas de su anterior algoritmo NSGA. Se trata entonces de un algoritmo que permite definir varias funciones objetivo e incluso restricciones en la definición de los problemas de optimización a tratar. Este maneja la población de tal forma que permite obtener individuos con fenotipos óptimos en el sentido de Pareto, constituyendo fronteras eficientes para el problema en cuestión. Esto lo hace garantizando una distribución homogénea de los puntos sobre la frontera y una búsqueda focalizada en la región óptima de Pareto con una complejidad de O(M N2 ), lo que es significativamente mejor que algoritmos anteriores como el NSGA (con complejidad O(M N3 ) El algoritmo inicia con una población inicial P0 , la población es evaluada de acuerdo con las funciones de adaptabilidad. Luego la población se pasa a un proceso de clasificación de acuerdo con el criterio de no dominancia, en el que a cada solución se le asigna un valor de acuerdo con su nivel de no dominancia (esto es la cantidad de soluciones que domina). Se crea entonces, mediante los procesos de selección, recombinación y mutación la población hija Q0 , de igual tamaño a la población inicial (denominemos este tamaño N ). De aquı́ en adelante, el proceso se modifica, entonces pasemos a una iteración T cualquiera. En este caso, se presenta una población RT resultante de la unión de la poblaciones padre PT e hija QT , donde la población ya ha sido evaluada con las funciones de adaptabilidad. La población RT pasa a un proceso de clasificación de acuerdo con el criterio de no dominancia. Este proceso de clasificación consiste en tomar el i-ésimo individuo de la población y compararlo con los demás de acuerdo con un criterio de dominancia.2 En una primera iteración se toman los individuos dominantes y estos conforman el conjunto F1 . Los individuos de este conjunto son extraı́dos de la población dejando el un número de individuos |P (t) − F1 |. Con esta población remanente se realiza la operación nuevamente, extrayendo los miembros de la frontera eficiente (i.e. ahora F2 ) y ası́ sucesivamente 2 Este puede ser de dos tipos: determinı́stico o estocástico, en el caso particular de [9], se utiliza el primer criterio, sin embargo en este documento se trabaja el nivel estocástico (ver sección 4.3).. 14.

(26) II.03(2)134 hasta tener a todos los individuos clasificados. En el proceso iterativo, la nueva población PT +1 , se obtiene a partir del conjunto de fronteras que se obtuvo en el proceso de clasificación por no dominancia. Debido a que el tamaño de la población se mantiene constante en N, y cada frontera tiene a lo sumo una cardinalidad |Fk | de N para todo k nivel de dominancia, el proceso de definición de la población nueva parte de incluir a los individuos de acuerdo con su nivel de frontera. Primero se incluyen los individuos de la frontera no dominada, quedando por definir N − |F1 |, individuos que son completados con las siguientes fronteras. Ahora, supongamos que la última frontera a incluir es Fl , pero no es posible acomodar todos sus individuos en la nueva población, ya que |Fl | > (N −. l−1 [. |Fk |). k=1. por lo tanto hay un operador de aglomeración-distancia, que busca que la frontera eficiente resultante tenga una buena disposición de sus puntos, es decir, que se obtenga una densidad homogénea en la cantidad de puntos rodeando uno cualquiera en particular, a lo largo de ella. Este operador utiliza una medida de distancia que se obtiene organizando los valores normalizados para cada función objetivo de forma ascendente, definiendo los valores frontera (el mayor y el menor) con una distancia infinita. El resto de valores intermedios tienen un valor de distancia equivalente a la diferencia absoluta en los valores funcionales de los individuos (soluciones) adyacentes.3. Este cálculo se realiza para cada uno de los objetivos, definiendo. al final el operador para cada individuo como la suma de los valores de distancia obtenidos para cada uno. El operador de aglomeración-distancia es utilizado para clasificar los miembros de Fl de acuerdo con su valor de distancia respectivo. Suponga un individuo i en la población que tiene dos atributos: irank : ranking de no dominación, obtenido en el proceso de clasificación por no dominancia. 3. Para individuos i, j y k con k y j adyacentes a i, la distancia para el individuo emphi serı́a (F1 (xj ) − F1 (xk )) + (F2 (xj ) − F2 (xk )). 15.

(27) II.03(2)134 idistancia : valor de distancia determinado para el operador de aglomeracióndistancia. Entonces se define el criterio de clasificación del operador (n ) como: i n j ⇐= (irank < jrank ) ∨ ((irank = jrank ) ∧ (idistancia > jdistancia )) Esto significa que entre soluciones con diferente ranking de no dominancia se prefiere la de menor ranking. Mientras que si son equivalentes (se encuentran en la misma frontera), se prefiere la que se encuentre en una región de menor densidad de puntos cercanos. Una vez se completa la población PT +1 , se realizan los procesos de selección, recombinación y mutación para crear la población hija QT +1 , con lo que se redefine RT +1 , comenzando el proceso en la siguiente iteración. Para visualizar mejor el algoritmo se presenta el siguiente macroalgoritmo. Inicializar P(t) Evaluar P(t) Ordenar P(t) en Fk Mientras T < t Recombine P(t) Mute P(t) Genere Q(t) Evaluar Q(t) Ordenar Q(t) en Fk Generar P(t+1) a partir de P(t) y Q(t) y de acuerdo con selección de Fk hasta S |Fl | > (N − l−1 k=1 |Fk |) entonces elegir el resto de acuerdo con ≺n t→t+1 El algoritmo evolutivo multiobjetivo que se utilizó para este estudio es el NSGAII [9]. El desarrollo algorı́tmico fue realizado con base en las librerı́as JGA (Java Genetic Algorithm) y JGANSGAII [12]. El NSGA-II fue realizado por Srinivas y Deb como una mejora a su planteamiento inicial, el NSGA.. 16.

(28) II.03(2)134. 3.5.. Heurı́stica. Para efectos del estudio de los resultados obtenidos con la herramienta (programa desarrollado en este trabajo) de este trabajo, resulta necesario obtener una aproximación a la frontera eficiente, bajo los mismos parámetros, para ası́ realizar una comparación. Debido a que el enfoque dado al problema de la optimización del número de tarjetas en el sistema Kanban, no ha sido documentado anteriormente, y no se conocen en la literatura los Ptrue y menos PF true (ver Definiciones 3.2.4 y 3.2.3) para este problema. Sin embargo, para poder corroborar la eficiencia y bondades de la metodologı́a inherente a esta herramienta, fue necesario construir otra aproximación a la frontera eficiente. Para lograr esto se utilizó la heurı́stica de reducción del número de tarjetas propuesta en [17]. Esta heurı́stica fue diseñada tomando como base la modificación del W IP manteniendo un valor estable de Throughput, para cada corrida de la simulación. La heurı́stica está constituida básicamente por los siguientes pasos: 1. Estimar el número de tarjetas entre estaciones y encontrar la utilización de las estaciones y medidas de desempeño (i.e. W IP , T hroughput) 2. Tomar la estación con mayor utilización (i.e. la estación k cuello de botella) y reducir el número de tarjetas entre las estaciones k-1 y k incrementalmente hasta sobrepasar el Throughput lı́mite, en cuyo caso se retorna el número de tarjetas anterior. 3. Repetir el proceso con siguiente estación con la mayor utilización 4. Continuar el proceso hasta que todas las estaciones hayan tenido reducción de tarjetas. De esta forma realmente no se produce una frontera eficiente sino un valor óptimo local con valores de medidas de desempeño únicos. Para lograr obtener una frontera se definen varios niveles de Throughput de acuerdo con corridas anteriores de la herramienta, de tal forma que las fronteras puedan ser comparables en el mismo rango. Para cada corrida se determina el número de tarjetas óptimo y se seleccionan de los 17.

(29) II.03(2)134 resultados totales las combinaciones que dominan a las demás. Estas últimas constituyen la frontera eficiente arrojada por la heurı́stica. Para realizar esta heurı́stica se implementó un objeto en java que realiza las operaciones e imprime los resultados obtenidos (ver Apéndice E). La frontera eficiente obtenida se compara entonces con la frontera generada por la herramienta, para cada experimento.. 18.

(30) II.03(2)134. 3.6.. Estadı́sticos de desempeño. En esta sección se definen el conjunto de estadı́sticos utilizados para medir el desempeño de la herramienta, de acuerdo con la aproximación a la frontera eficiente 0 y el de Mann-Whitneyque presenta. Básicamente son tres estadı́sticos, S 0 , Smod. Wilcoxon. El primero es una medida del porcentaje de la región factible de un problema de optimización cualquiera, que domina la frontera resultante. El segundo mide la dispersión de los datos dentro de una misma frontera eficiente, favoreciendo una distribución homogénea. Finalmente el estadı́stico de Mann-Whitney-Wilcoxon determina si con significancia estadı́stica si un algoritmo generador de una aproximación a la frontera eficiente es mejor que otro. Definición 3.6.1. Sean F el conjunto de puntos que constituyen una frontera eficiente, (xi , yi ) es el conjunto ordenado que identifica las coordenadas de un punto i ∈ F, (xbest , ybest ) y (xworst , yworst ) las coordenadas del mejor y el peor caso dentro de las posibles combinaciones de los valores de x e y de acuerdo con un problema de optimización en el que se quiere maximizar y y minimizar x, x0 , y0 coordenadas del primer punto de la frontera eficiente más cercano al eje y. Entonces el estadı́stico se define como: P | (xworst − x0 )y0 + |F i=1 (xworst − xi−1 )(yi − yi−1 ) S = (xworst − xbest )(yworst − ybest ) 0. El mejor caso y el peor se definen de acuerdo con el problema en particular. En este estudio estos valores para el WIP se determinaron como el mı́nimo número de tarjetas utilizadas (una) y el máximo (todas las disponibles en el sistema). El TH se definió a partir de la relación: TH =. W IP CT. Donde CT es el tiempo de ciclo. Lo que hace el estadı́stico S 0 es aproximar el área dominada (i.e. el área bajo la frontera eficiente puesto que se quiere maximizar y y minimizar x ) y contrastarla con el espacio factible, obteniendo un porcentaje de esta región. Esto lo logra tomando 19.

(31) II.03(2)134. Figura 6: Obtención de S 0 los diferenciales de área que se pueden ver en la Figura 6, donde el rectángulo en lı́nea punteada es la región factible y los recuadros grises sumados son las aproximaciones al área bajo la frontera eficiente. 0 El siguiente estadı́stico Smod se define para poder determinar que grado de homo-. geneidad presenta la distribución de los puntos a lo largo de una frontera eficiente, cuando esta compuesta por subgrupos como se ve en la Figura 7, llamados conglomerados. Definición 3.6.2. Sean Γbh el conjunto de las evaluaciones de los individuos de una población final b (valores de las funciones de adaptabilidad para cada individuo) en el conglomerado h ∈ Ψ, donde Ψ es el conjunto de conglomerados. Entonces el bh estadı́stico Smod se define para una población ordenada4 como: 4. Se entiende ordenada con respecto a al menos una de las medidas de desempeño. 20.

(32) II.03(2)134. Figura 7: Muestra posibles conglomerados. P bh Smod. i∈Γbh. =. P. j∈Γbh (dbh. − dij )2. |Γbh | − 1. ∀i 6= j. 0. b El estadı́stico de interés Smod se define como: 0. b = Smod. X. bh Smod. h∈Ψ. |Γhb | |Γb |. Donde el conjunto Ψ se define como los subgrupos encontrados en la gráfica de la frontera eficiente (i.e. particiones discretas), cada uno determinado por una distancia mayor al promedio de las distancias internas, entre los puntos extremos de cada conglomerado (ver Figura 7), dij se define como la distancia euclidiana entre las evaluaciones de los genotipos de los individuos i y j (valor de la función de adaptabilidad), una vez estos sean normalizados5 y dbh es la distancia promedio entre valores del fenotipo de los individuos en el conglomerado h en la población b. El siguiente estadı́stico determina si una frontera eficiente producida por un algoritmo domina a otra producida por un programa diferente. Esto lo hace observando los datos, si hay una cantidad significativa de ellos para un algoritmo, que son mayores a los del otro, entonces se tiene una posible dominancia. Definición 3.6.3. Sean x1 , x2 , ..., xn y y1 , y2 , ..., ym observaciones de variables aleatorias independientes con m y n grandes, Fx (z) y Fy (z) funciones de distribución 5. Con el fin de evitar tergiversaciones del estadı́stico por diferencia de unidades.. 21.

(33) II.03(2)134 de probabilidad de las variables aleatoria x e y evaluadas en el punto z, z ∈ <, xi < y j. =⇒ Zij = 1 ∧ xi ≥ yj. H0 : Fx (z) = Fy (z). =⇒ Zij = 0. Se quiere probar la hipótesis. ∀z contra las alternativas (dependiendo del caso) Ha : Fx (z) <. Fy (z) o Hb : Fx (z) > Fy (z). Entonces se puede definir el estadı́stico de MannWhitney-Wilcoxon (ξ) de primer orden como: ξ=. √. mn donde U=. mn 2 m+n+1 12. U−. m X n X. Zij. i=1 j=1. y el estadı́stico se distribuye aproximadamente N(0,1). A continuación se define la prueba de hipótesis a realizar con este estadı́stico. Definición 3.6.4. Sean las variables aleatorias xik las que identifican la medida de desempeño k para la herramienta y yik las que representan la medida de desempeño k para la heurı́stica ambas para un individuo i. Entonces realizando la prueba con xik < yik para definir los Zij , tenemos para el W IP H0 : Fx (z) = Fy (z) Ha : Fx (z) < Fy (z) Si ξW IP > zα se rechaza la hipótesis nula avalando la supremacı́a de la herramienta. Para el T H: H0 : Fx (z) = Fy (z) Ha : Fx (z) > Fy (z) Si ξT H < zα se rechaza la hipótesis nula, avalando la supremacı́a de la herramienta. La variable Zij registra la cantidad de valores de una aproximación a la frontera que son mayores a los de otra. Si este valor es grande, entonces U es grande y el estadı́stico resulta un número grande corroborando que Fy (z) > Fx (z). Lo contrario ocurre si el valor de Zij es pequeño. 22.

(34) II.03(2)134. Capı́tulo IV. IMPLEMENTACIÓN Para la parte de implementación se utilizó el algoritmo NSGA-II [12], en conjunto con un simulador del sistema de producción Kanban hecho en java [15]. Los sistemas trabajados tienen un sólo tipo de Tarjetas que autorizan tanto transporte como producción.. 4.1.. Representación. En el algoritmo genético multiobjetivo utilizado (NSGA-II), como en otros genéticos el individuo se representa mediante un código o cromosoma (genotipo) el cual se expresa en el fenotipo. En la implementación de este problema, los individuos son las configuraciones de tarjetas posibles, es decir, un cromosoma está definido por el número de tarjetas entre estaciones para cada par de estaciones (ver Figura 8). De tal forma que la población está constituida por diversas combinaciones de cantidades de tarjetas. La cantidad lı́mite de tarjetas se determina de acuerdo con la regla de Monden [17]) Definición 4.1.1. Sean D la demanda esperada por unidad de tiempo, L el tiempo de espera para el cliente desde el momento de la orden hasta la entrega, w el inventario temporal y a la cantidad de órdenes controladas por cada tarjeta. Entonces, para el caso de un solo tipo de tarjeta (Kanban) el número de tarjetas en el sistema es determinado por [17]: N úmero de tarjetas =. 23. DLw 2a.

(35) II.03(2)134. Figura 8: Representación del cromosoma En la literatura se presentan varias posibilidades de representación de los genes (ver [11]) sin embargo, debido a que en este caso la cantidad de Tarjetas entre las estaciones i e j, xij ∈ Z donde i, j ∈ {i, j ∈ Z||i−j| = 1} se utilizó la representación entera. Para los procesos de mutación y recombinación (crossover ), se utilizan los métodos de asignación aleatoria y de cruce en un punto respectivamente. Se escogieron estos dos operadores puesto que facilitan el manejo del algoritmo genético, simplifican el desarrollo del programa y no es necesario utilizar proceso más sofisticados en este problema particular. Para el de mutación por asignación aleatoria, definamos la longitud del genotipo como g, este método consiste en la generación de un número aleatorio a1 ∈ [0, 1] de tal forma que si el valor esta en el intervalo [0,Pmutación ] entonces se cambia un gen. Para determinar que gen se cambia se requiere de otro número aleatorio a2 ∈ [1, 2, ..., g] que determina la casilla a mutar. La mutación en el caso entero consiste en cambiar este número en la casilla escogida, por otro generado. 24.

(36) II.03(2)134 aleatoriamente en el rango adecuado reasignando el número actual. El método de cruce en un punto en la recombinación, consiste en determinar aleatoriamente un gen (c) dentro del genotipo (de longitud g), de tal forma que para dos genotipos de individuos diferentes i y j, que se cruzan para obtener una descendencia ki , kj , el genotipo del individuo ki está formado hasta el gen c, del individuo i y desde allı́ hasta el gen g del individuo j. El remanente constituye el individuo kj . Este procedimiento se ilustra en la Figura 9.. Figura 9: Recombinación de punto único. 4.2.. Función de adaptabilidad. Para el sistema de producción Kanban hay en la literatura varias medidas de desempeño a tomar en cuenta (ver [10],[1],[3]), para estudiar su funcionamiento y calibrar su configuración. Dentro de las medidas a tomar en cuenta se utilizaron para este estudio el WIP (work-in-process) y el TH (throughput). A continuación se. 25.

(37) II.03(2)134 explicará la razón detrás de la escogencia de estas dos medidas de desempeño. El sistema de producción Kanban está diseñado para poder controlar fácilmente la cantidad de inventario en proceso entre cualesquiera dos centros de trabajo, mediante el control de la cantidad de tarjetas. Debido a que las tarjetas controlan tanto el transporte como la producción, su cantidad es un determinante del producto que está en proceso. El WIP es una medida importante a controlar puesto que si se tiene en mı́nima cantidad permite limitar la cantidad de material que es colocado en el sistema de producción, la mayorı́a se quedarı́a en papel y no estarı́a fı́sicamente en el centro de trabajo. Esto permite una gran flexibilidad al sistema, ante cambios inesperados en la demanda. Controlando el WIP se reduce también el material que debe ser trabajado nuevamente y el desperdicio, ya que se permite que sólo el material necesario se encuentre en proceso y por ser un sistema pull 1. el procesamiento. del material depende de las órdenes de la parte siguiente de la cadena (estas últimas determinadas por el número de tarjetas disponibles). El tiempo de ciclo, que es una de las variables de mayor importancia a la hora de estudiar los procesos de producción, reduce su variabilidad al restringir el WIP, manteniendo una tasa de llegada constante del material. El throughput es igualmente una medida de desempeño importante que determina la cantidad promedio producida por unidad de tiempo. Controlando el nivel de producción se puede llegar a garantizar el cumplimiento de los pedidos bajo restricciones de tiempo mejorando el rendimiento del proceso. No es sólo importante reducir el WIP, si no que es clave mantener un nivel de producción adecuado para poder cumplir con las órdenes a tiempo. En el sistema Kanban, el número de tarjetas afecta igualmente el throughput, puesto que el transporte del material y su procesamiento van a estar condicionados más que todo por este factor y no necesariamente por el cuello de botella (determinado por el nivel de utilización). Por lo tanto se puede ver que es necesario encontrar una combinación de estas dos medidas que satisfaga las necesidades del decisor, y que estarı́a dada por la frontera de Pareto que se encuentre con esta implementación. 1. Sistema en el que la producción es iniciada en un centro de trabajo dado, sólo cuando su producto procesado es necesitado por el siguiente proceso en la producción. 26.

(38) II.03(2)134 Las funciones de adaptabilidad están constituidas por los valores numéricos de las medidas de desempeño, es decir el W IP (WIP promedio) y el T H (Throughput promedio. En este punto se presentan entonces dos posibles posiciones, una en la que se trata de convertir estas medidas de adaptabilidad en valores determinı́sticos (i.e. mediante el uso de torneo binario entre otros métodos como en [4] en el que se hace una comparación exhaustiva de los fenotipos de los individuos asignando a sus funciones de adaptabilidad valores enteros que muestren en cuantas comparaciones han salido victoriosos) y se toma un criterio de selección del mismo corte. La otra posibilidad es dejar los valores con sus caracterı́sticas estocásticas y utilizar un método de selección que tenga en cuenta este tipo de naturaleza aleatoria (i.e. este es el caso de la dominancia estocástica que será vista en mayor detalle en la Sección 4.3). Debido a que en general los métodos para lograr la primera posición son muy dispendiosos en tiempo de procesamiento y es más correcto tratar las medidas puras, sin modificaciones, se decidió dejar los valores estocásticos y realizar el debido proceso de selección. Para efectos de formalización tenemos entonces la siguiente definición: Definición 4.2.1. Sean i ∈ P (t) un individuo cualquiera de la población cuyo genotipo es xi , L el número máximo de replicaciones, fk (xi ) la evaluación de la función de adaptabilidad k-ésima para el individuo i donde k ∈ {1, 2}. Entonces definimos las funciones de adaptabilidad como:. f1 (xi ) =. L X W IPij. L. j=1. f2 (xi ) =. L X T Hij j=1. L. = W IP i. = T Hi. Es importante resaltar que para efectos de la selección de individuos y formalización del estudio estadı́stico de los resultados, los valores de las medidas de desempeño se distribuyen normalmente, gracias a la teorı́a asintótica [5]. En la parte experimental se ahondará más sobre las garantı́as sobre este tipo de distribución para las medidas de desempeño.. 27.

(39) II.03(2)134. 4.3.. Dominancia Estocástica. En el algoritmo genético utilizado en esta herramienta, una de las condiciones importantes en su desarrollo es la definición de una relación de dominancia entre individuos (soluciones). Esta relación es utilizada en la función de clasificación en fronteras, como se vio en la sección 3.4, para poder escoger entre los individuos. En el caso de la herramienta presentada en este documento, se utilizó una implementación particular de la noción básica de la dominancia estocástica. Primero se presenta una definición formal del concepto y posteriormente se ahonda en la implementación realizada. Formalmente tenemos la siguiente definición según [19]: Definición 4.3.1. Sean x e y variables aleatorias con funciones acumuladas de probabilidad y continuas por la derecha Fx (·) y Fy (·) definidas como: Z. η. Fx (η) =. px dx. ∀η ∈ <. py dy. ∀η ∈ <. −∞ Z η. Fy (η) = −∞. Entonces la dominancia estocástica de x sobre y en el caso de maximización se define como: xy. ⇐⇒. Fx (η) ≤ Fy (η). ∀η ∈ <. donde {∃η|Fx (η) < Fy (η)}. En el caso de minimización se define como: xy. ⇐⇒. Fx (η) ≥ Fy (η). ∀η ∈ <. donde {∃η|Fx (η) > Fy (η)}. En el caso particular de la herramienta las distribuciones para las medidas de desempeño son efectivamente normales (ver sección 4.2), ası́ que lo que estarı́amos determinando es la dominancia entre variables aleatorias normales. Esta situación resulta provechosa ya que se pueden entonces determinar los casos que es necesario trabajar para poder tener una relación robusta para determinar la dominancia estocástica. Para entender un poco mejor el problema, refiérase a la Figura 10. 28.

(40) II.03(2)134. Figura 10: CDF y PDF medidas de desempeño cualquiera. Sea x variable aleatoria tal que x ∼ N (18, 6)2. y la variable aleatoria y tal que. y ∼ N (8, 5), suponga que estamos en un problema de maximización de una medida de desempeño. De acuerdo con la definición de dominancia estocástica, se puede concluir de la gráfica que x  y. ∀η ∈ <. Es importante notar que este es un caso. un poco extremo, en el que es evidente la determinación ya que la separación de las medias es más que significativa y sus desviaciones son similares. En general, hay varios casos que hay que contemplar para poder definir un criterio general. Los casos dependen de dos factores: dij : diferencia de medias de la función de adaptabilidad entre los individuos i e j donde i 6= j. σi Ξ σj : relación de desigualdad entre las dos medidas para los individuos i e j donde i 6= j. De acuerdo con el primer factor tenemos dos casos, uno en el que efectivamente la diferencia es amplia entre las medias, como ocurre en el caso de la Figura 10, 2. La convención utilizada aquı́ es N(µ, σ).. 29.

(41) II.03(2)134. Figura 11: CDF y PDF baja diferencia de medias. pero también se puede dar un caso como se ilustra en la Figura 11. En este caso las medias no son muy disı́miles, y la determinación de una posible dominancia se complica puesto que hay un entrecruzamiento de las funciones acumuladas de probabilidad. En el caso en que las medias son estadı́sticamente diferentes (donde la función acumulada de una medida crece más rápido que la otra todo el rango), entonces se puede dictaminar sobre la condición de dominancia de un individuo sobre otro, esto último puede lograrse mediante la implementación de la siguiente prueba [18]3 : Definición 4.3.2. Sean ci1 , ci2 , ..., ciL y cj1 , cj2 , ..., cjL conjuntos de observaciones de una medida de desempeño, distribuidas normalmente, de un problema de optimización utilizando simulación, donde L equivale al número máximo de replicaciones realizadas e i y j identifican a dos individuos diferentes en la población P(t), C i y C j los promedios de las realizaciones para el conjunto de L replicaciones, σC2 i y σC2 j las varianzas estimadas de cada conjunto y sean µCi y µCj las medias muestrales de los dos conjuntos. Entonces definimos la siguiente prueba de hipótesis: H 0 : µCi = µC j 3. Nótese que se elige esta prueba puesto que las desviaciones son desconocidas y diferentes. 30.

(42) II.03(2)134 Ha : µCi > µCj ó µCi < µCj Donde la última disyunción depende de si el objetivo es maximizar o minimizar respectivamente las medidas de desempeño. El estadı́stico de prueba ψ se define como: √ 2L(Ci − Cj ) ψ=q 2(σC2 i + σC2 j ). ψ ∼ t2L−2. En el caso de maximización se debe tener comprobar si ψ > t2L−2,1−α y para minimización ψ < t2L−2,α Con el estadı́stico anterior cubrimos la dominancia estocástica, cuando hay una diferencia significativa de las medias. Ahora cabe analizar lo que sucede cuando no existe una diferencia de medias estadı́sticamente significativa, como se ve en la Figura 11. En este caso es relevante tener en cuenta la relación que hay entre las desviaciones estándar de las muestras, ya que esto determina fuertemente la posibilidad de un entrecruzamiento de las funciones acumuladas de probabilidad. Haciendo un análisis de la función de distribución normal, se puede ver que en el caso en que haya una cercanı́a de medias, tal que la diferencia no sea estadı́sticamente discernible, entonces las gráficas de la función acumulada de probabilidad se intersecan a lo sumo en un punto (descartando los puntos extremos a los que converge). La razón de esto puede aclararse pensando en dos funciones acumuladas de probabilidad normales, en el caso en que se crucen en más de un punto (a parte de los extremos que convergen), la resta de estas funciones (F2 − F1 ) resultarı́a en una función con cuatro cruces de las ordenadas, para lo que debe haber tres cambios de concavidad en la función acumulada (F2 ) a la que se le resta la otra función acumulada (F1 ). Como la función acumulada normal únicamente presenta un cambio de concavidad posible, este caso de más de un punto de intersección no es factible. Este caso puede verse en la Figura 12, en donde se ilustra la función resultante de la resta cuando hay más de un punto de cruce, ilustrando los cambios de concavidad necesarios. Esto deja al descubierto tres posibilidades para hallar algún sustento a la dominancia, manteniendo fija una de las dos distribuciones:. 31.

(43) II.03(2)134. Caso cuatro cambios de concavidad. F1 F2. Figura 12: Gráfico de resultado de resta de CDF normal imposibilitando más de un cruce 1. Se encuentra dominancia estocástica por la parte superior a la intersección de las funciones acumuladas 2. Se encuentra dominancia estocástica por la parte inferior a la intersección de las funciones acumuladas 3. No se puede determinar dominancia estocástica puesto que las dos partes se complementan. Tomando una de las dos distribuciones acumuladas, llamémosla Fx , como fija y la otra Fy , se pueden ver las tres posibilidades en la Figura 13. Para determinar la dominancia se toman valores en el eje de las ordenadas, uno mayor que la media más grande (wm ) de la función de distribución (wsup ) y otro menor (winf ). Entonces x y en el caso de minimización, si se da uno de dos casos: Fx (wm ) > Fy (wm ) ∧ Fx (wsup ) > Fy (wsup ) Fx (wm ) > Fy (wm ) ∧ Fx (winf ) > Fy (winf ) En el caso de maximización: 32.

(44) II.03(2)134. Figura 13: Casos dominancia estocástica. Fx (wm ) < Fy (wm ) ∧ Fx (wsup ) < Fy (wsup ) Fx (wm ) < Fy (wm ) ∧ Fx (winf ) < Fy (winf ) En la Figura 14 puede verse una representación de los valores de prueba ubicados en las gráficas de CDF y FDP. Con el planteamiento anterior puede entonces definirse la operación a realizar para determinar la dominancia estocástica entre los individuos para cada resultado de la funciones de adaptabilidad. Los valores wsup y winf se determinan como a una distancia de σmax donde σmax identifica la desviación estándar de la distribución con mayor media. Para realizar la prueba se necesita entonces un estimador para obtener las probabilidades acumuladas, esto puede plantearse de la siguiente forma: Definición 4.3.3. Sea xi1 , xi2 , ..., xiL un conjunto de una variables aleatorias i.i.d., P xi = Lj=1 xij distribuido normal por el teorema del lı́mite central sea el estimador de su media µi y σ 2xi =. PL. j=1 (xij −xi ). L−1. 2. distribuido χ2L−1 el estimador de su varianza. σx2i desconocida y w· equivalente a cualquiera entre wsup , winf , wm . Entonces lo que se busca es: √. L − 1(xij − xi ) P (xij ≤ w(·) ) = P ( < σ 2xi. √. L − 1(w(·) − xi ) ) = P (tL−1 < σ 2xi. 33. √. L − 1(w(·) − xi ) ) σ 2xi.

(45) II.03(2)134. Figura 14: CDF, PDF y muestra de lı́neas de prueba a σ. La probabilidad acumulada definida arriba se obtiene de la evaluación de la función acumulada de una distribución t de student con L − 1 grados de libertad. Se utiliza esta distribución porque se tienen varianzas desconocidas y principalmente puesto que esta distribución es más robusta que la normal [16], [18]. Esta es la forma de evaluar las funciones acumuladas de probabilidad necesarias para el desarrollo del criterio de dominancia estocástica.. 34.

(46) II.03(2)134. 4.4.. Herramientas. En este capı́tulo se tratará de explicar brevemente las propiedades de las librerı́as utilizadas [12], [13] y [15] seguido por un compendio de las modificaciones realizadas a las mismas a lo largo del tiempo de trabajo. 4.4.1.. Librerı́as. Las librerı́as utilizadas en la elaboración de la herramienta fueron básicamente cuatro a seguir: JGAlib: Librerı́a que contiene la lógica para un algoritmo genético básico JGANSGAIIlib: Librerı́a que contiene la lógica para el algoritmo NSGAII. IOUTILS: Librerı́a que contiene lógica para el fácil manejo de archivos y gráficas. KanbanSimulation: Librerı́a que contiene la lógica para simular un sistema de producción Kanban con una sola tarjeta que maneja autorización de transporte y producción. SimLink4 : Contiene la clase que permite que la simulación y el algoritmo genético se entiendan. Adicionalmente presenta ejemplos de la implementación de pruebas de calibración de simulación, con base en el objeto ReplicateNSGAII. TStudentDistribution5 : Contiene dos clases que permiten encontrar cualquier valor concerniente a la distribución t-Student La primera librerı́a es robusta y permite al usuario definir la función de adaptabilidad a evaluar, el método de selección (de entre tres opciones ruleta, aleatoria 4 5. Elaborada por Carlos A. Valderrama Elaborada por Carlos A. Valderrama. 35.

(47) II.03(2)134 o por el mejor individuo6 ), además permite al usuario elegir entre tres posibles codificaciones del genotipo (entero, binario, real) y para cada una presenta varias opciones para la recombinación y la mutación. Los parámetros para el algoritmo se ingresan en un archivo de extensión .ini y los datos del problema que se necesiten aclarar (e.g. cotas para la generación de los números aleatorios que identifican cada uno de los genes en el genotipo, la semilla a utilizar). La librerı́a tiene igualmente opciones de salida de los datos, que se pueden configurar desde el archivo .ini, de tal forma que puede obtenerse la impresión de la primera población, la última, sólo el mejor individuo, al igual que el tiempo que toma la iteración, la cantidad de evaluaciones realizadas y los datos de entrada del problema. Esta librerı́a permite la implementación de algoritmos multiobjetivo, modificando el tipo de fenotipo y de fitness, el método de selección, el tipo de individuo, opciones de graficación y algunos parámetros del algoritmo genético básico. Permitiendo al usuario, si ası́ lo desea, ver como el algoritmo va convergiendo a la frontera de Pareto, en cada generación. La segunda librerı́a es una extensión de la primera, que contiene los parámetros del algoritmo NSGAII visto en [9]. Las modificaciones son para implementar procesos de selección de acuerdo con la dominancia, y otros parámetros exclusivos de este algoritmo, los cuales se discutieron en la Sección 3.4. Se hace uso de la posibilidad de extender las clases del algoritmo genético básico y se generan nuevas clases que implementen los métodos abstractos permitidos y hagan el desarrollo de las funciones objetivo y el programa de corrida principal. La tercera librerı́a contiene varios objetos que permiten la escritura fácil de archivos y su lectura igualmente. Adicionalmente presenta objetos que manejan capacidades de graficación, útiles para menesteres como la representación de la frontera eficiente. La cuarta librerı́a es un conjunto de objetos que permiten desarrollar una simulación de un sistema Kanban mono tarjeta con los parámetros de número de 6. En la primera se define una regla de decisión en la que se le da una mayor probabilidad (resultante del cociente obtenido al dividir el valor de su función de adaptabilidad sobre la suma de los valores de la función de adaptabilidad de todos los individuos en la población) de reproducirse a las mejores soluciones, la segunda se selecciona aleatoriamente el individuo a reproducirse y la tercera escoge siempre el mejor individuo de entre la población en cada iteración.. 36.

(48) II.03(2)134 estaciones, distribuciones que se quieran,7 y un número de Kanbans variable. Como medidas de desempeño arroja el tiempo promedio en el sistema (incluyendo tiempo en la cola de papel), WIP, Throughput y le porcentaje de utilización de cada estación.. 7. En el momento tiene las distribuciones exponencial, normal y triangular, sin embargo estas están definidas a partir de una clase abstracta ası́ que en puede tener varias más.. 37.

(49) II.03(2)134 4.4.2.. Modificaciones y ajustes a las librerı́as. Durante el proceso de desarrollo de este proyecto, se realizaron ajustes a la librerı́a para facultar su uso. Los ajustes fueron realizados por Eliécer Gutiérrez, M.Sc. , la mayorı́a por requisito de la herramienta de este estudio. A la librerı́a básica, JGAlib, se le realizaron este tipo de ajustes. En primera instancia se modificó la clase GeneticAlgorithm para que en su método start no fuera del tipo void sino que retornara la población final. Al tener control sobre la población final, el usuario puede desarrollar estadı́sticos para aplicar a los resultados, e incluso definir el formato en que desea leerlos (e.g. archivo, pantalla o gráficas). Conforme a la necesidad del usuario de poder experimentar con el algoritmo, para efectos de su calibración o del estudio que planea realizar con el mismo, se necesitaba flexibilidad en la definición de los parámetros del algoritmo genético (e.g. las probabilidades de mutación y recombinación, la semilla, tamaño de la población y el número de generaciones a iterar). Con esto en mente se modificó la clase GASettings incluyendo en ella unos métodos set para poder modificar estos atributos en el momento de ejecución del programa. Esta modificación fue utilizada para correr las diferentes variaciones en la parte de la calibración (ver Sección 5.2). Junto con esto se permitió definir el nombre del archivo para imprimir los resultados de cada caso dentro de la posible calibración o experimentación. Como un valor agregado a la librerı́a, se modificó la clase GeneticAlgorithm, para que se pudieran leer los archivos con los resultados de las combinaciones de parámetros del genético y con base en esto, la población final y valores extremos de la frontera eficiente, definir el estadı́stico S’ creado por Srinivas y Deb en [9], el cual es frecuentemente utilizado en la literatura (ver [7]). El manejo de estas corridas para el estadı́stico se hace a través de otro main diferente al del programa principal, que invoca el objeto que obtiene el estadı́stico. Para efectos de la herramienta mostrada en este trabajo, la necesidad de trabajar con la dominancia estocástica llevó a modificar la clase NSGAIIFitnessPhenotype, que anteriormente tenı́a un criterio de dominancia determinı́stica, aunque podrı́a hacerse una modificación permanente de. 38.

(50) II.03(2)134 tal forma que el usuario pueda definir este tipo de dominancia sin necesidad de ahondar en el código fuente, ya que la optimización estocástica es bastante utilizada. Esto fue parte fundamental del trabajo, puesto que uno de los objetivos era precisamente plantear una formulación de dominancia para el caso estocástico. La librerı́a KanbanSimulation también fue modificada en varias instancias. En la clase Kanban, se cambió el método armar , para que leyera los archivos a través de un singleton denominado SimKanbanSettings a través del objeto Properties. Esto con el fin de hacer el programa más flexible en la recepción de diferentes casos con los cuales experimentar. Adicionalmente se le agregó la posibilidad de tener un periodo de calentamiento para simular. Se implementó externamente la clase ReplicateNSGAII , que hace la conexión entre la simulación y el algoritmo genético, permite la impresión de varios niveles de resultados (dependiendo de las medidas de desempeño que se necesiten)y realiza operaciones para la calibración de la simulación corrida arrojando estos resultados con varios niveles dependiendo de las necesidades del usuario (e.g. en archivo, en pantalla). Se hicieron modificaciones para que el manejo de las semillas fuera más fácil, ya que esto es primordial para la calibración y las corridas con el algoritmo evolutivo multiobjetivo (e.g. este último requiere que mismos genotipos evaluados arrojen idénticos resultados, es decir, conservar la semilla).. 39.

(51) II.03(2)134 4.4.3.. Utilización de las librerı́as. La librerı́a jgalib, se utilizó como base de la librerı́a jgaNSGAIIlib haciendo un llamado a clases ya predeterminadas en la librerı́a de operadores como fueron SinglePointIntegerACrossover y RandomIntegerAMutation. Para definir el genotipo se utilizó una clase predeterminada en la librerı́a jgalib para el manejo de enteros, IntegerAGenotype. La clase GASettings fue utilizada en las clases definidas en la herramienta para manejar los parámetros de funcionamiento del algoritmo genético (Pmutación , Pcrossover ,Generaciones, Población, Número de objetivos, Tipo de objetivos, peso para los objetivos y otros que se pueden ver en la Sección 4.4.3)y para obtener el nombre del archivo que maneja los parámetros de la simulación. A continuación puede verse una muestra de los archivos utilizados para definir los parámetros del algoritmo genético (.ini) y de la simulación (.dat) a través de un singleton cuyo código puede ser visto en el Apéndice F. // A r c h i v o. definicin. problema. gentico. (. ini ). # −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− # JavaNSGA−I I. Settings. # C r e a t e d : December 2 3 , 2003 # Updated : December 2 3 , 2003 # −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− POPSIZE = 40 MAXGEN = 25 MUTRATE. = 0.25. CROSSRATE = 0 . 5 SEED = 1 OBJECTIVES = 2 CRITERIA = Min Max WEIGHTS = 0 . 0. 0.0. GENOTYPE = edu . u n i a n d e s . copa . j g a l i b . I n t e g e r A G e n o t y p e PHENOTYPE = edu . u n i a n d e s . copa . j g a N S G A I I l i b . N S G A I I F i t n e s s P h e n o t y p e FITNESSFCTN = s r c . K a n b a n I n t e g e r MUTATION = edu . u n i a n d e s . copa . j g a l i b . RandomIntegerAMutation CROSSOVER = edu . u n i a n d e s . copa . j g a l i b . S i n g l e P o i n t I n t e g e r A C r o s s o v e r SELECTION = edu . u n i a n d e s . copa . j g a N S G A I I l i b . N S G A I I S e l e c t i o n GENETICALGORITHM = edu . u n i a n d e s . copa . j g a N S G A I I l i b . NS GAIIGe ne t ic A lgo r it hm PROBLEMDATASETTINGS=K a n b a n S e t t i n g s . d a t FLAGSCOLLECTOR=0 FLAGSOUTPUTLEVEL=0. 40.

Referencias

Documento similar