Beispiel #1
0
 private void AddRota(Rota rota)
 {
     if (this.RotasPassadas.Exists(r => r.Equal(rota)))
     {
         throw new RotaRepetidaException(rota);
     }
     this.RotasPassadas.Add(rota);
 }
Beispiel #2
0
 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);
 }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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;
        }
Beispiel #5
0
        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);
        }
Beispiel #6
0
        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);
        }
Beispiel #7
0
        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);
        }
Beispiel #8
0
 public static void AddFeromonio(Rota rota)
 {
     Rota.AddFeromonio(rota.CidadeA, rota.CidadeB);
 }