private void ProcessaVeiculoSimulacao() { if (ImprimirLogTela) { Console.WriteLine("Iniciando rotina de Geração de veículos"); } foreach (var rua in RuasSimulacao) { Aresta ArestaCorrespondente = grafo.GetAresta(rua.IdAresta); Vertice VerticeOrigem = grafo.GetVertice(ArestaCorrespondente.Origem); if (VeiculosEsperaVertice[ArestaCorrespondente.Origem].Count > 0) { if (rua.AdicionaVeiculo(VeiculosEsperaVertice[ArestaCorrespondente.Origem].Peek(), SegundoSimulacao)) { if (ImprimirLogTela) { Console.WriteLine($"O veículo {VeiculosEsperaVertice[ArestaCorrespondente.Origem].Peek().Id} entrou na rua {rua.Id}"); } VeiculosEsperaVertice[ArestaCorrespondente.Origem].Dequeue(); } } #region TrativaLogs LogOcupacaoVias.Add(new LogOcupacaoVias() { IdAresta = rua.IdAresta, EspacoOcupado = (int)rua.MediaOcupacaoVias(), InstanteTempo = SegundoSimulacao }); #endregion TrativaLogs } }
public void SalvarLogEspacoOcupadoVias(string caminhoPastaVia) { for (int i = 0; i < grafo.NumeroArestas; i++) { List <string> LogSalvar = new List <string>(); List <LogOcupacaoVias> salvarAresta = LogOcupacaoVias.Where((x => x.IdAresta == i)).ToList(); foreach (var item in salvarAresta) { LogSalvar.Add($"{item.InstanteTempo};{item.EspacoOcupado}"); } using (StreamWriter file = new StreamWriter($"{caminhoPastaVia}/{i}.csv")) { file.Write(string.Join("\n", LogSalvar)); file.Close(); } } }
private void ProcessaVeiculoSimulacao() { if (ImprimirLogTela) { Console.WriteLine("Iniciando rotina de Processamento de veículos"); } foreach (var rua in RuasSimulacao) { Aresta ArestaCorrespondente = grafo.GetAresta(rua.IdAresta); Vertice VerticeOrigem = grafo.GetVertice(ArestaCorrespondente.Origem); if (VeiculosEsperaVertice[ArestaCorrespondente.Origem].Count > 0) { // verifica se a rua suporta adicionar mais um veículo if (rua.AdicionaVeiculo(VeiculosEsperaVertice[ArestaCorrespondente.Origem].Peek(), SegundoSimulacao)) { if (ImprimirLogTela) { Console.WriteLine($"O veículo {VeiculosEsperaVertice[ArestaCorrespondente.Origem].Peek().Id} entrou na rua {rua.Id}"); } VeiculosEsperaVertice[ArestaCorrespondente.Origem].Dequeue(); } } #region TrativaLogs LogOcupacaoVias.Add(new LogOcupacaoVias { IdAresta = rua.IdAresta, EspacoOcupado = (int)rua.MediaOcupacaoVias(), InstanteTempo = SegundoSimulacao, QuantidadadeVeiculos = rua.NumeroVeiculosNaVia }); #endregion TrativaLogs // trata veiculos já na via } ProcessaVeiculosVias(); TrocaVeiculosRua(); }
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"); } }