Punto1.10

11
2.10 Partes llegan a una estación de trabajo según una distribución exponencial con media 21 segundos; la primera pieza llega en el tiempo 0. Al llegar, las partes son procesadas inicialmente. El tiempo de procesamiento es TRIA (16, 19, 22) segundo. Hay varias características identificables visualmente que determinan si una parte presenta un problema de calidad. Estas partes, aprox 10% (determinadas después del proceso inicial), son enviadas a una estación donde se realiza una inspección más rigurosa. Las partes restantes son consideradas buenas y salen del sistema. La distribución del tiempo de inspección es 95 más una variable aleatoria WEIB (48.5, 4.04), en segundos. Aprox. 14% de estas partes no pasan el control de calidad y son desechadas. Las partes que pasan la inspección se clasifican como buenas y salen del sistema. Ejecute la simulación por 10.000 segundos y observe el número de partes buenas que salen del sistema, el número de partes desechadas y el número de partes que reciben una inspección profunda. Estado del Sistema: Entra un pieza al sistema Hay una pieza en la fase de procesamiento No hay piezas siendo inspeccionadas No hay piezas desechadas No hay piezas en la salida Entidades y sus atributos: Pieza: Tiempo de llegada, demora en el sistema, tiempo de salida Eventos: Llegada de la pieza al sistema Llegada de la pieza a la cola de procesamiento Llegada de la pieza a la cola de inspección Se desecha la pieza La pieza sale satisfactoriamente del sistema Listas: Eventos

description

Punto de modelos y simulacion

Transcript of Punto1.10

Page 1: Punto1.10

2.10 Partes llegan a una estación de trabajo según una distribución exponencial con media 21 segundos; la primera pieza llega en el tiempo 0. Al llegar, las partes son procesadas inicialmente. El tiempo de procesamiento es TRIA (16, 19, 22) segundo. Hay varias características identificables visualmente que determinan si una parte presenta un problema de calidad. Estas partes, aprox 10% (determinadas después del proceso inicial), son enviadas a una estación donde se realiza una inspección más rigurosa. Las partes restantes son consideradas buenas y salen del sistema. La distribución del tiempo de inspección es 95 más una variable aleatoria WEIB (48.5, 4.04), en segundos. Aprox. 14% de estas partes no pasan el control de calidad y son desechadas. Las partes que pasan la inspección se clasifican como buenas y salen del sistema. Ejecute la simulación por 10.000 segundos y observe el número de partes buenas que salen del sistema, el número de partes desechadas y el número de partes que reciben una inspección profunda.

Estado del Sistema: ● Entra un pieza al sistema● Hay una pieza en la fase de procesamiento● No hay piezas siendo inspeccionadas● No hay piezas desechadas● No hay piezas en la salida

Entidades y sus atributos:● Pieza: Tiempo de llegada, demora en el sistema, tiempo de salida

Eventos:● Llegada de la pieza al sistema● Llegada de la pieza a la cola de procesamiento● Llegada de la pieza a la cola de inspección● Se desecha la pieza● La pieza sale satisfactoriamente del sistema

Listas:● Eventos

Contadores Estadísticos:● Demoras de las piezas en el sistema● Piezas en la cola de procesamiento● Piezas en la cola de inspección● Tiempo de procesamiento de las piezas● Tiempo de inspección de las piezas● Número de piezas desechadas● Número de piezas en la salida

Page 2: Punto1.10

Medidas de desempeño:● Promedio de las demoras de las piezas en el sistema● Promedio del tiempo de la pieza en la cola de procesamiento● Promedio del tiempo de la pieza en la cola de inspección● Promedio de procesamiento de una pieza ● Promedio de inspección de una pieza

DIAGRAMA DE FLUJO

Page 3: Punto1.10

Código en Java utilizando la librería Simlib

package tarea2;

import java.io.DataOutputStream;import java.io.FileOutputStream;import java.io.IOException;

/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */

