PROFESOR PATROCINANTE: OSCAR ROMERO AYALA ING. CIVIL INDUSTRIAL ESCUELA DE INGENIERÍA CIVIL INDUSTRIAL DISEÑO Y CONTRUCCIÓN DE HERRAMIENTA DE SIMULACIÓN PARA LA TOMA DE DECISIONES EN GESTIÓN DE ALMACENAJE EN FRIO EN PLANTAS DE PROCESO DE MITILIDOS Trabajo de Titulación para optar al título de Ingeniero Civil Industrial CONSTANZA IRASSI RYKS ASPÉE PUERTO MONTT – CHILE 2011 ii DEDICATORIA Dedicada a Carmen Gloria Aspée Bocaz, mi mejor amiga, compañera y madre con todas sus letras, la mujer que toda la vida me ha apoyado incondicionalmente, me ha servido y me ha enseñado que en la vida todo se puede superar y alcanzar, con amor y voluntad. Fuiste siempre mi trampolín en la vida, ahora yo seré tu bastón… te amo. iii AGRADECIMIENTOS Se agradece a la Universidad Austral de Chile, Sede Puerto Montt y a todos los docentes de la carrera de Ingeniería Civil Industrial: Alexia Quiroz, César Pino, Gabriela Manoli, Alex Cisterna y Oscar Romero por el apoyo y ayuda incondicional para el desarrollo de esta tesis, y en especial a Jéssica Elizabeth Bull Torres, quien, me acompañó en cada etapa de desarrollo y que no solo fue una excelente profesional de apoyo, sino que fue una amiga comprensiva, paciente y una excelente mentora en el desarrollo de este proyecto de título. También se agradece el aporte de José Miguel Sánchez Quiero, Ingeniero Civil Industrial con conocimientos en mitilicultura y jefe del departamento de ingeniería de una empresa del rubro (que por confidencialidad no es nombrada), quien confío y ayudó con su conocimiento y buena disposición para el procesamiento de datos y de información. Al profesor Francisco Cala, que me ayudó a plantear el algoritmo de programación dinámica a una forma sencilla de entender para poder pasarlo más tarde al lenguaje de Simulación. A Rodrigo Andrés Hernández Lavín, un gran amigo y compañero de carrera, cuyo apoyo fue imprescindible para el desarrollo y traspaso del algoritmo de programación dinámica al lenguaje de simulación en Flexsim. Sin duda, fuiste un aporte fundamental en cada etapa de este proyecto de titulo, se que te espera un gran futuro, tanto en lo personal como en lo profesional, a ti: infinitas gracias. A la familia Cerda Zapata, que me acogió incontables veces como parte de su familia cuando viajaba a hacer revisiones a Puerto Montt y no tenía donde quedarme y me brindaron apoyo y cariño siempre. A mi padre Hugo Walter Ryks Rutherford que ha sido un gran amigo y apoyo con sus conocimientos en el área mitilicultora y salmonera. A mi abuela Haydée Bocaz Estay, que con su ternura, paciencia y disponibilidad incondicional me daba tranquilidad y paz para que yo trabajara sin problemas. También debo agradecer a mis dos mejores amigos: Erika Vanesa Muñoz Pérez y Roberto Sebastián Cerda Zapata que siempre estuvieron conmigo cuando sentía que no tenía fuerzas para seguir en algún momento de mi vida, me apoyaron y muchas veces me empujaron para poder seguir y salir adelante. Por último, a la gran mujer de mi vida: mi madre Carmen Gloria Aspée Bocaz, que siempre ha sido mi ejemplo a seguir, me ha apoyado en todas mis decisiones y me ha hecho sentir la hija más afortunada del mundo. A ella le debo mi vida y mis logros. iv RESUMEN El objetivo de este proyecto de título fue diseñar y construir una herramienta de apoyo a la toma de decisiones relacionadas con gestión de almacenaje en frio, aplicadas en este caso a las empresas mitilicultoras. Estas empresas tienen épocas durante el año donde sus cosechas dan mejor rendimiento (en cuanto a cantidad y calidad) por lo que hacen el esfuerzo de procesar en planta toda la cosecha que puedan durante esos períodos, sin tomar en cuenta la demanda inmediata. La decisión de procesar de esta manera se basa en la disminución de los costos de proceso por economías de escala (el procesar grandes cantidades disminuye los costos unitarios), pero trae consigo la necesidad de almacenar en frigoríficos el producto semi-terminado en espera de ser vendido. Esta naturaleza del proceso, impulsa a las empresas a tener que almacenar en frigoríficos externos parte del producto procesado por no tener la capacidad suficiente en sus frigoríficos internos. El conocimiento de cuanto producir en relación a lo que se demanda es muy incierto así como los costos globales involucrados. Por otro lado, tampoco se maneja con exactitud hacia qué frigorífico enviar la producción de manera tal que los costos sean mínimos. Por esta razón, se propuso una nueva metodología, que une dos herramientas relacionadas con el estudio de procesos, integrando programación dinámica determinística en la metodología para estudios de simulación planteada por Jerry Banks. Las características de esta unión, hicieron que parte de los pasos de la Metodología de Simulación de Jerry Banks fueran adaptados, de manera que la Verificación y Validación fueran unidas y las Corridas de producción se eliminarán al no resultar un modelo basado en tendencias probabilísticas, que es la característica necesaria para realizar las Corridas de producción. La aplicación de ésta metodología se tradujo a dos modelos, ambos pueden ser intervenidos por el usuario para modificar las variables de entrada de manera que se puedan conocer resultados diferentes dependiendo de los escenarios planteados. El Modelo Genérico tiene de base 4 frigoríficos, cada uno con sus respectivos costos de transporte y almacenamiento. El Modelo Específico tiene de base dos frigoríficos: uno interno y otro externo, cada uno también con sus respectivos costos, planteando dos escenarios relevantes: el primero con la situación actual de capacidad limitada de almacenamiento interno, y el segundo sin necesidad de almacenar externamente, llegando a una visión de gastos globales por concepto logístico importante gracias a la comparación de costos obtenidos al final de la simulación de ambos escenarios. La relevancia de este estudio radica en que, a pesar de que un modelo de simulación no entrega siempre los mejores resultados, sino mas bien muestra el comportamiento frente a escenarios de prueba elegidos por el usuario, la unión de las dos herramientas mencionadas anteriormente permite que cada vez que se modifiquen las variables de entrada del modelo, las respuestas al final de la simulación entregan los mejores resultados, llamados “óptimos” debido a que se generan por el hecho de haber integrado un Algoritmo de programación dinámica a la programación del software Flexsim. v ABSTRACT The aim of this project of degree was to design and build a decision support tool related to cold storage management, in this case applied to a mussel farmers companies. These companies have periods over the year in wish ones the crops has a better performance (in terms of quantity and quality) so they make the effort to process the whole crop on the plant as possible during those periods, without taking into account the immediate demand. The decision to proceed in this way is based in the need to reduce the processing costs through economies of scale (process large quantities reduces unit costs), but brings with it the need storage for semi-finished product until it is sold. The nature of the process encourages companies to use external refrigerators to store part of the processed product by not having enough internal capacity. The Know How about how much to produce in relation to what is required is very uncertain as well as the costs involved. By other hand, the way of the production across the refrigerators for minimal costs is not known with accuracy. Therefore, it is proposed a new methodology that joins two related tools to the study of processes, integrating deterministic dynamic programming to a methodology for modeling studies by Jerry Banks. The characteristics of this union made of a modification of the steps of the Simulation Methodology by Jerry Banks: “verification” and “validation” were united, and “production runs” are removed because we are not developing a probabilistic model wish one is a necessary characteristic for “production runs”. The application of this methodology led to two models, both can be operated by the user to modify the input variables so they can know different results depending on the proposed scenarios. The generic model has four refrigerators as a base, with their respective transport and storage costs. The specific model has two refrigerators: one internal and one external, each one with their respective costs, presenting two relevant scenarios: the first with the current limited capacity of internal storage, and the second without need for external storage, reaching a vision of global logistic costs by comparison obtained at the end of the simulation of both scenarios. The relevance of this study is that, although a model simulation does not deliver the best results, but shows the performance against testing scenarios chosen by the user, the union of this two tools mentioned above allows to get the best result called “optimal” every time the user modify the input variables of the model by the integration of dynamic programming algorithms to the modeling software Flexsim. vi INDICE DEDICATORIA ........................................................................................................................................ ii AGRADECIMIENTOS ............................................................................................................................. iii RESUMEN.............................................................................................................................................. iv ABSTRACT ............................................................................................................................................. v GLOSARIO............................................................................................................................................. vi 1. ANTECEDENTES GENERALES ......................................................................................................... 1 1.1 INTRODUCCIÓN ........................................................................................................................... 1 1.2 OBJETIVOS................................................................................................................................. 2 1.3 DESCRIPCION DEL ÁREA.......................................................................................................... 2 1.4 PLANTEAMIENTO DEL PROBLEMA .......................................................................................... 3 2. MARCO TEORICO ............................................................................................................................ 5 2.1. Logística .................................................................................................................................... 5 2.2. Eficiencia ................................................................................................................................... 5 2.3. Oferta y Demanda ...................................................................................................................... 6 2.3.1. Características de la Demanda .............................................................................................. 6 2.4 Inventarios o Stock .................................................................................................................... 7 2.5. Almacén ..................................................................................................................................... 8 2.6 Gestión de Almacenes. .............................................................................................................. 8 2.6.1 Sistema de gestión del almacén. ........................................................................................ 9 2.7 Manejo De Materiales ................................................................................................................. 9 2.8. Programación dinámica. ........................................................................................................... 10 2.9 Simulación de Procesos. ........................................................................................................... 13 2.9.1 Sistema ................................................................................................................................ 13 2.9.2 Modelo.................................................................................................................................. 13 2.9.3 Simulación ........................................................................................................................... 13 2.9.4 Áreas de aplicación de la Simulación ................................................................................. 14 2.9.5 Programas y Lenguajes de Simulación .............................................................................. 14 2.9.6 Ventajas y Desventajas de Simulación (TORRES, A. 2009) ............................................... 15 2.9.7 Peligros y problemas en Simulación .................................................................................. 16 2.9.8 Software de Simulación Flexsim......................................................................................... 16 2.9.9 Terminología del Software Flexsim .................................................................................... 16 2.9.10 Metodología de simulación ............................................................................................... 17 2.10 Técnicas de Prueba de Software ............................................................................................. 19 2.10.1 Pruebas de Caja Negra ...................................................................................................... 20 2.10.2 Pruebas de Caja Blanca .................................................................................................... 21 vii 3. METODOLOGÍA ................................................................................................................................ 22 4. APLICACIÓN DE LA METODOLOGÍA .............................................................................................. 24 4.1 Identificación del Problema ....................................................................................................... 24 4.2 Planteamiento de Objetivos ....................................................................................................... 25 4.3 Modelo de Conceptualización.................................................................................................... 26 4.4. Recopilación de datos............................................................................................................... 27 4.4.1 Estandarización de datos y supuestos............................................................................... 28 4.5. Diseño de algoritmo en programación dinámica ..................................................................... 28 4.5.1 Desarrollo del algoritmo ...................................................................................................... 28 4.6 Traducción a Modelo .................................................................................................................. 35 4.6.1 Modelo Genérico.................................................................................................................. 35 4.6.2 Modelo Específico ............................................................................................................... 42 4.7 Verificación y Validación: .......................................................................................................... 43 4.8 Diseño Experimental, Análisis y Documentación ..................................................................... 56 4.8.1 Datos Generales ingresados al modelo.............................................................................. 56 4.8.2 Escenario 1: Situación actual. ............................................................................................ 58 4.8.3 Escenario 2: Situación con Frigorífico de mayor capacidad. ............................................ 61 4.7.4 Comparación de Escenarios ............................................................................................... 63 4.8 Implementación .......................................................................................................................... 64 5. RESULTADOS .................................................................................................................................. 65 5.1 Acerca de lo Objetivos Específicos de la Investigación ........................................................... 65 5.2 Acerca de los Objetivos del Proyecto de Simulación ............................................................... 65 6. CONCLUSIONES .............................................................................................................................. 67 7. RECOMENDACIONES ...................................................................................................................... 68 8. BIBLIOGRAFIA ................................................................................................................................. 69 9. LINKOGRAFIA .................................................................................................................................. 70 10. ANEXOS.......................................................................................................................................... 72 viii GLOSARIO Mejillón: Moluscos bivalvo filtrador que vive fijado al sustrato, exclusivamente marino y vive tanto en zonas intermareales como zonas sumergidas de las costas de todo el mundo. Mitilicultura: Cultivo de los moluscos del género Mytilus, para su explotación económica. Recursividad: Técnica de programación muy potente que puede ser usada en lugar de la iteración. Se utiliza para realizar una llamada a una función desde la misma función. Iteración: La recursividad y la iteración (ejecución en bucle) están muy relacionadas, cualquier acción que pueda realizarse con la recursividad puede realizarse con iteración y viceversa. Normalmente, un cálculo determinado se prestará a una técnica u otra, sólo necesita elegir el enfoque más natural o con el que se sienta más cómodo. Algoritmo: Serie de pasos organizados que describe el proceso que se debe seguir, para dar solución a un problema específico. Modelo: Resultado del proceso de generar una representación abstracta, conceptual, gráfica o visual para analizar, describir, explicar, simular, y predecir fenómenos o procesos Interfaz: Parte de un programa que permite el flujo de información entre un usuario y la aplicación, o entre la aplicación y otros programas o periféricos. Esa parte de un programa está constituida por un conjunto de comandos y métodos que permiten estas intercomunicaciones. Escenarios: Conjunto de circunstancias que plantean una situación específica. Biblioteca de objetos: Conjunto de objetos que pueden ser utilizados para recrear modelos dentro de un software de simulación. 1. ANTECEDENTES GENERALES 1.1 INTRODUCCIÓN La mitilicultura es el cultivo industrial del mejillón mediante instalaciones marítimas que favorecen su desarrollo y aprovechamiento industrial. El proceso de la mitilicultura consiste en el cultivo de esta especie con altas complejidades desde el punto de vista productivo, ofreciendo la región de los lagos, ventajas comparativas para el cultivo de ésta (clima, geografía y calidad del agua). Hoy las crecientes proyecciones de venta en los actuales y potenciales mercados, así como las altas exigencias nutritivas exigen estándares de calidad e inocuidad. Así, para mantener las actuales tasas de crecimiento de la industria, se requiere una rápida búsqueda de alternativas que apunten a solucionar los puntos críticos que le restan competitividad a la industria de los Mitílidos en Chile. Uno de los puntos críticos mencionados en el párrafo anterior tiene relación con la logística, donde es de especial interés el conocer los costos totales mínimos de las operaciones relacionadas con el transporte de materias primas o producto terminado. El saber dónde y cuánto almacenar a favor de los costos es relevante cuando las cantidades involucradas implican desafíos en economías de escala. Las tarifas disminuyen en la medida en que se transportan mayores cantidades de producto en cada viaje, y la relación cantidad-costo es sumamente importante al momento de no contar con una capacidad de almacenamiento interno que soporte guardar toda la producción de la plata procesadora durante una temporada. No obstante, en relación al transporte de grandes cantidades, las cargas completas pueden originar excesos de nivel de inventario en los puntos de destino, y por otro lado el objetivo de reducir los costos de transporte realizando envíos a camión completo, también puede entrar en conflicto con el cumplimiento de los plazos de entrega a clientes, ya que la frecuencia de envíos puede verse afectada. Estos intereses contrapuestos se ven reflejados en el estudio de este proyecto de título, donde el saber enfrentar cada problema sin desmedro del otro es el equilibrio que se busca, usando para ello una herramienta de simulación, que tiene como ventaja el hecho de poder visualizar los eventos o escenarios que ocurren, además de dar la facilidad por sus herramientas de interactuar con el sistema modificando parámetros para con ello ver nuevos problemas y estudiar cómo reaccionan. 1 1.2 OBJETIVOS OBJETIVO GENERAL Diseñar y construir una herramienta de apoyo a la toma de decisiones relacionadas con gestión de almacenaje en frio. OBJETIVOS ESPECÍFICOS 1.- Generar una herramienta de simulación que apoye la toma de decisiones a nivel gerencial respecto a la gestión del almacenamiento en frio. 2.- Disminuir los costos de la gestión de almacenamiento en frío de los productos de granel en una empresa mitilicultora. 3.- Caracterizar los costos de la gestión de almacenamiento en frio, ya sean internos o externos, con la finalidad de establecer una relación entre costos de almacenamiento y volumen de producción. 1.3 DESCRIPCION DEL ÁREA La industria mitilicultora, en los últimos años de los 90’s e inicios del 2000 se caracterizaba por tener en su mayoría pequeños productores de cultivo, la mayoría ex pescadores que optaron por esta actividad debido a la baja en el desempeño de sus trabajos en salmonicultura. No se conocían operaciones mecanizadas ni prácticas eficientes de manejo, y como el país no se encontraba como exportador, no había exigencias de calidad, a excepción del control de marea roja. Se contaban entre 20 a 40 plantas de procesos inestables en cuanto a su desempeño, con tecnologías muy básicas y que trabajaban en su mayoría con operaciones manuales. Las etapas críticas eran las condiciones sanitarias de las instalaciones y su manera de operar que no calificaban para ser un país exportador. Cerca del año 2000 llegan a Chile empresas de capitales españoles (debido al colapso de los lugares de cultivo en España) las que comienzan con plantas de proceso y más tarde de cultivo, pudiéndose ver después de eso empresas con integración vertical y tecnologías mecanizadas. Esto ayuda a que Chile tenga una mayor participación en el mercado europeo, haciendo que en los últimos años las empresas chilenas tengan mayor interés por ingresar a la mitilicultura. En las plantas de procesos del país, los productos enlatados y congelados son los dominantes, en especial los congelados que han ido ganando lugar desde el año 2000 siendo en su mayoría la carne de choritos la predominante, en menor grado el este producto sellado al vacío (entero) y la presentación de media concha, donde la tasa calculada de crecimiento promedio interanual tiene un crecimiento altísimo para una industria basada en recursos naturales. Los proveedores son actores importantes en el mercado de la industria. La mayoría de ellos ha derivado de proveer a las empresas salmonicultoras. El sector de cultivo tiene en general un nivel tecnológico básico. Dentro de los proveedores se pueden encontrar los que brindan implementación de equipos industriales, comercialización de productos enfocados al área de cultivo, productos enfocados al área planta procesadora y producción de elementos de sustentación. 2 La composición de productores en la fase de industrialización de productos está verticalmente integrada en su mayoría. Respecto a tecnologías, éstas provienen por lo general de Europa en cuanto a maquinaria especializada, complementándose en chile con equipos menos especializados como calderas, o mesones, aunque en los últimos 3 años empresas que se dedicaban a vender productos para la salmonicultura, han estado produciendo maquinarias para la mitilicultura, donde ofrecen por ejemplo desvisadoras y desconchadoras. Pero la mayor preocupación en esta materia no es de tecnología e innovación, sino más bien de abastecimiento de materia prima de buena calidad y de cumplimiento de las normativas existentes. Las plantas mantienen una relación 30-70 por ciento entre proveerse internamente y externamente. Respecto a este tema, la relación compra-venta de materia prima entre las plantas procesadoras y los productores de cultivo independientes se basa en que las plantas deciden el precio y cantidad porque en general los productores no mantienen un control de muestreo de la calidad o rendimiento de su cosecha. A pesar del crecimiento sostenido de los últimos años de la industria mitilicultora, la cual no tiene parangón con otra actividad productiva en la región y el país, aun se visualizan múltiples falencias, tanto en el área técnica como en el de la gestión, especialmente en lo referido a las metodologías utilizadas en los procesos de captación, engorda y cosecha. La industria mitilicultora se enfrenta a cambios de tamaños mínimos productivos, con una necesidad de integrar verticalmente sus procesos, incorporar mejores tecnologías y desarrollar relaciones más rentables con sus proveedores. Hoy el país se ha convertido en un participante importante en el campo mitilicultor, lo que ha impulsado a generar cambios tecnológicos tanto en el área de cultivo como en la de plantas procesadoras, transitando hacia el cambio de convertirse en una industria chilena mitilicultora de gran peso con una importante participación de capitales extranjeros y nacionales, donde la principal característica son altos volúmenes de producción e integración vertical. (BAGNARA, M. MALTRAIN, G. 2008) 1.4 PLANTEAMIENTO DEL PROBLEMA La industria mitilicultora ha experimentado un constante crecimiento en el país. El sector actualmente se encuentra en un proceso de cambio importante que podría llevarlo a convertirse en uno de los principales exportadores a nivel mundial, con un crecimiento promedio de 55% anual en los últimos 14 años. Si se hace una comparación con el principal referente de la acuicultura nacional (la Industria del Salmón), las condiciones en las que se encuentra hoy, son similares a las que tenía la Salmonicultura en la década de los 90; es decir, se encuentra en un ascenso productivo, tecnológico y de conocimientos específicos necesarios para perfeccionar cada área en los que el rubro demanda mayor eficiencia. Por otro lado, la baja comercialización y el aumento en la competencia de los oferentes, ha repercutido en una obvia caída del precio a tasas constantes, por lo que combatir esta tendencia, se suma a los desafíos actuales de la industria, los que se concentran en estrategias como lograr la automatización y tecnificación de la producción, con el propósito de producir grandes volúmenes, aumentando la productividad, disminuyendo los tiempos de proceso y los costos de producción, permitiéndoles así ser más eficientes. Junto a esta, surge la estrategia orientada a conformar empresas de gran tamaño, con 3 integración vertical, de manera de obtener economías de escala, flexibilidad en los ciclos de producción y un mayor poder de negociación. Uno de los procesos involucrados en el logro de estas estrategias, es la necesidad de mejorar la eficiencia en todas las áreas que involucren costos adicionales al de producir. Dentro de estas áreas, se puede encontrar la necesidad de mejorar la gestión de almacenamiento en frío del producto a granel, que nace debido a que los distribuidores extranjeros han tratado (sin perjuicio sobre el precio) de deshacerse de este costo, que se produce por la estacionalidad del negocio. En temporada alta, las plantas trabajan al máximo de su capacidad debido a que obtienen más kilos de producto final, resultado de recibir - por parte de sus proveedores- cosechas de mejor rendimiento, lo que implica que al producir en grandes cantidades y no tener la demanda inmediata del producto en su totalidad, se debe recurrir a almacenar en frio lo producido por intervalos de tiempo variables. “Las empresas manufactureras tienen un volumen de inversión por concepto de inventario bastante grande, donde el correspondiente capital inmovilizado puede llegar a representar un elevado porcentaje del activo.” (MACHUCA 1995) El incremento de la competencia obliga a aumentar la productividad. Así como existe un costo industrial, existe un costo logístico de los productos: inversiones en almacenes e infraestructura dentro de ellos, manipulaciones, personal destinado a la preparación de pedidos, costo financiero del stock, utilización de envases y embalajes, transporte a almacenes y destino final. Este costo logístico es de suma importancia ya que puede llegar a representar aproximadamente el 30 por ciento del costo total del producto, por lo tanto, ajustarlo al mínimo posible sin perjudicar la calidad de servicio otorgada al cliente, así como controlar este ajuste, es de primera necesidad.(Mauleón,M.2007) Debido a este escenario, constituye un tema importante el perfeccionar la logística de almacenamiento para cualquier empresa del rubro que tenga las características de no contar con la capacidad de almacenar dentro de sus propios frigoríficos la totalidad de su producto final procesado, por lo que deba incurrir en gastos adicionales para almacenar lo restante en frigoríficos externos. A su vez, manejar con mayor exactitud la correspondencia de costos entre almacenar durante un intervalo de tiempo para luego vender y producir o entregar inmediatamente es una información con la que no se cuenta hoy en día. En este sentido, el estudio aporta a disminuir la incertidumbre con la que se maneja la relación producción-almacenamiento permitiendo conocer con certeza el comportamiento de estas variables en relación a los costos de almacenaje, costos de transporte y estimación de la demanda anual. Cabe destacar que los datos ocupados para analizar el modelo de dos frigoríficos (descrito más adelante) fueron brindados por una empresa que no se nombra en este proyecto de título por acuerdo de confidencialidad. 4 2. MARCO TEORICO 2.1 Logística El Council of Logistics Management define la Logística como “la parte del proceso de gestión de la cadena de suministro encargada de planificar, implementar y controlar de forma eficiente y efectiva el almacenaje y flujo directo e inverso de los bienes, servicios y toda la información relacionada con estos, entre el punto de origen y el punto de consumo, con el propósito de cumplir con las expectativas del consumidor”. La logística es parte del concepto de gestión de la cadena de suministro. Gestiona los flujos del producto junto con la información que este flujo conlleva, involucrando desde los proveedores hasta los clientes, trabajando siempre por disminuir los costos totales bajo la mejor calidad de servicio. (URZELAI, 2006). 2.2 Eficiencia El concepto de eficiencia es constantemente utilizado dentro de todo tipo de gestiones, dependiendo del área en que se apliquen se enfocan en base a perspectivas específicas, pero todas hacen referencia a los recursos utilizados y resultados obtenidos. Definiciones (THOMPSON, 2008) aplicadas a la administración: Según Idalberto Chiavenato, eficiencia "significa utilización correcta de los recursos (medios de producción) disponibles. Puede definirse mediante la ecuación E=P/R, donde P son los productos resultantes y R los recursos utilizados" (CHIAVENATO, 2004) Para Koontz y Weihrich, la eficiencia es "el logro de las metas con la menor cantidad de recursos" (KOONTZ y WEIHRICH, 2004) Según Robbins y Coulter, la eficiencia consiste en "obtener los mayores resultados con la mínima inversión" (ROBBINS y COULTER, 2005) Para Reinaldo O. Da Silva, la eficiencia significa "operar de modo que los recursos sean utilizados de forma más adecuada" (OLIVEIRA DA SILVA, 2002) Aplicada a la Economía: Según Samuelson y Nordhaus, eficiencia "significa utilización de los recursos de la sociedad de la manera más eficaz posible para satisfacer las necesidades y los deseos de los individuos" ( SAMUELSON y NORDHAUS, 2002) Para Gregory Mankiw, la eficiencia es la "propiedad según la cual la sociedad aprovecha de la mejor manera posible sus recursos escasos" (MANKIW, 2004) Simón Andrade, define la eficiencia de la siguiente manera: "expresión que se emplea para medir la capacidad o cualidad de actuación de un sistema o sujeto económico, para lograr el cumplimiento de objetivos determinados, minimizando el empleo de recursos" (ANDRADE, 2005) Aplicada a la Mercadotecnia: 5 Según el Diccionario de Marketing, de Cultural S.A., la eficiencia es el "nivel de logro en la realización de objetivos por parte de un organismo con el menor coste de recursos financieros, humanos y tiempo, o con máxima consecución de los objetivos para un nivel dado de recursos (financieros, humanos, etc.)" Según el Diccionario de la Real Academia Española: Eficiencia (Del lat. efficientĭa) es la capacidad de disponer de alguien o de algo para conseguir un efecto determinado. El concepto de eficiencia económica tiene relación directa con producir a costo mínimo. “Se llega a una producción económicamente eficiente si se logra un costo mínimo por unidad de producción para una determinada tasa de utilización de los recursos, lo que significa que no se podría lograr un costo mínimo por unidad menor bajo ningún otro proceso de producción.” (LEROY MILLER, R y E.MEINERS, R. 2004) En base a estas definiciones de eficiencia, se puede hacer una propia definición tomando en cuenta los factores que ante el estudio son de mayor relevancia. Por ello, se dirá que “eficiencia es el grado en que se logran los objetivos con el menor coste en cantidad de recursos utilizados de una empresa, tomando en cuenta el correcto aprovechamiento de los medios de producción disponibles.” Definiéndose mediante la ecuación: (2.2.1) P=productos resultantes R=recursos utilizados 2.3 Oferta y Demanda La ley de la oferta se basa en que existe una relación directa entre la cantidad ofrecida de un bien y su precio. Esta relación quiere decir que la cantidad ofrecida de un bien aumenta cuando el precio de éste lo hace (y a su vez es más rentable producirlo). La misma relación ocurre cuando el precio del bien disminuye. La ley de la demanda se basa en el enunciado de la relación inversa entre el precio de un producto y la cantidad demandada de este, siendo menor esta última en la medida que el precio sea más alto (bajo otros factores constantes). La relación inversa se da cuanto menor sea el precio, aumentando la demanda de dicho producto. El decir “con los demás factores constantes” tiene que ver con el hecho de que el precio no es la única variable que afecta la cantidad de producto que pueden comprar los individuos, de hecho, hay otro factor relevante en este tema, y es el nivel de ingreso que ellos perciben, debido a que en el ejemplo de que si el precio de un bien cambia al mismo tiempo que varían los ingresos, no se puede determinar la relación en entre la cantidad comprada en base a estas variaciones. (LEROY MILLER, R y E.MEINERS, R. 2004). 2.3.1. Características de la Demanda Se denomina a la planificación de inventarios de tipo ciclo único o monoperiódica a aquella planificación de un producto cuya demanda ocurre una vez, independiente de si sea aleatoria o no, siendo almacenado este producto en un solo período. 6 Lo que ocurre con mayor frecuencia es lo contrario, es decir, que la demanda de un material (producto terminado, en curso o componente) se mantenga a lo largo del tiempo independiente de si es regular o no, continua o discontinua. Cuando éste es el caso, se emplean métodos de planificación multiperiódica. Por otro lado, el consumo de los ítems en inventario procede de dos tipos de demanda: La demanda dependiente, que se da cuando la necesidad de un artículo o ítem depende de la producción de otro (como es el caso de los componentes de un auto) decidido en la planificación de la producción del producto final. Este tipo de demanda no requiere pronóstico, sino simplemente una tabulación, pero que requiere una constante coordinación entre la planificación de inventarios y la de la producción en cuestión, usándose técnicas como la planificación de la necesidad de materiales (M.R.P) o J.I.T (just in time o justo a tiempo). El no requerir pronóstico no es el caso que ocurre para la demanda independiente, donde el consumo de un ítem o producto se comporta en forma aleatoria en función de las condiciones del mercado sin tener relación directa con el consumo de otros productos. Las estimaciones para este tipo de demanda se obtienen en base a previsiones y a pedidos de clientes, llamadas técnicas clásicas basadas en la optimización de los costes totales y el cálculo de un cierto stock que se asume como aceptable. (MACHUCA, 1995; B.CHASE, R. JACOBS, F y AQUILANO, N. 2005). 2.4 Inventarios o Stock “Se define como inventario o stock a cualquier recurso ocioso que es almacenado en espera de ser utilizado.” (MACHUCA, D. 1995) Inventario para la producción son los bienes que constituyen o forman parte del producto, dividiéndose en materias primas, insumos, materiales en proceso, componentes o productos terminados. En el caso de las empresas de servicio, se refiere a los bienes tangibles que serán vendidos y a los insumos necesarios para otorgar dicho servicio. En relación a lo que dice Machuca (1995) y Chase, Jacobs y Aquilano (2005), dependiendo del tipo de empresa, las funciones del inventario son variadas, pero todas responden a ciertas razones como son: 1. Absorber las variaciones ocurridas producto de la aleatoriedad de la demanda. 2. Evitar quiebres de stock por falta de suministros internos o externos, enfrentándose esta situación a través de lo que se denomina stock de seguridad. 3. Enfrentar la propia naturaleza de algunos procesos por no tener una producción 100 por ciento continua, lo que conlleva a cuellos de botella, atrasos, o reprocesos. 4. Necesidad de nivelar el flujo de producción, donde las empresas producen por encima de su demanda periódica en épocas bajas, para luego almacenar en tiempos donde la demanda supera sus niveles de producción (por ejemplo, demandas estacionales). 5. Producir cantidades superiores a las que se consumen inmediatamente debido a que se obtienen ventajas económicas como rebajas por cantidad, o disminución en los costos de preparación de equipos productivos. 7 6. Falta de acoplamiento entre la producción y el consumo: en que la producción se obtiene en un período determinado, pero el consumo se realiza a lo largo de todo el año (tiene directa relación con el punto 4 y 5). 7. Ahorrar por prever un alza en los precios, con lo que se opta por comprar o producir antes para guardar hasta el momento del consumo. 2.5 Almacén Antiguamente la función que el almacén desempeñaba en la empresa era de otorgar espacio físico para que las mercancías reposaran, pero eran tiempos donde la tensión financiera era menor y la vida de los productos era más estable, con menor tensión en el plazo del servicio al cliente y menos volátil. Actualmente hay que considerar aspectos importantes al momento de querer ser una empresa competitiva, como son: Mejorar el servicio al cliente disminuyendo el tiempo de respuesta y los errores o faltas cometidos en ellos. La constante necesidad de aumentar la productividad, donde el costo logístico de los productos (costo financiero del stock, manipulaciones, personal destinado al picking (preparación de pedidos), transporte a destino final, envases, embalajes, etc.) debe ser controlado y ajustado al mínimo sin perjudicar la calidad de servicio otorgado al cliente. El aumento en las cantidades de lo que se consume hoy en día, que es muy superior al que se consumía hace unos diez años atrás. Entonces se definirá “Almacén” como un subproceso operativo de optimización del espacio físico del almacén relacionado con la conservación y guarda de productos con los mínimos riesgos para éste, las personas y la compañía. En relación a los clientes, los pedidos van variando en dos sentidos: por un lado el cliente consume más, y por otro varía la composición de lo que pide, lo que implica un aumento en la producción y una disminución de líneas de pedido (no se desea stock). Se ha definido anteriormente lo que es logística, demanda e inventarios. Puede decirse que la logística es el terreno donde las empresas hoy deben lograr ventajas competitivas, siendo el punto clave la gestión de sus almacenes. (MAULEON, 2007). 2.6 Gestión de Almacenes. La Gestión de Almacenes es una función logística que involucra la recepción, almacenamiento y movimiento de cualquier material dentro de un mismo almacén, hasta el punto de consumo, así como la información que se genera en sus flujos o movimientos. El logro de una buena gestión de almacén permite: Reducir los costes de almacén y mejorar el servicio al cliente mediante la aceleración del proceso de gestión de pedidos. 8 Reducir las tareas administrativas proporcionando datos precisos y rápidos. Optimizar la utilización del espacio mediante la mejora en la distribución del almacén. (CHASE, R., JACOBS, F. y AQUILANO, N. 2005). Es importante distinguir la gestión de Almacenes con Gestión de Inventarios. La Gestión de Inventarios indica, qué, cuánto, a cuánto y cuándo debe ser almacenado, o se debe entregar (en el caso de las relaciones empresa-proveedor). En resumen: Cuándo se deben ordenar los artículos Cuál debe ser el volumen de la orden. Mientras que la Gestión de Almacén indica, dónde y cómo debe ser almacenado. (DSLC, CONSULTORIA Y SISTEMAS DE LOGISTICA INTEGRAL, S.L.L. 2006.) 2.6.1 Sistema de gestión del almacén. Se entiende por tal al sistema que establece la manera u orden en que saldrán los materiales del almacén, influyendo directamente sobre el tiempo de permanencia de los materiales en éste. Usualmente el sistema más usado es el FIFO, donde el primer material o producto que llega al almacén, es el primero en irse del mismo, así se evitan por ejemplo pérdidas de productos por fechas de vencimiento alcanzadas. (FCC LOGISTICA, S.A- BU.AUTOMOCIÓN. 2006). 2.7 Manejo De Materiales El manejo de materiales debe asegurar que estos sigan su desplazamiento periódico de un lugar a otro, en el momento, lugar y cantidad correcta, considerando para ello un espacio de almacenamiento. Las tecnologías para el manejo de materiales actualmente son prioridad para aumentar la productividad y usar esto como ventaja competitiva, y formando parte importante de la planificación, control y logística debido a que abarca el manejo físico, transporte, almacenaje y localización de los materiales. Un flujo eficiente de materiales es aquel que siempre vela por seguir la línea de terminado del producto, sin retrocesos o atrasos (HOPEMAN, R. 1973). Los factores que afectan el flujo pueden ser: Medio de transporte externo. Número de partes en el producto y operaciones de cada parte. Secuencia de las operaciones de cada componente y número de subensambles. Número de unidades a producir y flujo necesario entre áreas de trabajo. Cantidad y forma del espacio disponible. Influencia de los procesos y ubicación de las áreas de servicio. 9 Almacenaje de materiales. Los lugares de almacenamiento de bienes se denominan “bodegas”. Estas bodegas tienen bajo su responsabilidad las siguientes actividades: Recepción y verificación del estado de productos entregados por los proveedores. Ubicación, control de calidad y custodia de los productos. Entrega de los productos almacenados en óptimas condiciones a los usuarios solicitantes. Pueden existir dos tipos de bodega: Bodegas centrales y de tránsito. Bodegas De Tránsito: Son bodegas temporales en las cuales se almacenan los productos en un corto periodo de tiempo. En estas bodegas pueden encontrarse materiales en tránsito, locales o importados. Bodegas Centrales: Son bodegas que mantienen el almacenamiento permanente de bienes. El espacio para almacenamiento a menudo resulta de cálculos hechos con programas de computadoras, usando información de almacenamiento para otros propósitos. Unos pocos cálculos serán necesarios para hacer una aproximación del espacio requerido para almacén en una planta. Algunos de los factores a considerar en situaciones ordinarias de almacenamiento: (KRAJEWSKI, L. y RITZMAN, R. 2000). El volumen de la producción Espacio disponible La tasa de producción La producción del producto Tiempo de almacenamiento Costo de almacenamiento Volumen de almacenamiento requerido 2.8 Programación dinámica. La programación dinámica encuentra la solución óptima de un problema con n variables, descomponiéndolo en n etapas, siendo cada etapa un subproblema de una sola variable. Sin embargo, como la naturaleza de la etapa difiere de acuerdo con el problema de optimización, la programación dinámica no proporciona los detalles de cómputo para optimizar cada etapa. Los cálculos de programación dinámica se hacen en forma recursiva, ya que la solución óptima de un problema se usa como dato para el siguiente subproblema. Para cuando se resuelve el último subproblema queda a la mano la solución optima de todo el problema. La forma en la que se hacen los cálculos recursivos, dependen de cómo se descomponga el problema original. En particular, los 10 subproblemas se vinculan normalmente mediante restricciones comunes. Al pasar de un subproblema al siguiente se debe mantener la factibilidad de esas restricciones comunes. (TAHA, H. 2004). La programación dinámica probabilística (PDP) es una técnica matemática útil para la toma de decisiones interrelacionadas, se presenta cuando el estado en la siguiente etapa no está determinado por completo por el estado y la política de decisión de la etapa actual. En su lugar existe una distribución de probabilidad para determinar si queda bien determinada por el estado y la política de decisión en la etapa actual. Por otro lado, cabe resaltar qué: cuando el estado en la siguiente etapa está determinado por completo por el estado y la política de decisión de la etapa actual, entonces este problema corresponde a programación dinámica determinística (PDD). Las estructuras básicas de la PDD y la PDP se observan en la siguiente tabla: Figura N° 2.1: Programación Dinámica Determinística Fuente: Investigación de Operaciones, HILLIER, F y LIEBERMAN, G.2006 Figura N° 2.2: Programación Dinámica Probabilística. Fuente: Investigación de Operaciones, HILLIER, F y LIEBERMAN, G.2006 En la programación dinámica (sea PDD O PDP), se utiliza una relación recursiva que identifica la política para la etapa n, dada la política para la etapa n+1. La forma precisa de la relación recursiva difiere de un problema a otro de PD (sea PDD o PDP), pero se usa notación general como se resume a continuación: 11 . Los elementos básicos de un modelo te programación dinámica son: 1. Definición de las etapas. 2. Definición de las alternativas en cada etapa. 3. Definición de los estados para cada etapa. Tomando en cuenta las siguientes preguntas: 1. ¿qué relaciones vinculan entre sí a las etapas? 2. ¿qué información se necesita para tomar decisiones factibles en la etapa actual sin volver a examinar las decisiones tomadas en las etapas anteriores? De esta manera se pueden definir etapas de la programación dinámica: 1. El problema se puede dividir en etapas que requieran una política de decisión en cada una de ellas. 2. Cada etapa tiene cierto número de estados asociados con su inicio. 3. El efecto de la política de decisión en cada etapa es transformar el estado actual en un estado asociado con el inicio de la siguiente etapa. (Quizá según una distribución de probabilidad). 4. El procedimiento de solución está diseñado para encontrar una política óptima para el problema completo, es decir, una receta para la política de decisión óptima en cada etapa para cada uno de los estados posibles. 5. Dado el estado actual, una política óptima para las etapas restantes es independiente de la política adoptada en etapas anteriores. Por lo tanto, la decisión inmediata óptima depende solo del estado y no de cómo se llegó ahí. Este es el principio de optimalidad para programación dinámica (sea PDD Ó PDP). 6. El procedimiento de solución se inicia al encontrar la política óptima para la última etapa. 12 7. Se dispone de una relación recursiva que identifica la política óptima para la etapa n, dada la política óptima para la etapa n+1. 8. Cuando se usa esta relación recursiva, el procedimiento de solución comienza al final y se mueve hacia atrás, etapa por etapa (encuentra cada vez la política óptima para esa etapa) hasta que encuentra la política óptima desde la etapa inicial. Esta política óptima lleva de inmediato a una solución óptima para el problema completo, a saber, para el estado inicial , después para el estado que resulta y así sucesivamente hasta para el estado . (HILLIER, F y LIEBERMAN, G.2006). 2.9 Simulación de Procesos. Antes de entrar en la definición de Simulación, se deben considerar dos definiciones importantes: Sistema y Modelo, los que a su vez ayudan a entrar en la definición de simulación de sistemas. 2.9.1 Sistema Es una colección de entidades relacionadas, cada una de las cuales se caracteriza por atributos o características que pueden estar relacionados entre sí. Los objetivos que se persiguen al estudiar uno o varios fenómenos en función de un sistema son aprender cómo cambian los estados, predecir el cambio y controlarlo. Sus conceptos básicos son Entidad, Relación, Estructura y Estado (TORRES, A. 2009). 2.9.2 Modelo Según la RAE (2011), es un arquetipo o punto de referencia para imitarlo o reproducirlo. Otra definición, tomada desde el DICCIONARIO DE INFORMATICA (2011) define modelo como la representación de la realidad por medio de abstracciones. Los modelos enfocan ciertas partes importantes de un sistema (por lo menos, aquella que le interesan a un tipo de modelo específico), restándole importancia a las otras. 2.9.3 Simulación Jerry Banks define simulación como el desarrollo de un modelo lógico matemático de un sistema, de tal forma que se tiene una imitación de la operación de un proceso de la vida real o de un sistema a través del tiempo. La simulación involucra la generación de una historia artificial de un sistema, la observación de esta historia mediante la manipulación experimental, nos ayuda a inferir las características operacionales de tal sistema (BANKS et al, 1996). En los negocios se refiere a emplear una computadora para hacer experimentos con un modelo de un sistema real. Se pueden emprender los experimentos en la simulación antes de que un sistema real esté operando, para ayudar a diseñarlo, para observar cómo reaccionaría el sistema ante cambios en sus reglas de operación o para evaluar la respuesta del sistema ante cambios en su estructura. La simulación es especialmente adecuada para situaciones donde el tamaño o la complejidad del problema hacen que las técnicas para la optimización resulten difíciles o impracticables. Se usa también la simulación junto con las técnicas tradicionales de la estadística y la ciencia de la administración. Por otro lado, la simulación ayuda a entender cómo funciona el sistema real mostrando los efectos de los cambios en las variables del sistema, cómo controlar en tiempo real y cómo desarrollar ideas nuevas para manejar un negocio (CHASE, R., JACOBS, F. y AQUILANO, N. 2005) 13 Simulación es, principalmente, una técnica para estimar las medidas de desempeño de un sistema modelado (LAW, 2000). Es una de las técnicas más ampliamente usadas en Investigación de Operaciones y Ciencias de la Administración. Sencillamente es un modelo que simula una situación real, o algún modelo que genera situaciones artificiales creadas para estudiar su comportamiento. (¿Qué pasaría en caso de?). La simulación no es la solución inmediata a cualquier problema que se detecte. La observación previa del sistema real en operación es sumamente trascendental ya que en base a eso se toma la decisión de simular o usar otra herramienta que permita obtener los resultados deseados, dándole prioridad a los modelos matemáticos, ya que estos encuentran la solución optima a los problemas, a diferencia de la simulación que plantea escenarios que deben ser estudiados para poder encontrar los mejores. Es por ello que la simulación es para explicar, entender o mejorar el sistema y no para optimizar (LAW, 2000). 2.9.4 Áreas de aplicación de la Simulación La simulación es una técnica que puede ser aplicada a una gran cantidad de áreas, debido a que los avances tecnológicos y la disponibilidad de software que existen actualmente, hacen de ella una herramienta muy útil. Algunas áreas de estudio son (TORRES, A. 2009.) Sistemas de colas Sistemas de inventarios Proyecto de inversión Sistemas económicos Estados financieros Problemas económicos Problemas conductuales y sociales Sistemas biomédicos Sistemas Justo a Tiempo Sistemas de Logística 2.9.5 Programas y Lenguajes de Simulación Los modelos de simulación se clasifican en continuos y discretos. Los continuos están basados en ecuaciones matemáticas y, por lo tanto, son continuos y tienen valores para todos los puntos en el tiempo. Por otra parte, la simulación discreta sólo ocurre en puntos específicos. Por ejemplo, los clientes que llegan a la ventanilla del cajero del banco serían una simulación discreta. La simulación salta de punto en punto; la llegada de un cliente, el inicio del servicio, el final del servicio, la llegada del siguiente cliente y así en forma sucesiva. También se pude activar la corrida de simulación discreta empleando unidades de tiempo (día, hora, minuto a minuto. Esto se llama simulación de hechos, los puntos entre uno y otro no tienen valor en nuestra simulación o no podemos calcularlos debido a la falta de alguna especie de relación matemática que ligue los hechos posteriores. Las aplicaciones para la administración de operaciones usan casi exclusivamente la simulación discreta (hechos). En una simulación 14 especializada para las manufacturas, el modelo nos permitirá especificar la cantidad de centros de trabajo, incluir su descripción, tasas de llegada, tiempo de procesamiento, tamaño de los lotes, volumen de trabajo en procesos, recursos disponibles (inclusive mano de obra), secuencias y demás. El programa también podría permitir que el interesado vea una operación animada y observe los volúmenes y los flujos por todo el sistema a medida que la simulación va corriendo. Los datos son reunidos, analizados y presentados en la forma más adecuada para ese tipo de aplicación. 2.9.6 Ventajas y Desventajas de Simulación (TORRES, A. 2009) Ventajas: a. Crear el modelo de un sistema permite, generalmente, entender mejor el sistema real. b. En una simulación se puede comprimir el tiempo, es decir, se puede comprimir los muchos años de experiencia del sistema real a unos cuantos segundos o minutos. c. La simulación no interrumpe las actividades que están desarrollándose en el sistema real. d. La simulación es mucho más general que los modelos matemáticos y la podemos usar cuando las condiciones no son idóneas para un análisis matemático estándar. e. Podemos usar la simulación como un juego que brinda una experiencia para la capacitación. f. La simulación ofrece una réplica más realista de un sistema que un análisis matemático. g. Se puede usar la simulación para analizar condiciones transitorias, mientras que las técnicas matemáticas normalmente no permiten hacerlo. h. Existen en el mercado muchos paquetes estándar de modelos que abarcan amplia gama de temas. i. La simulación contesta preguntas de “qué pasaría si…” Desventajas: a. Si bien se puede invertir mucho tiempo y esfuerzo para crear un modelo para la simulación, no existe garantía alguna de que éste, de hecho, ofrezca buenas respuestas. b. No hay manera de demostrar que el desempeño del modelo de la simulación es fiable por completo. La simulación entraña numerosas repeticiones de secuencias, que están basadas en ocurrencias generadas en forma aleatoria. Un sistema aparentemente estable, dado la combinación correcta de hechos (aun cuando sea poco probable), puede explotar. c. De acuerdo con el sistema que simularemos, la creación de un modelo simulado puede tomar desde una hora hasta 100 años-hombre. Los sistemas complicados pueden ser caros y tomar mucho tiempo. d. La simulación puede ser menos exacta que el análisis matemático, porque está basada en el aspecto aleatorio. Si podemos representar un sistema dado con un modelo matemático, en lugar de con una simulación podría ser más aconsejable usar primero. e. Tal vez se necesite mucho tiempo de computadora para correr modelos complejos. 15 f. La técnica de la simulación, si bien ha avanzado, aún tiene el defecto de carecer de un enfoque estandarizado. Por lo tanto, los modelos del mismo sistema, creados por distintas personas, podrían ser muy diferentes entre sí. 2.9.7 Peligros y problemas en Simulación Definir los límites y nivel de detalles del sistema. Subestimar el tiempo y costos involucrados en el proceso de modelación. Fallar en la selección del más simple y económico de los modelos para el fin establecido. Ausencia o pérdida de metodología estadística. Considerar como aproximados algunos atributos de un sistema que no existe. Entendimiento superficial del sistema a ser modelado. Poca destreza para comunicarse con administradores y staff que financiarán el proyecto. 2.9.8 Software de Simulación Flexsim Flexsim es un software de simulación orientado a los procesos de manufactura, logística, manejo de materiales y servicios, de manera tal que evita los altos costos de pruebas reales en situaciones, modelando ficticiamente en el programa usando como base datos obtenidos de los diferentes escenarios y condiciones, mostrando la solución más convincente bajo una interfaz en 3D totalmente animada. Sus resultados se traducen en gráficas, reportes y estadísticas que ayudan a la comunicación y compresión de las ideas para una correcta toma de decisiones. (FLEXSIM MEXICO, 2009). 2.9.9 Terminología del Software Flexsim Flexsim Objects: Entre los objetos que posee el software Flexsim estan el Source (fuente de entidades), Queue (cola), Sink (salida de entidades), Conveyor (correas transportadoras), Combiner (combinador), Separator (Separador), Transporter (transporte),etc. Flowitems: Los ítems de flujo (o entidades) son los objetos que se mueven a través del modelo. Estos ítems pueden ser piezas, papel, contenedores o cualquier cosa que se mueva a través del modelo. La mayoría tienen procesos que se realizan sobre ellos o son transportados a través del modelo por otros recursos. Itemtype: El tipo de ítem es una etiqueta colocada en el ítem de flujo que podría representar un código de barras, un tipo de producto o el número de una pieza. Una entidad (Flowitem) define la clase básica de producto o pieza, por otra parte el tipo de ítem define el tipo de pieza individual o el número de pieza dentro de las clases de entidades. Ports: Todo objeto Flexsim tiene un número ilimitado de puertos a través de los cuales se comunican con otros objetos. Hay tres tipos de puertos: Input, output y central. Los dos primeros se utilizan para el ruteo de los items de flujo o para las vías para recursos móviles. Los puertos centrales son usados para crear referencias, o punteros entre los objetos. 16 Objetos del Software de Simulación Flexsim. Los objetos usados en este proyecto de título son: Figura N° 2.9.1 Objetos Simulador Flexsim Fuente: Software de Simulación Flexsim La “Source” (Fuente) Es usada para crear los “flowitems” (Entidades) que viajan a través del modelo. Cada “Source” crea una clase de “flowitem” y les puede asignar propiedades tales como un tipo de ítem o color. Los modelos deben tener al menos un “Source” en ellos. “Source”s pueden crear “flowitems” por una tasa entre llegadas, por una lista programada de llegadas o simplemente desde una secuencia definida de llegadas. El “Sink” es usado para destruir los “flowitems” que salen del modelo. Una vez que un “flowitem” llega al “Sink” este no se puede recuperar. Cualquier recolección de datos que envuelven algún “flowitem” que va a dejar el sistema debe hacerse justo antes de entrar al “Sink” o en la pestaña del trigger: “OnEntry” del “Sink” La “Queue” (Cola) es usada para que permanezcan los “flowitems” cuando un objeto posterior en la línea no puede aceptarlos aún. Por defecto la “Queue” trabaja con disciplina FIFO (First In First Out: primero en entrar, primero en salir). La “Queue” tiene opciones para acumular “flowitems” antes de que los suelte para entregarlos a los objetos posteriores. El “Processor” es usado para simular el procesamiento de “flowitems”en un modelo. El proceso es modelado simplemente como un retraso de tiempo forzado. El tiempo total está dividido entre un tiempo de setup y un tiempo de proceso. El “Processor” puede procesar más de un “flowitem”, a la vez. Además puede ser determinada la falla y reparación de un procesador a intervalos regulares o aleatorios. Los “Processor” pueden llamar por operadores durante sus tiempos de setup, proceso y/o reparación. Cuando un procesador falla, todos los “flowitems” que está procesando se retrasarán. (DIAZ,M. MELLA,H. 2005.) 2.9.10 Metodología de simulación Jerry Banks (2005), propone una metodología de construcción de un Modelo de Simulación, donde los pasos a seguir en un estudio de simulación según lo que este autor plantea son: 1. Definición del Sistema: es la descripción del problema: características principales, alcance y aéreas involucradas, definiéndose fronteras para la simulación, restricciones y medidas de efectividad que se usarán 2. Formulación del modelo: elaboración de un diagrama de flujo lógico del proceso. 3. Preparación de datos: Identificación de los datos requeridos para el modelo y elección adecuada para una reducción objetiva de ellos. 17 4. Selección del lenguaje de Simulación: en este caso el software de simulación Flexsim. 5. Translación del modelo: generación de los códigos computacionales para lograr que el modelo sea ejecutado. 6. Validación del modelo: determinación de la confiabilidad que tiene el modelo para representar la realidad, haciendo comparaciones a través del uso de resultados históricos con sus datos, aplicándolos al modelo. 7. Planeación Estratégica: diseño de un experimento que producirá la información deseada. 8. Planeación Táctica: determinación de cómo se realizara cada una de las corridas de prueba. 9. Experimentación: corrida de la simulación para obtener datos y efectuar análisis de sensibilidad. 10. Interpretación: obtención de inferencias con base en datos generados por la simulación. 11. Implantación: selección de la mejor alternativa para llevarla a la práctica, teniendo cuidado con las suposiciones que se hicieron al iniciar el proceso de simulación. 12. Monitoreo y Control: modificaciones del modelo dependiendo de la reacción del proceso al ser implementado y los resultados esperados, de modo que el modelo sea realmente una representación del sistema. Esta metodología se ve representada en la Figura N° 2.3: 18 Figura N° 2.3: Metodología de Simulación de Jerry Banks. Fuente: Elaboración propia en Microsoft Office Visio 2007 2.10 Técnicas de Prueba de Software El desarrollo de sistemas de software implica una serie de actividades de producción en las que las posibilidades de que un error humano se presente son altas. Estos errores pueden presentarse desde un comienzo si los objetivos están mal planteados o pueden aparecer en los pasos posteriores de diseño 19 y/o desarrollo. Es por ello que siempre debe ir acompañado de pruebas hacia él que ayuden a comprobar estos errores, para así corregirlos y garantizar la calidad de lo que se ha logrado. Cualquier producto de ingeniería puede probarse de una de estas dos formas: (1). Conociendo la función para la que fue diseñado el producto, se pueden llevar a cabo pruebas que demuestren que cada función es completamente operativa y buscando a su vez errores de cada función. (2). Conociendo el funcionamiento del producto se pueden hacer pruebas que aseguren que la operación interna se ajusta a las especificaciones y los componentes funcionan correctamente. El software debe probarse entonces desde dos perspectivas diferentes: Tomando en cuenta el punto (1), la lógica interna del programa se comprueba utilizando técnicas de diseño de casos de prueba de “caja blanca”. Tomando en cuenta el punto (2), los requisitos del software se comprueban utilizando técnicas de diseño de casos de prueba de “caja negra”. En ambos casos, se intenta encontrar la mayor cantidad de errores con la menor cantidad de esfuerzo y tiempo. 2.10.1 Pruebas de Caja Negra Cuando se considera el software de computadora, la “prueba de caja” negra se refiere a las pruebas que se llevan a cabo sobre la interfaz del software. O sea, los casos de prueba pretenden demostrar que las funciones del software son operativas, que la entrada se acepta de forma adecuada y que se produce un resultado correcto, así como que la integridad de la información externa (por ejemplo, archivos de datos) se mantiene. Una prueba de caja negra examina algunos aspectos del modelo fundamental del sistema sin tener mucho en cuenta la estructura lógica interna del software. Las pruebas de caja negra, también denominada “prueba de comportamiento”, se centran en los requisitos funcionales del software. O sea, la prueba de caja negra permite al ingeniero del software obtener conjuntos de condiciones de entrada que ejerciten completamente todos los requisitos funcionales de un programa. La prueba de caja negra no es una alternativa a las técnicas de prueba de caja blanca. Más bien se trata de un enfoque complementario que intenta descubrir diferentes tipos de errores que los métodos de caja blanca. La prueba de caja negra intenta encontrar errores de las siguientes categorías: (1) funciones incorrectas o ausentes, (2) errores de interfaz, (3) errores en estructuras de datos o en accesos a bases de datos externas, (4) errores de rendimiento y (5) errores de inicialización y de terminación. A diferencia de la prueba de caja blanca, que se lleva a cabo previamente en el proceso de prueba, la prueba de caja negra tiende a aplicarse durante fases posteriores de la prueba. Ya que la prueba de caja negra ignora intencionadamente la estructura de control, centra su atención en el campo de la información. Las pruebas se diseñan para responder a las siguientes preguntas: ¿Cómo se prueba la validez funcional? ¿Cómo se prueba el rendimiento y el comportamiento del sistema? 20 ¿Qué clases de entrada compondrán unos buenos casos de prueba? ¿Es el sistema particularmente sensible a ciertos valores de entrada? ¿De qué forma están aislados los límites de una clase de datos? ¿Qué volúmenes y niveles de datos tolerará el sistema? ¿Qué efectos sobre la operación del sistema tendrán combinaciones específicas de datos? Mediante las técnicas de prueba de caja negra se obtiene un conjunto de casos de prueba que satisfacen los siguientes criterios: (1) casos de prueba que reducen, en un coeficiente que es mayor que uno, el número de casos de prueba adicionales que se deben diseñar para alcanzar una prueba razonable y (2) casos de prueba que nos dicen algo sobre la presencia o ausencia de clases de errores en lugar de errores asociados solamente con la prueba que estamos realizando. 2.10.2 Pruebas de Caja Blanca La “prueba de caja blanca” del software se basa en el minucioso examen de los detalles procedimentales. Se comprueban los caminos lógicos del software proponiendo casos de prueba que ejerciten conjuntos específicos de condiciones y/o bucles. Se puede examinar el «estado del programa» en varios puntos para determinar si el estado real coincide con el esperado o mencionado. Todo lo que tenemos que hacer es definir todos los caminos lógicos, desarrollar casos de prueba que los ejerciten y evaluar los resultados, es decir, generar casos de prueba que ejerciten exhaustivamente la lógica del programa La prueba de caja blanca, denominada a veces “prueba de caja de cristal” es un método de diseño de casos de prueba que usa la estructura de control del diseño procedimental para obtener los casos de prueba. Mediante los métodos de prueba de caja blanca, el ingeniero del software puede obtener casos de prueba que (1) garanticen que se ejercita por lo menos una vez todos los caminos independientes de cada módulo; (2) ejerciten todas las decisiones lógicas en sus vertientes verdadera y falsa; (3) ejecuten todos los bucles en sus límites y con sus límites operacionales; y (4) ejerciten las estructuras internas de datos para asegurar su validez. (PRESSMAN, R. 2002) 21 3. METODOLOGÍA Esta metodología se basó en los pasos a seguir para resolver un problema de simulación de Jerry Banks, que son los siguientes: Definición del Sistema, Formulación del modelo, Preparación de datos, Selección del lenguaje de Simulación, Translación del modelo, Validación del modelo, Planeación Estratégica, Planeación Táctica, Experimentación, Interpretación, Implantación, Monitoreo y Control. Sin embargo, lo que plantea esta nueva metodología difiere en dos etapas del proceso: La primera diferencia se da donde antes de traducir el problema al modelo se desarrolló un algoritmo de programación dinámica para encontrar resultados óptimos con el fin de ingresarlo en la programación que se hace sobre los diferentes objetos que se usan en la programación del simulador. Esta manera de enfocarlo es el resultado de querer lograr que los diferentes escenarios que se puedan mostrar siempre logren modelar realidades con resultados óptimos cuyo valor dependa de los variables de entrada. La segunda diferencia radica en que no se realizan corridas de producción debido a la naturaleza del desarrollo de este problema, y a la manera de enfrentarlo (no hay datos estadísticos que se ingresen al sistema), por lo tanto las corridas de producción no se efectuaron para validar el modelo. Lo que sí se efectuaron fueron pruebas de software basados en las técnicas planteadas por Pressman (2002) para comprobar el comportamiento en el procesamiento de datos y arboles de decisión programados para ciertos objetos. Las etapas de la esta metodología son las siguientes: 1. Definición del problema: se obtuvieron las características principales, alcance y áreas involucradas. 2. Planteamiento de Objetivos: se plantearon los alcances a los que se postulan con el estudio de abastecimiento aplicado a simulación. 3. Modelo de Conceptualización: se realizó un diagrama de flujo lógico que describe las etapas del proceso de abastecimiento. 4. Obtención de datos: La obtención de datos no fue un requerimiento de primera instancia debido a la decisión de generalizar el modelo para cualquier empresa de mitílidos que tenga dichos problemas de transporte. Una vez desarrollado el modelo general, se necesitaron datos verdaderos para ingresarlos al sistema y analizar el comportamiento. La descripción de estos datos se detalla en el capítulo siguiente. 5. Diseño de algoritmo en programación dinámica: usando herramientas básicas de orden y lógica secuencial se desarrolló un algoritmo que otorga resultados óptimos de distribución dependiendo de la capacidad y costos de almacenamiento de los frigoríficos resultando un algoritmo de programación dinámica. 6. Traducción a Modelo: Se desarrollaron dos modelos, uno que simula la realidad del problema basado en datos históricos de demanda y embarques, y otro que deja a disposición las variables de entrada que se pueden ingresar, como son: costo de transporte, costo de almacenamiento, producción por día y demanda diaria. Cada modelo tiene su propio código en el software de simulación Flexsim 5. 7. Verificación y Validación: mediante el análisis de prueba de software se plantearon situaciones críticas, y se verificaron y validaron sus resultados. 8. Diseño experimental: se plantearon dos escenarios para el Modelo Específico desarrollado. 22 8. Análisis y Documentación: se realizó un análisis general del Modelo Genérico y un Análisis un más detallado del Modelo Específico tomando en cuenta los escenarios desarrollados en el Diseño Experimental, documentándose las tablas de ingreso de datos, las tablas de producción y demanda histórica, los códigos de programación dinámica y los códigos más importantes que contienen los objetos usados en el simulador Flexsim. 9. Implementación: se sugirieron áreas de prueba para la implementación de esta herramienta de simulación, así como maneras o guías de ejecutarlo e ingresar datos. Figura N° 3.1: Metodología Propuesta de Simulación de Abastecimiento en Frigoríficos. Fuente: Elaboración propia en Microsoft Office Visio 2007 Es importante recalcar que en estudios de simulación de procesos, no hay una amplia gama de autores que brinden mayor información o información diferente respecto a los pasos que se deben seguir en análisis de este tipo de problemas. 23 4. APLICACIÓN DE LA METODOLOGÍA 4.1 Identificación del Problema La formulación del problema es el primer paso de la metodología para un estudio de simulación propuesta por Law (2000) o Banks (1996). Para lograr la formulación del problema, se llevaron a cabo reuniones con el jefe del área de ingeniería de una empresa exportadora de mitílidos. En estas reuniones se manifestó el deseo de querer manejar la información general de sus costos de almacenamiento de una manera más eficiente y clara. Cabe destacar que este tipo de problema no es particular, es decir, se presenta en variadas empresas del área mitilicultora, por lo que la formulación del problema, se desarrollo planteándolo desde un punto de vista general. En la situación descrita, la ausencia de una capacidad de almacenamiento en frio que abarque la producción completa de una planta es el problema principal. El hecho de tener un frigorífico con una capacidad pequeña en comparación con el nivel de producción de carne a granel que llegan a alcanzar en épocas de producción alta, obliga a las empresas mitilicultoras a almacenar en frigoríficos externos que, aparte de tener tarifas de almacenamiento más altas, se encuentran ubicadas en distintos lugares de la décima región, por lo que se incurre en costos de transporte adicionales, así como en tiempo y esfuerzo logístico por lograr que éstos costos sean los mínimos posibles para no afectar el precio en el producto final. La relación producción-almacenamiento-demanda en relación a los costos es la que no se maneja, así como la decisión de hacia dónde enviar dependiendo de los costos de almacenamiento y transporte. La formulación del problema de acuerdo a lo escrito anteriormente, consistió en: “Determinar mediante un modelo de simulación, la relación de costos entre “producción-almacenamiento” en relación a la demanda y a los frigoríficos donde se almacene el producto.” En otras palabras, para efectos de una idea general, se tiene una fuente procesadora (que entrega ciertas cantidades de producto a granel), un frigorífico interno con una capacidad limitada que recibe este producto para almacenarlo, y una cantidad “x” de frigoríficos externos, cada uno con sus respetivas tarifas de almacenamiento por unidad de tiempo y a diferentes distancias de la fuente procesadora. A su vez, se tiene una demanda que hay que cumplir y una cantidad de producción estimada para cada mes de producción. La figura 4.1 representa un esquema general de la formulación del problema. 24 Figura N° 4.1: Esquematización Formulación del Problema Fuente: elaboración propia Microsoft Office Visio 2007 4.2 Planteamiento de Objetivos Si bien está planteado anteriormente el Objetivo General y Objetivos Específicos de este proyecto de título, también se plantearon objetivos para el momento de la simulación en el software Flexsim, que son: 1. Se debe realizar un modelo de manera tal, que pueda ser usado por las versiones de prueba del software Flexsim, es decir, sin necesidad de instalar la versión completa ni tener que usar la llave que viene en formato de puerto USV. 2. Este objetivo está planteado debido a que las empresas, al no conocer en profundidad este software, a primera instancia no están dispuestas a pagar el precio de compra de este. 3. La fijación del primer objetivo conlleva a otro, que es crear un modelo que no tenga más de 15 objetos, que es la cantidad máxima que permiten las versiones de prueba. 4. Respecto a los resultados que entregue el software, éste debe poder indicar en qué frigorífico se debe almacenar una cierta cantidad de producción, de manera tal que los costos sean mínimos. A su vez, debe indicar los flujos de las entidades, es decir: cuál ha sido la ruta (frigorífico) del producto, el tiempo de almacenamiento y el costo involucrado. 25 Los puntos 3 y 4 son los que involucran un paso adicional de esta aplicación del problema a un modelo de simulación, puesto que para poder entregar las respuestas a estos objetivos se desarrolló, del área de Investigación de Operaciones, un algoritmo de programación dinámica determinística, y se insertó como en la programación de los objetos del software Flexsim. 4.3 Modelo de Conceptualización El diagrama de flujo lógico que describe las etapas del proceso de abastecimiento se aprecia en la Figura N° 4.2. Figura N° 4.2: Diagrama de Flujo Proceso Abastecimiento Fuente: Elaboración propia en Microsoft Office Visio 2007 26 La Figura N° 4.2 representa el flujo que sigue la carne a granel una vez que sale de la planta con destino a ser almacenada para su posterior reprocesamiento una vez vendida. Cuando sale una cierta cantidad de carne a granel, la prioridad de almacenamiento es el frigorífico interno debido a los costos bajos que implican dejarlo ahí, pero si éste no cuenta con la capacidad para almacenar toda la cantidad recién salida de planta, entonces se divide la producción, enviando la cantidad que se puede almacenar en el frigorífico interno, y la diferencia enviándola a algún frigorífico externo. En otras palabras, el diagrama de flujo de abastecimiento, representa la dinámica de decisiones al momento de almacenar la carne a granel y al momento de tener que sacar esta carne almacenada en frio y transportarla de vuelta a la planta para su proceso final de empaque y embarque. Se muestra un solo frigorífico externo de gran capacidad como el representante de todos los frigoríficos externos que se ocupen. Esto se hiso porque la forma de tomar la decisión es la misma si hay uno o más frigoríficos siempre y cuando las tarifas de almacenamiento de éstos sean las mismas o tengan una variación pequeña. En caso de que esto no ocurra, es decir, haya más de un frigorífico externo y cada uno tenga sus costos de almacenaje y costos de transporte, se hace un árbol de decisión que se presenta más adelante cuando se desarrolla un algoritmo de programación dinámica determinística para poder programarlo e ingresarlo al software Flexsim. 4.4 Recopilación de datos Los datos requeridos para ingresar al modelo desarrollado fueron: 1. Capacidad de frigorífico interno. 2. Costos globales en el uso del frigorífico interno. 3. Cantidad de frigoríficos externos usados actualmente. 4. Capacidad de frigoríficos externos. 5. Costo de Almacenamiento en frigoríficos externos. 6. Descripción de los servicios que incluyen esos costos de almacenamiento en frigoríficos externos. 7. Costos de transporte. 8. Datos históricos de las cantidades de producto almacenadas durante al menos un año. 9. Datos históricos de la demanda durante al menos un año. Estos datos se estandarizaron en cuanto a unidades sin desmedro de lograr resultados reales, lo que se explica a continuación en el punto 4.3.1. A su vez se definieron los límites y áreas sobre las que se iba a desarrollar el modelo, definiéndose que se trabajaría sobre las cantidades producidas sin tomar en cuenta el costo de producción ni el costo de reproceso (que es el costo en que se incurre una vez que la carne a granel ha vuelto a la planta procesadora) de los productos. 27 4.4.1 Estandarización de datos y supuestos Al momento de crear el modelo, se estableció como “entidad de flujo” a una camionada, cuya capacidad de transporte es de 10 toneladas. Esto se hiso debido a que si en el modelo se toma como entidad de flujo a la tonelada, este experimenta problemas en la versión de prueba del Flexsim por lo tanto no se logra cumplir con el objetivo n°1 planteado en el punto 4.2 de la aplicación de la metodología. El punto uno a su vez obligó a tener que redondear al número mayor las cantidades de toneladas procesadas cuando éstas no sumaban camionadas exactas. Los costos de transporte que se ingresan son los costos totales por camionada, es decir 10 toneladas, o en otras palabras, el flete de ida hacia algún frigorífico en un camión con capacidad para 10 toneladas. A este costo se le debe incluir el gasto por concepto de entrada de productos al frigorífico (costo por concepto de entrada y salida de productos divido en dos). Para el costo de almacenamiento se ingresa lo que cuesta almacenar una tonelada al mes en cada frigorífico. Al igual que los datos anteriores, las capacidades de los frigoríficos se ingresan en camionadas. Los días en que ocurre producción y demanda son ingresados como calendario Juliano tomando en cuenta el día 1 como el primer día de producción de la temporada que se esté ingresando. Estos días son multiplicados por 10 debido a que se estableció que 10 unidades de tiempo en el software equivalen a 1 día de producción en la planta ya que de esta manera se puede apreciar de mejor manera el comportamiento del proceso en la toma de decisiones. 4.5 Diseño de algoritmo en programación dinámica Cuando se planteó el problema y se tomó la decisión de generalizar éste para cualquier situación en la que los costos de almacenar externamente sean variables, se determinó que la mejor manera de obtener resultados óptimos era desarrollando un algoritmo tal, que pudiese ser ingresado en la programación de los objetos que contiene el software Flexsim y entregara resultados concretos que respondieran a los objetivos 3 y 4 del punto 4.2, a pesar de estar trabajando con una plataforma de programación que sirve no para entregar resultados óptimos, sino para ver posibles escenarios; escenarios que cambian cuando cambian sus variables de entrada. La gran diferencia a un modelo de simulación hecho normalmente en base a datos estadísticos, es que éste usa como plataforma de desarrollo la herramienta de simulación pero la une con una herramienta de optimización, lo que se traduce a entregar siempre la mejor respuesta frente al escenario que se plantee. 4.5.1 Desarrollo del algoritmo Al ser llevado el problema a un modelo general, se fijaron algunos límites para poder trabajar en la dinámica de decisión de almacenamiento. Estos límites tienen que ver con la cantidad de frigoríficos externos con los que se va a trabajar en el modelo, definiéndose como máximo tres. Al plantearse de esta manera el futuro modelo de simulación, y al querer entregar resultados óptimos, es que se necesitó desarrollar un algoritmo que permitiera entender el orden secuencial en la toma de decisiones para poder llevarlo mas tarde a un lenguaje de programación en Flexsim. Tomando en cuenta el orden secuencial presentado en el “Diagrama de Flujo Proceso de Abastecimiento” de la Figura N° 4.2 se hiso una extrapolación para aplicarlo a tres frigoríficos externos en 28 vez de a uno solo, lo que derivó en una serie de decisiones encadenadas que usan dos funciones principales: La obtención de una combinatoria (para saber todas las posibles combinaciones que se pueden hacer para almacenar una cantidad “x” en las opciones de frigorífico que hay). La obtención de un “Optimo”: función que calcula los costos de cada una de las combinatorias entregadas en el punto anterior, y entrega aquella combinación cuyo costo es el menor. Estas dos funciones se presentan más adelante en el desarrollo del modelo. Las decisiones encadenadas anteriores, que usan estas dos funciones, son las que se presentan como algoritmo de programación dinámica determinística, representado en los siguientes árboles de decisión. El primero es el árbol de decisión general, y de él, cada rama desprende otro árbol de decisión que son los que siguen a continuación de éste. El orden secuencial es el siguiente: Una vez que sale una corrida de producción de la planta procesadora, se debe saber hacia qué frigorífico hay que enviar dicha corrida. Para ello, el número de la cantidad a almacenar (ya ingresada como camionadas) es la variable de entrada para la función “combinaciones”, que entrega - tal como su nombre lo indica- cada combinación que se puede hacer para almacenar esta cantidad de camionadas en los cuatro frigoríficos que se tienen como opción. Luego, la cantidad de combinaciones, así como cada conjunto que la compone son la variable de entrada para el análisis desde el punto de vista de costos, donde a cada una de las combinaciones posibles se les calcula el costo de almacenamiento y transporte, quedándose con aquella combinación cuyo costo total sea el menor. A este costo menor, se le denomina “OPTIMO”. Esta combinación de cuatro números es la que entrega “cuantas camionadas” deben ingresar al frigorífico interno, cuantas al frigorífico externo uno, al externo dos y al externo tres. Después de determinado este “OPTIMO”, el algoritmo de decisión pregunta a cada frigorífico si tiene la capacidad para almacenar la cantidad destinada para ellos. Si es así entonces envía dicha cantidad donde le corresponde, pero si no es así, pregunta cuánto puede almacenar el frigorífico consultado, envía la cantidad que se pueda almacenar a éste, y usa la diferencia como variable de entrada para sacar una nueva “combinación” y un nuevo “OPTIMO”. Este segundo nuevo “OPTIMO” ya no toma en cuenta el frigorífico por el que se pasó (debido a que se encuentra lleno), por lo que entrega cantidades a almacenar para tres de los 4 frigoríficos. Y así comienza por segunda vez el ciclo, donde pregunta ahora a 3 de los 4 frigoríficos si tienen la capacidad para almacenar las cantidades designadas para ellos, y si no es así, vuelve a almacenar la cantidad que se puede y con la diferencia obtiene un tercer nuevo “OPTIMO”. Este orden secuencial se termina una vez que se ha almacenado el total de la corrida de producción salida en un tiempo específico. 29 Figura N° 4.3: Árbol de decisión General Fuente: Elaboración propia en Microsoft Office Visio 2007 30 Figura N° 4.4: Árbol de decisiones para el Frigorífico Interno (FI) Fuente: Elaboración propia en Microsoft Office Visio 2007 31 Figura N° 4.5: Árbol de decisiones para el Frigorífico Externo 1 (FE1) Fuente: Elaboración propia en Microsoft Office Visio 2007 32 Figura N° 4.6: Árbol de decisiones para el Frigorífico Externo 2 (FE2) Fuente: Elaboración propia en Microsoft Office Visio 2007 33 Figura N° 4.7 Árbol de decisiones para el Frigorífico Externo 3 (FE3) Fuente: Elaboración propia en Microsoft Office Visio 2007 34 4.6 Traducción a Modelo Una vez desarrollado el algoritmo de programación dinámica determinística, y teniendo el orden de la toma de decisiones para cada situación, como se dijo en la descripción de la metodología se desarrollaron dos modelos, un modelo genérico y un modelo específico. 4.6.1 Modelo Genérico Este modelo que deja a disposición las variables de entrada que se pueden ingresar, como son: costo de transporte, costo de almacenamiento, producción y demanda por día. Este modelo basa su complejidad en relación a la cantidad de decisiones que debe tomar antes de derivar la cantidad de producción hacia algún frigorífico. Figura N° 4.8 Modelo Genérico Flexsim Fuente: Elaboración propia en Flexsim 4.6.1.a Objetos del Modelo Genérico Antes de describir cada objeto del modelo genérico, es necesario definir el tipo de entidad que va a circular por éste. Para este caso se definió una “basic box” como entidad, y junto con esto, se le asignaron etiquetas a este tipo de entidad que almacenarán los datos más importantes que se desean obtener al finalizar la modelación. La Figura N° 4.9 muestra que éstas entidades son definidas en “Flow Items” en la barra de herramientas del Software y más tarde en el “Source” definido en este caso con el nombre de “PLANTA PROCESADORA”. 35 Figura N° 4.9: Definición de Entidad e ingreso de etiquetas Fuente: Elaboración propia en Flexsim Luego de esto, se definen a continuación las funciones y características de cada objeto: 1. PLANTA PROCESADORA: es el que simula las salidas de entidades. En él está ingresado la producción completa de un año, por lo que sus “output” son entidades tipo “cajas (basic box)” que representan camionadas con capacidad de diez toneladas cada una. En la Figura N° 4.10 se aprecia la entrada de datos, donde “ArrivalTime” es el tiempo de llegada de las entidades y “Quantity” la cantidad que llega en ese momento. Figura N°4.10: Source “PLANTA PROCESADORA”. Fuente: Elaboración propia en Flexsim 36 2. “COLA1”: es la encargada de cerrar los puertos de entrada de los frigoríficos una vez entrada la primera entidad así como de cerrar el puerto de salida de la “GRAN COLA PROCESADORA”. También es la que obtiene la primera “combinatoria” y “OPTIMO” para la cantidad de entidades que entran a ella. Esta programación de la “combinatoria” y “OPTIMO” es la principal y más importante del modelo, ya que de ella se desprenden las demás programaciones y porque es ésta la que traduce la base de la programación dinámica desarrollada en el punto 4.4 a la programación del lenguaje del simulador, por lo tanto se muestra a continuación y no en Anexos. El código que cierra los puertos es el siguiente: COLA 1 (On Entry) /**Custom Code*/ treenode item = parnode(1); treenode current = ownerobject(c); int port = parval(2); // PARTE I // Cuenta las entidades entrantes int x=gettablenum("entradas y salidas",1,1 x=x+1; settablenum("entradas y salidas",5,1,x); // PARTE II // Cierra el puerto de salida desde el momento en que entra la primera caja int cont=gettablenum("entradas y salidas",5,1); if (cont==1) { closeinput(rank(model(),5)); closeinput(rank(model(),6)); closeinput(rank(model(),7)); closeinput(rank(model(),8)); closeoutput(rank(model(),9)); } El código para obtener la combinatoria y Óptimo es el siguiente: COLA 1 (On Exit) /**Custom Code*/ treenode item = parnode(1); treenode current = ownerobject(c); int port = parval(2); int numero_op=gettablenum("tabla valores",1,5)+1; int produccion_op=gettablenum("PRODUCCION",numero_op,2); int tiempo_op=gettablenum("PRODUCCION",numero_op,1); int tiempo=time(); if(tiempo==tiempo_op+1) { settablenum("tabla valores",1,5,numero_op); 37 // Saca la combinatoria int xx=produccion_op; int jj; int gg; int hh; int kk; int bb; int dd; int ee; int ff; int sumacomb; int cont=gettablenum("combinaciones",1,5); for (jj=0;jj<=xx;jj++) { for (gg=0;gg<=xx;gg++) { for (hh=0;hh<=xx;hh++) { for (kk=0;kk<=xx;kk++) { settablenum("combinaciones",cont+1,1,jj); settablenum("combinaciones",cont+1,2,gg); settablenum("combinaciones",cont+1,3,hh); settablenum("combinaciones",cont+1,4,kk); bb=gettablenum("combinaciones",cont+1,1); dd=gettablenum("combinaciones",cont+1,2); ee=gettablenum("combinaciones",cont+1,3); ff=gettablenum("combinaciones",cont+1,4); sumacomb=bb+dd+ee+ff; } } } if(sumacomb==xx) { cont=cont+1; } } // Borra el último valor settablenum("combinaciones",cont+1,1,0); settablenum("combinaciones",cont+1,2,0); settablenum("combinaciones",cont+1,3,0); settablenum("combinaciones",cont+1,4,0); settablenum("combinaciones",1,6,cont); // guardo la cantidad de combinaciones settablenum("combinaciones",1,5,0);// seteo el contador 38 // OPTIMO // Cantidades int v1; int v2; int v3; int v4; // Costos individuales int c1; int c2; int c3; int c4; // Costos transporte int t1; int t2; int t3; int t4; // Costos almacenamiento int al1; int al2; int al3; int al4; // Costos totales y valores int costo; int narbi=gettablenum("numero arbitrario",1,1); int comb=gettablenum("combinaciones",1,6); //obtiene las filas a recorrer en las combinatorias for (int j=1;j<=comb;j++) { // Obtiene los valores de cada fila v1=gettablenum("combinaciones",j,1); v2=gettablenum("combinaciones",j,2); v3=gettablenum("combinaciones",j,3); v4=gettablenum("combinaciones",j,4); // Obtiene los costos de almacenamiento al1=gettablenum("precios",1,1); al2=gettablenum("precios",2,1); al3=gettablenum("precios",3,1); al4=gettablenum("precios",4,1); // Obtiene los costos de transporte t1=gettablenum("precios",1,2); t2=gettablenum("precios",2,2); t3=gettablenum("precios",3,2); t4=gettablenum("precios",4,2); // Calcula los costos de la combinación c1=v1*(al1+t1); c2=v2*(al2+t2); c3=v3*(al3+t3); c4=v4*(al4+t4); costo=c1+c2+c3+c4; 39 } } if (costo<=narbi) { settablenum("OPTIMO",1,1,v1); settablenum("OPTIMO",1,2,v2); settablenum("OPTIMO",1,3,v3); settablenum("OPTIMO",1,4,v4); settablenum("OPTIMO",1,5,costo); narbi=costo; } 3. “PROCESADOR1” y “PROCESADOR2”: están puestos para efectos visuales: se deseaba ver en qué momento entraba cada caja a la colas que los suceden. El “PROCESADOR1” además tiene la función de contabilizar la cantidad de entidades que entran y de asignarle un valor único a cada una en orden de llegada. Su código de programación se encuentra en el Anexo Código A.1: “Programación Modelo Genérico PROCESADOR1”. El “PROCESADOR2” tiene una función adicional que se explicará más adelante. 4. “COLA QUE DECIDE”: es la que juega un rol importante en la toma de decisiones al momento de enviar las entidades. Ella toma como valor de entrada los valores OPTIMOS que deben ir a cada frigorífico y comienza a realizar el árbol de decisión descrito en el algoritmo de programación dinámica. Su código es una fiel copia del árbol de decisiones descrito en el punto 4 pero pasado al lenguaje de programación del software y usando las funciones de obtención de “combinaciones” y “OPTIMO”, siendo por este motivo importante ya que es la que une los conceptos de Programación Dinámica de Investigación de Operaciones con Simulación de Procesos. Cabe destacar que el código general resultó muy largo producto de que cada vez que se debía sacar un nuevo “OPTIMO”, el código de ésta función, al igual que el de las “combinaciones” debía volver a escribirse usando nuevos nombres para las variables, pero en su defecto hacen lo mismo. 5. “FUENTE 1”: carga los valores de las capacidades iniciales de los frigoríficos a una nueva tabla con la que se pueda trabajar. Esto lo hace una sola vez, al comienzo de la simulación. El código se encuentra en el Anexo Código A.2: “Programación Modelo Genérico FUENTE1”. 6. “FUENTE 2”: cierra los puertos de salida de la “COLA QUE DECIDE” y de los frigoríficos una vez salida la primera corrida de producción. También es la que decide qué puertos abrir dependiendo de las cantidades que deben enviar. La manera de decidir qué puerto de salida abrir depende del costo de almacenamiento por unidad de tiempo que tenga cada frigorífico, abriendo siempre aquel cuyo costo sea mayor. Su código se encuentra en el Anexo Código A.3: “Programación Modelo Genérico FUENTE2”. 7. Frigoríficos “FI”, “FE2”, “FE2”, “FE3”: todos tienen el mismo código en sus entradas y en sus salidas (OnEntry y OnExit). Este código cuenta la cantidad de unidades que entran y se lo resta a la capacidad actual que tiene el FI, guarda el número uno, dos, tres o cuatro en la etiqueta “frigorífico” de la entidad para poder identificar al final del proceso donde estuvo almacenado, ingresa el tiempo de entrada y el precio de transporte a las etiquetas correspondientes. Por último, dependiendo de las cantidades que deben entrar, abre o cierra el puerto. Sus códigos se encuentran Anexo Código A.4:“Programación 40 Modelo Genérico FI”, Código A.5:“Programación Modelo Genérico FE1”, Código A.6:“Programación Modelo Genérico FE2” y Código A.7:“Programación Modelo Genérico FE3”. 8. “PROCESADOR 2”: calcula los costos de transporte totales y los guarda en la etiqueta correspondiente de la entidad. Su código se encuentra en el Anexo Código A.8: “Programación Modelo Genérico PROCESADOR 2”. 9. “GRAN COLA QUE PROCESA”: es llamada así porque es la que contiene las entidades una vez que han salido de su tiempo de almacenamiento, cierra los puertos de salida de los frigoríficos una vez entrada la cantidad de entidades que se han demandado en cierto momento, y guarda en una tabla llamada “TABLA GLOBAL” todos los datos de las etiquetas de cada entidad entrante. Su código se encuentra en Anexo Código A.9: “Programación Modelo Genérico GRAN COLA QUE PROCESA”. La TABLA GLOBAL que resume todos los datos obtenidos se aprecia en la Figura N° 4.11. Esta tabla Global muestra: el frigorífico donde estuvo almacenada la entidad, el tiempo (en Flexsim) en que comenzó a ser almacenada, el tiempo en que salió de su período de almacenamiento, el tiempo total que estuvo en el frigorífico, el costo de transporte (ida y vuelta), el costo de haberla mantenido almacenada durante ese intervalo de tiempo, el Costo Total involucrado, y su número único de producción. Tiene una capacidad de datos para hasta 300 entidades. Figura N° 4.11: TABLA GLOBAL de datos Flexsim Fuente: Elaboración propia en Flexsim 41 4.6.2 Modelo Específico Este modelo se desarrolló para analizar una situación particular con datos históricos de una empresa de mitílidos. Esta empresa quería saber cuánto dinero está gastando por concepto de almacenamiento en frigoríficos externos. Se tomó en cuenta un modelo más simple donde hay un frigorífico interno y uno externo que representa a todos los que se usen, con un costo promedio de transporte y almacenamiento. Este modelo se aprecia en la siguiente figura: Figura N° 4.12 Modelo Específico Fuente: Elaboración propia en Flexsim 4.6.2. a Objetos del Modelo Específico Todos los objetos de este modelo son idénticos en cuanto a funciones respecto del modelo genérico. Su programación es más sencilla puesto que solo se debe decidir en base a dos frigoríficos pero sigue el mismo orden de decisiones planteado. La gran diferencia es que en este modelo está ingresada toda la producción de un año junto a su demanda (sacada por medio de los embarques de dicha temporada) y los precios de almacenamiento externo son los promedios reales. Las diferencias en los códigos se explican a continuación: 1. “COLA 1”: obtiene las combinaciones y el ÓPTIMO para dos frigoríficos. Su código se encuentra en el Anexo Código A.10: “Programación Modelo Específico COLA1”. 2. “COLA QUE DECIDE”: tiene un código más simple, puesto que representa la manera de decidir mostrada en el diagrama de flujo de abastecimiento de la Figura N° 4.2. Su código se encuentra en el Anexo Código A.11: “Programación Modelo Específico COLA QUE DECIDE”. 3. “FUENTE 2”: es la que abre o cierra los puertos de salida de los frigoríficos dependiendo de la demanda. Ésta difiere de la FUENTE 2 del Modelo Genérico en cuanto a la manera de abrir los puertos 42 de salida. La FUENTE 2 del Modelo Genérico, lee de la tabla “demandas” la cantidad que debe enviarse a la GRAN COLA PROCESADORA; después de decidir cuál es el frigorífico con mayor costo, pregunta si dicho frigorífico tiene la cantidad para abastecer la demanda, y si no es así, pasa a preguntarle al segundo frigorífico más caro si tiene esa capacidad (es decir, abre 1 solo puerto para enviar la cantidad demandada). En cambio la FUENTE 2 del Modelo Específico, al momento de saber que el frigorífico cuya tarifa de almacenamiento es más cara, no tiene la cantidad total de entidades que se necesitan para satisfacer la demanda de ese momento, pregunta cuanta cantidad tiene, envía esa cantidad y luego va al segundo frigorífico con tarifa de almacenamiento mas cara a preguntar por la diferencia. Esto implica crear una nueva tabla de trabajo llamada “TABLA ENVIOS DDA” desde donde se leen las cantidades que se deben sacar de cada frigorífico. A continuación se encuentra en el Anexo Código A.12: “Programación Modelo Específico FUENTE 2”. 4. “GRAN COLA PROCESADORA”: la gran diferencia entre este objeto y su similar del Modelo Genérico es que éste cierra los puertos leyendo desde la “TABLA ENVIOS DDA” y no desde la tabla “demanda”. Su código se encuentra en el Anexo Código A.13: “Programación Modelo Específico COLA PROCESADORA”. 4.7 Verificación y Validación: Se hicieron pruebas de “caja blanca”, es decir, casos de pruebas que verifiquen que cuando ocurre una situación, las decisiones involucradas generen acciones que se comporten de manera correcta. Se formularon diferentes casos, cada uno con variables de entrada, estos se resolvieron a mano y luego se compararon con los resultados del simulador. Los casos son los siguientes: Las combinaciones deben calcularse de manera correcta. Los ÓPTIMOS deben ser los correctos. Se deben abrir los puertos correspondientes para cada caso y las entidades deben ir siempre al frigorífico que signifique un menor costo total de almacenamiento. Cuando se activa una petición de demanda, deben salir de los frigoríficos la cantidad indicada de entidades. Cuando la primera opción de almacenamiento tiene su capacidad ocupada, se deben abrir los puertos siguiendo el orden de menor a mayor costo cuando se toman las segundas o terceras opciones de frigorífico. En el caso de las demandas, se deben abrir los puertos de los frigoríficos cuyo costo de almacenamiento es el más caro. Si éste no tiene la capacidad para enviar la cantidad demandada, se debe seguir el orden de abrir los puertos desde el que tiene tarifas más altas, al que tiene tarifas más bajas. Se deben guardar correctamente en cada entidad: el frigorífico que se usó, el tiempo que estuvo en él, los costos de almacenamiento y transporte involucrados. También se deben guardar todos estos datos en la TABLA GLOBAL para su posterior análisis y deben estar calculados correctamente. 43 Caso 1: Las combinaciones deben calcularse de manera correcta. Para este caso, se usó como variable de entrada el número dos. La programación que tiene relación con la cantidad de combinaciones, saca exactamente todas las combinaciones posibles de un número sobre cuatro (que es la cantidad de frigoríficos disponibles), pero está hecha para que calcule las combinaciones y muestre solo aquellos conjuntos de números que sumen entre ellos la variable de entrada con la que se hace el cálculo. Por ejemplo: si la variable de entrada es cinco, la programación calcula todas las combinaciones, pero muestra en la tabla “combinaciones” solo aquellas cuyos conjuntos de números suman cinco. La Tabla B.1 de Anexos muestra el cálculo hecho con la variable de entrada dos, luego mostrada a continuación la Tabla N° 4.1 muestra las combinaciones de números que suman dos, y la Figura N° 7.1 muestra los resultados que da la programación en Flexsim. Tabla N° 4.1: Conjunto de números en las combinaciones que suman dos (cálculo hecho a mano). Resultado Combinaciones (suma=2) FI FE1 FE2 FE3 1 0 0 0 2 2 0 0 1 1 3 0 0 2 0 4 0 1 0 1 5 0 1 1 0 6 0 2 0 0 7 1 0 0 1 8 1 0 1 0 9 1 1 0 0 10 2 0 0 0 Total Combinaciones= 10 Fuente: Elaboración propia Microsoft Office Excel 2007 Figura N° 4.13: Resultado de las Combinaciones en Flexsim con variable de entrada igual a dos. Fuente: Elaboración propia en Flexsim 44 En la Figura N° 4.13 la columna seis es la que entrega en la fila uno el número de combinaciones. Al observar la figura, se aprecia que pasada la fila 11 todos los valores de las filas tienen el valor cero. Esto es porque el número de combinaciones para el caso de prueba (con la variable de entrada=dos) es igual a 10, son las que se ven en la figura y que concuerdan cien por ciento con la Tabla N° 4.2 cuyos resultados fueron sacados manualmente. Caso 2: Los ÓPTIMOS deben ser los correctos. Para calcular los óptimos se toma en cuenta la respuesta dada por la programación de las “combinaciones”. Por ejemplo en el caso anterior, la respuesta de la tabla combinaciones es 10. En este caso la programación del “ÓPTIMO” toma ese valor para saber hasta qué fila recorrer en la tabla “combinaciones” y en cada caso calcular los costos que implican ese conjunto de números de la fila correspondiente. Como se comprobó que la programación del Caso 1 está bien, ahora se comprueba el Caso 2 con el número tres. Flexsim entrega que el número de combinaciones es 20 (celda 1,20). Figura N° 4.14: Número de combinaciones con variable de entrada igual a tres. Fuente: Elaboración propia en Flexsim Como el óptimo toma cada fila y calcula los costos para esa combinación de números, se leen de la tabla “precios” los costos de transportar y almacenar en cada frigorífico. Estos costos son inventados para el caso del Modelo Genérico. Figura N° 4.15: Tabla “precios” Fuente: Elaboración propia en Flexsim 45 Tabla N°: 4.2: Costo mínimo sacado manualmente con variable de entrada igual a tres. Costo= n°FI*(35+10)+n°FE1*(45+10)+n°FE2*(50+25)+n°FE3(25+10) FI FE1 FE2 FE3 Costo 1 0 0 0 3 105 2 0 0 1 2 145 3 0 0 2 1 185 4 0 0 3 0 225 5 0 1 0 2 125 6 0 1 1 1 165 7 0 1 2 0 205 8 0 2 0 1 145 9 0 2 1 0 185 10 0 3 0 0 165 11 1 0 0 2 115 12 1 0 1 1 155 13 1 0 2 0 195 14 1 1 0 1 135 15 1 1 1 0 175 16 1 2 0 0 155 17 2 0 0 1 125 18 2 0 1 0 165 19 2 1 0 0 145 20 3 0 0 0 135 OPTIMO= 0FI,0FE1,0FE2,3FE3 Fuente: Elaboración propia en Microsoft Office Excel 2007 La tabla que entrega la combinación con el menor costo posible se puede ver en la Figura N° 4.16. Figura N° 4.16: Resultados ÓPTIMO Flexsim con variable de entrada igual a tres. Fuente: Elaboración propia en Flexsim Al comparar el resultado entregado por el software con el sacado manualmente, se comprueba que la programación del ÓPTIMO está correcta. Caso 3: Se deben abrir los puertos correspondientes para cada caso y las entidades deben ir siempre al frigorífico que signifique un menor costo total de almacenamiento. En este caso, se modificaron los valores de la tabla “precios” en Flexsim para comprobar que, si al cambiar los resultados del óptimo, se abrían los puertos correspondientes a cada frigorífico. 46 Los valores anteriores mostrados en la Figura N° 4.15 se cambiaron por los siguientes. Figura N° 4.17: Prueba de cambio de precios. Fuente: Elaboración propia en Flexsim De acuerdo a esto, si la variable de entrada es igual a tres, el nuevo ÓPTIMO entregado por el programa indica que se deben enviar las tres camionadas (entidades) al frigorífico interno, por lo tanto se debe abrir el puerto correspondiente y deben ingresar tres entidades para ser almacenadas en éste. Para ello, se configuró que la variable de entrada al tiempo 40 (tiempo Flexsim) sea igual a tres. En la Figura N° 4.18 se aprecia que el software de acuerdo a su programación, realiza exactamente dicha acción. Esta misma prueba se realizó cambiando los costos para los frigoríficos de manera tal, que todos tuviesen que ser abiertos en alguna oportunidad. En base a estos resultados se afirma que el Caso 3 esta probado. Figura N° 4.18: Ingreso de entidades a frigorífico correspondiente. Fuente: Elaboración propia en Flexsim Caso 4: Cuando se activa una petición de demanda, deben salir de los frigoríficos la cantidad indicada de entidades. 47 Para esta prueba se configuró que a partir del tiempo 80 (tiempo Flexsim), tenían que salir de algún frigorífico 4 entidades y luego cerrar el puerto en espera de la siguiente demanda. El software ejecuta dicha acción sin problemas, lo que es apreciado en la Figura N° 4.19. Figura N° 4.19: Apertura de puertos de acuerdo a demanda (tiempo 89.7 Flexsim) Fuente: Elaboración propia en Flexsim Caso 5: Cuando la primera opción de almacenamiento tiene su capacidad ocupada, se deben abrir los puertos siguiendo el orden de menor a mayor costo cuando se toman las segundas o terceras opciones de frigorífico. Tomando en cuenta los valores de la Figura N° 4.17, el orden en que los frigoríficos deberían llenarse es el siguiente: Frigorífico Interno, Frigorífico Externo1, Frigorífico Externo3, Frigorífico Externo2. Si se observa de acuerdo a los precios establecidos, el Frigorífico Externo1 y el Frigorífico Externo3 tienen el mismo costo: en este caso el programa abrirá aquel puerto de frigorífico que se encuentre más cercano al objeto anterior (en este caso “COLA QUE DECIDE”). Para poder comprobar esto, se tuvo que desactivar el código que tiene relación con las demandas, porque el hecho de que éstas estuviesen activadas hacía que de los frigoríficos salieran entidades y no se pudiera apreciar claramente el orden en que éstos se llenaban. 48 Figura N° 4.20: Capacidades de los Frigoríficos Fuente: Elaboración propia en Flexsim Figura N° 4.21: Frigorífico Interno sin capacidad, Frigorífico Externo 1 comenzando a llenarse (tiempo 301.78 Flexsim). Fuente: Elaboración propia en Flexsim 49 Figura N° 4.22: Frigorífico Interno y Externo 1 sin capacidad, Frigorífico 3 comenzando a llenarse (tiempo 410.596 Flexsim). Fuente: Elaboración propia en Flexsim Figura N° 4.23: Frigorífico Interno, Externo 1 y Externo 3 sin capacidad, Frigorífico Externo 2 comenzando a llenarse (tiempo 545.068 Flexsim). Fuente: Elaboración propia en Flexsim 50 Por lo tanto, se concluye que la programación de ésta parte del programa, cumple con los requisitos de llenar los frigoríficos desde el que tiene tarifa más baja de almacenamiento, hasta el que tiene tarifa más alta. Caso 6: En el caso de las demandas, se deben abrir los puertos de los frigoríficos cuyo costo de almacenamiento es el más caro. Si éste no tiene la capacidad para enviar la cantidad demandada, se debe seguir el orden de abrir los puertos desde el que tiene tarifas más altas, al que tiene tarifas más bajas. Para la prueba de este caso, los tiempos de demanda se retrasaron de manera que pudiera haber entidades almacenadas en todos los frigoríficos y así verificar si se cumple la condición expuesta en el título de este caso. Siguiendo el orden “de mayor a menor costo” en base a los precios de la Figura N° 4.24, el primer frigorífico que debiera vaciarse es el Externo2, seguido de el Externo3, luego el Interno y por último el Externo1. Las figuras a continuación muestran el comportamiento del vaciado de éstos. Figura N° 4.24: Precios de los Frigoríficos Fuente: Elaboración propia en Flexsim Figura N° 4.25: Activación de demandas (desde el tiempo 590 Flexsim) Fuente: Elaboración propia en Flexsim 51 Figura N° 4.26: Todos los frigoríficos con entidades almacenadas (tiempo 585.284 Flexsim) Fuente: Elaboración propia en Flexsim Figura N° 4.27: Primer Frigorífico abierto: Externo2 (tiempo 601.584 Flexsim) Fuente: Elaboración propia en Flexsim 52 Figura N° 4.28: Segundo Frigorífico abierto: Externo3 (tiempo 718.862 Flexsim) Fuente: Elaboración propia en Flexsim Figura N° 4.29: Tercer Frigorífico abierto: Interno (tiempo 888.613 Flexsim) Fuente: Elaboración propia en Flexsim 53 Figura N° 4.30: Último frigorífico abierto: Externo1 (tiempo 1155.712 Flexsim) Fuente: Elaboración propia en Flexsim Como se puede concluir, el caso 6 se cumple en su totalidad al vaciar en forma correcta los frigoríficos priorizando desde el que tiene un mayor costo de abastecimiento por unidad de tiempo, hasta que el que tiene el menor. Caso 7: Se deben guardar correctamente en cada entidad: el frigorífico que se usó, el tiempo que estuvo en él, los costos de almacenamiento y transporte involucrados. También se deben guardar todos estos datos en la TABLA GLOBAL para su posterior análisis y deben estar calculados correctamente. Desde un comienzo, se definieron etiquetas para las entidades que iban a circular por el modelo (capitulo 4.5). Los costos que se entregan al final del proceso, cuando lleguen a la “GRAN COLA PROCESADORA” son los que deben estar bien calculados. Para ello, se hiso el cálculo a mano tomando en cuenta los costos ingresados y se compararon con los que entrega el modelo. La primera entidad que entra, es dirigida al Frigorífico Externo 2, ésta ingresa en el tiempo 42 de Flexsim (recordar que 10 unidades de tiempo en el modelo equivalen a 1 día de proceso en la planta, por lo tanto si las cajas entraron entre el minuto 40 y 50 y corresponden a la producción de un día, se considera correcto el comportamiento), su precio de transporte es 10 (pesos establecidos por el usuario) y el precio de almacenamiento se definirá dependiendo de cuánto tiempo se encuentre almacenado. La Figura N° 4.31 muestra el ingreso de esta entidad, y el valor de sus etiquetas en ese momento. 54 Figura N° 4.31: Ingreso de la primera entidad y valor de sus etiquetas. Fuente: Elaboración propia en Flexsim Luego, se espero a que dicha entidad saliera del frigorífico (recordando que las entidades siguen el orden FIFO), y se buscaron los valores de sus etiquetas. Figura N° 4.32: TABLA GLOBAL mostrando el valor de las etiquetas para la entidad n° 1. Fuente: Elaboración propia en Flexsim Si se toman en cuenta los costos mostrados en la Figura N° 4.24, según los datos de la “TABLA GLOBAL”, la primera entidad que salió de la planta procesadora (con etiqueta “n° de entidad” igual a uno), se almacenó en el frigorífico externo 2 en el momento 42 de Flexsim, y salió de este en el momento 950, por lo que estuvo almacenado 948 unidades de tiempo Flexsim, su precio de transporte es igual a 55 20 (unidades de dinero establecidos por el usuario que desde ahora se abreviará como “UP”), su costo de almacenamiento 454 UP y su costo total es 474 UP. Sacando manualmente el costo total de dicha entidad: Por concepto de transporte, aquellas entidades que se almacenen en el frigorífico 2 tienen un costo de 10 UP por la ida, por lo tanto en ir a buscar esa entidad significarían 10 UP más, lo que hace un total de precio de transporte igual a 20 UP. Por concepto de almacenamiento, el precio del frigorífico 2 es de 15 UP (ton/mes). Primero este costo se multiplica por 10 para saber cuánto cuesta 1 camionada/mes (recordar que el modelo transporta entidades que representan camionadas de 10 toneladas). Se establece que un mes tiene 30 días en promedio, por lo tanto el costo se divide en 30 para saber cuánto cuesta 1 día de almacenamiento y luego se vuelve a dividir en 10 para saber cuánto cuesta almacenar 1 camionada por unidad de tiempo del Flexsim (recordar también que un día de producción equivale a 10 unidades de tiempo en el modelo). Después de desarrollado este ejercicio, se aprecia con que basta con dividir por 30 el costo expresado en toneladas por mes, y luego se multiplica por la cantidad de unidades de tiempo que estuvo la entidad almacenada. Obteniendo el resultado para este cálculo: Se concluye que el caso 7 se cumple en su totalidad, cumpliéndose el etiquetado y los cálculos sacados correctamente. 4.8 Diseño Experimental, Análisis y Documentación El Análisis se hiso sobre el Modelo Específico debido a que las variables de entrada son en su mayoría reales y porque la misma manera de analizarlo se puede proyectar a un caso donde se tengan diferentes frigoríficos externos, cada uno con sus propios costos de almacenamiento y transporte, debido a que en concreto, solo cambia la cantidad de variables de entrada. Se plantearon dos escenarios: Escenario 1: muestra cómo se comporta el modelo con la capacidad actual de frigorífico interno. Escenario 2: modela la situación si la planta tuviese la capacidad de almacenar la producción completa de una temporada. Esto se realizó poniendo énfasis en los costos de transporte y almacenamiento del Frigorífico Externo en comparación con los costos de almacenamiento del Frigorífico Interno. Se documentaron las tablas de ingreso de datos, las tablas de producción y demanda histórica, los códigos de programación dinámica y los códigos más importantes que contienen los objetos usados en el simulador Flexsim, las que debido a la importancia del entendimiento de cada etapa y análisis de los pasos en el desarrollo de este proyecto de título, se han ido adjuntando en la medida que se va desarrollando cada punto de la metodología propuesta. 4.8.1 Datos Generales ingresados al modelo La empresa entregó los siguientes datos: 56 Costo de Almacenamiento Externo. Costo de Transporte “ida” a Frigoríficos Externos (afirmando que todos se encuentran a distancias muy semejantes de la planta por lo tanto el costo es el mismo). Producción de la planta desde el mes de Enero hasta el mes de Junio del año 2010. Embarques hechos desde el mes de Enero hasta el mes de Diciembre del año 2010. Debido a la información generalizada otorgada por la empresa, se tuvieron que realizar las siguientes acciones: Hacer suposiciones para estimar los costos de almacenar en frigorífico interno junto a su costo de transporte (sacado como porcentaje de lo que se almacena y transporta externamente). Suponer que lo que embarcan es igual a lo que se les demanda. Producto que entregaron los embarques de una temporada, y no la producción completa de la misma, se estimó la demanda de los meses faltantes (en este caso desde Septiembre hasta Diciembre del año 2009). En base a los puntos anteriores, suponiendo que los costos de almacenar internamente son un 60 por ciento del costo de almacenar externamente, y que los costos de transporte interno son despreciables al lado del transporte externo, la tabla siguiente resume los valores otorgados: Tabla N° 4.3: Costos Totales Modelo Específico Almacenamiento ton/mes Transporte ida camión 10 ton USD USD FI 0,78 25 FE 1,3 567 Fuente: Elaboración propia en Microsoft Office Excel 2007 Tabla N° 4.4: Promedio de camionadas por mes Camionadas Procesadas Enero 25 Febrero 45 Marzo 47 Abril 28 Mayo 48 Junio 46 Total 239 Promedio 40 57 Fuente: Elaboración propia Microsoft Office Excel 2007 De acuerdo a la Tabla N° 4.4, el promedio de camionadas procesadas por mes es de 40, pero tomando en cuenta que los meses de mayor producción son los mostrados en la tabla, se les asignó arbitrariamente una producción de 30 camionadas a los meses faltantes, con excepción de Diciembre al que se le asignó una producción de 25. 4.8.2 Escenario 1: Situación actual. A continuación se analizan eventos que se consideran importantes para comenzar el análisis del modelo. Según la Figura N° 4.33 en el momento en que la planta termina de procesar su temporada 2010, el frigorífico interno esta a su máxima capacidad, y hay una cantidad de 128 camionadas almacenadas externamente. Por otro lado, ya han vuelto a reproceso una cantidad de 231 camionadas. Figura N° 4.33: Estado de los Frigoríficos al momento en que termina la producción de la temporada 2010 (tiempo 2950 Flexsim). Fuente: Elaboración propia en Flexsim En la Figura N° 4.35 se puede apreciar que a pesar de que la demanda de la temporada finalizó, aun quedan toneladas almacenadas en el frigorífico interno. Por último, en la Tabla B.2 en Anexos se encuentra la información después de haber terminado la modelación. Según esta última tabla, la cantidad de entidades que entraron fueron 385, quedando las otras 15 almacenadas en el frigorífico interno, por lo tanto los análisis a continuación se hicieron sobre estas entidades. 58 Figura N° 4.34: Momento en que todas las camionadas almacenadas externamente vuelven a planta (tiempo 4300 Flexsim) Fuente: Elaboración propia en Flexsim Figura N° 4.35: Momento en que termina la demanda completa de la temporada 2010 (tiempo 4710 Flexsim). Fuente: Elaboración propia en Flexsim i. Costos de Almacenamiento Del total de las 385 entidades almacenadas, que representan cada una a un camión de 10 toneladas, 25 fueron almacenadas en el frigorífico interno y el resto en los externos. El precio de almacenamiento total de esas 25 entidades resultó ser alto a comparación con la cantidad de entidades que se almacenaron 59 externamente puesto que el modelo prioriza sacar de almacenamiento siempre aquellas camionadas que están siendo guardadas en los frigoríficos que tienen mayor costo. Este resultado no es errado, simplemente muestra el menor costo posible que se puede gastar en frigoríficos externos con la capacidad actual de su frigorífico interno, debido a que el algoritmo de programación dinámica ayuda a tomar la mejor decisión de almacenamiento. Tabla N° 4.5: Costos Almacenamiento Escenario 1 por Frigorífico Costo Costo Costo (USD) (USD) (USD) N° Ent. Alm. Total Camionada Tonelada FI 25 2810,47 112,4188 11,24188 FE 360 13625,26 37,8479444 3,78479444 Fuente: Elaboración propia en Microsoft Office Excel 2007 Tabla N° 4.6: Costos Almacenamiento generales Escenario 1 Escenario 1 Costo Costo Costo (USD) (USD) (USD) Trans.Total Camionada Tonelada 16.435,73 42,69 4,26901991 Fuente: Elaboración propia en Microsoft Office Excel 2007 ii. Costos de Transporte En los costos de transporte se ve mejor reflejada la diferencia en la Tabla N° 4.7, que muestra las cifras que implica no tener una capacidad de almacenamiento en frío más grande, donde por el simple hecho de tener que transportar las toneladas que no se pueden guardar en el frigorífico interno, se gastan por temporada aproximadamente 400.000 dólares. Tabla N° 4.7: Costos de Transporte Escenario 1 por Frigorífico Costo Costo Costo (USD) (USD) (USD) N° e Ent. Trans.Total Camionada Tonelada FI 25 1250 50 5 FE 360 408240 1134 113,4 Fuente: Elaboración propia en Microsoft Office Excel 2007 Tabla N° 4.8: Costos de Transporte generales Escenario 1 Escenario 1 Costo Costo (USD) (USD) Costo (USD) Trans.Total Camionada Tonelada 409490 1063,61039 106,361039 Fuente: Elaboración propia en Microsoft Office Excel 2007 60 4.8.3 Escenario 2: Situación con Frigorífico de mayor capacidad. En este nuevo escenario, la capacidad del frigorífico se modificó de tal manera, que pudiera almacenar la totalidad de la materia prima procesada (se redondeó a una capacidad de 400 camionadas), por lo tanto se aprecia a través de la Figura N° 4.36 que al momento de terminar la producción de la temporada, no hay entidades almacenadas externamente. Figura N° 4.36: Momento en que termina la producción de la temporada 2010 (tiempo 2950 Flexsim). Fuente: Elaboración propia en Microsoft Office Visio 2007 En la Figura N° 4.37 se puede apreciar que a pesar de que la demanda de la temporada finalizó, aun quedan toneladas almacenadas en el frigorífico interno. Al igual que en el modelo del Escenario 1, ahora la Tabla B.3 en Anexos resume la información después de haber terminado la modelación. 61 Figura N° 4.37: Momento en que termina la demanda de la temporada 2010 (tiempo 4750 Flexsim) Fuente: Elaboración propia en Microsoft Office Visio 2007 i. Costos de Almacenamiento Del total de las 385 entidades almacenadas, que representan cada una a un camión de 10 toneladas, ahora todas entran al frigorífico interno por su mayor capacidad de almacenamiento, por lo tanto los costos asociados son únicamente los relacionados con éste, llegando a un costo por tonelada de 3,1 dólares. Tabla N° 4.9: Costos Almacenamiento Escenario 2 por Frigorífico. Costo Costo Costo (USD) (USD) (USD) FI n° ent. Alm. Tot Camionada Tonelada 385 11954,488 31,0506182 3,10506182 FE 0 0 0 0 Fuente: Elaboración propia en Microsoft Office Excel 2007 Tabla N° 4.10: Costos Almacenamiento generales Escenario 2 Escenario 2 Costo Trans.Total Costo x Camionada Costo x Tonelada 11.954,49 31,05 3,11 Fuente: Elaboración propia en Microsoft Office Excel 2007 62 ii. Costos de Transporte En transporte claramente es menor el costo ya que el hecho de almacenar todo en el frigorífico interno implica no tener que gastar grandes cantidades de dinero en transportar a frigoríficos externos, llegando a un costo de transporte por tonelada de 5 dólares (recordar que este costo se estimó, puede ser mayor o menor, dependiendo de los costos internos que se manejen por concepto de “entrada y salida” de materia prima. Tabla N° 4.11: Costos de Transporte Escenario 2 por Frigorífico Costo Costo Costo (USD) (USD) (USD) FI n° entidad Trans.Total Camionada Tonelada 385 19250 50 5 FE 0 0 0 0 Fuente: Elaboración propia en Microsoft Office Excel 2007 Tabla N° 4.12: Costos de Transporte generales Escenario 1 Escenario 2 Costo Trans.Total Costo x Camionada Costo x Tonelada 19250 50 5 Fuente: Elaboración propia en Microsoft Office Excel 2007 4.7.4 Comparación de Escenarios En la tabla N° 4.13 se pueden ver los costos totales involucrados para cada situación planteada. En ellos se aprecia, que el hecho de almacenar en forma externa implica un costo mucho más alto que hacerlo de forma interna en relación a los costos de transporte, donde guardar la misma producción en frigoríficos externos implica un gasto de 425.925,73 USD sobre 31.204,49 USD que significa hacerlo con un frigorífico interno con mayor capacidad, superando alrededor de 13 veces el costo del escenario 2. Tabla N° 4.13: Comparación de Costos Totales Escenarios 1 y 2 Escenario 1 COSTOS TOTALES unidades almacenadas) (total Escenario 2 COSTOS TOTALES unidades almacenadas) (total Almacenamiento 16.435,73 Almacenamiento 11.954,49 Transporte 409.490,00 Transporte 19.250,00 Total 425.925,73 Total 31.204,49 Fuente: Elaboración propia en Microsoft Office Excel 2007 63 4.9 Implementación Este tipo de situación planteada, usando los modelos desarrollados, puede ser utilizada por cualquier tipo de empresa que tenga problemas de abastecimiento en relación a sus capacidades de almacenaje. Solo necesita seguir los pasos descritos en la metodología para la transformación de unidades y saber los datos de entrada que debe manejar para ingresarlos al modelo. Para mayor claridad, se presenta un manual de uso en ANEXO C. 64 5. RESULTADOS Se midieron los resultados obtenidos en base al cumplimiento de los objetivos planteados al inicio del planteamiento del problema así como de los objetivos establecidos para el modelo de simulación en el punto 4.2. 5.1 Acerca de lo Objetivos Específicos de la Investigación Generar una herramienta de simulación que apoye la toma de decisiones a nivel gerencial respecto a la gestión de almacenamiento en frio: se desarrolló un modelo que une la aplicación de investigación de operaciones para obtener resultados óptimos con la simulación que permite cambiar las variables de entrada y probar escenarios posibles. De esta manera se entregó una herramienta práctica que sirve para la toma de decisiones en la gestión de almacenamiento. Disminuir los costos de la gestión de almacenamiento en frío de los productos de granel en una empresa mitilicultora: se trabajó con un algoritmo de programación dinámica determinística, que da como respuesta siempre el resultado donde deben ser almacenadas las cantidades de manera tal que los costos sean los mínimos “óptimos”. A su vez, el hecho de desarrollar un modelo que calcule estos costos sin tener que hacer pruebas reales en el uso del transporte y las cantidades destinadas, disminuye claramente los costos de gestionar el almacenamiento en frio de los productos a granel. Caracterizar los costos de la gestión de almacenamiento en frio, ya sean internos o externos, con la finalidad de establecer una relación entre costos de almacenamiento y volumen de producción: este objetivo deriva de lo anterior, ya que al ingresar las variables de entrada necesarias para hacer correr los modelos, se obtienen las relaciones de lo que se produjo sobre lo que se almacenó, así como sus tiempos de entrada a los frigoríficos, de salida, tiempos de almacenamiento y costos totales, lo que permite tener una relación rápida de cuanto debo producir para almacenar la menor posible simplemente cambiando la cantidad de producción en el modelo. 5.2 Acerca de los Objetivos del Proyecto de Simulación Se debe realizar un modelo de manera tal, que pueda ser usado por las versiones de prueba del software Flexsim, es decir, sin necesidad de instalar la versión completa ni tener que usar la llave que viene en formato de puerto USV. Este objetivo está planteado debido a que las empresas, al no conocer en profundidad este software, a primera instancia no están dispuestas a pagar el precio de compra de este: se desarrollaron los modelos de la forma más sencilla posible, con el objetivo que no se cayera el software una vez corriendo, no necesitara de un gran procesador para funcionar (hablando sobre la base de los requisitos técnicos que pide Flexsim). La fijación del primer objetivo conlleva a otro, que es crear un modelo que no tenga más de 15 objetos, que es la cantidad máxima que permiten las versiones de prueba: se programó el modelo de manera tal que el número de objetos usados fue 15 para el Modelo Genérico y 12 para el Modelo Específico. 65 Respecto a los resultados que entregue el software, éste debe poder indicar en qué frigorífico se debe almacenar una cierta cantidad de producción, de manera tal que los costos sean mínimos. A su vez, debe indicar los flujos de las entidades, es decir: cuál ha sido la ruta (frigorífico) del producto, el tiempo de almacenamiento y el costo involucrado: se logra este objetivo en la TABLA GLOBAL que entrega para cada modelo, cada uno de los datos que se deben cumplir en este punto, y siendo la ruta de destino de cada camionada, el frigorífico por donde pasen indicado en dicha tabla, debido a que los datos almacenados en ella, son resultado de un análisis que entrega respuestas “optimas”. 66 6. CONCLUSIONES El estudio de la eficiencia del almacenamiento en frio, a través del uso de herramientas como Flexsim unido a algoritmos de programación dinámica resulta de mucha ayuda a la hora de tomar decisiones rápidas y con fundamento, ya que en poco tiempo se puede conocer donde destinar la producción estimada de un periodo de tiempo prolongado así como sus costos involucrados. Por otro lado, al poder plantear diferentes escenarios, y que éstos entreguen siempre la mejor alternativa de almacenamiento permite formar relaciones “producción-costos de almacenamiento” rápidamente sin costo alguno ni perjuicio de tiempo y dinero sobre pruebas reales. El Modelo Genérico es por tanto, una herramienta práctica y de fácil uso cuando se quiere tener una visión holística del comportamiento en un proceso de almacenamiento. En cuanto al Modelo Específico, que en el fondo es una derivación del Modelo Genérico, aplicado a la situación particular de una empresa, a través de este y de los dos escenarios planteados se logra captar el gasto global en concepto logístico por el hecho de no tener una capacidad de almacenaje en frio mayor. A su vez, al igual que el Modelo Genérico, al permitir modificar las variables de entrada, entrega diversos resultados de comportamiento que facilitan analizar los mismos escenarios. Además, queda abierta la posibilidad de que se puedan realizar otros estudios de gestión de abastecimiento para cualquier rubro de empresas que presenten este tipo de problemas, y que puedan llevar su producción y demanda a las características que pide el modelo para ser usado. Finalmente, junto con lo anterior, por el hecho de haber desarrollado una metodología que propuso integrar la herramienta de programación dinámica determinística con simulación, se pueden desarrollar a futuro otros tipos de modelos que partan de la misma base integrando por ejemplo otras áreas de la investigación de operaciones a la programación en el simulador Flexsim. 67 7. RECOMENDACIONES Se recomienda que cada vez que se desee hacer un estudio de simulación que trate problemas de abastecimiento y toma de decisiones, se revise este estudio y la metodología en él propuesta, debido a que involucra y plantea una manera nueva de poder usar la herramienta Flexsim entregando resultados óptimos por medio de la programación integrada de sus objetos. Junto con lo anterior, se recomienda probar el comportamiento de otros objetos dentro del simulador que puedan servir para un mejor desempeño del modelo o lograr mayor eficiencia al momento de procesar los datos. Otra recomendación importante es probar la manera de poder ingresar funciones al simulador de manera tal que en la programación se puedan llamar cada vez que se necesiten y no tener que programarlas varias veces como ocurrió en este caso. Además, en el estudio del Modelo Específico, se recomienda hacer un análisis de evaluación de proyecto para la construcción de un frigorífico con mayor capacidad o ampliación del actual. Finalmente, se recomienda utilizar la herramienta desarrollada en este proyecto de titulo que se presenta a través del Modelo Genérico, de manera que se conozca a cabalidad la forma de procesar la información y tomar las decisiones así como la función de cada objeto, y se prueben diversos escenarios, por si se quieren modificar los objetos o los elementos en pro de un mejor desempeño. 68 8. BIBLIOGRAFIA BAGNARA, M. MALTRAIN, G. 2008. Descripción del sector mitilicultor en la región de Los Lagos, Chile: evolución y proyecciones. En: LOVATELLI, A. FARIAS, A. URIARTE, I. Estado actual del cultivo y manejo de moluscos bivalvos y su proyección futura: factores que afectan su sustentabilidad en América Latina. Taller Técnico Regional de la FAO.2007. Chile. FAO Actas de Pesca y Acuicultura N°12. Rome, FAO. 2008. 359p. BANKS, J. CARSON II, JOHN, S. BARRY, N. 1996. “Discrete Event System Simulation”. 2ª ed. Prentice Hall. CHASE, R., JACOBS, F. y AQUILANO, N. 2005. Administración de la Producción y Operaciones para una Ventaja Competitiva. 10ª ed. México, McGraw-Hill. DIAZ,M. MELLA,H. 2005. Propuesta de una Metodología de Validación de Software de Simulación. Caso Flexsim. Trabajo de Titulación Presentado en conformidad a los requisitos para obtener el título de Ingeniero Civil Industrial. Concepción. Universidad del Bío-Bío. 339p. HILLIER, F. y LIEBERMAN, G. 2006. Investigación de Operaciones.8 ª ed. España. McGrawHill/Interamericana de España, S.A.U. 1193p. HOPEMAN, R. 1973. Producción, conceptos, análisis y control. México. Continental. 699p. KRAJEWSKI, L. 2000. Administración de Operaciones, Estrategia y Análisis.5 ª ed. México, Pearson Educación. 892p. LAW, A. KETON, W. 2000. Simulation Modeling and Analysis 3ª ed. McGraw-Hill. 68p. MACHUCA, D. 1995. Dirección de Operaciones. Aspectos Tácticos y Operativos en la Producción y los Servicios. 1ª ed. España, McGraw-Hill. 896p. MILLER, R y MEINERS, R. 2004. Microeconomía. 3ª ed. México, McGraw-Hill. PINDYCK, R. y RUBINFEL, D. 2006. Microeconomía. 9ª ed. España, Prentice Hall. 700p. PRESSMAN, R. 2002. Ingeniería del Software. Un enfoque práctico.5ª ed. Madrid. McGrawHill/Interamericana de España, S.A.U. 589p. TAHA, H. 2004. Investigación de Operaciones.7ª ed. México. Pearson Educación. 848p. URZELAI INZA, A. 2006. Manual Básico de logística integral. 1ª ed. Madrid, Díaz de Santos. 153p. 69 9. LINKOGRAFIA ANDRADE, S. 2005. Diccionario de Economía. En: THOMPSON, I. 2008. Definición de Eficiencia. [en línea] <http://www.promonegocios.net/administracion/definicion-eficiencia.html> [consulta: septiembre 2010]. CHIAVENATO, I. 2004. Introducción a la Teoría General de la Administración. En: THOMPSON, I. 2008. Definición de Eficiencia. [en línea] <http://www.promonegocios.net/administracion/definicioneficiencia.html> [consulta: septiembre 2010] CORPORACION FLEXSIM MEXICO. 2011. [en línea] <http://www.flexsim.com.mx/menu.html> [consulta: noviembre 2010]. DICCIONARIO DE INFORMATICA, 2011. [en línea] <http://www.alegsa.com.ar/Dic/modelo.php> [consulta: noviembre 2010]. DSLC, CONSULTORIA Y SISTEMAS DE LOGISTICA INTEGRAL, S.L.L. 2006. “Gestión de almacén y diseño de sistemas de almacenaje”. [en línea] <http://www.navactiva.com/es/asesoria/gestion-dealmacen-y-diseño-de-sistema-de-almacenaje_26886> [consulta: septiembre 2010]. FCC LOGISTICA, S.A- BU.AUTOMOCIÓN. 2006.”El sistema de gestión del almacén y los modelos de almacenamiento”. [en línea] <http://www.navactiva.com/es/documentacion/el-sistema-de-gestion-delalmacen-y-los-modelos-de-almacenamiento_33555> [consulta: septiembre 2010]. KOONTZ, H. y WEIHRICH, H. 2004. Administración: Una Perspectiva Global. En: THOMPSON, I. 2008. Definición de Eficiencia. [en línea] <http://www.promonegocios.net/administracion/definicioneficiencia.html> [consulta: septiembre 2010] MANKIW, G. 2004. Economía. En: THOMPSON, I. 2008. Definición de Eficiencia. [en línea] <http://www.promonegocios.net/administracion/definicion-eficiencia.html> [consulta: septiembre 2010] MAULEON, M. 2007. El Almacén del siglo XXI. [en línea]. <http://www.navactiva.com/es/documentacion/el-almacen-en-el-siglo-xxi_29172> [consulta: septiembre 2010]. OLIVEIRA DA SILVA R. Teorías de la Administración. 2002. En: THOMPSON, I. 2008. Definición de Eficiencia. [en línea] <http://www.promonegocios.net/administracion/definicion-eficiencia.html> [consulta: septiembre 2010] REAL ACADEMIA ESPAÑOLA. 2011. [en línea] <http://buscon.rae.es/draeI/SrvltConsulta?TIPO_BUS=3&LEMA=modelo> [consulta: noviembre 2010]. ROBBINS, S. y COULTER, M. 2005. Administración. En: THOMPSON, I. 2008. Definición de Eficiencia. [en línea] <http://www.promonegocios.net/administracion/definicion-eficiencia.html> [consulta: septiembre 2010] SAMUELSON, P. y NORDHAUS, W. 2002. Economía. En: THOMPSON, I. 2008. Definición de Eficiencia. [en línea] <http://www.promonegocios.net/administracion/definicion-eficiencia.html> [consulta: septiembre 2010]. 70 TORRES, A. 2009. “Conceptos Elementales de <http://antiguo.itson.mx/dii/atorres/apuntes.html> [consulta: octubre 2010]. Sistemas” [en línea] ZUGARRAMURDI, A. PARIN, M. LUPIN, H. 1998. “Ingeniería Económica Aplicada a la Industria Pesquera. Fao Documento Técnico de Pesca 351. [en línea] <http://www.fao.org/DOCREO/003/v8490s/v8490s06.htm> [consulta: octubre 2010]. 71 10. ANEXOS ANEXO A: CODIGOS PROGRAMADOS EN OBJETOS Código A.1: “Programación Modelo Genérico PROCESADOR1” PROCESADOR1 (OnExit) /**Custom Code*/ treenode item = parnode(1); treenode current = ownerobject(c); int port = parval(2); //da un valor único a cada entidad por orden de llegada int x=gettablenum("tabla valores",3,1); x=x+1; setlabelnum(item,"entidad n°",x); settablenum("tabla valores",3,1,x); Código A.2: “Programación Modelo Genérico FUENTE1”. FUENTE 1 (OnEntry) /**Custom Code*/ treenode item = parnode(1); treenode current = ownerobject(c); int port = parval(2); /* PARTE I */ /*carga los valores de las disponibilidades en los frigoríficos*/ int w=gettablenum("cap.disp",1,1); settablenum("cap doisp 2",1,1,w); int x=gettablenum("cap.disp",2,1); settablenum("cap doisp 2",2,1,x); int y=gettablenum("cap.disp",3,1); settablenum("cap doisp 2",3,1,y); int z=gettablenum("cap.disp",4,1); settablenum("cap doisp 2",4,1,z); 72 Código A.3: “Programación Modelo Genérico FUENTE2”. FUENTE 2 (OnCreation) /**Custom Code*/ treenode item = parnode(1); treenode current = ownerobject(c); int rownumber = parval(2); int numero_ope=gettablenum("tabla valores",1,8); numero_ope=numero_ope+1; int tiempo_ope=gettablenum("PRODUCCION",numero_ope,1); int tiempo=time(); if(tiempo==tiempo_ope-1) { closeoutput(rank(model,3)); } if(tiempo==tiempo_ope+1) { openoutput(rank(model,3)); settablenum("tabla valores",1,8,numero_ope); } if(tiempo==40) { closeoutput(rank(model(),5)); closeoutput(rank(model(),6)); closeoutput(rank(model(),7)); closeoutput(rank(model(),8)); } FUENTE 2 (OnExit) /**Custom Code*/ treenode item = parnode(1); treenode current = ownerobject(c); int port = parval(2); int cont=gettablenum("tabla valores",1,9); cont=cont+1; int tiempodda=gettablenum("demandas",cont,1); int tiemp=time(); if(tiemp==tiempodda) { //obtengo la demanda de ese momento int dda=gettablenum("demandas",cont,2); //obtenemos los precios almacenamiento int a1=gettablenum("precios",1,1); int a2=gettablenum("precios",2,1); int a3=gettablenum("precios",3,1); int a4=gettablenum("precios",4,1); //obtenemos los precios tranportes int tr1=gettablenum("precios",1,2); int tr2=gettablenum("precios",2,2); int tr3=gettablenum("precios",3,2); int tr4=gettablenum("precios",4,2); 73 //obetenemos las sumas int suma1=a1+tr1; int suma2=a2+tr2; int suma3=a3+tr3; int suma4=a4+tr4; int sumamayor=0; int puertomayor; int puertomenor; int sumamenor=10000000; int puertosegundo; int puertotercero; //buscamos el de mayor costo if(suma1>sumamayor) { sumamayor=suma1; puertomayor=1; } if(suma2>sumamayor) { sumamayor=suma2; puertomayor=2; } if(suma3>sumamayor) { sumamayor=suma3; puertomayor=3; } if(suma4>sumamayor) { sumamayor=suma4; puertomayor=4; } //busca el de menor costo if(suma1<sumamenor) { sumamenor=suma1; puertomenor=1; } if(suma2<sumamenor) { sumamenor=suma2; puertomenor=2; } if(suma3<sumamenor) { sumamenor=suma3; puertomenor=3; } if(suma4<sumamenor) { sumamenor=suma4; puertomenor=4; } //busca el segundo mayor y el tercero mayor if (puertomayor==1 && puertomenor==2) { if (suma3<suma4) { 74 puertosegundo=4; puertotercero=3; } else { puertosegundo=3; puertotercero=4; } } else if (puertomayor==1 && puertomenor==3) { if (suma2<suma4) { puertosegundo=4; puertotercero=2; } else { puertosegundo=2; puertotercero=4; } } else if (puertomayor==1 && puertomenor==4) { if (suma2<suma3) { puertosegundo=3; puertotercero=2; } else { puertosegundo=2; puertotercero=3; } } else if (puertomayor==2 && puertomenor==1) { if (suma3<suma4) { puertosegundo=4; puertotercero=3; } else { puertosegundo=3; puertotercero=4; } } else if (puertomayor==2 && puertomenor==3) { if (suma1<suma4) { puertosegundo=4; puertotercero=1; } else { puertosegundo=1; puertotercero=4; } } else if (puertomayor==2 && puertomenor==4) { 75 if (suma1<suma3) { puertosegundo=3; puertotercero=1; } else { puertosegundo=1; puertotercero=3; } } else if (puertomayor==3 && puertomenor==1) { if (suma2<suma4) { puertosegundo=4; puertotercero=2; } else { puertosegundo=2; puertotercero=4; } } else if (puertomayor==3 && puertomenor==2) { if (suma1<suma4) { puertosegundo=4; puertotercero=1; } else { puertosegundo=1; puertotercero=4; } } else if (puertomayor==3 && puertomenor==4) { if (suma1<suma2) { puertosegundo=2; puertotercero=1; } else { puertosegundo=1; puertotercero=2; } } else if (puertomayor==4 && puertomenor==1) { if (suma2<suma3) { puertosegundo=3; puertotercero=1; } else { puertosegundo=1; puertotercero=3; } } 76 else if (puertomayor==4 && puertomenor==2) { if (suma1<suma3) { puertosegundo=3; puertotercero=1; } else { puertosegundo=1; puertotercero=3; } } else if (puertomayor==4 && puertomenor==3) { if (suma1<suma2) { puertosegundo=2; puertotercero=1; } else { puertosegundo=1; puertotercero=2; } } // Obtiene las disponibilidades de cada puerto int entf1; int entf2; int entf3; int entf4; int salf1; int salf2; int salf3; int salf4; int dispf1; int dispf2; int dispf3; int dispf4; entf1=gettablenum("entradas entf2=gettablenum("entradas entf3=gettablenum("entradas entf4=gettablenum("entradas y y y y salidas",1,1); salidas",2,1); salidas",3,1); salidas",4,1); salf1=gettablenum("entradas salf2=gettablenum("entradas salf3=gettablenum("entradas salf4=gettablenum("entradas y y y y salidas",1,2); salidas",2,2); salidas",3,2); salidas",4,2); dispf1=entf1-salf1; dispf2=entf2-salf2; dispf3=entf3-salf3; dispf4=entf4-salf4; // Pregunta cual puerto es cual y abre puerto dependiendo de cuál sea el mayor, cual el segundo mayor, y así. if(puertomayor==1) { if(dispf1>=dda) { openoutput(rank(model(),5)); 77 } else { if(puertosegundo==2) { if(dispf2>=dda) { openoutput(rank(model(),6)); } else { if(puertotercero==3) { if(dispf3>=dda) { openoutput(rank(model(),7)); } else { openoutput(rank(model(),8)); } } else if(puertotercero==4) { if(dispf4>=dda) { openoutput(rank(model(),8)); } else { openoutput(rank(model(),7)); } } } } else if(puertosegundo==3) { if(dispf3>=dda) { openoutput(rank(model(),7)); } else { if(puertotercero==2) { if(dispf2>=dda) { openoutput(rank(model(),6)); } else { openoutput(rank(model(),8)); } } else if(puertotercero==4) { if(dispf4>=dda) { openoutput(rank(model(),8)); } else { openoutput(rank(model(),6)); 78 } } } } else if(puertosegundo==4) { if(dispf4>=dda) { openoutput(rank(model(),8)); } else { if(puertotercero==2) { if(dispf2>=dda) { openoutput(rank(model(),6)); } else { openoutput(rank(model(),7)); } } else if(puertotercero==3) { if(dispf3>=dda) { openoutput(rank(model(),7)); } else { openoutput(rank(model(),6)); } } } } } } else if(puertomayor==2) { if(dispf2>=dda) { openoutput(rank(model(),6)); } else { if(puertosegundo==1) { if(dispf1>=dda) { openoutput(rank(model(),5)); } else { if(puertotercero==3) { if(dispf3>=dda) { openoutput(rank(model(),7)); } else { openoutput(rank(model(),8)); 79 } } else if(puertotercero==4) { if(dispf4>=dda) { openoutput(rank(model(),8)); } else { openoutput(rank(model(),7)); } } } } else if(puertosegundo==3) { if(dispf3>=dda) { openoutput(rank(model(),7)); } else { if(puertotercero==1) { if(dispf1>=dda) { openoutput(rank(model(),5)); } else { openoutput(rank(model(),8)); } } else if(puertotercero==4) { if(dispf4>=dda) { openoutput(rank(model(),8)); } else { openoutput(rank(model(),5)); } } } } else if(puertosegundo==4) { if(dispf4>=dda) { openoutput(rank(model(),8)); } else { if(puertotercero==1) { if(dispf1>=dda) { openoutput(rank(model(),5)); } else { 80 openoutput(rank(model(),7)); } } else if(puertotercero==3) { if(dispf3>=dda) { openoutput(rank(model(),7)); } else { openoutput(rank(model(),5)); } } } } } } else if(puertomayor==3) { if(dispf3>=dda) { openoutput(rank(model(),7)); } else { if(puertosegundo==1) { if(dispf1>=dda) { openoutput(rank(model(),5)); } else { if(puertotercero==2) { if(dispf2>=dda) { openoutput(rank(model(),6)); } else { openoutput(rank(model(),8)); } } else if(puertotercero==4) { if(dispf4>=dda) { openoutput(rank(model(),8)); } else { openoutput(rank(model(),6)); } } } } else if(puertosegundo==2) { if(dispf2>=dda) { openoutput(rank(model(),6)); 81 } else { if(puertotercero==1) { if(dispf1>=dda) { openoutput(rank(model(),5)); } else { openoutput(rank(model(),8)); } } else if(puertotercero==4) { if(dispf4>=dda) { openoutput(rank(model(),8)); } else { openoutput(rank(model(),5)); } } } } else if(puertosegundo==4) { if(dispf4>=dda) { openoutput(rank(model(),8)); } else { if(puertotercero==1) { if(dispf1>=dda) { openoutput(rank(model(),5)); } else { openoutput(rank(model(),6)); } } else if(puertotercero==2) { if(dispf2>=dda) { openoutput(rank(model(),6)); } else { openoutput(rank(model(),5)); } } } } } } else if(puertomayor==4) { 82 if(dispf4>=dda) { openoutput(rank(model(),8)); } else { if(puertosegundo==1) { if(dispf1>=dda) { openoutput(rank(model(),5)); } else { if(puertotercero==2) { if(dispf2>=dda) { openoutput(rank(model(),6)); } else { openoutput(rank(model(),7)); } } else if(puertotercero==3) { if(dispf3>=dda) { openoutput(rank(model(),7)); } else { openoutput(rank(model(),6)); } } } } else if(puertosegundo==2) { if(dispf2>=dda) { openoutput(rank(model(),6)); } else { if(puertotercero==1) { if(dispf1>=dda) { openoutput(rank(model(),5)); } else { openoutput(rank(model(),7)); } } else if(puertotercero==3) { if(dispf3>=dda) { openoutput(rank(model(),7)); } 83 else { openoutput(rank(model(),5)); } } } } else if(puertosegundo==3) { if(dispf3>=dda) { openoutput(rank(model(),7)); } else { if(puertotercero==1) { if(dispf1>=dda) { openoutput(rank(model(),5)); } else { openoutput(rank(model(),6)); } } else if(puertotercero==2) { if(dispf2>=dda) { openoutput(rank(model(),6)); } else { openoutput(rank(model(),5)); } } } } } } settablenum("tabla valores",1,9,cont); } 84 Código A.4: “Programación Modelo Genérico FE1” FI (OnEntry) /* PARTE I */ /*Para contar la cantidad de unidades que entran y salen int x=gettablenum("entradas y salidas",1,1); x=x+1; settablenum("entradas y salidas",1,1,x); int y=gettablenum("cap doisp 2",1,1); y=y-1; settablenum("cap doisp 2",1,1,y);/*lo guarda como la nueva capacidad disponible actual*/ /* PARTE II */ /* Acá se etiqueta el objeto para identificarlo respecto al frigorífico donde fue almacenado*/ setlabelnum(item,"frigorifico",1); /* PARTE III */ /* Guarda en una tabla el tiempo en el que entra a frigorífico*/ int t=time(); setlabelnum(item,"t entrada",t); /* PARTE IV */ /* Saca el costo de transporte: como cada unidad que entra es un camión de 10 toneladas, el costo se calcula simplemente por el flete de 1 camión*/ int ctida=gettablenum("precios",1,2); setlabelnum(item,"precio transporte",ctida); /*PARTE V*/ /*Dependiendo de lo que se necesite enviar, abre o cierra el puerto*/ int enviados=gettablenum("TABLA DE ENVIOS",1,1); int cajas=gettablenum("TABLA DE ENVIOS",2,1); cajas=cajas+1; settablenum("TABLA DE ENVIOS",2,1,cajas); if (enviados==cajas) { closeinput(current); settablenum("TABLA DE ENVIOS",1,1,0); settablenum("TABLA DE ENVIOS",2,1,0); } FI (OnExit) /**Custom Code*/ treenode item = parnode(1); treenode current = ownerobject(c); int port = parval(2); /* PARTE I */ /* Suma una unidad a la cantidad de unidades que salen y lo guarda*/ int x=gettablenum("entradas y salidas",1,2); x=x+1; settablenum("entradas y salidas",1,2,x); /* Suma una unidad a la capaidad actual y lo guarda*/ int y=gettablenum("cap doisp 2",1,1); if (y>0) { 85 y=y+1; settablenum("cap doisp 2",1,1,y); } /* PARTE II */ /* Guarda el tiempo de salida del frigorífico */ int t=time(); setlabelnum(item,"t salida",t); /* PARTE III */ /* Calcula el tiempo de estadía en frigorífico y guarda en etiqueta*/ int tent=getlabelnum(item,"t entrada"); int tsal=getlabelnum(item,"t salida"); int talm=tsal-tent; setlabelnum(item,"t almacenamiento",talm); /* PARTE IV */ /* Saca el costo de transporte de vuelta: como cada unidad que entra es un camión de 10 toneladas, el costo se calcula simplemente por el flete de 1 camión*/ int ctida=getlabelnum(item,"precio transporte"); int ctvuelta=gettablenum("precios",1,2); int ctidayvuelta=ctida+ctvuelta; setlabelnum(item,"precio transporte",ctidayvuelta); /* PARTE V */ /* Saca el costo total= almacenamiento+transporte */ int calmacen=getlabelnum(item,"precio alm"); int ctransp=getlabelnum(item,"precio transporte"); int caltrans=calmacen+ctransp; setlabelnum(item,"precio total",caltrans); 86 Código A.5: “Programación Modelo Genérico FE1” FE1 (OnEntry) /**Custom Code*/ treenode item = parnode(1); treenode current = ownerobject(c); int port = parval(2); /* PARTE I */ /* para contar la cantidad de unidades que entran y salen del frigorífico externo1, e ir guardando la capacidad en cada momento*/ int x=gettablenum("entradas y salidas",2,1); /*adquiere el valor de cuantas unidades han entrado */ x=x+1; /* le suma una unidad*/ settablenum("entradas y salidas",2,1,x); /*lo guarda en la tabla de unidades entradas, esta vez sumada la nueva unidad entrante*/ int y=gettablenum("cap doisp 2",2,1); /*busca en la tabla de capacidaddes la cantidad que el frigorífico externo1 inicialmente tenia disponible*/ y=y-1; /*le resta una unidad*/ settablenum("cap doisp 2",2,1,y);/*lo guarda como la nueva capacidad disponible actual*/ /* PARTE II */ /* aca se etiqueta el objeto para identificarlo respecto al frigorifico donde fue almacenado*/ setlabelnum(item,"frigorifico",2); /* PARTE III */ /* guardando en una tabla el tiempo en el que entra a frigorifico*/ int t=time(); setlabelnum(item,"t entrada",t); /* PARTE IV */ /* sacando el costo de transporte: como cada unidad que entra es un camion de 10 toneladas, el costo se calcula simplemente por el flete de 1 camion*/ int ctida=gettablenum("precios",2,2); setlabelnum(item,"precio transporte",ctida); /*PARTE V*/ /*dependiendo de lo que se necesite enviar, abre o cierra el puerto*/ int enviados=gettablenum("TABLA DE ENVIOS",1,2); int cajas=gettablenum("TABLA DE ENVIOS",2,2); cajas=cajas+1; settablenum("TABLA DE ENVIOS",2,2,cajas); if (enviados==cajas) { closeinput(current); // si no funciona es closeinput(rank(model(),4); settablenum("TABLA DE ENVIOS",1,2,0); settablenum("TABLA DE ENVIOS",2,2,0); } 87 FE1 (OnExit) /**Custom Code*/ treenode item = parnode(1); treenode current = ownerobject(c); int port = parval(2); /* PARTE I */ /*sumo una unidad a la cantidad de unidades que salen y lo guardo*/ int x= gettablenum("entradas y salidas",2,2); x=x+1; settablenum("entradas y salidas",2,2,x); /*sumo una unidad a la capaidad actual y lo guardo*/ int y=gettablenum("cap doisp 2",2,1); if (y>=0) { y=y+1; settablenum("cap doisp 2",2,1,y); } /* PARTE II */ /* guardando el tiempo de salida del frigorifico */ int t=time(); setlabelnum(item,"t salida",t); /*PARTE III */ /* calculando el tiempo de estadia en frigorifico y guardandolo en etiqueta*/ int tent=getlabelnum(item,"t entrada"); int tsal=getlabelnum(item,"t salida"); int talm=tsal-tent; setlabelnum(item,"t almacenamiento",talm); /* PARTE IV */ /* sacando el costo de transporte de vuelta: como cada unidad que entra es un camion de 10 toneladas, el costo se calcula simplemente por el flete de 1 camion*/ int ctida=getlabelnum(item,"precio transporte"); int ctvuelta=gettablenum("precios",2,2); int ctidayvuelta=ctida+ctvuelta; setlabelnum(item,"precio transporte",ctidayvuelta); /* PARTE V */ /* sacando el costo total= almacenamiento+transporte */ int calmacen=getlabelnum(item,"precio alm"); int ctransp=getlabelnum(item,"precio transporte"); int caltrans=calmacen+ctransp; setlabelnum(item,"precio total",caltrans); 88 Código A.6: “Programación Modelo Genérico FE2” FE2 (OnEntry) /**Custom Code*/ treenode item = parnode(1); treenode current = ownerobject(c); int port = parval(2); /* PARTE I */ /* para contar la cantidad de unidades que entran y salen del frigorífico externo2, e ir guardando la capacidad en cada momento*/ int x=gettablenum("entradas y salidas",3,1); /*adquiere el valor de cuantas unidades han entrado */ x=x+1; /* le suma una unidad*/ settablenum("entradas y salidas",3,1,x); /*lo guarda en la tabla de unidades entradas, esta vez sumada la nueva unidad entrante*/ int y=gettablenum("cap doisp 2",3,1); /*busca en la tabla de capacidaddes la cantidad que el frigorífico externo2 inicialmente tenia disponible*/ y=y-1; /*le resta una unidad*/ settablenum("cap doisp 2",3,1,y);/*lo guarda como la nueva capacidad disponible actual*/ /* PARTE II */ /* aca se etiqueta el objeto para identificarlo respecto al frigorifico donde fue almacenado*/ setlabelnum(item,"frigorifico",3); /* PARTE III */ /* guardando en una tabla el tiempo en el que entra a frigorifico*/ int t=time(); setlabelnum(item,"t entrada",t); /* PARTE IV */ /* sacando el costo de transporte: como cada unidad que entra es un camion de 10 toneladas, el costo se calcula simplemente por el flete de 1 camion*/ int ctida=gettablenum("precios",3,2); setlabelnum(item,"precio transporte",ctida); /*PARTE V*/ /*dependiendo de lo que se necesite enviar, abre o cierra el puerto*/ int enviados=gettablenum("TABLA DE ENVIOS",1,3); int cajas=gettablenum("TABLA DE ENVIOS",2,3); cajas=cajas+1; settablenum("TABLA DE ENVIOS",2,3,cajas); if (enviados==cajas) { closeinput(current); settablenum("TABLA DE ENVIOS",1,3,0); settablenum("TABLA DE ENVIOS",2,3,0); } FE2 (OnExit) /**Custom Code*/ treenode item = parnode(1); treenode current = ownerobject(c); int port = parval(2); 89 /* PARTE I */ /*sumo una unidad a la cantidad de unidades que salen y lo guardo*/ int x= gettablenum("entradas y salidas",3,2); x=x+1; settablenum("entradas y salidas",3,2,x); /*sumo una unidad a la capaidad actual y lo guardo*/ int y=gettablenum("cap doisp 2",3,1); if (y>=0) { y=y+1; settablenum("cap doisp 2",3,1,y); } /* PARTE II */ /* guardando el tiempo de salida del frigorifico */ int t=time(); setlabelnum(item,"t salida",t); /*PARTE III */ /* calculando el tiempo de estadia en frigorifico y guardandolo en etiqueta*/ int tent=getlabelnum(item,"t entrada"); int tsal=getlabelnum(item,"t salida"); int talm=tsal-tent; setlabelnum(item,"t almacenamiento",talm); /* PARTE IV */ /* sacando el costo de transporte de vuelta: como cada unidad que entra es un camion de 10 toneladas, el costo se calcula simplemente por el flete de 1 camion*/ int ctida=getlabelnum(item,"precio transporte"); int ctvuelta=gettablenum("precios",3,2); int ctidayvuelta=ctida+ctvuelta; setlabelnum(item,"precio transporte",ctidayvuelta); /* PARTE V */ /* sacando el costo total= almacenamiento+transporte */ int calmacen=getlabelnum(item,"precio alm"); int ctransp=getlabelnum(item,"precio transporte"); int caltrans=calmacen+ctransp; setlabelnum(item,"precio total",caltrans); 90 Código A.7: “Programación Modelo Genérico FE3” FE3 (OnEntry) /**Custom Code*/ treenode item = parnode(1); treenode current = ownerobject(c); int port = parval(2); /* PARTE I */ /* para contar la cantidad de unidades que entran y salen del frigorífico externo3, e ir guardando la capacidad en cada momento*/ int x=gettablenum("entradas y salidas",4,1); /*adquiere el valor de cuantas unidades han entrado */ x=x+1; /* le suma una unidad*/ settablenum("entradas y salidas",4,1,x); /*lo guarda en la tabla de unidades entradas, esta vez sumada la nueva unidad entrante*/ int y=gettablenum("cap doisp 2",4,1); /*busca en la tabla de capacidaddes la cantidad que el frigorífico externo3 inicialmente tenia disponible*/ y=y-1; /*le resta una unidad*/ settablenum("cap doisp 2",4,1,y);/*lo guarda como la nueva capacidad disponible actual*/ /* PARTE II */ /* aca se etiqueta el objeto para identificarlo respecto al frigorifico donde fue almacenado*/ setlabelnum(item,"frigorifico",4); /* PARTE III */ /* guardando en una tabla el tiempo en el que entra a frigorifico*/ int t=time(); setlabelnum(item,"t entrada",t); /* PARTE IV */ /* sacando el costo de transporte: como cada unidad que entra es un camion de 10 toneladas, el costo se calcula simplemente por el flete de 1 camion*/ int ctida=gettablenum("precios",4,2); setlabelnum(item,"precio transporte",ctida); /*PARTE V*/ /*dependiendo de lo que se necesite enviar, abre o cierra el puerto*/ int enviados=gettablenum("TABLA DE ENVIOS",1,4); int cajas=gettablenum("TABLA DE ENVIOS",2,4); cajas=cajas+1; settablenum("TABLA DE ENVIOS",2,4,cajas); if (enviados==cajas) { closeinput(current); // si no funciona es closeinput(rank(model(),4); settablenum("TABLA DE ENVIOS",1,4,0); settablenum("TABLA DE ENVIOS",2,4,0); } FE3 (OnExit) /**Custom Code*/ treenode item = parnode(1); treenode current = ownerobject(c); 91 int port = parval(2); /* PARTE I */ /*sumo una unidad a la cantidad de unidades que salen y lo guardo*/ int x= gettablenum("entradas y salidas",4,2); x=x+1; settablenum("entradas y salidas",4,2,x); /*sumo una unidad a la capaidad actual y lo guardo*/ int y=gettablenum("cap doisp 2",4,1); if (y>=0) { y=y+1; settablenum("cap doisp 2",4,1,y); } /* PARTE II */ /* guardando el tiempo de salida del frigorifico */ int t=time(); setlabelnum(item,"t salida",t); /*PARTE III */ /* calculando el tiempo de estadia en frigorifico y guardandolo en etiqueta*/ int tent=getlabelnum(item,"t entrada"); int tsal=getlabelnum(item,"t salida"); int talm=tsal-tent; setlabelnum(item,"t almacenamiento",talm); /* PARTE IV */ /* sacando el costo de transporte de vuelta: como cada unidad que entra es un camion de 10 toneladas, el costo se calcula simplemente por el flete de 1 camion*/ int ctida=getlabelnum(item,"precio transporte"); int ctvuelta=gettablenum("precios",4,2); int ctidayvuelta=ctida+ctvuelta; setlabelnum(item,"precio transporte",ctidayvuelta); /* PARTE V */ /* sacando el costo total= almacenamiento+transporte */ int calmacen=getlabelnum(item,"precio alm"); int ctransp=getlabelnum(item,"precio transporte"); int caltrans=calmacen+ctransp; setlabelnum(item,"precio total",caltrans); 92 Código A.8: “Programación Modelo Genérico PROCESADOR 2” PROCESADOR 2 (OnEntry) /**Custom Code*/ treenode item = parnode(1); treenode current = ownerobject(c); int port = parval(2); //calcula el costo de almacenamiento double tiempoalm=getlabelnum(item,"t almacenamiento"); double frig=getlabelnum(item,"frigorifico"); double calm; double calm2; if (frig==1) { calm=gettablenum("precios",1,1); calm=calm/30; calm2=calm*tiempoalm; setlabelnum(item,"precio alm",calm2); } else if (frig==2) { calm=gettablenum("precios",2,1); calm=calm/30; calm2=calm*tiempoalm; setlabelnum(item,"precio alm",calm2); } else if (frig==3) { calm=gettablenum("precios",3,1); calm=calm/30; calm2=calm*tiempoalm; setlabelnum(item,"precio alm",calm2); } else if (frig==4) { calm=gettablenum("precios",4,1); calm=calm/30; calm2=calm*tiempoalm; setlabelnum(item,"precio alm",calm2); } Código A.9: “Programación Modelo Genérico GRAN COLA QUE PROCESA”. GRAN COLA QUE PROCESA (OnEntry) /**Custom Code*/ treenode item = parnode(1); treenode current = ownerobject(c); int port = parval(2); //cierra los puertos dependiendo de donde vengan int etiquet=getlabelnum(item,"frigorifico"); int contad=gettablenum("tabla valores",1,10); int contad1=gettablenum("tabla valores",1,11); contad=contad+1; contad1=contad1+1; int dda2=gettablenum("demandas",contad1,2); int cajitas=gettablenum("tabla valores",2,10); cajitas=cajitas+1; 93 settablenum("tabla valores",2,10,cajitas); if (etiquet==1) { if(cajitas==dda2) { closeoutput(rank(model(),5)); settablenum("tabla valores",1,10,0); settablenum("tabla valores",2,10,0); settablenum("tabla valores",1,11,contad1); } } else if (etiquet==2) { if(cajitas==dda2) { closeoutput(rank(model(),6)); settablenum("tabla valores",1,10,0); settablenum("tabla valores",2,10,0); settablenum("tabla valores",1,11,contad1); } } else if (etiquet==3) { if(cajitas==dda2) { closeoutput(rank(model(),7)); settablenum("tabla valores",1,10,0); settablenum("tabla valores",2,10,0); settablenum("tabla valores",1,11,contad1); } } else if (etiquet==4) { if(cajitas==dda2) { closeoutput(rank(model(),8)); settablenum("tabla valores",1,10,0); settablenum("tabla valores",2,10,0); settablenum("tabla valores",1,11,contad1); } } // guarda todos los datos en tabla global double conttg=gettablenum("tabla valores",1,12); conttg=conttg+1; double frigorif=getlabelnum(item,"frigorifico"); double tient=getlabelnum(item,"t entrada"); double tisal=getlabelnum(item,"t salida"); double talma=getlabelnum(item,"t almacenamiento"); double costtrans=getlabelnum(item,"precio transporte"); double costalma=getlabelnum(item,"precio alm"); double numentidad=getlabelnum(item,"entidad n°"); double costotot=costtrans+costalma; setlabelnum(item,"precio total",costotot); settablenum("TABLA GLOBAL",conttg,1,frigorif); settablenum("TABLA GLOBAL",conttg,2,tient); settablenum("TABLA GLOBAL",conttg,3,tisal); settablenum("TABLA GLOBAL",conttg,4,talma); settablenum("TABLA GLOBAL",conttg,5,costtrans); settablenum("TABLA GLOBAL",conttg,6,costalma); settablenum("TABLA GLOBAL",conttg,7,costotot); settablenum("TABLA GLOBAL",conttg,8,numentidad); settablenum("tabla valores",1,12,conttg); 94 Código A.10: “Programación Modelo Específico COLA1” COLA 1 (OnExit) /**Custom Code*/ treenode item = parnode(1); treenode current = ownerobject(c); int port = parval(2); int int int int numero_op=gettablenum("tabla valores",1,5)+1; produccion_op=gettablenum("PRODUCCION",numero_op,2); tiempo_op=gettablenum("PRODUCCION",numero_op,1); tiempo=time(); if(tiempo==tiempo_op+1) { settablenum("tabla valores",1,5,numero_op); //Aumenta el contador //Saca la combinatoria int xx=produccion_op; int jj; int gg; int bb; int dd; int sumacomb; int cont=gettablenum("combinaciones",1,5); for (jj=0;jj<=xx;jj++) { for (gg=0;gg<=xx;gg++) { settablenum("combinaciones",cont+1,1,jj); settablenum("combinaciones",cont+1,2,gg); bb=gettablenum("combinaciones",cont+1,1); dd=gettablenum("combinaciones",cont+1,2); sumacomb=bb+dd; if(sumacomb==xx) { cont=cont+1; } } } // Borra el último valor settablenum("combinaciones",cont+1,1,0); settablenum("combinaciones",cont+1,2,0); settablenum("combinaciones",1,6,cont); //Guarda la cantidad de combinaciones settablenum("combinaciones",1,5,0);// Seteo el contador // OPTIMO // Cantidades double v1; double v2; //Costos individuales double c1; 95 double c2; // Costos transporte double t1; double t2; // Costos almacenamiento double al1; double al2; //costos totales y valores int costo; int narbi=gettablenum("numero arbitrario",1,1); int comb=gettablenum("combinaciones",1,6); // Obtiene las filas a recorrer en las combinatorias for (int j=1;j<=comb;j++) { //obtengo los valores de cada fila v1=gettablenum("combinaciones",j,1); v2=gettablenum("combinaciones",j,2); //obtengo los costos de almacenamiento al1=gettablenum("precios",1,1); al2=gettablenum("precios",2,1); //obtengo los costos de transporte t1=gettablenum("precios",1,2); t2=gettablenum("precios",2,2); //calculo los costos de la combinación c1=v1*(al1+t1); c2=v2*(al2+t2); costo=c1+c2; if (costo<=narbi) { settablenum("OPTIMO",1,1,v1); settablenum("OPTIMO",1,2,v2); settablenum("OPTIMO",1,5,costo); narbi=costo; } } } 96 Código A.11: “Programación Modelo Específico COLA QUE DECIDE”. COLA QUE DECIDE (OnEntry) /**Custom Code*/ treenode item = parnode(1); treenode current = ownerobject(c); int port = parval(2); //ENVIOS A FRIGORIFICOS int numero_op=gettablenum("tabla valores",1,5); int produccion_op=gettablenum("PRODUCCION",numero_op,2); int tiempo_op=gettablenum("PRODUCCION",numero_op,1); int tiempo=time(); if(tiempo==tiempo_op+2) { settablenum("tabla valores",1,7,numero_op); //aumento el contador //obtener las capacidades actuales int f1=gettablenum("cap doisp 2",1,1); int f2=gettablenum("cap doisp 2",2,1); //obtener los valores de óptimos a enviar int ve1=gettablenum("OPTIMO",1,1); int ve2=gettablenum("OPTIMO",1,2); if(ve1>0) { if(ve1<=f1) { settablenum("TABLA DE ENVIOS",1,1,ve1); openinput(rank(model(),5)); } else if(ve1>f1) { settablenum("TABLA DE ENVIOS",1,1,f1); openinput(rank(model(),5)); int xI1=ve1-f1; settablenum("TABLA DE ENVIOS",1,2,xI1); openinput(rank(model(),6)); } } if (ve2>0) { if(ve2<=f2) { settablenum("TABLA DE ENVIOS",1,2,ve2); openinput(rank(model(),6)); } else if (ve2>f2) { settablenum("TABLA DE ENVIOS",1,2,f2); openinput(rank(model(),6)); int xI2=ve2-f2; settablenum("TABLA DE ENVIOS",1,2,xI2); openinput(rank(model(),5)); } } } 97 Código A.12: “Programación Modelo Específico FUENTE 2”. FUENTE 2 (OnExit) /**Custom Code*/ treenode item = parnode(1); treenode current = ownerobject(c); int rownumber = parval(2); int cont=gettablenum("tabla valores",1,9); cont=cont+1; int tiempodda=gettablenum("demandas",cont,1); int tiemp=time(); if(tiemp==tiempodda) { //obtengo la demanda de ese momento double dda=gettablenum("demandas",cont,2); //obtenemos los precios almacenamiento double a1=gettablenum("precios",1,1); double a2=gettablenum("precios",2,1); //obtenemos los precios transportes double tr1=gettablenum("precios",1,2); double tr2=gettablenum("precios",2,2); //obtenemos las sumas double suma1=a1+tr1; double suma2=a2+tr2; double double double double sumamayor=0; puertomayor; puertomenor; sumamenor=10000000; //buscamos el de mayor costo if(suma1>sumamayor) { sumamayor=suma1; puertomayor=1; } if(suma2>sumamayor) { sumamayor=suma2; puertomayor=2; } //buscamos el de menor costo if(suma1<sumamenor) { sumamenor=suma1; puertomenor=1; } if(suma2<sumamenor) { sumamenor=suma2; puertomenor=2; } 98 // sacando las disponibilidades de cada puerto int entf1; int entf2;; int salf1; int salf2; int dispf1; int dispf2; entf1=gettablenum("entradas y salidas",1,1); entf2=gettablenum("entradas y salidas",2,1); salf1=gettablenum("entradas y salidas",1,2); salf2=gettablenum("entradas y salidas",2,2); dispf1=entf1-salf1; dispf2=entf2-salf2; //preguntando cual puerto es cual if(puertomayor==1) { if(dispf1>=dda) { settablenum("TABLA ENVIOS DDA",1,1,dda); openoutput(rank(model(),5)); } else { settablenum("TABLA ENVIOS DDA",1,1,dda); openinput(rank(model(),5)); int resta1=dispf1-dda; settablenum("TABLA ENVIOS DDA",1,2,resta1); openoutput(rank(model(),6)); } } else if(puertomayor==2) { if(dispf2>=dda) { settablenum("TABLA ENVIOS DDA",1,2,dda); openoutput(rank(model(),6)); } else { settablenum("TABLA ENVIOS DDA",1,2,dda); openinput(rank(model(),6)); int resta2=dispf2-dda; settablenum("TABLA ENVIOS DDA",1,1,resta2); openoutput(rank(model(),5)); } } settablenum("tabla valores",1,9,cont); } 99 Código A.13: “Programación Modelo Específico COLA PROCESADORA” GRAN COLA PROCESADORA (OnEntry) /**Custom Code*/ treenode item = parnode(1); treenode current = ownerobject(c); int port = parval(2); // Cierra los puertos dependiendo de donde vengan int etiquet=getlabelnum(item,"frigorifico"); int ddaf1=gettablenum("TABLA ENVIOS DDA",1,1); int ddaf2=gettablenum("TABLA ENVIOS DDA",1,2); int cajitasf1=gettablenum("tabla valores",1,11); int cajitasf2=gettablenum("tabla valores",2,11); if (etiquet==1) { cajitasf1=cajitasf1+1; if(cajitasf1==ddaf1) { closeoutput(rank(model(),5)); settablenum("tabla valores",1,11,0); } else { settablenum("tabla valores",1,11,cajitasf1); } } else if (etiquet==2) { cajitasf2=cajitasf2+1; if(cajitasf2==ddaf2) { closeoutput(rank(model(),6)); settablenum("tabla valores",2,11,0); } else { settablenum("tabla valores",2,11,cajitasf2); } } // Guarda todos los datos en tabla global double conttg=gettablenum("tabla valores",1,12); conttg=conttg+1; double frigorif=getlabelnum(item,"frigorifico"); double tient=getlabelnum(item,"t entrada"); double tisal=getlabelnum(item,"t salida"); double talma=getlabelnum(item,"t almacenamiento"); double costtrans=getlabelnum(item,"precio transporte"); double costalma=getlabelnum(item,"precio alm"); double costotot=costtrans+costalma; setlabelnum(item,"precio total",costotot); settablenum("TABLA GLOBAL",conttg,1,frigorif); settablenum("TABLA GLOBAL",conttg,2,tient); settablenum("TABLA GLOBAL",conttg,3,tisal); settablenum("TABLA GLOBAL",conttg,4,talma); settablenum("TABLA GLOBAL",conttg,5,costtrans); settablenum("TABLA GLOBAL",conttg,6,costalma); settablenum("TABLA GLOBAL",conttg,7,costotot); settablenum("tabla valores",1,12,conttg); 100 ANEXO B: TABLAS Tabla B.1: cálculo hecho con la variable de entrada dos. Entrada=2 Suma FI FE1 FE2 FE3 (FI+FE1+FE2+FE3) 1 0 0 0 0 0 2 0 0 0 1 1 3 0 0 0 2 2 4 0 0 1 0 1 5 0 0 1 1 2 6 0 0 1 2 3 7 0 0 2 0 2 8 0 0 2 1 3 9 0 0 2 2 4 10 0 1 0 0 1 11 0 1 0 1 2 12 0 1 0 2 3 13 0 1 1 0 2 14 0 1 1 1 3 15 0 1 1 2 4 16 0 1 2 0 3 17 0 1 2 1 4 18 0 1 2 2 5 19 0 2 0 0 2 20 0 2 0 1 3 21 0 2 0 2 4 22 0 2 1 0 3 23 0 2 1 1 4 24 0 2 1 2 5 25 0 2 2 0 4 26 0 2 2 1 5 27 0 2 2 2 6 28 1 0 0 0 1 29 1 0 0 1 2 30 1 0 0 2 3 31 1 0 1 0 2 32 1 0 1 1 3 33 1 0 1 2 4 34 1 0 2 0 3 35 1 0 2 1 4 101 36 1 0 2 2 5 37 1 1 0 0 2 38 1 1 0 1 3 39 1 1 0 2 4 40 1 1 1 0 3 41 1 1 1 1 4 42 1 1 1 2 5 43 1 1 2 0 4 44 1 1 2 1 5 45 1 1 2 2 6 46 1 2 0 0 3 47 1 2 0 1 4 48 1 2 0 2 5 49 1 2 1 0 4 50 1 2 1 1 5 51 1 2 1 2 6 52 1 2 2 0 5 53 1 2 2 1 6 54 1 2 2 2 7 55 2 0 0 0 2 56 2 0 0 1 3 57 2 0 0 2 4 58 2 0 1 0 3 59 2 0 1 1 4 60 2 0 1 2 5 61 2 0 2 0 4 62 2 0 2 1 5 63 2 0 2 2 6 64 2 1 0 0 3 65 2 1 0 1 4 66 2 1 0 2 5 67 2 1 1 0 4 68 2 1 1 1 5 69 2 1 1 2 6 70 2 1 2 0 5 71 2 1 2 1 6 72 2 1 2 2 7 73 2 2 0 0 4 74 2 2 0 1 5 75 2 2 0 2 6 76 2 2 1 0 5 102 77 2 2 1 1 6 78 2 2 1 2 7 79 2 2 2 0 6 80 2 2 2 1 7 81 2 2 2 2 8 Fuente: Elaboración propia en Microsoft Office Excel 2007 Tabla B.2: TABLA GLOBAL con datos procesados al final de la modelación Escenario 1. Frig. 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 t.ent 152 153 212 163 162 142 232 242 192 202 132 123 74 82 73 62 63 72 22 33 112 113 32 122 52 2833 2842 2832 2942 2952 2762 t.sal 4530 4531 4590 4540 4532 4510 4591 4592 4541 4542 4470 4460 4390 4391 4380 4360 4361 4362 4310 4320 4392 4393 4311 4394 4321 4250 4251 4220 4300 4301 4110 t.alm 4378 4378 4378 4377 4370 4368 4359 4350 4349 4340 4338 4337 4316 4309 4307 4298 4298 4290 4288 4287 4280 4280 4279 4272 4269 1417 1409 1388 1358 1349 1348 C.Tr 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 1134 1134 1134 1134 1134 1134 C.A 113,83 113,83 113,83 113,80 113,62 113,57 113,33 113,10 113,07 112,84 112,79 112,76 112,22 112,03 111,98 111,75 111,75 111,54 111,49 111,46 111,28 111,28 111,25 111,07 110,99 61,40 61,06 60,15 58,85 58,46 58,41 C.T 163,83 163,83 163,83 163,80 163,62 163,57 163,33 163,10 163,07 162,84 162,79 162,76 162,22 162,03 161,98 161,75 161,75 161,54 161,49 161,46 161,28 161,28 161,25 161,07 160,99 1.195,40 1.195,06 1.194,15 1.192,85 1.192,46 1.192,41 n° entidad 17 18 23 20 19 16 24 25 21 22 15 14 9 10 8 5 6 7 1 3 11 12 2 13 4 397 398 396 399 400 387 103 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2763 2802 2803 2812 2813 2822 2823 2754 2772 2752 2753 2704 2622 2623 2624 2744 2732 2733 2734 2742 2743 2662 2663 2664 2682 2683 2684 2694 2672 2673 2674 2692 2693 2702 2703 2564 2614 2612 2613 2594 2592 4111 4150 4151 4160 4161 4170 4171 4100 4112 4090 4091 4040 3940 3941 3942 4060 4041 4042 4043 4050 4051 3943 3944 3945 3960 3961 3962 3970 3946 3947 3948 3963 3964 3971 3972 3820 3870 3860 3861 3830 3821 1348 1348 1348 1348 1348 1348 1348 1346 1340 1338 1338 1336 1318 1318 1318 1316 1309 1309 1309 1308 1308 1281 1281 1281 1278 1278 1278 1276 1274 1274 1274 1271 1271 1269 1269 1256 1256 1248 1248 1236 1229 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 58,41 58,41 58,41 58,41 58,41 58,41 58,41 58,33 58,07 57,98 57,98 57,89 57,11 57,11 57,11 57,03 56,72 56,72 56,72 56,68 56,68 55,51 55,51 55,51 55,38 55,38 55,38 55,29 55,21 55,21 55,21 55,08 55,08 54,99 54,99 54,43 54,43 54,08 54,08 53,56 53,26 1.192,41 1.192,41 1.192,41 1.192,41 1.192,41 1.192,41 1.192,41 1.192,33 1.192,07 1.191,98 1.191,98 1.191,89 1.191,11 1.191,11 1.191,11 1.191,03 1.190,72 1.190,72 1.190,72 1.190,68 1.190,68 1.189,51 1.189,51 1.189,51 1.189,38 1.189,38 1.189,38 1.189,29 1.189,21 1.189,21 1.189,21 1.189,08 1.189,08 1.188,99 1.188,99 1.188,43 1.188,43 1.188,08 1.188,08 1.187,56 1.187,26 388 390 391 392 393 394 395 386 389 384 385 377 360 361 362 383 378 379 380 381 382 363 364 365 369 370 371 374 366 367 368 372 373 375 376 351 359 357 358 354 352 104 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2593 2602 2603 2553 2554 2563 2562 2552 2544 2532 2533 2534 2542 2543 2493 2494 2492 2484 2482 2483 2522 2523 2524 2463 2464 2474 2472 2473 2452 2453 2454 2462 2422 2423 2424 2404 2414 2412 2413 2344 2384 3822 3831 3832 3780 3781 3790 3782 3770 3720 3680 3681 3682 3690 3691 3640 3641 3630 3620 3610 3611 3642 3643 3644 3560 3561 3570 3562 3563 3540 3541 3542 3550 3470 3471 3472 3400 3410 3401 3402 3330 3370 1229 1229 1229 1227 1227 1227 1220 1218 1176 1148 1148 1148 1148 1148 1147 1147 1138 1136 1128 1128 1120 1120 1120 1097 1097 1096 1090 1090 1088 1088 1088 1088 1048 1048 1048 996 996 989 989 986 986 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 53,26 53,26 53,26 53,17 53,17 53,17 52,87 52,78 50,96 49,75 49,75 49,75 49,75 49,75 49,70 49,70 49,31 49,23 48,88 48,88 48,53 48,53 48,53 47,54 47,54 47,49 47,23 47,23 47,15 47,15 47,15 47,15 45,41 45,41 45,41 43,16 43,16 42,86 42,86 42,73 42,73 1.187,26 1.187,26 1.187,26 1.187,17 1.187,17 1.187,17 1.186,87 1.186,78 1.184,96 1.183,75 1.183,75 1.183,75 1.183,75 1.183,75 1.183,70 1.183,70 1.183,31 1.183,23 1.182,88 1.182,88 1.182,53 1.182,53 1.182,53 1.181,54 1.181,54 1.181,49 1.181,23 1.181,23 1.181,15 1.181,15 1.181,15 1.181,15 1.179,41 1.179,41 1.179,41 1.177,16 1.177,16 1.176,86 1.176,86 1.176,73 1.176,73 353 355 356 347 348 350 349 346 345 340 341 342 343 344 335 336 334 333 331 332 337 338 339 326 327 330 328 329 322 323 324 325 319 320 321 315 318 316 317 303 309 105 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2352 2353 2354 2392 2393 2394 2383 2402 2403 2382 2342 2343 2333 2323 2324 2332 2264 2272 2273 2274 2283 2284 2282 2313 2314 2322 592 593 602 2312 732 612 742 743 752 562 632 763 2254 762 572 3331 3332 3333 3371 3372 3373 3360 3374 3375 3350 3290 3291 3280 3260 3261 3262 3190 3191 3192 3193 3200 3201 3194 3220 3221 3222 1490 1491 1492 3202 1620 1493 1621 1622 1623 1430 1500 1630 3120 1624 1431 979 979 979 979 979 979 977 972 972 968 948 948 947 937 937 930 926 919 919 919 917 917 912 907 907 900 898 898 890 890 888 881 879 879 871 868 868 867 866 862 859 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 42,42 42,42 42,42 42,42 42,42 42,42 42,34 42,12 42,12 41,95 41,08 41,08 41,04 40,60 40,60 40,30 40,13 39,82 39,82 39,82 39,74 39,74 39,52 39,30 39,30 39,00 38,91 38,91 38,57 38,57 38,48 38,18 38,09 38,09 37,74 37,61 37,61 37,57 37,53 37,35 37,22 1.176,42 1.176,42 1.176,42 1.176,42 1.176,42 1.176,42 1.176,34 1.176,12 1.176,12 1.175,95 1.175,08 1.175,08 1.175,04 1.174,60 1.174,60 1.174,30 1.174,13 1.173,82 1.173,82 1.173,82 1.173,74 1.173,74 1.173,52 1.173,30 1.173,30 1.173,00 1.172,91 1.172,91 1.172,57 1.172,57 1.172,48 1.172,18 1.172,09 1.172,09 1.171,74 1.171,61 1.171,61 1.171,57 1.171,53 1.171,35 1.171,22 304 305 306 310 311 312 308 313 314 307 301 302 300 297 298 299 286 287 288 289 291 292 290 294 295 296 57 58 59 293 73 60 74 75 76 54 61 78 283 77 55 106 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 642 772 2262 2263 422 682 692 693 712 713 582 702 722 782 492 502 662 442 512 802 842 852 1823 1824 1764 1765 672 673 452 522 1772 1773 1774 1775 1832 812 862 532 1783 1784 1782 1501 1631 3121 3122 1280 1540 1550 1551 1570 1571 1432 1552 1572 1632 1340 1350 1502 1281 1351 1640 1680 1690 2660 2661 2600 2601 1503 1504 1282 1352 2602 2603 2604 2605 2662 1641 1691 1360 2610 2611 2606 859 859 859 859 858 858 858 858 858 858 850 850 850 850 848 848 840 839 839 838 838 838 837 837 836 836 831 831 830 830 830 830 830 830 830 829 829 828 827 827 824 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 37,22 37,22 37,22 37,22 37,18 37,18 37,18 37,18 37,18 37,18 36,83 36,83 36,83 36,83 36,75 36,75 36,40 36,36 36,36 36,31 36,31 36,31 36,27 36,27 36,23 36,23 36,01 36,01 35,97 35,97 35,97 35,97 35,97 35,97 35,97 35,92 35,92 35,88 35,84 35,84 35,71 1.171,22 1.171,22 1.171,22 1.171,22 1.171,18 1.171,18 1.171,18 1.171,18 1.171,18 1.171,18 1.170,83 1.170,83 1.170,83 1.170,83 1.170,75 1.170,75 1.170,40 1.170,36 1.170,36 1.170,31 1.170,31 1.170,31 1.170,27 1.170,27 1.170,23 1.170,23 1.170,01 1.170,01 1.169,97 1.169,97 1.169,97 1.169,97 1.169,97 1.169,97 1.169,97 1.169,92 1.169,92 1.169,88 1.169,84 1.169,84 1.169,71 62 79 284 285 41 66 67 68 70 71 56 69 72 80 47 48 63 42 49 81 84 85 219 220 205 206 64 65 43 50 207 208 209 210 221 82 86 51 212 213 211 107 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 822 872 1792 1793 1794 1795 542 1722 1723 1724 483 2244 472 882 552 2252 2253 1714 2214 482 892 902 2213 1754 1822 1752 1753 1762 1763 2212 2242 2243 2043 2044 2063 1684 2052 2053 1692 1693 1694 1642 1692 2612 2613 2614 2615 1361 2540 2541 2542 1300 3060 1283 1693 1362 3061 3062 2520 3020 1284 1694 1700 3010 2550 2616 2543 2544 2551 2552 3000 3021 3022 2820 2821 2840 2460 2822 2823 2461 2462 2463 820 820 820 820 820 820 819 818 818 818 817 816 811 811 810 809 809 806 806 802 802 798 797 796 794 791 791 789 789 788 779 779 777 777 777 776 770 770 769 769 769 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 35,53 35,53 35,53 35,53 35,53 35,53 35,49 35,45 35,45 35,45 35,40 35,36 35,14 35,14 35,10 35,06 35,06 34,93 34,93 34,75 34,75 34,58 34,54 34,49 34,41 34,28 34,28 34,19 34,19 34,15 33,76 33,76 33,67 33,67 33,67 33,63 33,37 33,37 33,32 33,32 33,32 1.169,53 1.169,53 1.169,53 1.169,53 1.169,53 1.169,53 1.169,49 1.169,45 1.169,45 1.169,45 1.169,40 1.169,36 1.169,14 1.169,14 1.169,10 1.169,06 1.169,06 1.168,93 1.168,93 1.168,75 1.168,75 1.168,58 1.168,54 1.168,49 1.168,41 1.168,28 1.168,28 1.168,19 1.168,19 1.168,15 1.167,76 1.167,76 1.167,67 1.167,67 1.167,67 1.167,63 1.167,37 1.167,37 1.167,32 1.167,32 1.167,32 83 87 214 215 216 217 52 197 198 199 46 280 44 88 53 281 282 196 277 45 89 90 276 202 218 200 201 203 204 275 278 279 243 244 248 187 245 246 188 189 190 108 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2072 2073 1982 1983 1683 1704 1702 1703 2062 1902 1903 2082 2083 1992 1993 1712 1713 992 1912 1913 1922 1923 2003 2184 2002 1932 1933 952 2192 2193 2194 962 2202 2203 2204 2102 2103 2104 2105 972 1023 2841 2842 2750 2751 2450 2470 2464 2465 2824 2663 2664 2843 2844 2752 2753 2471 2472 1750 2670 2671 2680 2681 2760 2940 2754 2682 2683 1701 2941 2942 2943 1710 2950 2951 2952 2845 2846 2847 2848 1711 1760 769 769 768 768 767 766 762 762 762 761 761 761 761 760 760 759 759 758 758 758 758 758 757 756 752 750 750 749 749 749 749 748 748 748 748 743 743 743 743 739 737 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 33,32 33,32 33,28 33,28 33,24 33,19 33,02 33,02 33,02 32,98 32,98 32,98 32,98 32,93 32,93 32,89 32,89 32,85 32,85 32,85 32,85 32,85 32,80 32,76 32,59 32,50 32,50 32,46 32,46 32,46 32,46 32,41 32,41 32,41 32,41 32,20 32,20 32,20 32,20 32,02 31,94 1.167,32 1.167,32 1.167,28 1.167,28 1.167,24 1.167,19 1.167,02 1.167,02 1.167,02 1.166,98 1.166,98 1.166,98 1.166,98 1.166,93 1.166,93 1.166,89 1.166,89 1.166,85 1.166,85 1.166,85 1.166,85 1.166,85 1.166,80 1.166,76 1.166,59 1.166,50 1.166,50 1.166,46 1.166,46 1.166,46 1.166,46 1.166,41 1.166,41 1.166,41 1.166,41 1.166,20 1.166,20 1.166,20 1.166,20 1.166,02 1.165,94 249 250 234 235 186 193 191 192 247 222 223 251 252 236 237 194 195 95 224 225 226 227 239 268 238 228 229 91 269 270 271 92 272 273 274 253 254 255 256 93 97 109 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2112 2113 2114 2173 2174 2183 982 2122 2123 2124 2182 1022 1032 1033 2032 2033 1643 1644 1963 1962 1042 2042 1652 1653 1654 1972 1973 1182 1183 1642 1052 1192 1102 1062 1063 1202 1203 1112 1624 1634 1682 2849 2850 2851 2910 2911 2920 1712 2852 2853 2854 2912 1751 1761 1762 2761 2762 2370 2371 2690 2684 1763 2763 2372 2373 2374 2691 2692 1900 1901 2360 1764 1902 1810 1765 1766 1903 1904 1811 2320 2330 2375 737 737 737 737 737 737 730 730 730 730 730 729 729 729 729 729 727 727 727 722 721 721 720 720 720 719 719 718 718 718 712 710 708 703 703 701 701 699 696 696 693 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 31,94 31,94 31,94 31,94 31,94 31,94 31,63 31,63 31,63 31,63 31,63 31,59 31,59 31,59 31,59 31,59 31,50 31,50 31,50 31,29 31,24 31,24 31,20 31,20 31,20 31,16 31,16 31,11 31,11 31,11 30,85 30,77 30,68 30,46 30,46 30,38 30,38 30,29 30,16 30,16 30,03 1.165,94 1.165,94 1.165,94 1.165,94 1.165,94 1.165,94 1.165,63 1.165,63 1.165,63 1.165,63 1.165,63 1.165,59 1.165,59 1.165,59 1.165,59 1.165,59 1.165,50 1.165,50 1.165,50 1.165,29 1.165,24 1.165,24 1.165,20 1.165,20 1.165,20 1.165,16 1.165,16 1.165,11 1.165,11 1.165,11 1.164,85 1.164,77 1.164,68 1.164,46 1.164,46 1.164,38 1.164,38 1.164,29 1.164,16 1.164,16 1.164,03 257 258 259 264 265 267 94 260 261 262 266 96 98 99 240 241 180 181 231 230 100 242 182 183 184 232 233 111 112 179 101 113 104 102 103 114 115 105 175 178 185 110 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1122 1632 1633 2172 1132 1142 1372 1373 1364 1584 1162 1262 1263 1172 1272 1273 1614 1282 1412 1413 1612 1613 1622 1623 1292 1293 1563 1564 1573 1574 1575 1582 1583 1302 1303 1572 1363 1493 1432 1433 1502 1812 2321 2322 2855 1813 1814 2040 2041 2030 2240 1815 1910 1911 1816 1912 1913 2250 1914 2042 2043 2241 2242 2251 2252 1920 1921 2190 2191 2200 2201 2202 2203 2204 1922 1923 2192 1980 2110 2044 2045 2111 690 689 689 683 681 672 668 668 666 656 653 648 648 644 640 640 636 632 630 630 629 629 629 629 628 628 627 627 627 627 627 621 621 620 620 620 617 617 612 612 609 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 29,90 29,86 29,86 29,60 29,51 29,12 28,95 28,95 28,86 28,43 28,30 28,08 28,08 27,91 27,73 27,73 27,56 27,39 27,30 27,30 27,26 27,26 27,26 27,26 27,21 27,21 27,17 27,17 27,17 27,17 27,17 26,91 26,91 26,87 26,87 26,87 26,74 26,74 26,52 26,52 26,39 1.163,90 1.163,86 1.163,86 1.163,60 1.163,51 1.163,12 1.162,95 1.162,95 1.162,86 1.162,43 1.162,30 1.162,08 1.162,08 1.161,91 1.161,73 1.161,73 1.161,56 1.161,39 1.161,30 1.161,30 1.161,26 1.161,26 1.161,26 1.161,26 1.161,21 1.161,21 1.161,17 1.161,17 1.161,17 1.161,17 1.161,17 1.160,91 1.160,91 1.160,87 1.160,87 1.160,87 1.160,74 1.160,74 1.160,52 1.160,52 1.160,39 106 176 177 263 107 108 132 133 131 169 109 116 117 110 118 119 172 120 134 135 170 171 173 174 121 122 161 162 164 165 166 167 168 123 124 163 130 149 136 137 150 111 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1503 1362 1443 1513 1514 1442 1512 1452 1453 1454 1553 1554 1332 1562 1342 1473 1474 1472 1482 1483 1542 1543 1352 1353 1492 1552 2112 1970 2050 2120 2121 2046 2113 2051 2052 2053 2150 2151 1924 2152 1930 2060 2061 2054 2062 2063 2122 2123 1931 1932 2064 2124 609 608 607 607 607 604 601 599 599 599 597 597 592 590 588 587 587 582 580 580 580 580 579 579 572 572 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 1134 26,39 26,35 26,30 26,30 26,30 26,17 26,04 25,96 25,96 25,96 25,87 25,87 25,65 25,57 25,48 25,44 25,44 25,22 25,13 25,13 25,13 25,13 25,09 25,09 24,79 24,79 1.160,39 1.160,35 1.160,30 1.160,30 1.160,30 1.160,17 1.160,04 1.159,96 1.159,96 1.159,96 1.159,87 1.159,87 1.159,65 1.159,57 1.159,48 1.159,44 1.159,44 1.159,22 1.159,13 1.159,13 1.159,13 1.159,13 1.159,09 1.159,09 1.158,79 1.158,79 151 129 139 153 154 138 152 140 141 142 158 159 125 160 126 144 145 143 146 147 155 156 127 128 148 157 Fuente: Elaboración propia en Microsoft Office Excel 2007 Tabla B.3: TABLA GLOBAL con los datos procesados al final de la modelación Escenario 2 Frig. t.ent 1 1 1 1 1 1 1 1 1 1 1 22 32 33 52 62 63 72 73 74 82 112 t.sal 1280 1281 1282 1283 1284 1300 1340 1350 1351 1352 1360 t.alm 1258 1249 1249 1231 1222 1237 1268 1277 1277 1270 1248 C. Tr. 50 50 50 50 50 50 50 50 50 50 50 C. A 32,708 32,474 32,474 32,006 31,772 32,162 32,968 33,202 33,202 33,02 32,448 C.T 82,708 82,474 82,474 82,006 81,772 82,162 82,968 83,202 83,202 83,02 82,448 n° entidad 1 2 3 4 5 6 7 8 9 10 11 112 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 113 122 123 132 142 152 153 162 163 192 202 212 232 242 262 263 272 282 283 312 332 352 362 372 382 383 392 402 412 422 442 452 472 482 483 492 502 512 522 532 542 1361 1362 1430 1431 1432 1490 1491 1492 1493 1500 1501 1502 1503 1504 1540 1550 1551 1552 1570 1571 1572 1620 1621 1622 1623 1624 1630 1631 1632 1640 1641 1642 1680 1690 1691 1692 1693 1694 1700 1701 1710 1248 1240 1307 1299 1290 1338 1338 1330 1330 1308 1299 1290 1271 1262 1278 1287 1279 1270 1287 1259 1240 1268 1259 1250 1241 1241 1238 1229 1220 1218 1199 1190 1208 1208 1208 1200 1191 1182 1178 1169 1168 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 32,448 32,24 33,982 33,774 33,54 34,788 34,788 34,58 34,58 34,008 33,774 33,54 33,046 32,812 33,228 33,462 33,254 33,02 33,462 32,734 32,24 32,968 32,734 32,5 32,266 32,266 32,188 31,954 31,72 31,668 31,174 30,94 31,408 31,408 31,408 31,2 30,966 30,732 30,628 30,394 30,368 82,448 82,24 83,982 83,774 83,54 84,788 84,788 84,58 84,58 84,008 83,774 83,54 83,046 82,812 83,228 83,462 83,254 83,02 83,462 82,734 82,24 82,968 82,734 82,5 82,266 82,266 82,188 81,954 81,72 81,668 81,174 80,94 81,408 81,408 81,408 81,2 80,966 80,732 80,628 80,394 80,368 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 113 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 552 562 572 582 592 593 602 612 632 642 662 672 673 682 692 693 702 712 713 722 732 742 743 752 762 763 772 782 802 812 822 842 852 862 872 882 892 902 952 962 972 1711 1712 1750 1751 1760 1761 1762 1763 1764 1765 1766 1810 1811 1812 1813 1814 1815 1816 1900 1901 1902 1903 1904 1910 1911 1912 1913 1914 1920 1921 1922 1923 1924 1930 1931 1932 1970 1980 2030 2040 2041 1159 1150 1178 1169 1168 1168 1160 1151 1132 1123 1104 1138 1138 1130 1121 1121 1113 1104 1187 1179 1170 1161 1161 1158 1149 1149 1141 1132 1118 1109 1100 1081 1072 1068 1059 1050 1078 1078 1078 1078 1069 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 30,134 29,9 30,628 30,394 30,368 30,368 30,16 29,926 29,432 29,198 28,704 29,588 29,588 29,38 29,146 29,146 28,938 28,704 30,862 30,654 30,42 30,186 30,186 30,108 29,874 29,874 29,666 29,432 29,068 28,834 28,6 28,106 27,872 27,768 27,534 27,3 28,028 28,028 28,028 28,028 27,794 80,134 79,9 80,628 80,394 80,368 80,368 80,16 79,926 79,432 79,198 78,704 79,588 79,588 79,38 79,146 79,146 78,938 78,704 80,862 80,654 80,42 80,186 80,186 80,108 79,874 79,874 79,666 79,432 79,068 78,834 78,6 78,106 77,872 77,768 77,534 77,3 78,028 78,028 78,028 78,028 77,794 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 114 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 982 992 1022 1023 1032 1033 1042 1052 1062 1063 1102 1112 1122 1132 1142 1162 1172 1182 1183 1192 1202 1203 1262 1263 1272 1273 1282 1292 1293 1302 1303 1332 1342 1352 1353 1362 1363 1364 1372 1373 1412 2042 2043 2044 2045 2046 2050 2051 2052 2053 2054 2060 2061 2062 2063 2064 2110 2111 2112 2113 2120 2121 2122 2123 2124 2150 2151 2152 2190 2191 2192 2200 2201 2202 2203 2204 2240 2241 2242 2250 2251 2252 1060 1051 1022 1022 1014 1017 1009 1000 991 991 958 949 940 931 922 948 939 930 930 928 919 919 861 861 878 878 870 898 898 890 897 869 860 851 851 878 878 878 878 878 840 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 27,56 27,326 26,572 26,572 26,364 26,442 26,234 26 25,766 25,766 24,908 24,674 24,44 24,206 23,972 24,648 24,414 24,18 24,18 24,128 23,894 23,894 22,386 22,386 22,828 22,828 22,62 23,348 23,348 23,14 23,322 22,594 22,36 22,126 22,126 22,828 22,828 22,828 22,828 22,828 21,84 77,56 77,326 76,572 76,572 76,364 76,442 76,234 76 75,766 75,766 74,908 74,674 74,44 74,206 73,972 74,648 74,414 74,18 74,18 74,128 73,894 73,894 72,386 72,386 72,828 72,828 72,62 73,348 73,348 73,14 73,322 72,594 72,36 72,126 72,126 72,828 72,828 72,828 72,828 72,828 71,84 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 115 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1413 1432 1433 1442 1443 1452 1453 1454 1472 1473 1474 1482 1483 1492 1493 1502 1503 1512 1513 1514 1542 1543 1552 1553 1554 1562 1563 1564 1572 1573 1574 1575 1582 1583 1584 1612 1613 1614 1622 1623 1624 2320 2321 2322 2330 2360 2370 2371 2372 2373 2374 2375 2450 2460 2461 2462 2463 2464 2465 2470 2471 2472 2520 2540 2541 2542 2543 2544 2550 2551 2552 2600 2601 2602 2603 2604 2605 2606 2610 2611 2612 2613 907 889 889 888 917 918 918 918 901 901 901 968 977 969 969 961 961 953 957 957 930 977 988 988 988 981 981 986 979 979 1026 1026 1020 1020 1020 993 993 996 989 989 989 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 23,582 23,114 23,114 23,088 23,842 23,868 23,868 23,868 23,426 23,426 23,426 25,168 25,402 25,194 25,194 24,986 24,986 24,778 24,882 24,882 24,18 25,402 25,688 25,688 25,688 25,506 25,506 25,636 25,454 25,454 26,676 26,676 26,52 26,52 26,52 25,818 25,818 25,896 25,714 25,714 25,714 73,582 73,114 73,114 73,088 73,842 73,868 73,868 73,868 73,426 73,426 73,426 75,168 75,402 75,194 75,194 74,986 74,986 74,778 74,882 74,882 74,18 75,402 75,688 75,688 75,688 75,506 75,506 75,636 75,454 75,454 76,676 76,676 76,52 76,52 76,52 75,818 75,818 75,896 75,714 75,714 75,714 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 116 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1632 1633 1634 1642 1643 1644 1652 1653 1654 1682 1683 1684 1692 1693 1694 1702 1703 1704 1712 1713 1714 1722 1723 1724 1752 1753 1754 1762 1763 1764 1765 1772 1773 1774 1775 1782 1783 1784 1792 1793 1794 2614 2615 2616 2660 2661 2662 2663 2664 2670 2671 2680 2681 2682 2683 2684 2690 2691 2692 2750 2751 2752 2753 2754 2760 2761 2762 2763 2820 2821 2822 2823 2824 2840 2841 2842 2843 2844 2845 2846 2847 2848 982 982 982 1018 1018 1018 1011 1011 1016 989 997 997 990 990 990 988 988 988 1038 1038 1038 1031 1031 1036 1009 1009 1009 1058 1058 1058 1058 1052 1067 1067 1067 1061 1061 1061 1054 1054 1054 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 25,532 25,532 25,532 26,468 26,468 26,468 26,286 26,286 26,416 25,714 25,922 25,922 25,74 25,74 25,74 25,688 25,688 25,688 26,988 26,988 26,988 26,806 26,806 26,936 26,234 26,234 26,234 27,508 27,508 27,508 27,508 27,352 27,742 27,742 27,742 27,586 27,586 27,586 27,404 27,404 27,404 75,532 75,532 75,532 76,468 76,468 76,468 76,286 76,286 76,416 75,714 75,922 75,922 75,74 75,74 75,74 75,688 75,688 75,688 76,988 76,988 76,988 76,806 76,806 76,936 76,234 76,234 76,234 77,508 77,508 77,508 77,508 77,352 77,742 77,742 77,742 77,586 77,586 77,586 77,404 77,404 77,404 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 117 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1795 1822 1823 1824 1832 1902 1903 1912 1913 1922 1923 1932 1933 1962 1963 1972 1973 1982 1983 1992 1993 2002 2003 2032 2033 2042 2043 2044 2052 2053 2062 2063 2072 2073 2082 2083 2102 2103 2104 2105 2112 2849 2850 2851 2852 2853 2854 2855 2910 2911 2912 2920 2940 2941 2942 2943 2950 2951 2952 3000 3010 3020 3021 3022 3060 3061 3062 3120 3121 3122 3190 3191 3192 3193 3194 3200 3201 3202 3220 3221 3222 3260 1054 1028 1028 1028 1021 952 952 998 998 990 997 1008 1008 980 980 978 978 970 1017 1018 1027 1019 1019 1028 1028 1020 1077 1077 1070 1137 1129 1129 1121 1121 1118 1118 1100 1117 1117 1117 1148 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 27,404 26,728 26,728 26,728 26,546 24,752 24,752 25,948 25,948 25,74 25,922 26,208 26,208 25,48 25,48 25,428 25,428 25,22 26,442 26,468 26,702 26,494 26,494 26,728 26,728 26,52 28,002 28,002 27,82 29,562 29,354 29,354 29,146 29,146 29,068 29,068 28,6 29,042 29,042 29,042 29,848 77,404 76,728 76,728 76,728 76,546 74,752 74,752 75,948 75,948 75,74 75,922 76,208 76,208 75,48 75,48 75,428 75,428 75,22 76,442 76,468 76,702 76,494 76,494 76,728 76,728 76,52 78,002 78,002 77,82 79,562 79,354 79,354 79,146 79,146 79,068 79,068 78,6 79,042 79,042 79,042 79,848 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 118 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2113 2114 2122 2123 2124 2172 2173 2174 2182 2183 2184 2192 2193 2194 2202 2203 2204 2212 2213 2214 2242 2243 2244 2252 2253 2254 2262 2263 2264 2272 2273 2274 2282 2283 2284 2312 2313 2314 2322 2323 2324 3261 3262 3280 3290 3291 3330 3331 3332 3333 3350 3360 3370 3371 3372 3373 3374 3375 3400 3401 3402 3410 3470 3471 3472 3540 3541 3542 3550 3560 3561 3562 3563 3570 3610 3611 3620 3630 3640 3641 3642 3643 1148 1148 1158 1167 1167 1158 1158 1158 1151 1167 1176 1178 1178 1178 1171 1171 1171 1188 1188 1188 1168 1227 1227 1220 1287 1287 1280 1287 1296 1289 1289 1289 1288 1327 1327 1308 1317 1326 1319 1319 1319 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 29,848 29,848 30,108 30,342 30,342 30,108 30,108 30,108 29,926 30,342 30,576 30,628 30,628 30,628 30,446 30,446 30,446 30,888 30,888 30,888 30,368 31,902 31,902 31,72 33,462 33,462 33,28 33,462 33,696 33,514 33,514 33,514 33,488 34,502 34,502 34,008 34,242 34,476 34,294 34,294 34,294 79,848 79,848 80,108 80,342 80,342 80,108 80,108 80,108 79,926 80,342 80,576 80,628 80,628 80,628 80,446 80,446 80,446 80,888 80,888 80,888 80,368 81,902 81,902 81,72 83,462 83,462 83,28 83,462 83,696 83,514 83,514 83,514 83,488 84,502 84,502 84,008 84,242 84,476 84,294 84,294 84,294 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 119 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2332 2333 2342 2343 2344 2352 2353 2354 2382 2383 2384 2392 2393 2394 2402 2403 2404 2412 2413 2414 2422 2423 2424 2452 2453 2454 2462 2463 2464 2472 2473 2474 2482 2483 2484 2492 2493 2494 2522 2523 2524 3644 3680 3681 3682 3690 3691 3720 3770 3780 3781 3782 3790 3820 3821 3822 3830 3831 3832 3860 3861 3870 3940 3941 3942 3943 3944 3945 3946 3947 3948 3960 3961 3962 3963 3964 3970 3971 3972 4040 4041 4042 1312 1347 1339 1339 1346 1339 1367 1416 1398 1398 1398 1398 1427 1427 1420 1427 1427 1420 1447 1447 1448 1517 1517 1490 1490 1490 1483 1483 1483 1476 1487 1487 1480 1480 1480 1478 1478 1478 1518 1518 1518 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 34,112 35,022 34,814 34,814 34,996 34,814 35,542 36,816 36,348 36,348 36,348 36,348 37,102 37,102 36,92 37,102 37,102 36,92 37,622 37,622 37,648 39,442 39,442 38,74 38,74 38,74 38,558 38,558 38,558 38,376 38,662 38,662 38,48 38,48 38,48 38,428 38,428 38,428 39,468 39,468 39,468 84,112 85,022 84,814 84,814 84,996 84,814 85,542 86,816 86,348 86,348 86,348 86,348 87,102 87,102 86,92 87,102 87,102 86,92 87,622 87,622 87,648 89,442 89,442 88,74 88,74 88,74 88,558 88,558 88,558 88,376 88,662 88,662 88,48 88,48 88,48 88,428 88,428 88,428 89,468 89,468 89,468 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 120 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2532 2533 2534 2542 2543 2544 2552 2553 2554 2562 2563 2564 2592 2593 2594 2602 2603 2612 2613 2614 2622 2623 2624 2662 2663 2664 2672 2673 2674 2682 2683 2684 2692 2693 2694 2702 2703 2704 2732 2733 2734 4043 4050 4051 4060 4090 4091 4100 4110 4111 4112 4150 4151 4160 4161 4170 4171 4220 4250 4251 4300 4301 4310 4311 4320 4321 4360 4361 4362 4380 4390 4391 4392 4393 4394 4460 4470 4510 4530 4531 4532 4540 1511 1517 1517 1518 1547 1547 1548 1557 1557 1550 1587 1587 1568 1568 1576 1569 1617 1638 1638 1686 1679 1687 1687 1658 1658 1696 1689 1689 1706 1708 1708 1708 1701 1701 1766 1768 1807 1826 1799 1799 1806 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 39,286 39,442 39,442 39,468 40,222 40,222 40,248 40,482 40,482 40,3 41,262 41,262 40,768 40,768 40,976 40,794 42,042 42,588 42,588 43,836 43,654 43,862 43,862 43,108 43,108 44,096 43,914 43,914 44,356 44,408 44,408 44,408 44,226 44,226 45,916 45,968 46,982 47,476 46,774 46,774 46,956 89,286 89,442 89,442 89,468 90,222 90,222 90,248 90,482 90,482 90,3 91,262 91,262 90,768 90,768 90,976 90,794 92,042 92,588 92,588 93,836 93,654 93,862 93,862 93,108 93,108 94,096 93,914 93,914 94,356 94,408 94,408 94,408 94,226 94,226 95,916 95,968 96,982 97,476 96,774 96,774 96,956 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 121 1 1 1 1 1 2742 2743 2744 2752 2753 4541 4542 4590 4591 4592 1799 1799 1846 1839 1839 50 50 50 50 50 46,774 46,774 47,996 47,814 47,814 96,774 96,774 97,996 97,814 97,814 381 382 383 384 385 Fuente: Elaboración propia en Microsoft Office Excel 2007 122 ANEXO C: MANUAL DE USO MODELO FRIGORIFICOS Este manual es independiente de cuál de los dos modelos se use para análisis ya que se aplica a los dos por igual. Los pasos son los siguientes: 1. Estime la cantidad de producción diaria en toneladas del intervalo de tiempo que desea estudiar. 2. Pase todos los días de producción a días Julianos. 3. Multiplique cada día Juliano por 10 y ese será su variable de entrada para cada dia de producción, por ejemplo: día Juliano 3 es equivalente a 30 en el modelo. 4. La producción en toneladas, pásela a camionadas, donde cada camionada equivale a 10 toneladas. 5. Una vez que tenga la tabla de producción en camionadas y días Julianos multiplicados por 10, vaya al objeto con nombre “Planta Procesadora”, haga doble click sobre ella y váyase a la pestaña que dice “Source” (la ventana que debe ver es como la de la Figura N° 1. Luego en “Arrival Style” seleccione la opción “Arrival Schedule”. Después en “Number of Arrivals” debe poner el número de llegadas que hay, por ejemplo: si de 360 días (que es su intervalo de tiempo seleccionado), usted produjo durante 250, el número 250 va en ese lugar; luego presione “Refresh Arrivals”. Una vez que presiona “Refresh Arrivals” se le abre una tabla más abajo, donde debe poner en “Arrival Time” cada día Juliano donde trabajó y al lado en “Quantity” la cantidad (recuerde que debe ser en camionadas) que produjo ese dia. Luego presione “Apply” y “OK”. Figura N°C.1: Ingreso de datos de Producción Fuente: Elaboración propia en Microsoft Office Visio 2007 123 6. Diríjase a la barra de herramientas principal del programa, seleccione “Tools” y luego a “Global Tables” como lo indica la Figura N°2. Figura N° C.2: Tablas Globales Fuente: Elaboración propia en Microsoft Office Visio 2007 7. Llene la tabla “PRODUCCIÓN” con los mismos datos y de la misma manera que llenó el “Source” llamado “Planta Procesadora”. 8. Estime la demanda diaria que tendrá durante el mismo intervalo que eligió para hacer el estudio, y pase (al igual que con la producción) el tiempo a días Julianos. Luego vaya a las tablas globales (indicadas en el punto 6) y llene la que tiene el nombre “demandas”. 9. Aparte de llenar las tablas globales antes mencionadas, llene también la tabla “precios” y “cap disp”. En la tabla precios, debe llenar éstos de acuerdo a cada frigorífico, donde la primera columna son los costos de almacenamiento, y la segunda de transporte. Lo importante es que el costo de almacenamiento sea expresado en toneladas al mes y el de transporte como el precio del flete de un camión de 10 toneladas por concepto de “ida” (es decir lo que sale ir a dejar 10 toneladas al destino del frigorífico correspondiente). Por último, la tabla “cap.disp” se llena con la capacidad inicial de los frigoríficos al momento de comenzar a producir. Esta capacidad tiene que estar en camionadas. Figura N° C.3: tablas “precios” y “cap disp” Fuente: Elaboración propia en Microsoft Office Visio 2007 124 10. En el modelo, seleccione el objeto con nombre “FI” y haga doble click. En la pestaña con nombre “Source” llene la celda que acompaña el nombre “Maximun Content” con la capacidad inicial de ese frigorífico (que es la misma capacidad que puso en la tabla global “cap disp”). Luego repita lo mismo para los demás frigoríficos (FE si trabaja con el modelo de dos frigoríficos y FE1, FE2 Y FE3 si trabaja con el modelo de cuatro frigoríficos). Figura N° C.4: Ingreso de capacidades máximas por frigorífico. Fuente: Elaboración propia en Microsoft Office Visio 2007 11. Una vez hecho lo anterior, vaya al objeto en el modelo con nombre “Fuente 2” y haga doble click en ella. Luego vaya a la pestaña de nombre “Triggers” y presione sobre el botón “A” que está paralelo a la palabra “OnCreation”, se le abrirá una nueva ventana con código, donde debe cambiar el valor que sale destacado en la Figura N° C.5, por el primer tiempo donde empieza su producción, por ejemplo, si en la tabla producción, su primer dato en día Juliano es 40 (es decir comenzó a producir en el tiempo 40 del Flexsim), ese es el valor que debe cambiar en esta parte del código. Luego apreté “Apply” y “OK”. Figura N° C.5 Cambio de número en código de “FUENTE 2 I” Fuente: Elaboración propia en Microsoft Office Visio 2007 125 Figura N° C.6 Cambio de número en código de “FUENTE 2”II. Fuente: Elaboración propia en Microsoft Office Visio 2007 Ahora puede comenzar a usar el modelo y analizar los datos entregados al final de éste en la “TABLA GLOBAL” que puede exportar a Excel a través del signo en el panel de control. 126