• Nenhum resultado encontrado

Sistema Computacional Ferroviário.pdf

N/A
N/A
Protected

Academic year: 2021

Share "Sistema Computacional Ferroviário.pdf"

Copied!
17
0
0

Texto

(1)

Anexo III –

(2)

ANEXO III

IMPLEMENTAÇÃO DO SISTEMA COMPUTACIONAL

O sistema computacional utilizado neste trabalho de tese é formado por três componentes: um simulador a eventos discretos, um conjunto de rotinas, que proporcionam entre facilidades: acesso a banco de dados, resolução do problema de atribuição e implementação do controlador fuzzy, e um “ front-end ”, isto é, uma

interface gráfica onde o usuário define as características do sistema a ser simulado, e de onde também obtém os resultados da simulação, integrando ainda os outros dois componentes.

O código fonte de todos os componentes mencionados, devido às respectivas extensões, não foram impressos mas estão disponíveis no CD-ROM encartado no Anexo IV a este volume. Esse código foi desenvolvido em Delphi®

, podendo ser compilado somente nas versão 5 ou superior.

III.1 Simulador a Eventos Discretos

O simulador a eventos discretos foi construído de acordo com o paradigma da programação orientada a objetos. Ele é composto pelas seguintes classes:

• cTipos – Contém todos os tipo de dados definidos pelo usuário;

• cRelogio – classe que implementa o relógio da simulação. Possui as

seguintes propriedades:

⇒ HoraAtual – tempo atual de simulação;

⇒ HoraAnterior – tempo anterior da simulação antes do avanço do

relógio;

⇒ UltimoAvanco – intervalo de tempo correspondente ao último avanço

de tempo da simulação;

⇒ Anos – número de anos transcorridos na simulação; ⇒ Meses – número de meses transcorridos na simulação; ⇒ Dias – número de dias transcorridos na simulação;

(3)

⇒ Minutos – número de minutos transcorridos na simulação; ⇒ Segundos – número de segundos transcorridos na simulação; ⇒ DiadaSemana – número correspondente ao dia da semana;

⇒ Quinzena – indica a que quinzena pertence o tempo atual da

simulação.

• cBase – classe base da simulação da qual as classes cEntidade, cAtividade e

cFilas descendem. Suas propriedades são:

⇒ Nome – nome do objeto;

⇒ Relogio – ponteiro para o relógio da simulação.

• cEntidade – classe que implementa o objeto Entidade na simulação. Possui

as seguintes propriedades:

⇒ Local – local onde a entidade se encontra atualmente (pode ser uma

Fila ou Atividade);

⇒ NumeroEntidade – numero que o objeto entidade possui ao ser

instanciado;

⇒ AtividadeAtual – atividade da qual a entidade está participando; ⇒ TempoFila – tempo total que a entidade permaneceu em filas;

⇒ TempoAtividade – tempo total que a entidade participou de

atividades;

⇒ EntraFila – instante em que a entidade entrou numa fila; ⇒ SaiFila – instante em que a entidade deixou uma fila;

⇒ Utilizacao – quociente entre o tempo de atividade e a soma do tempo

de atividade com a o tempo de fila;

⇒ UtilizacaoTotal – o mesmo que o anterior, considerando-se porém os

tempos de todas as corridas;

⇒ GetIndAtributo – função que retorna a posição de um atributo dentre

do vetor de atributos da entidade;

⇒ GetValAtributo – função que retorna o valor de um determinado

atributo;

⇒ GetNomeAtributo – função que retorna o nome do atributo da

(4)

⇒ DefValatributo – procedimento que estabelece o valor de um atributo

identificado por um nome;

⇒ DefineAtributo – cria uma entrada com um nome no vetor de

atributos da entidade;

⇒ RemoveAtributo – remove a n-ésima entrada do vetor de atributos da

entidade;

⇒ NumAtributos – função que retorna o número de atributos que a

entidade possui;

⇒ Reinicializa – procedimento que zera os tempos de permanência em

atividades e de filas;

⇒ Finaliza – procedimento que acumula os tempos globais de

permanência em atividades e filas ao fim de uma corrida.

• cAtividade – essa classe realiza a implementação do objeto Atividade. Suas

