Modelagem e Simulação Material 6 Linguagem GPSS (parte 1) Prof. Simão Sirineo Toscani Introdução A primeira versão do GPSS foi lançada em 1961, pela IBM. Originalmente, GPSS significava Gordon s Programmable Simulation System, em homenagem a Geoffrey Gordon, seu criador. Mais tarde, passou a significar General Purpose Simulation System. GPSS sempre foi a principal linguagem de simulação da IBM. Como tal, um grande número de aplicações foram desenvolvidas nestes seus quase 50 anos de existência. A idéia principal que guiou o projeto do GPSS foi a de criar uma ferramenta que pudesse ser usada por não especialistas. Isso motivou a representação dos modelos de forma gráfica. Um modelo GPSS é um diagrama de blocos, por onde fluem transações, que são as entidades temporárias do sistema. Atualmente, as versões disponíveis mais conhecidas são GPPS/H, GPSS World e WebGPSS. Muitas ferramentas de simulação (por exemplo, a linguagem Arena) foram fortemente influenciadas pelo GPSS. Como veremos, a linguagem não é orientada a eventos nem a processos. Na verdade, GPSS lembra uma linguagem tipo data-flow.
Blocos GPSS Na linguagem GPSS, um modelo é descrito através de um diagrama de blocos. Existe um conjunto de blocos à disposição do programador, os quais podem ser interconectados para representar um sistema (i.é, para criar um modelo). A figura ao lado mostra os desenhos dos principais blocos, no ambiente WebGPSS. Um dos blocos, chamado GENERATE, é usado para gerar transações As transações são as entidades temporárias do modelo. Um exemplo ASUS STORAGE 2 ; declaração de um ; depósito (recurso) ; com duas unidades GENERATE 360,40 QUEUE CUA,1 ENTER ASUS,1 DEPART CUA,1 ADVANCE 100,15 LEAVE ASUS,1 TERMINATE 1
Uma visão inicial As transações fluem pelo diagrama, passando de bloco em bloco. Quando uma transação entra num bloco, a ação correspondente ao bloco é executada. Cada tipo de bloco desempenha uma função específica, que atua sobre as entidades do modelo. A maioria das entidades de um modelo não precisam ser declaradas (são pré-definidas). As informações de saída (estatísticas da execução) são geradas automaticamente pelo GPSS. Cada transação possui (carrega consigo) um conjunto de atributos, que podem ser testados e alterados durante a vida da transação. Quando uma transação entra num bloco, os seus atributos podem ser usados para moldar a ação a ser executada pelo bloco. Entidades do GPSS Entidades básicas Blocos (que formam o diagrama) Transações (que fluem pelo diagrama) Equipamentos Recursos ou facilidades (facilities) Depósitos (storages) Chaves lógicas (logical switches) Estatísticas Filas Tabelas Outras entidades Savevalues Variáveis (expressões) Funções
Tipos de blocos Existem blocos para: Criar e destruir transações (GENERATE e TERMINATE) Alterar parâmetros de transações (ASSIGN) Desviar o fluxo de transações (TEST, TRANSFER,...) Fazer uma transação esperar por um período de tempo (ADVANCE) Requisitar/liberar recurso (SEIZE/RELEASE) Requisitar/liberar um depósito (ENTER/LEAVE) Coletar estatísticas (QUEUE, TABULATE,...) Duplicar transações (SPLIT) Encadear transações à filas (LINK) E muitos outros Transações A transação é a única forma de representar uma entidade temporária que se movimenta no sistema (p.ex., pessoa em um supermercado, navio em um porto, mensagem em uma rede, etc.). As transações são criadas pelo bloco GENERATE e se movimentam de bloco em bloco até serem bloqueadas (retidas). Um mesmo bloco pode bloquear (reter) diversas transações. Novas cópias de uma transação podem ser geradas pelo bloco SPLIT. Uma transação sai (é removida) do sistema quando entra num bloco TERMINATE. O bloco TERMINATE possui um operando que é usado para decrementar o contador de FIM_DE_SIMULAÇÃO. Quando o contador atinge zero, a simulação termina. O valor inicial do contador de FIM_DE_SIMULAÇÃO é estabelecido no comando START, que coloca o modelo em funcionamento. Os resultados da simulação são mostrados automaticamente, no final da execução.
Barbearia do João em GPSS * Barbearia do João com 3 cadeiras na sala de espera * CAD STORAGE 3 ; 3 cadeiras na sala de espera GENERATE 10,2 TEST LE S$CAD,2,DESISTE ENTER CAD,1 SEIZE BARB LEAVE CAD,1 ADVANCE 12,2 RELEASE BARB DESISTE TERMINATE 1 O resultado da simulação (para um comando START 100) START TIME END TIME BLOCKS FACILITIES STORAGES 0.000 1044.298 8 1 1 NAME VALUE BARB 10001.000 CAD 10000.000 DESISTE 8.000 LABEL LOC BLOCK TYPE ENTRY COUNT CURRENT COUNT RETRY 1 GENERATE 103 0 0 2 TEST 103 0 0 3 ENTER 89 2 0 4 SEIZE 87 1 0 5 LEAVE 86 0 0 6 ADVANCE 86 0 0 7 RELEASE 86 0 0 DESISTE 8 TERMINATE 100 0 0 FACILITY ENTRIES UTIL. AVE. TIME AVAIL. OWNER PEND INTER RETRY DELAY BARB 87 0.989 11.873 1 101 0 0 0 2 STORAGE CAP. REM. MIN. MAX. ENTRIES AVL. AVE.C. UTIL. RETRY DELAY CAD 3 0 0 3 89 1 2.345 0.782 0 0 CEC XN PRI M1 ASSEM CURRENT NEXT PARAMETER VALUE 101 0 1017.901 101 4 5 FEC XN PRI BDT ASSEM CURRENT NEXT PARAMETER VALUE 104 0 1046.630 104 0 1
Atributos de uma transação Cada transação possui atributos que podem ser manipulados no bloco onde a transação se encontra. Os atributos de uma transação são: número da transação (identificação única) número do grupo de montagem (assembly set) tempo de criação (mark time) prioridade parâmetros Com exceção dos parâmetros, todos os atributos são inicializados automaticamente quando a transação é criada pelo bloco GENERATE. Sobre os parâmetros: Eles servem para armazenar informações arbitrárias sobre a transação (altura, peso, cor, próxima operação, tempo da operação, etc.) Podem ser manipulados apenas pelo bloco no qual a transação se encontra no momento (bloco onde a transação está executando ). Não podem ser manipulados por outras transações. Blocos que alteram os atributos de uma transação Os blocos que manipulam os atributos de uma transação são: ASSIGN (atribui um valor a um parâmetro) MARK (coloca o tempo atual em um parâmetro) PRIORITY (altera a prioridade da transação) SPLIT (cria cópias da transação; a transação original e as cópias vão constituir um grupo de montagem). Observações: Mark time é o tempo em que a transação foi criada. O tempo de trânsito da transação é o tempo atual (este tempo é referido por C1) menos o mark time da transação (este tempo é referido por M1). A prioridade zero éa menor (mais baixa ou menos urgente) O grupo de montagem (assembly set) é manipulado pelos blocos ASSEMBLE, GATHER e MATCH.
Os atributos numéricos do sistema (SNAs) Os SNAs (System Numeric Attributes) podem ser vistos como variáveis implícitas do sistema, que mantêm informações sobre o estado do modelo em execução. Exemplos de SNAs: C1 tempo atual da simulação (relógio da simulação) M1 tempo de trânsito da transação (tempo que transcorreu desde que ela foi criada) Si ocupação atual do depósito i (número de unidades que estão ocupadas) FNi valor da i-ésima função Qi tamanho corrente da fila i QAi tamanho médio da fila i QMi tamanho máximo da fila i RNi um valor aleatório gerado pelo i-ésimo gerador Wi número de transações esperando no i-ésimo bloco do programa Cadeias do GPSS e algoritmo de execução As duas principais cadeias (listas encadeadas) do sistema são as seguintes: Cadeia dos Eventos Correntes (Current Event Chain CEC), que contém as transações a serem movimentadas no tempo atual; Cadeia dos Eventos Futuros (Future Event Chain FEC), que contém as transações a serem movimentadas no tempo futuro (ordenadas pelo tempo em que devem ser movimentadas). Algoritmo de execução: 1. Atualiza o relógio para o tempo da primeira transação da FEC 2. Transfere todas as transações com esse tempo da FEC para a CEC 3. Para cada transação da CEC, repete os dois passos a seguir até que a transação fique retida: 1. Movimenta a transação para o próximo bloco 2. Executa a ação correspondente ao bloco 4. Volta para o passo 1
GPSS World Student Version Éa versão gratuita (para estudantes) do GPSS World. O instalador do sistema já está disponibilizado no material da disciplina, no ambiente Moodle. Junto com o sistema de simulação são instalados dois manuais (em inglês): Tutorial Manual de referência Após a instalação do sistema, os passos para construir um modelo e executá-lo são os seguintes: 1. File New Model (abre uma janela de edição para a digitação de um modelo). Após a digitação do modelo, prossegue-se no passo 2 (menu Command) 2. Command Create Simulation (o programa é compilado e o resultado é mostrado na janela JOURNAL); 3. Command START (inializa o contador de fim de simulação e coloca o modelo em execução). A ser continuado (to be continued)