• No se han encontrado resultados

Simulación con Lenguajes de Alto Nivel

N/A
N/A
Protected

Academic year: 2021

Share "Simulación con Lenguajes de Alto Nivel"

Copied!
5
0
0

Texto completo

(1)

Simulación con

Lenguajes de Alto Nivel

C C

Lenguajes de Simulación Curso 2009/2010

Simulación con Lenguajes de Alto Nivel

Caracterización del Problema

 Dentro de una línea de producción, se desea analizar el funcionamiento individual de un dispositivo:

 Sus tiempos de proceso siguen una distribución normal N(3.2, 0.6)

L id d d d ió ll d d

Lenguajes de Simulación

Lenguajes de Simulación -- Curso 2009/2010Curso 2009/2010

 Las unidades de producción llegan de acuerdo a una distribución exponencial: E(4.5)

 Objetivos:

 ¿Qué porcentaje de unidades de producción han sido procesadas en un tiempo mayor al límite superior?

 Tiempo máximo > 7

Simulación con Lenguajes de Alto Nivel

Construcción del Modelo de Simulación

Entidades: elementos que entran al sistema, son procesados y salen de él.

Recursos: elementos utilizados para diferentes propósitos dentro del sistema

Lenguajes de Simulación - Curso 2009/2010

propósitos dentro del sistema.

Colas: elementos de acumulación de entidades a la espera de ser procesadas por los recursos.

Decisión: establece las reglas de decisión.

(2)

Simulación con Lenguajes de Alto Nivel

Construcción del Modelo de Simulación

Cola de Espera Llegadas

E(4.5)

Lenguajes de Simulación - Curso 2009/2010 Dispositivo

Tamaño cola de espera

100 unidades Tiempo de

Proceso N(3.2, 0.6)

Simulación con Lenguajes de Alto Nivel

Programando la Simulación

 Programando la Simulación…

Definición de los valores de variables y parámetros:

Generadores de variables aleatorias.

Función de inicialización.

Ej ió d l i l ió

Inicio Obtener parámetros de entrada

Llamada a la función de avance de tiempo

Ejecución de la simulación:

Función de planificación.

Función de avance de tiempo.

Funciones de eventos.

Programa principal.

Evaluación de los resultados:

Generador de informes.

Validación.

¿Nueva Experimentación?

Lenguajes de Simulación - Curso 2009/2010

Llamada a la función de evento

Generador de informes

SI

Fin

NO

¿Termina la simulación?

Simulación con Lenguajes de Alto Nivel

Programando la Simulación

Inicio

Obtener parámetros de entrada Llamada a la función de avance de tiempo