principais propriedades são mostradas abaixo:

⇒ Duracoes – vetor com os tempos de duração dessa atividade;

⇒ NumeroAtividade – número da atividade. Valor designado quando a

atividade é criada;

⇒ DuracaoMaxima – máxima duração da atividade; ⇒ DuracaoMinima – mínima duração da atividade;

⇒ DuracaoTipica – valor utilizado para fins de estimativas de duração

de atividade até que esta seja executada pela primeira vez;

⇒ Media – duração média das atividades de uma corrida;

⇒ DesvioPadrao – desvio padrão dos tempos de atividade de uma

corrida;

⇒ MediaGlobal – duração média das atividades de todas as corridas; ⇒ DesvioPadraoGlobal – desvio padrão dos tempos de atividades de

todas as corridas;

⇒ NumVezesRealizada – número de vezes que a atividade foi realizada

numa corrida;

⇒ TotalVezesRealizada – número de vezes em que a atividade foi

realizada em todas as corridas;

(5)

⇒ TempoAtividade – tempo previsto para a duração da atividade; ⇒ Inicio – instante de tempo em que se inicia a atividade;

⇒ Termino – instante de tempo em que a atividade é finalizada

⇒ FimAtividade – processa a atualização das estatísticas referentes a

duração das atividades ao fim de uma corrida;

⇒ Reinicializa – procedimento que zera os tempos de atividade e o

número de vezes que a atividade foi realizada;

⇒ Finaliza – procedimento que acumula os tempos globais de atividade

e o número total de vezes que a atividade foi realizada ao fim de uma corrida.

• cFila – classe responsável pela implementação do objeto Fila. Tem como

propriedades os seguintes elementos:

⇒ Entidade – entidade associada a esta fila;

⇒ MudouTamFila – notificação de evento referente a mudança do

tamanho da fila;

⇒ MudouTempoFila – notificação de evento referente a mudança do

tempo de fila;

⇒ Tempos – vetor com os tempos de permanência na fila;

⇒ Entidades – lista com todos os objetos do tipo entidade que estão na

fila;

⇒ Frequencias – vetor com as freqüências da fila;

⇒ TamFinal – número de entidades na fila ao término de uma corrida; ⇒ Tamanho – número atual de entidades na fila;

⇒ Freq – número de entradas na fila;

⇒ TamanhoMax – número máximo de elementos na fila em

determinado instante;

⇒ TamanhoMin – número mínimo de elementos na fila em determinado

instante;

⇒ TamanhoMed – número médio de elementos na fila;

⇒ DesvPadraoTempos – desvio padrão dos tempos de permanência nas

fila;

(6)

⇒ Primeira – função que retorna a primeira entidade da fila;

⇒ Retira – procedimento que retira uma entidade da fila de acordo com

a posição informada;

⇒ RetiraEnesima – retira a n-ésima entidade da fila;

⇒ Coloca – procedimento, para colocação na fila, de uma entidade em

certa posição;

⇒ Esvazia – procedimento que retira todos os elementos da fila;

⇒ Finaliza – atualiza o tamanho da fila e retira entidades remanescentes

ao término de uma corrida;

⇒ Ultima – função que retorna a última entidade da fila;

⇒ GetByPosition – função que retorna a n-ésima entidade da fila;

⇒ GetByAtribute – função que retorna uma entidade em função do

valor de um atributo.

• cFonte – classe que implementa o objeto Fonte. Suas propriedades são: ⇒ Contador – fornece o número de entidades retiradas dessa fonte; ⇒ Entidade – entidade associada a esta fonte;

⇒ Tira – procedimento que retira (cria) uma entidade da fonte;

⇒ ZeraContador – procedimento que zera a contagem de entidades

retiradas da fonte.

• cEvento – essa classe implementa o objeto Evento, associado ao inicio e

término de uma atividade. Possui as seguintes propriedades:

⇒ Numero –número do evento B; ⇒ Nome – nome do evento B;

⇒ Término – instante de término do evento B; ⇒ Entidade – entidade que participa deste evento; ⇒ Atividade – atividade a que se refere o evento.

Essas classes não são manipuladas diretamente, mas gerenciadas pelo executivo da simulação, implementado pela classe cSimul cujas propriedades são apresentadas em seguida.

