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 Equipamentos Recursos ou “facilidades” (facilities) Depósitos (storages) Chaves lógicas (logical switches) Estatísticas Blocos (que formam o diagrama) Transações (que fluem pelo diagrama) 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 0.000 END TIME 1044.298 NAME BARB CAD DESISTE LABEL FACILITY BARB ENTRIES 87 STORAGE CAD FACILITIES 1 STORAGES 1 VALUE 10001.000 10000.000 8.000 LOC 1 2 3 4 5 6 7 8 DESISTE BLOCKS 8 BLOCK TYPE GENERATE TEST ENTER SEIZE LEAVE ADVANCE RELEASE TERMINATE UTIL. 0.989 ENTRY COUNT CURRENT COUNT RETRY 103 0 0 103 0 0 89 2 0 87 1 0 86 0 0 86 0 0 86 0 0 100 0 0 AVE. TIME AVAIL. OWNER PEND INTER RETRY DELAY 11.873 1 101 0 0 0 2 CAP. REM. MIN. MAX. 3 0 0 3 ENTRIES AVL. 89 1 AVE.C. UTIL. RETRY DELAY 2.345 0.782 0 0 CEC XN 101 PRI 0 M1 1017.901 ASSEM 101 CURRENT 4 NEXT 5 PARAMETER VALUE FEC XN 104 PRI 0 BDT 1046.630 ASSEM 104 CURRENT 0 NEXT 1 PARAMETER VALUE 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)