Manual del estudiante de Ingeniería en Sistemas de UTN/Simulación/Software de simulación de eventos discretos

De Wikilibros, la colección de libros de texto de contenido libre.

Software de simulación de sistemas de eventos discretos[editar]

Modelado en GPSS[editar]

GENERATE[editar]

Un bloque GENERATE crea transacciones que ingresarán al sistema.

GENERATE    Media, Rango
GENERATE    Función()

TEST[editar]

Un bloque TEST compara valores, generalmente SNAs[1], y controla el destino de la transacción activa.

TEST <operador>    <A>,<B>,<bloqueDestino>

Operandos[editar]

operador - Operador relacional. Los valores posibles son:

Operador Significado
E Igual
G Mayor
GE Mayor o igual
L Menor
LE Menor o igual
NE No igual

A y B - Puede ser Name, Number, String, ParenthesizedExpression, SNA, o SNA*Parameter.

bloqueDestino - Bloque de destino.

Acción[editar]

Un bloque TEST opera en el modo de rechazo o en el de salida alternativa. En cualquiera de los casos, los operandos A y B son evaluados numéricamente y comparados. Si no se especifica destino, el bloque TEST opera en modo de rechazo. Cuando una transacción intenta entrar en un bloque TEST en modo de rechazo y el TEST resulta falso, la transacción se bloquea, es decir, no se le permite entrar en el bloque TEST hasta que la prueba se repita y sea verdadera. Cuando el TEST devuelve verdadero, la transacción activa entra en el bloque y procede luego al siguiente bloque en la secuencia. Las transacciones bloqueadas se ubican en la cadena de reintento de todas las entidades involucradas en la comparación. Cuando el estado de alguna de las entidades cambia, la transacción bloqueada se reactiva, se vuelve a evaluar el TEST, y si devuelve verdadero, a la transacción se le permite entrar en el bloque TEST. La integración de variables de usuario no reactiva las transacciones. Debe utilizarse thresholds en un comando INTEGRATE si hace falta notificación sobre el nivel de una o más variables continuas. Si se usa el operando C, el bloque TEST actúa en el modo de salida alternativa: cuando una transacción intenta entrar al bloque y éste devuelve falso, la transacción entra en el bloque, es programada para el bloque alternativo C.

Tablas[editar]

Table[editar]

Inicializa una tabla de distribución de frecuencias.

<nombreTabla> TABLE <atrib> <finIntIni>, <longInt>, <cantInt>

Operandos[editar]

nombreTabla
nombre de la tabla.
atrib
atributo a ser tabulado. Puede ser nombre, número, String, expresión entre paréntesis o SNA.
finIntIni
límite superior del intervalo inicial.
longInt
longitud de los intervalos.
cantInt
cantidad de intervalos.

Acción[editar]

Para guardar una observación debe usarse el comando TABULATE, que incrementará en uno la cuenta de ocurrencias en el intervalo de clase en el que se encuentre el valor al momento de ejecutarse el comando, del atributo tabulado

QTable[editar]

Inicializa una tabla de distribución de frecuencias de los tiempos de espera en una cola.

<nombreTabla> QTABLE <cola> <finIntIni>, <longInt>, <cantInt>

Operandos[editar]

nombreTabla
nombre de la tabla.
cola
cola cuyos tiempos de espera se tabulan.
finIntIni
límite superior del intervalo inicial.
longInt
longitud de los intervalos.
cantInt
cantidad de intervalos.

Acción[editar]

Se registra una entrada cada vez que se realiza un DEPART. El tiempo medido es la diferencia entre el QUEUE y el DEPART de cada entidad que ingresa en la cola.

Transfer[editar]

Este comando lleva a la transacción activa a otro bloque.

TRANSFER <modo>, <bloqueD1>, <bloqueD2>, <incremento>

Modos[editar]

Modo incondicional[editar]

TRANSFER , <bloqueD1>

Cuando se omite el operando <modo>, la transacción siempre salta al bloque <bloqueD1>.

Modo fraccional[editar]

TRANSFER .75, <bloqueD1>, <bloqueD2>

Cuando el operando <modo> no es una palabra clave, la transacción salta al bloque <bloqueD2> con una probabilidad <modo>. Con una probabilidad 1-<modo> saltará al bloque <bloqueD1>, o al siguiente bloque si <bloqueD1> no estuviera especificado.

Modo BOTH[editar]

TRANSFER BOTH <bloqueD1>, <bloqueD2>

Primero, se prueba <bloqueD1>, si rechaza a la transacción activa , entonces se prueba el <bloqueD2>. El primero de los bloques que acepte la transacción será el nuevo destino; una transacción permanecerá en el bloque TRANSFER hasta que alguno de los bloques de destino la acepte.

Modo ALL[editar]

TRANSFER ALL <bloqueD1>, <bloqueD2>, <incremento>

Todos los bloques desde <bloqueD1> hasta <bloqueD2> son testeados, incrementando de a <incremento> (todos los bloques deberán tener el mismo número de líneas para poder ser testeados secuencialmente). El primero de los bloques que acepte la transacción será el nuevo destino; una transacción permanecerá en el bloque TRANSFER hasta que alguno de los bloques de destino la acepte.