(7)

⇒ Init – este procedimento inicializa as listas de objetos entidades,

atividades, filas, fontes e demais variáveis de interesse para a simulação;

⇒ DefineAtividade – este procedimento define uma atividade da

simulação e sua duração típica;

⇒ Atividade – esta função retorna o objeto atividade correspondente ao

nome informado;

⇒ ProgramaAtividade – programa a duração de uma determinada

atividade;

⇒ Destroi – procedimento que destrói um objeto entidade retirando-o da

simulação;

⇒ DefineEntidade – procedimento que define uma entidade na

simulação;

⇒ Entidade – função que retorna uma entidade correspondente ao nome

informado;

⇒ DefineAtributo – cria uma entrada, de acordo com o nome

informado, no vetor de atributos da entidade;

⇒ AvaliaAtributo – retorna o valor do atributo de uma entidade,

identificado por um nome;

⇒ DefValAtributo – define um valor para o atributo correspondente ao

nome fornecido;

⇒ DefineFila – procedimento que define uma fila para a simulação; ⇒ Fila – função que retorna uma fila de acordo com o nome fornecido; ⇒ EncheFila – procedimento que enche uma fila com certo número de

entidades;

⇒ ColocanaFila – Coloca uma entidade em certa fila, de acordo com a

posição indicada;

⇒ TiradaFila – Retira uma entidade da fila indicada de acordo com a

posição desejada;

(8)

⇒ PreparaB – procedimento de programação de evento associado ao

inicio de uma atividade, fornecendo o número do evento B e a entidade participante;

⇒ DefineFonte – procedimento que define uma fonte de uma

determinada entidade na simulação;

⇒ TiradaFonte – função que extrai uma entidade da fonte informada; ⇒ Fonte – função que dado um nome de fonte retorna o objeto

correspondente;

⇒ ExecutaSimulacao – procedimento que verifica se as condições de

inicio da simulação são atendidas e controla o sua execução e finalização;

⇒ Fim – rotina de finalização da simulação, retirando da memória os

objetos instanciados;

⇒ EnqEventosB – função lógica que retorna verdadeiro caso exista

algum evento associado ao fim de uma determinada atividade e falso em caso contrário.

Estas são as características básicas do simulador. Entretanto, como este simulador serviu ao propósito de representar o comportamento de um trecho ferroviário, algumas funcionalidades adicionais foram agregadas para que se alcançasse este objetivo. Dessa forma foram incluídos as seguintes rotinas:

⇒ Zera_Trechos_Manutencao – esse procedimento torna todos os

trechos da simulação disponíveis para manutenção;

⇒ Trecho_Disp_Manutencao – função lógica que retorna verdadeiro

caso exista algum trecho que não tenha sofrido manutenção e falso caso contrário;

⇒ Zera_Trechos_Falha – procedimento que torna disponível, para

eventos de falha, todos os trechos da simulação;

⇒ Trecho_Disp_Falha – função que retorna verdadeiro quando existem

trechos que ainda não participaram de eventos de falha;

⇒ TempoPrevisto – tempo previsto para o deslocamento entre dois

(9)

⇒ DetalhaHoras – fornecidos dois instantes de tempo distintos, esta

função retorna a quantidade de horas normais, extra do tipo I e II, por período do dia, decorridas em cada quinzena do período correspondente aos instantes informados;

⇒ DefineMaquinista – estabelece o número de maquinista em certo

local de trabalho (sede ou destacamento);

⇒ NoturnaMenorDiurna – função lógica que retorna verdadeiro caso

determinada jornada causará um total de horas noturnas maiores que diurnas em uma quinzena;

Complementando a parte referente aos componentes do simulador, existem ainda as unidades denominadas EventosB e EventosC onde são declaradas respectivamente as rotinas referentes aos inícios e términos de atividades, de acordo com a modelagem do sistema cujo comportamento se deseja simular.

É importante ressaltar que somente as rotinas cujos cabeçalhos forem declarados na seção de interface dessas unidades serão acessíveis aos de mais componentes do sistema computacional.

Finalizando, a classe cDistribuicoes fornece as rotinas para amostragem aleatória simples e amostragem descritiva, baseada no trabalho desenvolvido por Glaydson Vasconcelos de Souza para o Simul.

III.2 Unidades de Apoio à Simulação

Nesta categoria estão agrupadas as unidades complementares a simulação e que fornecem as funcionalidades de banco de dados, máquina de inferência fuzzy, geração de combinações e resolução do problema de atribuição. São a seguir comentadas.

• cAssignment – unidade que implementa a resolução do problema de

designação quadrática para uma matriz de ordem 150, de acordo com o algoritmo de Jonker e Volgenant.. Sua rotina básica é:

(10)

⇒ Designa – a partir de uma lista de trens e de maquinistas apresentados

designa os maquinistas aos trens;

• cCombinacoes – unidade que gera as combinações das regras fuzzy ativadas.

Tem como funcionalidade os seguintes elementos:

⇒ GetNext – gera a próxima seqüência de combinações;

⇒ Inicializa – verifica os elementos informados e calcula o número total

de combinações;

⇒ CombinacoesRestantes – informa o número de combinações ainda

não geradas;

⇒ MaisCombinacoes – função lógica que indica se ainda existem

combinações não geradas;

⇒ TotalCombinacoes – função que indica o número total de

combinações;

⇒ Combinacoes – função que retorna o vetor atual de combinações.

• cFuzzy – classe que implementa a Máquina de Inferência Fuzzy. Suas

propriedades são:

⇒ InicLimitesTermos – função que estabelece a posição inicial e final

de cada termo lingüistico em um vetor de posição de termos;

⇒ IncluiVariavel – procedimento que realiza a inclusão de uma variável

fuzzy na máquina de inferência;

⇒ Infere – função que retorna a saída (nítida) do controlador fuzzy para

um conjunto de valores de entrada;

⇒ AdicionaRegra – procedimento que adiciona uma regra do tipo “Se

então” na base de regras;

⇒ GetPosCol – função que retorna a posição de um termo lingüístico

conhecido o seu nome e a variável a que pertence;

⇒ PertinenciaByInd – função que retorna o grau de pertinência de uma

variável fuzzy;

⇒ VarEntrada – lista com todas as variáveis de entrada do controlador

(11)

⇒ AbreArquivo – procedimento que abre um arquivo texto, denominado

“RegrasFora.txt”, onde serão listadas regras que o controlador fuzzy tentou utilizar, mas que não pertencem a base de regras;

⇒ FechaArquivo – procedimento que fecha o arquivo “RegrasFora.txt”,

após o término da simulação.

As classes cVarLing e cResultadoGlobal, a seguir comentadas, estão encapsuladas na classe cFuzzy.

• cVarLing – classe que implementa uma variável fuzzy (ou Variável

Lingüística). Possui as seguintes propriedades:

⇒ DefineTermo – procedimento que define um termo lingüístico

(conjunto fuzzy) estabelecendo seu nome, forma e conjunto de valores;

⇒ SetPertinencia – calcula o grau de pertinência de uma variável fuzzy

a partir de um valor de entrada;

⇒ InicializaTermos – procedimento que coloca a pertinência em zero e

o estado da variável em não ativado;

⇒ NumTermos – propriedade indicativa do número de termos

lingüísticos que a variável fuzzy possui;

⇒ GetIndTermos – função que retorna índice de ordem do termo

lingüístico dentro da variável fuzzy;

⇒ GetTermo – função que retorna o objeto Termo Lingüístico associado

a um nome de referência;

⇒ GetTermoByPosicao - função que retorna o objeto Termo Lingüístico

de acordo com sua posição na lista de termos da variável lingüística;

⇒ NomeTermo – função que retorna a posição de um termo, conhecido

seu nome de referência;

⇒ Nome – Nome da Variável Lingüística;

⇒ PertinenciaByPos – função que retorna o grau de pertinência de um

termo de acordo com sua posição na lista de termos lingüísticos;

(12)

⇒ GetArea – função que retorna a área geométrica de um Termo

Lingüístico;

⇒ GetCG – função que retorna o Centro de Gravidade de um Termo

Lingüístico;

⇒ SetArea – procedimento que calcula a área de um termo lingüístico.

