private void AddRota(Rota rota) { if (this.RotasPassadas.Exists(r => r.Equal(rota))) { throw new RotaRepetidaException(rota); } this.RotasPassadas.Add(rota); }
private static void AddRota(Rota rota) { if (Rota.Rotas.Exists(r => (r.CidadeA.Id == rota.CidadeA.Id && r.CidadeB.Id == rota.CidadeB.Id) || (r.CidadeB.Id == rota.CidadeA.Id && r.CidadeA.Id == rota.CidadeB.Id))) { return; } Rota.Rotas.Add(rota); }
public static Rota GetRota(Cidade cidadeA, Cidade cidadeB) { var cidade = Rota.Ordenar(cidadeA, cidadeB); cidadeA = cidade[0]; cidadeB = cidade[1]; Rota ro = Rota.Rotas.Find(r => r.CidadeA.Id == cidadeA.Id && r.CidadeB.Id == cidadeB.Id); return(ro); }
public static void AddFeromonio(Cidade cidadeA, Cidade cidadeB) { var cidade = Rota.Ordenar(cidadeA, cidadeB); cidadeA = cidade[0]; cidadeB = cidade[1]; Rota rota = Rota.Rotas.Find(r => r.CidadeA.Id == cidadeA.Id && r.CidadeB.Id == cidadeB.Id); rota.Feromonio += QUANTIDADE_FEROMONIO_ADICIODAR; }
public Rota(Cidade cidadeA, Cidade cidadeB, int distancia) { this.Distancia = distancia; var cidade = Rota.Ordenar(cidadeA, cidadeB); this.CidadeA = cidade[0]; this.CidadeB = cidade[1]; this.Feromonio = 0.1; Rota.AddRota(this); }
public Boolean Equal(Object obj) { Rota rota = obj as Rota; if (obj == null) { return(false); } var cidade = Rota.Ordenar(rota.CidadeA, rota.CidadeB); var objCidadeA = cidade[0]; var objCidadeB = cidade[1]; cidade = Rota.Ordenar(this.CidadeA, this.CidadeB); var thisCidadeA = cidade[0]; var thisCidadeB = cidade[1]; return(objCidadeA.Id == thisCidadeA.Id && objCidadeB.Id == thisCidadeB.Id); }
private Rota EscolherRota() { var rotas = Rota.GetRota(this.CidadeAtual); var probabilidade = new Dictionary <string, double>(); foreach (var item in Rota.GetRota(this.CidadeAtual)) { Cidade cidadeDestino = item.CidadeA; if (this.CidadeAtual.Id == item.CidadeA.Id) { cidadeDestino = item.CidadeB; } var probabilidadeRota = this.Iterecao.Porcentagem(this.CidadeAtual, cidadeDestino); probabilidade.Add(cidadeDestino.Id, probabilidadeRota); } probabilidade = probabilidade.OrderBy(c => c.Value).ToDictionary(k => k.Key, k => k.Value); var formaPizza = new Dictionary <string, double>(); double valorAnterior = 0; foreach (var item in probabilidade) { valorAnterior += item.Value; formaPizza.Add(item.Key, valorAnterior); } var chaveSelecionada = this.SelecionarRota(formaPizza); var cidadeEscolhida = Cidade.GetCidadeById(chaveSelecionada); var rota = Rota.GetRota(CidadeAtual, cidadeEscolhida); this.CidadeAtual = cidadeEscolhida; this.CidadeAtual.IsVisitado = true; return(rota); }
public static void AddFeromonio(Rota rota) { Rota.AddFeromonio(rota.CidadeA, rota.CidadeB); }