private Veiculo GetVeiculo(int id) { return(VeiculosSimulacao.Where((x) => x.Id == id).FirstOrDefault()); }
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"); } }