Sistema Computacional Ferroviário.pdf
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