main(){

unsigned int seed = 13;

srand(seed);

initialize();

while (unitsTotal < UNITS){

time_advance();

it h( tE t){

Lenguajes de Simulación - Curso 2009/2010

Llamada a la función de evento

Generador de informes

SI

Fin

NO

switch(nextEvent){

case 0:

llegada( );

break;

case 1:

salida( );

break;

} }

rptgen( ) ; }

¿Termina la simulación?

(3)

Simulación con Lenguajes de Alto Nivel

Programando la Simulación: Inicio

 Variables Globales

Inicio

#define NORMAL MEAN 3 2 float simulationTime;

 Constantes

Lenguajes de Simulación - Curso 2009/2010

#define NORMAL_MEAN 3.2

#define NORMAL_DESV 0.6

#define EXPONENTIAL_MEAN 4.5

#define QUEUE_SIZE 100

#define UNITS 1000

#define MAX_TIME 7

#define EVENT_TYPES 2

#define NO_EVENT 1000000

float simulationTime;

float busyTime;

float responseTime;

float lastEventTime;

float queue[QUEUE_SIZE];

float events[EVENT_TYPES];

int nextEvent;

int unitsInQueue;

int unitsTotal;

int unitsInMaxTime;

int maxQueueOccupation;

bool busyDevice;

Simulación con Lenguajes de Alto Nivel

Programando la Simulación: Obtener Parámetros de Entrada

Inicio

Obtener parámetros de entrada

•Generación variables aleatorias.

•Función de inicialización

float exponential(float fmean) {

float r;

r=1.*random()/RAND MAX;

void initialize() {

simulationTime = 0;

busyDevice = false;

Lenguajes de Simulación - Curso 2009/2010

()/ _

return -fmean*log(r);

}

float normal(float mean, float sigma) {

double rone, rtwo, zone;

rone=1.*random()/RAND_MAX;

rtwo=1.*random()/RAND_MAX;

zone=sqrt(-2*log(rone))*sin(2*M_PI*rtwo);

return (float) zone*sigma+mean;

}

lastEventTime = 0;

busyTime = 0;

responseTime = 0;

unitsInQueue = 0;

maxQueueOccupation = 0;

unitsTotal = 0;

unitsInMaxTime = 0;

events[0] = simulationTime + exponential(EXPONENTIAL_MEAN);

events[1] = NO_EVENT;

}

Simulación con Lenguajes de Alto Nivel

Programando la Simulación

Inicio

Obtener parámetros de entrada

Llamada a la función de avance de tiempo

void time advance()

Lenguajes de Simulación - Curso 2009/2010 void time_advance()

{

nextEvent = 0;

float fmin = events[nextEvent];

for(int i = 1; i < EVENT_TYPES; i++){

if (events[i] < fmin) { fmin = events[i];

nextEvent = i;

} }

simulationTime = events[nextEvent];

}

Planifica el siguiente evento, comprobando si es de llegadao de salida. Se selecciona.

Se actualiza el tiempo de simulación al del siguiente evento planificado.

(4)

Simulación con Lenguajes de Alto Nivel

Programando la Simulación

Inicio

Obtener parámetros de entrada Llamada a la función de avance de tiempo

else {

unitsInQueue++;

if (unitsInQueue > QUEUE_SIZE ){

printf("DESBORDAMIENTO… \n");

exit(0);

} else {

if (unitsInQueue > maxQueueOccupation)

Lenguajes de Simulación - Curso 2009/2010

Llamada a la función de evento

void llegada() { if (!busyDevice) {

busyDevice = true;

queue[0] = simulationTime;

events[1] = simulationTime + normal(NORMAL_MEAN, NORMAL_DESV);

lastEventTime = simulationTime;

}

if (unitsInQueue > maxQueueOccupation) maxQueueOccupation = unitsInQueue;

}

queue[unitsInQueue] = simulationTime;

busyTime= busyTime + simulationTime - lastEventTime;

lastEventTime = simulationTime;

}

events[0] = simulationTime + exponential(EXPONENTIAL_MEAN);

} }

Simulación con Lenguajes de Alto Nivel

Programando la Simulación

Inicio

Obtener parámetros de entrada Llamada a la función de avance de tiempo

void salida() { busyTime = busyTime +

simulationTime - lastEventTime;

float rt = simulationTime - queue[0];

responseTime = responseTime + rt;

unitsTotal++;

if (rt > MAX_TIME) unitsInMaxTime++;

Lenguajes de Simulación - Curso 2009/2010

Llamada a la función de evento

if (unitsInQueue == 0){

busyDevice = false;

events[1] = NO_EVENT;

}else{

for(int i=0; i<unitsInQueue; i++) queue[i] = queue[i+1];

unitsInQueue=unitsInQueue-1;

events[1] = simulationTime + normal(NORMAL_MEAN, NORMAL_DESV);

lastEventTime = simulationTime;

} }

Simulación con Lenguajes de Alto Nivel

Programando la Simulación

Inicio

Obtener parámetros de entrada Llamada a la función de avance de tiempo

void rptgen() {

float rho = busyTime/simulationTime;

float avgr = responseTime/unitsTotal;

float pc = (100*unitsInMaxTime)/unitsTotal;

printf("SIMULACION … \n");

printf("Tiempo medio entre llegadas: %4.2f min.\n", EXPONENTIAL_MEAN);

printf("Tiempo medio de servicio: %4.2f min.\n", NORMAL_MEAN);

printf("Desviacion de los tiempos de

Lenguajes de Simulación

Lenguajes de Simulación -- Curso 2009/2010Curso 2009/2010

Llamada a la función de evento

Generador de informes

SI

Fin

NO

printf( Desviacion de los tiempos de servicio: %4.2f min.\n", NORMAL_DESV);

printf("Numero de clientes atendidos %4d

\n", UNITS);

printf("Utilizacion del servidor %4.2f

\n", rho);

printf("Maximo tamaño de la cola %4d clientes \n", maxQueueOccupation);

printf("Tiempo de respuesta medio %4.2f

\n", avgr);

printf("Prop. clientes han pasado %4.2f o más min.: %4.2f \%\n", MAX_TIME, pc);

printf("Duracion de la simulacion: %7.2f min. \n",simulationTime);

}

¿Termina la simulación?

(5)

Simulación con Lenguajes de Alto Nivel

Caracterización del Problema

 Tiempo medio entre llegadas: 4.50 minutos Tiempo medio entre llegadas: 4.50 minutos

 Tiempo medio de servicio: 3.20 minutos Tiempo medio de servicio: 3.20 minutos

 Desviación estándar de los tiempos de servicio: 0.60 minutos Desviación estándar de los tiempos de servicio: 0.60 minutos

 Número de clientes atendidos 1000 Número de clientes atendidos 1000 U ili ió d l id 0 74 U ili ió d l id 0 74

Lenguajes de Simulación - Curso 2009/2010

 Utilización del servidor 0.74 Utilización del servidor 0.74

 Máximo tamaño de la cola 8 clientes Máximo tamaño de la cola 8 clientes

 Tiempo de respuesta medio Tiempo de respuesta medio 7.14 7.14

 Proporción de clientes que han pasado 7.00 o más minutos Proporción de clientes que han pasado 7.00 o más minutos dentro del sistema:

dentro del sistema: 40.90 % 40.90 %

 Duración de la simulación: 4299.29 minutos Duración de la simulación: 4299.29 minutos

Simulación con Lenguajes de Alto Nivel

Caracterización del Problema

 Tiempo medio entre llegadas: 4.50 minutos Tiempo medio entre llegadas: 4.50 minutos

 Tiempo medio de servicio: 2.90 minutos Tiempo medio de servicio: 2.90 minutos

 Desviación estándar de los tiempos de servicio: 0.80 minutos Desviación estándar de los tiempos de servicio: 0.80 minutos

 Numero de clientes atendidos 1000 Numero de clientes atendidos 1000 U ili ió d l id 0 63 U ili ió d l id 0 63

N(2.9, 0.8)

Lenguajes de Simulación

Lenguajes de Simulación -- Curso 2009/2010Curso 2009/2010

 Utilización del servidor 0.63 Utilización del servidor 0.63

 Máximo tamaño de la cola 6 clientes Máximo tamaño de la cola 6 clientes

 Tiempo de respuesta medio Tiempo de respuesta medio 5.67 5.67

 Proporción de clientes que han pasado 7.00 o más minutos Proporción de clientes que han pasado 7.00 o más minutos dentro del sistema:

dentro del sistema: 27.50 % 27.50 %

 Duración de la simulación: 4523.35 minutos Duración de la simulación: 4523.35 minutos

Referencias

Documento similar

Rossi Jiménez, Carlos Manuel Guevara Plaza, Antonio Jesús Enciso García-Oliveros, Manuel N. Universidad de Málaga Institución Ferial de Madrid Organización de actividades y

In this section we demonstrate that an input validator for a large subset of HTTP can be written using the parser generator Bison (and Flex), which relies on context- free

Hasta en los moros de Granada habríamos de suponer conocimiento de los vaticinios del adivino céltico, si hubiéramos de tener por auténtica la «carta que el moro de Granada sabidor

La evolución de las unidades funcionales en los procesadores es más una consecuencia de los avances en las tecnologías de integración que de una adaptación a los lenguajes de

17. Sup´ongase que se dispone de un conjunto de k M´aquinas de Turing, de forma que cada una de ellas tiene su propio cabezal de lectura/escritura, su propio conjunto de estados y

Tadeo Jones traslada el engaño propio de la creación digital (que no es más que dígitos en formas y modos de representación reconocibles por el espectador con el fin de darle

En este sentido, Handel, De Soto y London (1968), máximos ex- ponentes de la tesis de que 10s sujetos utilizan imagenes espaciales para resolver problemas de deducción,

Los primeros pasos en este camino de desarrollo de lenguajes fue la creación de los lenguajes ensamblador, que no eran más que una verbalización del código