Пример #1
0
        private void GeradoraVeiculos()
        {
            if (ImprimirLogTela)
            {
                Console.WriteLine("Iniciando rotina de geração de veículos");
            }
            int n = grafo.NumeroVertices;

            for (int i = 0; i < n; i++)
            {
                //se a taxa de geração da rotina do vertice atual
                if (RoletaSorteio.ExecutaRoleta(TaxaGeracao[i]))
                {
                    // gera veiculo e inicializa log de veiculos
                    Veiculo veiculoAdicionar = geradorVeiculos.GeraVeiculoAleatorio(IdVeiculo, grafo, i);

                    veiculoAdicionar.LogVeiculo = new LogVeiculo()
                    {
                        IdVeiculo       = veiculoAdicionar.Id,
                        InstanteCriacao = SegundoSimulacao,
                        VerticeOrigem   = i,
                        VerticeDestino  = veiculoAdicionar.PercursoVeiculo.Last()
                    };
                    // veiculo no vertice aguardando para começar a trafegar
                    VeiculosEsperaVertice[i].Enqueue(veiculoAdicionar);

                    #region TratativaLogs
                    if (ImprimirLogTela)
                    {
                        Console.WriteLine($"Realizado inserção de veículo no vértice {i}.");
                    }
                    LogGeracaoVeiculos.Add(new LogGeracaoVeiculo()
                    {
                        VerticeIncersao  = i,
                        IdVeiculo        = IdVeiculo,
                        SegundoSimulacao = SegundoSimulacao
                    });
                    LogTrajetos.Add(new LogTrajetosVeiculos
                    {
                        IdVeiculo       = IdVeiculo,
                        PercursoVeiculo = veiculoAdicionar.PercursoVeiculo
                    });
                    #endregion TratativaLogs

                    //adiciona na coleção de veículos
                    VeiculosSimulacao.Add(veiculoAdicionar);
                    IdVeiculo++;
                }
            }
            #region TratativaLogs

            for (int i = 0; i < n; i++)
            {
                LogQtdVeiculosEsperaTempo.Add(
                    new LogQtdVeiculosEsperaVertice()
                {
                    InstanteTempo = SegundoSimulacao,
                    QtdVeiculos   = VeiculosEsperaVertice[i].Count,
                    Vertice       = i,
                    EspacoOcupado = VeiculosEsperaVertice[i].Sum(x => x.Comprimento)
                });
            }
            #endregion TrativaLogs
        }
Пример #2
0
 private Veiculo GetVeiculo(int id)
 {
     return(VeiculosSimulacao.Where((x) => x.Id == id).FirstOrDefault());
 }