/** * * @author jonnathan */public class Punto_10 {

public static void main(String args[]){ //Inicializamos las variables final int NUM_MAQUINAS = 2;

int piezas_proc=0;int piezas_insp=0;int piezas_des=0;int piezas_acep=0;

Page 4: Punto1.10

int total_piezas=0;

float mediallegada = (float)21; float tiemposim = (float)10000.0; int num_Maquinas[] = {0, 1, 1}; int num_MaqOcup[] = {0, 0, 0};

boolean proceso_ocupado=false;boolean inspeccion_ocupado=false;

int colaMaq[] = {0, 0, 0}; Timer clock = new Timer(); clock.setTime(0); SimObject evento, operacion1, operacion2; DiscreteStat demora_cola[] = new DiscreteStat[NUM_MAQUINAS + 1]; ContinStat ocupacion_maquina[] = new ContinStat[NUM_MAQUINAS + 1]; ContinStat salida[] = new ContinStat[NUM_MAQUINAS + 1]; List eventList = new List(); List queues[] = new List[NUM_MAQUINAS + 1]; //Inicia la simulacion for (int i = 1; i <= NUM_MAQUINAS; i++){ queues[i] = new List(); ocupacion_maquina[i] = new ContinStat((float)0.0, clock.getTime()); salida[i] = new ContinStat((float)0.0, clock.getTime()); demora_cola[i] = new DiscreteStat(); }

evento = new SimObject(); evento.setTime(clock.getTime() + Punto_10.expon(mediallegada)); evento.setName("Llegada"); eventList.insertInOrder(evento, evento.getTime());

evento = new SimObject(); evento.setTime(tiemposim); evento.setName("Fin"); eventList.insertInOrder(evento, evento.getTime()); // ------------------------------------------------------------------ try{ boolean end = false; do{ SimObject nextEvent = eventList.removeFromFront(); clock.setTime(nextEvent.getTime()); int nextID; if (nextEvent.getName().equals("Llegada")) nextID = 1; else if (nextEvent.getName().equals("FinProceso")) nextID = 2; else if (nextEvent.getName().equals("FinInspeccion")) nextID = 3; else// nextID = 4;

switch (nextID){ case 1: // Evento Llegada total_piezas++; evento = new SimObject(); evento.setTime(clock.getTime() + Punto_10.expon(mediallegada)); evento.setName("Llegada");

Page 5: Punto1.10

eventList.insertInOrder(evento, evento.getTime()); if (proceso_ocupado){ nextEvent.setArriveTime(clock.getTime()); queues[1].insertAtBack(nextEvent); colaMaq[1] ++; salida[1].recordContin(colaMaq[1],clock.getTime()); }else{ demora_cola[1].recordDiscrete((float)0.0); proceso_ocupado=true; num_MaqOcup[1] += 1; ocupacion_maquina[1].recordContin(num_MaqOcup[1], clock.getTime()); nextEvent.setTime(clock.getTime() + Punto_10.tria(16, 19, 22)); nextEvent.setName("FinProceso"); eventList.insertInOrder(nextEvent, nextEvent.getTime()); } break; case 2: //Evento Procesar proceso_ocupado=false; piezas_proc++; operacion1 = new SimObject(); if(piezas_proc%10==5){ if (inspeccion_ocupado){ operacion1.setTime(clock.getTime() + 95 + Punto_10.weib((float)48.5, (float)4.04)); operacion1.setName("FinInspeccion"); queues[2].insertAtBack(operacion1); colaMaq[2] ++; salida[2].recordContin(colaMaq[2],clock.getTime()); }else{ demora_cola[2].recordDiscrete((float)0.0); inspeccion_ocupado=true; num_MaqOcup[2] += 1; ocupacion_maquina[2].recordContin(num_MaqOcup[2], clock.getTime()); operacion1.setTime(clock.getTime() + 95 + Punto_10.weib((float)48.5, (float)4.04)); operacion1.setName("FinInspeccion"); eventList.insertInOrder(operacion1, operacion1.getTime()); } }else{ piezas_acep++; } if (colaMaq[1] == 0) { proceso_ocupado=false; num_MaqOcup[1] -= 1; ocupacion_maquina[1].recordContin((float)num_MaqOcup[1], clock.getTime()); } else { operacion1 = queues[1].removeFromFront(); colaMaq[1] -= 1; salida[1].recordContin(colaMaq[1],clock.getTime()); float jobDelay = clock.getTime() - operacion1.getArriveTime(); demora_cola[1].recordDiscrete(jobDelay); operacion1.setTime(clock.getTime() + Punto_10.tria(16, 19, 22)); operacion1.setName("FinProceso"); eventList.insertInOrder(operacion1, operacion1.getTime()); } break; case 3: //Evento Inspeccion

Page 6: Punto1.10

inspeccion_ocupado=false; piezas_insp++; operacion2 = new SimObject(); if(piezas_insp%50==7||piezas_insp%50==14||piezas_insp%50==21||piezas_insp%50==28|| piezas_insp%50==35||piezas_insp%50==42||piezas_insp%50==49){ piezas_des++; }else{ piezas_acep++; } break; case 4: end = true; break; } } while (!end); }catch (EmptyListException e){} //Termina la simulacion //Se imprimen los resultados de la simulacion System.out.println("Piezas Aceptadas: "+piezas_acep); System.out.println("Piezas Desechadas: "+piezas_des); System.out.println("Piezas Inspeccionadas: "+piezas_insp); System.out.println("Total Piezas: "+total_piezas);

} //Distribucion Triangular

public static float tria(float min, float max, float mode){ float u=(float)(Math.random()); if(u <= ((mode - min)/(max-min))){ return (float) (min+Math.sqrt(u*(max-min)*(mode-min))); } else { return (float) (max+Math.sqrt(u*(max-min)*(mode-min))); }

} //Distribucion de Weibull

public static float weib(float a, float b){ float u=(float)(Math.random()); return (float)((1/b)*Math.pow((-Math.log(1-u)),(1/a)));

} //Distribucion Exponencial

public static float expon(float rmean){ float u=(float)(Math.random()); return rmean*(float)Math.log(u)*(-1);

}}

Resultados

Se realizaron varias ejecuciones al código en java que arrojaron los siguientes resultados.

