Sistema Computacional Ferroviário.pdf

Share Embed Donate


Short Description

Download Sistema Computacional Ferroviário.pdf...

Description

Anexo III – Implementação do Sistema Computacional

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;



Horas – número de horas transcorridas na simulação; 134



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 nésima posição do vetor de atributos da entidade;

135



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;



Programa – estabelece o instante de inicio e de término da atividade; 136



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;



DesvPadraoTamanho – desvio padrão dos tamanhos da fila; 137



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.

138



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;



PrimeirodaFila – função que retorna a primeira entidade de uma fila;

139



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 pontos fornecidos; 140



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 é: 141



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 fuzzy;

142



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;



PertinenciaByName – função que retorna o grau de pertinência de um termo de acordo com seu nome; 143



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;

144



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 gravará os instantes de inicio e término dos eventos de falha nos trens; 145



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; 146



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 imprimilo. 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 impressão do gráfico de circulação de trens, sendo acionada pela unidade frmGraficoCirc. 147



cformArquivos – esta unidade é a responsável pela exibição, navegação e exportação do conteúdo das tabelas criadas em tempo de execução.

148

Anexo IV – CD-ROM do Sistema Computacional

View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF