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

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.