Piezas Aceptadas: 476 Piezas Aceptadas: 415

Page 7: Punto1.10

Piezas Desechadas: 6 Piezas Desechadas: 5Piezas Inspeccionadas: 48 Piezas Inspeccionadas: 41Total Piezas: 482 Total Piezas: 421

Piezas Aceptadas: 463 Piezas Aceptadas: 491Piezas Desechadas: 6 Piezas Desechadas: 6Piezas Inspeccionadas: 45 Piezas Inspeccionadas: 47Total Piezas: 473 Total Piezas: 502

Piezas Aceptadas: 438 Piezas Aceptadas: 466Piezas Desechadas: 6 Piezas Desechadas: 6Piezas Inspeccionadas: 44 Piezas Inspeccionadas: 45Total Piezas: 445 Total Piezas: 475

Código en GPSSPIEZA STORAGE 2*GENERATE (EXPONENTIAL(1,21,1)) ;Llega de las piezasQUEUE PROCESOQ ;Cola para la máquina de procesamientoSEIZE PROCESO ;Se pide la máquina de procesamientoDEPART PROCESOQ ;Se atiende la pieza en colaADVANCE (TRIANGULAR(1,16,22,19)) ;Duración del procesamiento de la piezaRELEASE PROCESO ;Se libera la máquinaTRANSFER .10,,INSP ;Se envían el 10% de las piezas a inspecciónTERMINATE 0*INSP QUEUE INSPQENTER PIEZA,1 ;Entra una pieza a inspecciónDEPART INSPQ ;Se atiende la piezaADVANCE (WEIBULL(1,95,48.5, 4.04)) ;Duración de la inspección de la piezaLEAVE PIEZA,1 ;Se libera la piezaTRANSFER .14,,DES ;Se desechan el 14% de las piezasTERMINATE 0*DES QUEUE DESQENTER PIEZA,1 ;Se cuentan las piezas que se desechanDEPART DESQLEAVE PIEZA,1TERMINATE 0*GENERATE 10000 ;Se ejecuta la simulación durante 10.000 sTERMINATE 1

Resultados

GPSS World Simulation Report - Punto 10 1.17.1

START TIME END TIME BLOCKS FACILITIES STORAGES 0.000 10000.000 22 1 1

Page 8: Punto1.10

NAME VALUE DES 16.000 DESQ 10004.000 INSP 9.000 INSPQ 10003.000 PIEZA 10000.000 PROCESO 10002.000 PROCESOQ 10001.000

LABEL LOC BLOCK TYPE ENTRY COUNT CURRENT COUNT RETRY 1 GENERATE 452 0 0 2 QUEUE 452 0 0 3 SEIZE 452 0 0 4 DEPART 452 0 0 5 ADVANCE 452 1 0 6 RELEASE 451 0 0 7 TRANSFER 451 0 0 8 TERMINATE 414 0 0INSP 9 QUEUE 37 0 0 10 ENTER 37 0 0 11 DEPART 37 0 0 12 ADVANCE 37 0 0 13 LEAVE 37 0 0 14 TRANSFER 37 0 0 15 TERMINATE 28 0 0DES 16 QUEUE 9 0 0 17 ENTER 9 0 0 18 DEPART 9 0 0 19 LEAVE 9 0 0 20 TERMINATE 9 0 0 21 GENERATE 1 0 0 22 TERMINATE 1 0 0

FACILITY ENTRIES UTIL. AVE. TIME AVAIL. OWNER PEND INTER RETRY DELAY PROCESO 452 0.857 18.965 1 453 0 0 0 0

QUEUE MAX CONT. ENTRY ENTRY(0) AVE.CONT. AVE.TIME AVE.(-0) RETRY PROCESOQ 1 0 452 440 0.000 0.005 0.183 0 INSPQ 1 0 37 34 0.008 2.207 27.215 0 DESQ 2 0 9 7 0.015 16.704 75.167 0

STORAGE CAP. REM. MIN. MAX. ENTRIES AVL. AVE.C. UTIL. RETRY DELAY PIEZA 2 2 0 2 46 1 0.505 0.253 0 0

FEC XN PRI BDT ASSEM CURRENT NEXT PARAMETER VALUE 453 0 10007.741 453 5 6 454 0 10010.382 454 0 1 455 0 20000.000 455 0 21

Análisis de Resultados

Como se puede ver en cada una de las ejecuciones se mantiene la uniformidad en los valores por lo que no varía mucho y se puede garantizar que aproximadamente el 10% de las todas las piezas que entran al

Page 9: Punto1.10

sistema recibirán una inspección profunda y alrededor del 1.4% serán desechadas. Con esto podemos determinar que el sistema es muy eficiente en la producción de las piezas.

PROGRAMA GRPALCARRO STORAGE 2*GENERATE (EXPONENTIAL(1,5,1))QUEUE SURTIDORAQSEIZE SURTIDORADEPART SURTIDORAQADVANCE (TRIANGULAR(1,2,30,11))RELEASE SURTIDORATERMINATE 0*GENERATE 1440TERMINATE 1