public void Add(Vertice v, int valor)
 {
     if (!Vizinhos.Keys.Contains(v))
     {
         Vizinhos.Add(v, valor);
         v.Vizinhos.Add(this, valor);
     }
 }
        static void Main(string[] args)
        {
            /****************************************** Problema Mochila *********************************************/
            OtimizaMochila heuristica = new OtimizaMochila(75);
            heuristica.AddItem(new Item() { Descricao = "Lanterna", Peso = 3, Utilidade = 15 });
            heuristica.AddItem(new Item() { Descricao = "Canivete Suíço", Peso = 1, Utilidade = 10 });
            heuristica.AddItem(new Item() { Descricao = "Jaca", Peso = 30, Utilidade = 3 });
            heuristica.AddItem(new Item() { Descricao = "Panela", Peso = 5, Utilidade = 15 });
            heuristica.AddItem(new Item() { Descricao = "Carne", Peso = 10, Utilidade = 20 });
            heuristica.AddItem(new Item() { Descricao = "Arroz", Peso = 7, Utilidade = 20 });
            heuristica.AddItem(new Item() { Descricao = "Feijão", Peso = 8, Utilidade = 20 });
            heuristica.AddItem(new Item() { Descricao = "Cerveja", Peso = 15, Utilidade = 8 });
            heuristica.AddItem(new Item() { Descricao = "Mapa", Peso = 1, Utilidade = 15 });
            heuristica.AddItem(new Item() { Descricao = "Celular", Peso = 3, Utilidade = 9 });
            heuristica.AddItem(new Item() { Descricao = "Barraca", Peso = 8, Utilidade = 60 });
            heuristica.AddItem(new Item() { Descricao = "Cobertor", Peso = 8, Utilidade = 25 });
            heuristica.AddItem(new Item() { Descricao = "Jornal", Peso = 3, Utilidade = 5 });
            heuristica.AddItem(new Item() { Descricao = "Papel Higiênico", Peso = 2, Utilidade = 14 });
            heuristica.AddItem(new Item() { Descricao = "Carvão", Peso = 8, Utilidade = 15 });
            heuristica.AddItem(new Item() { Descricao = "Repelente", Peso = 2, Utilidade = 5 });
            heuristica.AddItem(new Item() { Descricao = "Vara de Pescar", Peso = 3, Utilidade = 2 });
            heuristica.AddItem(new Item() { Descricao = "Pente", Peso = 1, Utilidade = 1 });
            heuristica.AddItem(new Item() { Descricao = "Espelho", Peso = 1, Utilidade = 1 });
            heuristica.AddItem(new Item() { Descricao = "Sabão", Peso = 2, Utilidade = 7 });
            heuristica.AddItem(new Item() { Descricao = "Xampu", Peso = 4, Utilidade = 5 });
            heuristica.AddItem(new Item() { Descricao = "Luvas", Peso = 1, Utilidade = 2 });
            heuristica.AddItem(new Item() { Descricao = "Violão", Peso = 15, Utilidade = 4 });
            heuristica.AddItem(new Item() { Descricao = "Fósforo", Peso = 1, Utilidade = 7 });
            heuristica.AddItem(new Item() { Descricao = "Isqueiro", Peso = 1, Utilidade = 9 });
            heuristica.AddItem(new Item() { Descricao = "Bússola", Peso = 2, Utilidade = 14 });
            heuristica.AddItem(new Item() { Descricao = "Roupa", Peso = 5, Utilidade = 28 });
            heuristica.AddItem(new Item() { Descricao = "Sapatos", Peso = 3, Utilidade = 11 });
            heuristica.AddItem(new Item() { Descricao = "Protetor Solar", Peso = 2, Utilidade = 6 });
            heuristica.AddItem(new Item() { Descricao = "Pratos", Peso = 5, Utilidade = 12 });
            heuristica.AddItem(new Item() { Descricao = "Colheres", Peso = 1, Utilidade = 8 });
            heuristica.AddItem(new Item() { Descricao = "Facas", Peso = 1, Utilidade = 13 });
            heuristica.AddItem(new Item() { Descricao = "Binóculos", Peso = 5, Utilidade = 3 });
            heuristica.AddItem(new Item() { Descricao = "GPS", Peso = 5, Utilidade = 20 });
            heuristica.AddItem(new Item() { Descricao = "Notebook", Peso = 15, Utilidade = 5 });
            heuristica.AddItem(new Item() { Descricao = "Som", Peso = 16, Utilidade = 8 });
            heuristica.AddItem(new Item() { Descricao = "Livro", Peso = 3, Utilidade = 3 });
            heuristica.AddItem(new Item() { Descricao = "Corda", Peso = 5, Utilidade = 15 });
            heuristica.AddItem(new Item() { Descricao = "Lixa Unha", Peso = 1, Utilidade = 1 });
            heuristica.AddItem(new Item() { Descricao = "Esmalte", Peso = 1, Utilidade = 1 });
            heuristica.AddItem(new Item() { Descricao = "Alicate", Peso = 2, Utilidade = 8 });
            heuristica.AddItem(new Item() { Descricao = "Machado", Peso = 15, Utilidade = 50 });
            heuristica.AddItem(new Item() { Descricao = "Linha", Peso = 1, Utilidade = 1 });
            heuristica.AddItem(new Item() { Descricao = "Agulha", Peso = 1, Utilidade = 1 });
            heuristica.AddItem(new Item() { Descricao = "Band Aid", Peso = 1, Utilidade = 12 });
            heuristica.AddItem(new Item() { Descricao = "Mertiolate", Peso = 1, Utilidade = 11 });
            heuristica.AddItem(new Item() { Descricao = "Gaze", Peso = 1, Utilidade = 13 });
            heuristica.AddItem(new Item() { Descricao = "Perfume", Peso = 1, Utilidade = 1 });
            heuristica.AddItem(new Item() { Descricao = "Leite", Peso = 4, Utilidade = 10 });
            heuristica.AddItem(new Item() { Descricao = "Biscoitos", Peso = 4, Utilidade = 10 });
            heuristica.AddItem(new Item() { Descricao = "Sucrilhos", Peso = 3, Utilidade = 7 });
            heuristica.AddItem(new Item() { Descricao = "Bombons", Peso = 3, Utilidade = 5 });
            heuristica.AddItem(new Item() { Descricao = "Meias", Peso = 1, Utilidade = 2 });
            heuristica.AddItem(new Item() { Descricao = "Chapeu", Peso = 3, Utilidade = 7 });
            heuristica.AddItem(new Item() { Descricao = "Estilingue", Peso = 1, Utilidade = 4 });
            heuristica.AddItem(new Item() { Descricao = "Martelo", Peso = 6, Utilidade = 12 });
            heuristica.AddItem(new Item() { Descricao = "Arame", Peso = 6, Utilidade = 15 });

            heuristica.GerarSolucao();

            System.Console.WriteLine("===================+==========Problema da Mochila==============================\n");
            int u = 0;
            foreach (IComponente c in heuristica.Solucao.Componentes)
            {
                Item item = (Item)c;
                u += item.Utilidade;
                System.Console.WriteLine(item.Descricao + " \t\t\tPeso: " + item.Peso + " \t\tUtilidade: " + item.Utilidade);
            }

            System.Console.WriteLine("\n\nPeso da Mochila: " + heuristica.Mochila.CapacidadeAtual);
            System.Console.WriteLine("Utilidade da Mochila: " + heuristica.Solucao.Avaliacao);

            /****************************************** Problema Caixeiro Viajante *********************************************/
            ConstroiGrafo constroiGrafo = new ConstroiGrafo(8);

            Vertice ba = new Vertice("BA");
            Vertice df = new Vertice("DF");
            Vertice es = new Vertice("ES");
            Vertice mg = new Vertice("MG");
            Vertice pr = new Vertice("PR");
            Vertice rj = new Vertice("RJ");
            Vertice sp = new Vertice("SP");
            Vertice se = new Vertice("SE");

            ba.Add(df, 1446);
            ba.Add(es, 1202);
            ba.Add(mg, 1372);
            ba.Add(pr, 2385);
            ba.Add(rj, 1649);
            ba.Add(se, 2682);
            ba.Add(sp, 1962);

            df.Add(es, 1239);
            df.Add(mg, 716);
            df.Add(pr, 1366);
            df.Add(rj, 1148);
            df.Add(se, 1673);
            df.Add(sp, 1015);

            es.Add(mg, 524);
            es.Add(pr, 1300);
            es.Add(rj, 521);
            es.Add(se, 1597);
            es.Add(sp, 882);

            mg.Add(pr, 1004);
            mg.Add(rj, 434);
            mg.Add(se, 1301);
            mg.Add(sp, 586);

            pr.Add(rj, 852);
            pr.Add(se, 300);
            pr.Add(sp, 408);

            rj.Add(se, 1144);
            rj.Add(sp, 429);

            se.Add(sp, 705);

            constroiGrafo.Arestas.Add(new Aresta { CidadeOrigem = ba, CidadeDestino = df, Distancia = 1446 });
            constroiGrafo.Arestas.Add(new Aresta { CidadeOrigem = ba, CidadeDestino = es, Distancia = 1202 });
            constroiGrafo.Arestas.Add(new Aresta { CidadeOrigem = ba, CidadeDestino = mg, Distancia = 1372 });
            constroiGrafo.Arestas.Add(new Aresta { CidadeOrigem = ba, CidadeDestino = pr, Distancia = 2385 });
            constroiGrafo.Arestas.Add(new Aresta { CidadeOrigem = ba, CidadeDestino = rj, Distancia = 1649 });
            constroiGrafo.Arestas.Add(new Aresta { CidadeOrigem = ba, CidadeDestino = se, Distancia = 2682 });
            constroiGrafo.Arestas.Add(new Aresta { CidadeOrigem = ba, CidadeDestino = sp, Distancia = 1962 });

            constroiGrafo.Arestas.Add(new Aresta { CidadeOrigem = df, CidadeDestino = es, Distancia = 1239 });
            constroiGrafo.Arestas.Add(new Aresta { CidadeOrigem = df, CidadeDestino = mg, Distancia = 716 });
            constroiGrafo.Arestas.Add(new Aresta { CidadeOrigem = df, CidadeDestino = pr, Distancia = 1366 });
            constroiGrafo.Arestas.Add(new Aresta { CidadeOrigem = df, CidadeDestino = rj, Distancia = 1148 });
            constroiGrafo.Arestas.Add(new Aresta { CidadeOrigem = df, CidadeDestino = se, Distancia = 1673 });
            constroiGrafo.Arestas.Add(new Aresta { CidadeOrigem = df, CidadeDestino = sp, Distancia = 1015 });

            constroiGrafo.Arestas.Add(new Aresta { CidadeOrigem = es, CidadeDestino = mg, Distancia = 524 });
            constroiGrafo.Arestas.Add(new Aresta { CidadeOrigem = es, CidadeDestino = pr, Distancia = 1300 });
            constroiGrafo.Arestas.Add(new Aresta { CidadeOrigem = es, CidadeDestino = rj, Distancia = 521 });
            constroiGrafo.Arestas.Add(new Aresta { CidadeOrigem = es, CidadeDestino = se, Distancia = 1597 });
            constroiGrafo.Arestas.Add(new Aresta { CidadeOrigem = es, CidadeDestino = sp, Distancia = 882 });

            constroiGrafo.Arestas.Add(new Aresta { CidadeOrigem = mg, CidadeDestino = pr, Distancia = 1004 });
            constroiGrafo.Arestas.Add(new Aresta { CidadeOrigem = mg, CidadeDestino = rj, Distancia = 434 });
            constroiGrafo.Arestas.Add(new Aresta { CidadeOrigem = mg, CidadeDestino = se, Distancia = 1301 });
            constroiGrafo.Arestas.Add(new Aresta { CidadeOrigem = mg, CidadeDestino = sp, Distancia = 586 });

            constroiGrafo.Arestas.Add(new Aresta { CidadeOrigem = pr, CidadeDestino = rj, Distancia = 852 });
            constroiGrafo.Arestas.Add(new Aresta { CidadeOrigem = pr, CidadeDestino = se, Distancia = 300 });
            constroiGrafo.Arestas.Add(new Aresta { CidadeOrigem = pr, CidadeDestino = sp, Distancia = 408 });

            constroiGrafo.Arestas.Add(new Aresta { CidadeOrigem = rj, CidadeDestino = se, Distancia = 1144 });
            constroiGrafo.Arestas.Add(new Aresta { CidadeOrigem = rj, CidadeDestino = sp, Distancia = 429 });

            constroiGrafo.Arestas.Add(new Aresta { CidadeOrigem = se, CidadeDestino = sp, Distancia = 705 });

            constroiGrafo.CidadeInicial = mg;

            constroiGrafo.GerarSolucao();

            System.Console.WriteLine("\n\n============================Problema Caixeiro Viajante==========================\n");

            int somaDistancias = 0;
            foreach (IComponente a in constroiGrafo.Solucao.Componentes)
            {
                Aresta aresta = (Aresta)a;
                System.Console.WriteLine("\nCidade Origem: " + aresta.CidadeOrigem.Valor + " \t\tCidade Destino: " + aresta.CidadeDestino.Valor + " \t\tDistancia: " + aresta.Distancia);
                somaDistancias += aresta.Distancia;
            }

            System.Console.WriteLine("\n\nDistância total: " + somaDistancias+"\n\n\n\n\n");

            /****************************************** Problema Quadro de Horário *********************************************/
            ConstroiQuadroHorario cqh = new ConstroiQuadroHorario();

            //Horários
            Horario seg12 = new Horario("seg12");
            cqh.Horarios.Add(seg12);

            Horario seg34 = new Horario("seg34");
            cqh.Horarios.Add(seg34);

            Horario ter12 = new Horario("ter12");
            cqh.Horarios.Add(ter12);

            Horario ter34 = new Horario("ter34");
            cqh.Horarios.Add(ter34);

            Horario qua12 = new Horario("qua12");
            cqh.Horarios.Add(qua12);

            Horario qua34 = new Horario("qua34");
            cqh.Horarios.Add(qua34);

            Horario qui12 = new Horario("qui12");
            cqh.Horarios.Add(qui12);

            Horario qui34 = new Horario("qui34");
            cqh.Horarios.Add(qui34);

            Horario sex12 = new Horario("sex12");
            cqh.Horarios.Add(sex12);

            Horario sex34 = new Horario("sex34");
            cqh.Horarios.Add(sex34);

            //Professores
            Professor p1 = new Professor("p1");
            cqh.Professores.Add(p1);

            Professor p2 = new Professor("p2");
            cqh.Professores.Add(p2);

            Professor p3 = new Professor("p3");
            cqh.Professores.Add(p3);

            Professor p4 = new Professor("p4");
            cqh.Professores.Add(p4);

            Professor p5 = new Professor("p5");
            cqh.Professores.Add(p5);

            //Restrições
            cqh.AddRestricao(p1, seg12);
            cqh.AddRestricao(p1, ter12);
            cqh.AddRestricao(p1, qui12);

            cqh.AddRestricao(p2, qui34);
            cqh.AddRestricao(p2, sex34);

            cqh.AddRestricao(p3, ter34);
            cqh.AddRestricao(p3, qua12);
            cqh.AddRestricao(p3, qua34);

            cqh.AddRestricao(p4, qui12);
            cqh.AddRestricao(p4, sex34);

            cqh.AddRestricao(p5, ter12);
            cqh.AddRestricao(p5, qua12);
            cqh.AddRestricao(p5, qui12);

            cqh.GerarSolucao();

            System.Console.WriteLine("\n\n============================Problema Quadro de Horário==========================\n");
            foreach (IComponente a in cqh.Solucao.Componentes)
            {
                Alocacao alocacao = (Alocacao)a;
                System.Console.WriteLine("\nHorário: " + alocacao.Horario.Id + " \t\tProfessor: " + alocacao.Professor.Nome);
            }
            System.Console.ReadLine();
        }
Esempio n. 3
0
 public void AddAresta(Vertice A, Vertice B, int valor)
 {
     A.Add(B, valor);
     B.Add(A, valor);
 }