Пример #3
0
        public void SalvaLogs()
        {
            // salva log veiculos
            if (!string.IsNullOrEmpty(PastaLogVeiculos))
            {
                verificaPasta(PastaLogVeiculos);
                Console.WriteLine("Salvando Logs veículos");
                foreach (var veiculo in VeiculosSimulacao)
                {
                    List <string> logs = new List <string>();
                    logs.Add($"Instante tempo;Velocidade veículo");
                    foreach (var item in veiculo.LogVeiculo.VelocidadesTempo)
                    {
                        logs.Add($"{item.InstanteTempo};{item.Velociadade}");
                    }
                    SalvaLog(logs, $"{PastaLogVeiculos}/{veiculo.Id}.csv");
                }
                Console.WriteLine("Log veículos salvos");
            }
            // salva log gerais
            if (!string.IsNullOrEmpty(PastaLogsGerais))
            {
                verificaPasta(PastaLogsGerais);
                Console.WriteLine("Salvando logs gerais");
                List <string> logs = new List <string>();
                //Origem veiculos por vertice
                int   n        = grafo.NumeroVertices;
                int[] origem   = new int[n];
                int[] destinos = new int[n];
                for (int i = 0; i < n; i++)
                {
                    origem[i]   = 0;
                    destinos[i] = 0;
                }
                VeiculosSimulacao.ForEach(x =>
                {
                    if (x.PercursoVeiculo.Count >= 0)
                    {
                        origem[x.PercursoVeiculo.First()]  += 1;
                        destinos[x.PercursoVeiculo.Last()] += 1;
                    }
                });
                logs.Add("vertice; quantidade origem; quantidade destino");
                for (int i = 0; i < n; i++)
                {
                    logs.Add($"{i};{origem[i]};{destinos[i]}");
                }
                SalvaLog(logs, $"{PastaLogsGerais}/OrigemDestinos.csv");

                #region VelocidadeMediaVeiculos
                Console.WriteLine("Gerando logs de velocidade média");
                logs = new List <string>();
                logs.Add("instante tempo; media velocidade");
                for (int i = 0; i < QtdIteracoes; i++)
                {
                    var veiculosComVelocidadeSegundo = VeiculosSimulacao.Where(x => x.LogVeiculo.VelocidadesTempo.Where(y => y.InstanteTempo == i).Count() > 0 && x.VerticeAtual != x.PercursoVeiculo.LastOrDefault()).ToList();
                    var somatorio = veiculosComVelocidadeSegundo.Select(x => x.LogVeiculo.VelocidadesTempo.Where(y => y.InstanteTempo == i).ToList()).Sum(x => x.Sum(y => y.Velociadade));
                    var media     = (float)somatorio / veiculosComVelocidadeSegundo.Count();
                    logs.Add($"{i};{media}");
                }
                SalvaLog(logs, $"{PastaLogsGerais}/MeidaVelocidadePorTempo.csv");
                #endregion VelocidadeMediaVeiculos

                #region VelocidadeMediaPorRua
                Console.WriteLine("Gerando logs de velocidade média por rua por tempo");
                verificaPasta($"{PastaLogsGerais}/MeidaVelocidadeRuas");
                foreach (var rua in RuasSimulacao)
                {
                    List <string> log = new List <string>();
                    log.Add("Instante Tempo;Velocidade Média");
                    foreach (var logInstante in rua.MediaVelocidadesPorInstante)
                    {
                        log.Add($"{logInstante.InstanteTempo}; {logInstante.VelocidadeMedia}");
                    }
                    SalvaLog(log, $"{PastaLogsGerais}/MeidaVelocidadeRuas/{rua.Id}.csv");
                }
                #endregion VelocidadeMediaPorRua
                Console.WriteLine("Logs Gerais salvos");
            }

            // salva logs semaforos
            if (!string.IsNullOrEmpty(PastaLogsSemaforos))
            {
                verificaPasta(PastaLogsSemaforos);
                Console.WriteLine("Salvando logs semáforos");
                foreach (var semaforo in Semaforos)
                {
                    var logs = new List <string>();
                    logs.Add("Instante de tempo; tempo aberto (s); tempo fechado(2)");
                    foreach (var item in semaforo.LogSemaforos)
                    {
                        logs.Add($"{item.InstanteTempo};{item.TempoAberto};{item.TempoFechado}");
                    }
                    SalvaLog(logs, $"{PastaLogsSemaforos}/{semaforo.Id}.csv");
                }
                Console.WriteLine("Logs semáforos salvos");
            }
            // salva logs LogsEstradas
            if (!string.IsNullOrEmpty(PastaLogEstradas))
            {
                verificaPasta(PastaLogEstradas);
                Console.WriteLine("Iniciando geração de log de estradas");
                for (int i = 0; i < grafo.NumeroArestas; i++)
                {
                    List <string>          LogSalvar    = new List <string>();
                    List <LogOcupacaoVias> salvarAresta = LogOcupacaoVias.Where((x => x.IdAresta == i)).ToList();
                    LogSalvar.Add("Instante de tempo; Espaco Ocupado; Quantidade de veículos");
                    foreach (var item in salvarAresta)
                    {
                        LogSalvar.Add($"{item.InstanteTempo};{item.EspacoOcupado};{item.QuantidadadeVeiculos}");
                    }
                    SalvaLog(LogSalvar, $"{PastaLogEstradas}/{i}.csv");
                }
                Console.WriteLine("Logs de estradas salvos");
            }
            if (!string.IsNullOrEmpty(PastaLogsVertices))
            {
                verificaPasta(PastaLogsVertices);
                Console.WriteLine("Iniciando geração de logs dos vertices");
                for (int i = 0; i < grafo.NumeroVertices; i++)
                {
                    List <string> logs = new List <string>();
                    logs.Add("Instante tempo;Quantidade de veiculos;Espaco ocupado");
                    LogQtdVeiculosEsperaTempo.Where(x => x.Vertice == i).ToList().ForEach(x =>
                    {
                        logs.Add($"{x.InstanteTempo};{x.QtdVeiculos};{x.EspacoOcupado}");
                    });
                    SalvaLog(logs, $"{PastaLogsVertices}/{i}.csv");
                }
                Console.WriteLine("Logs de vertices salvos");
            }
        }