• cResultadoGlobal – classe que realiza o cálculo do valor de saída do

controlador fuzzy. Suas propriedades são:

⇒ ZeraResultado – procedimento que exclui os Termos Lingüisticos das

variáveis fuzzy referentes ao resultado anterior;

⇒ IncluiResultadoParcial – inclui os Termos Lingüísticos que foram

ativados para uma determinada entrada;

⇒ GetResultado – função que fornece o resultado final ou de saída do

controlador fuzzy.

• RotinasDB – esta unidade implementa todas as facilidades de Banco de

Dados da simulação, utilizando tabelas no formato Paradox®

 7.0. Possui os seguintes métodos:

⇒ CriaTabelaTrens – cria, em tempo de execução, uma tabela que

registrará os instantes de partida e de chegada de cada trem, em cada pátio definido na simulação;

⇒ GravaRegistroTrem – grava, na Tabela de Trens, informações de

movimentação de um trem;

⇒ CriaTabelaApresent – cria, em tempo de execução, uma tabela que

registrará os instantes de inicio e término de apresentação (prontidão) dos maquinistas;

⇒ GravaRegistroApresent – grava, na Tabela de Apresentações,

informações de apresentação de um maquinista;

⇒ CriaTabelaFolgas – cria, em tempo de execução, uma tabela que

registrará os instantes de inicio e término de folgas (descanso semanal remunerado) dos maquinistas;

(13)

⇒ GravaRegistroFolgas – grava, na Tabela de Folgas, informações

referentes à folga de um maquinista;

⇒ CriaTabelaDescansos – cria, em tempo de execução, uma tabela que

registrará os instantes de inicio e término de descanso (intervalo mínimo de repouso de 10 horas entre dois serviços consecutivos) dos maquinistas;

⇒ GravaRegistroDescanso – grava, na Tabela de Descansos,

informações referentes ao descanso de um maquinista;

⇒ CriaTabelaHoras – cria, em tempo de execução, uma tabela que

registrará as horas trabalhadas por cada maquinista em função do período do dia (noturno ou diurno), do tipo de hora (normal, extra dos tipos I e II) e da quinzena do mês (primeira ou segunda);

⇒ GravaRegistroHoras – grava, na Tabela de Horas, informações

referentes às horas trabalhadas por um maquinista;

⇒ CriaTabelaServicos – cria, em tempo de execução, uma tabela que

registrará informações dos serviços realizados por cada maquinista, ou seja, o trem que ele conduziu e os instantes de apresentação e de inicio e término de condução do trem;

⇒ GravaRegistroServicos – grava, na Tabela de Serviços, informações

referentes aos serviços efetuados por um maquinista;

⇒ CriaTabelaManutVia – cria, em tempo de execução, uma tabela que

gravará os instantes de inicio e término dos eventos de manutenção da via permanente;

⇒ GravaRegistroManutVia – grava, na Tabela de Manutenção da Via,

informações referentes a um evento de manutenção da via;

⇒ CriaTabelaFalhaVia – cria, em tempo de execução, uma tabela que

gravará os instantes de inicio e término dos eventos de falha na via permanente;

⇒ GravaRegistroFalhaVia – grava, na Tabela de Falhas da Via,

informações referentes a um evento de falha na via;

⇒ CriaTabelaFalhaTrem – cria, em tempo de execução, uma tabela que

(14)

⇒ GravaRegistroFalhaTrem – grava, na Tabela de Falhas de Trem,

informações referentes a um evento de falha num trem;

⇒ PesqHorasMaq – função que realiza uma pesquisa na Tabela de

Horas, retornando as horas trabalhadas por um maquinista. III.3 Interface Gráfica com o Usuário

As classes até agora vistas formam o “back-end ” da aplicação e são as que efetivamente

realizam todo o processamento dos dados. As classes a seguir formam o “ front-end ”, ou

seja, fornecem uma interface gráfica de interação com o usuário onde ele fornecerá os elementos de entrada e obterá as saídas correspondentes.

• Principal – esta unidade é a unidade central do “ front-end ”. Nela são

definidos todos os elementos da simulação, cujos conteúdos são transmitidos às classes de “back-end ”. Possui os seguintes métodos:

⇒ DefineModelo – procedimento responsável pela caracterização ou

definição do modelo da simulação. Ele é composto das seguintes etapas:

 Init – realiza a inicialização das variáveis, e objetos da simulação;  DefineEntidade – define cada uma das entidades da simulação;  DefineAtvidade – define cada uma das atividades da simulação;  DefineFila – define cada uma das filas da simulação;

 DefineFonte – define cada uma das fontes da simulação;

 EncheFila – coloca determinados elementos em fila para que as

condições de inicio de uma atividade possam ser atendidas, e desta forma ser iniciada a simulação.

⇒ ChamaBEventos – procedimento que percorre uma lista de eventos

associados ao término de uma atividade, determinando aqueles que serão executados;

⇒ AtravesCEventos – procedimento que percorre todas as atividades

verificando aquelas cujas condições de início são satisfeitas e executando-as;

(15)

⇒ InicializaControlador – procedimento para inicialização do

Controlador Fuzzy ou Máquina de Inferência Fuzzy;

⇒ InializaMaquinistas – procedimento utilizado na alocação dinâmica

para o estabelecimento do número de maquinista em cada posto de trabalho (sede e distrito(s)).

Além disso, existem constantes, que o usuário deve definir, indicando as rotas (seqüências de atividades e filas) dos trens de acordo com sua tração e sentido.

• frmGraficoCirc – esta unidade é a responsável pela elaboração do gráfico de

circulação de trens, de cada período correspondente a um dia da simulação, sendo também assinalados os eventos de falha e manutenção da via. O usuário tem ainda a opção de salvar o gráfico em um arquivo ou de imprimi-lo. A unidade dispõe dos seguintes métodos:

⇒ DesenhaMalha – procedimento responsável pelo desenho dos pátios

definidos na simulação;

⇒ DesenhaTrens – este procedimento desenha os trens na malha;

⇒ CanvasTextOutAngle – escreve um determinado texto de acordo com

as coordenadas de tela e ângulo fornecidos;

⇒ DesenhaBlocoVia – este procedimento desenha um bloco da via onde

ocorreu uma falha ou manutenção da via;

⇒ QueryTrens – realiza uma pesquisa na Tabela de Trens, selecionando

os trens que circularam em determinado dia;

⇒ QueryManVia – realiza uma pesquisa na Tabela de Manutenção da

Via, selecionando os eventos de manutenção que ocorreram em determinado dia;

⇒ QueryFalhaVia – realiza uma pesquisa na Tabela de Falhas na Via,

selecionando os eventos de falha na via que ocorreram em determinado dia.

• ImageProcessingPrimitives – esta unidade é a responsável diretamente pela

(16)

• cformArquivos – esta unidade é a responsável pela exibição, navegação e

(17)

Referências

Documentos relacionados

7." Uma outra doença que como já disse, pode confundir-se também com a siringomielia, é a esclerose lateral amiotró- flea; mas n'esta doença, além de ela ter uma evolução

Figura 4.10 – Fluxo de CO2 para as áreas de footprint de três torres localizadas em unidades experimentais submetidas a diferentes tipos de manejo pastoril Rotativo,

Justificamos a pesquisa, por ser uma oportunidade de análise que articula as zonas formais de representação do discurso outro (RDO) (AUTHIER-REVUZ 1998, 2004a, 2012) com as

No final, os EUA viram a maioria das questões que tinham de ser resolvidas no sentido da criação de um tribunal que lhe fosse aceitável serem estabelecidas em sentido oposto, pelo

Taking into account the theoretical framework we have presented as relevant for understanding the organization, expression and social impact of these civic movements, grounded on

Neste estudo foram estipulados os seguintes objec- tivos: (a) identifi car as dimensões do desenvolvimento vocacional (convicção vocacional, cooperação vocacio- nal,

Os instrutores tiveram oportunidade de interagir com os vídeos, e a apreciação que recolhemos foi sobretudo sobre a percepção da utilidade que estes atribuem aos vídeos, bem como

Em todas as vezes, nossos olhos devem ser fixados, não em uma promessa apenas, mas sobre Ele, o único fundamento da nossa esperança, e em e através de quem sozinho todas as