Modo función[editar]

TRANSFER FN, <función>, <incremento>

El destino se elige evaluando la función <función>, y agregándole <incremento>.

Modo de rechazo[editar]

El bloque TRANSFER no tiene modo de rechazo. Una transacción permanecerá allí hasta que pueda salir.

Split[editar]

La instrucción SPLIT permite simular que una pieza o un paquete se desensambla en varios que lo componen. Su sintaxis es:

SPLIT <número>, <bloque>
<número>
número de transacciones creadas en la cascada.
<bloque>
dirección del bloque al cual se dirige la cascada creada.

Assemble[editar]

La instrucción ASSEMBLE sirve para unir varias transacciones en una sola que represente el paquete. Su sintaxis es:

ASSEMBLE <número>
<número>
el número de transacciones que constituyen el paquete.

SNA´s[editar]

F<numeroEntidad> ó F$<entidad>: devuelve 1 si está ocupada, 0 si no.

SF<numeroBuffer> ó SF$<nombreBuffer>: devuelve 1 si el buffer está completamente ocupado, y 0 si no.

X$<nombreVariable>: valor de la variable.

SR<numeroBuffer> ó SR$<nombreBuffer>: fracción de utilización del buffer, en uno por mil.

Las variables asociadas a un STORAGE son:

S<Almacén> - Devuelve la cantidad espacio de almacenamiento utilizado por transacciones entrantes en el almacén <Almacén>. Es un valor entero.

SA<Almacén> - Se calcula como el promedio ponderado por tiempo SA<Almacén> del espacio promedio utilizado del almacén <Almacén>. Es un valor real.

SC<Almacén> - Storage use count. Total number of storage units that have been acquired from Storage Entity <Almacén>. Integer value.

SE<Almacén> - Retorna 1 si el almacén <Almacén> está disponible completamente, y si no 0. Es un valor entero.

SF<Almacén> - Retorna 1 si el almacén <Almacén> está siendo utilizado completamente, y si no 0. Es un valor entero.

SR<Almacén> - Storage utilization. The fraction of total usage represented by the average storage in use at Storage Entity <Almacén>. SR<Almacén> is expressed in parts-per-thousand and therefore returns a value 0-1000, inclusive. May be nonintegral. Real value.

SM<Almacén> - Maximum storage in use at Storage Entity <Almacén>. The “high water mark”. Integer value.

ST<Almacén> - Average holding time per unit at Storage Entity <Almacén>. Real value.

SV<Almacén> - Storage in available state. SV<Almacén> returns 1 if Storage Entity <Almacén> is in the available state, 0 otherwise. Integer value.

Savevalue[editar]

Este bloque define una locación de registro, y permite actualizar, adicionar o sustraer el valor de una variable de almacenamiento.

Su sintaxis es :

SAVEVALUE <atributo>, <valor>
<atributo>
nombre o número del SAVEVALUE. Puede ser seguido por un signo más (+) o un signo menos (-) para indicar adición o sustracción del valor existente. El operando puede ser un nombre, un entero positivo o un SNA.
<valor>
valor a ser almacenado adicionado o sustraído. El operando puede ser un nombre, un entero o un SNA.
Ejemplo
SAVEVALUE CAJA_FINAL,CAJA

Cuando una transacción ingresa a este bloque el valor de la variable de almacenamiento CAJA es grabado en la variable CAJA_FINAL.

Sentecias de control[editar]

Clear[editar]

CLEAR

Esta es una instrucción de control que borra todos los resultados estadísticos colectados a la fecha y además borra la situación actual de las transacciones. Con ella es posible simular las repeticiones necesarias de un programa hasta que se estabilice. Esta instrucción no posee operandos, se usa en conjunto con START.

Reset[editar]

RESET

Se emplea para borrar todos los resultados estadísticos de la simulación pero conservando la situación actual de las transacciones en los bloques, se emplea después de START. Se puede emplear para simular el precalentamiento de un sistema (warm-up). El warm-up de un sistema es necesario cuando el sistema a simular no está vacío al iniciar sus operaciones (que se desean simular). Por ejemplo: una fábrica que produce muebles guardará los muebles inconclusos después de una jornada de trabajo para proseguir con ellos a la jornada siguiente, por lo tanto si se está simulando este sistema tal vez no sea adecuado tomar estadísticas cuando el sistema inicia como vacío, por tanto, para no tomar en cuenta las estadísticas del inicio puede usar RESET.

Ejercicios[editar]

  1. Ejercicio 1 GPSS
  2. Ejercicio 2 GPSS
  3. Ejercicio 3 GPSS
  4. Ejercicio 4 GPSS
  5. Ejercicio 5 GPSS
  6. Ejercicio 6 GPSS
  7. Ejercicio 7 GPSS
  8. Ejercicio 8 GPSS
  9. Ejercicio 9 GPSS
  10. Ejercicio 10 GPSS
  11. Ejercicio 11 GPSS
  12. Ejercicio 1 Extra GPSS




^ Atributos numéricos del sistema.