Esempio n. 1
0
        static double[] getNIJ(AdjacencyList g, List <CaminoOptimo> cs)
        {
            bool[] visitados = new bool[g.tamanioGrafo()];
            char[] letras    = new char[] { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I' };
            foreach (int i in Enumerable.Range(0, g.tamanioGrafo()))
            {
                visitados[i] = false;
            }
            //OBTENER ARREGLO CON nij
            List <int>    tmpCosts = new List <int>();
            List <double> nij      = new List <double>();

            for (int i = 0; i < g.tamanioGrafo() - 1; i++)
            {
                visitados[i] = true;
                var vecinos = g[i];
                foreach (var j in vecinos)
                {
                    if (!visitados[j.Item1])
                    {
                        double x = (double)1 / (double)j.Item2;
                        nij.Add(x);
                        primerosArcos.Add(new Tuple <int, int>(i, j.Item1));
                        tmpCosts.Add(j.Item2);
                    }
                }
            }
            foreach (var i in primerosArcos)
            {
                Console.WriteLine($"{letras[i.Item1]} - {letras[i.Item2]}");
            }
            costosPrimerosArcos = tmpCosts.ToArray();
            return(nij.ToArray());
        }
Esempio n. 2
0
        public static void Init(AdjacencyList grafo, List <CaminoOptimo> caminos)
        {
            double[]     nij      = getNIJ(grafo, caminos);
            List <int[]> hormigas = getHormigas(primerosArcos.Count, caminos);

            int[]           costos     = getCostos(hormigas, hormigas.Count); //Costos de viajes de estas hormigas
            List <double[]> deltaArcos = getdtijk(nij.Length, hormigas.Count, hormigas, costos);

            /* Console.WriteLine("deltas");
             * Program.imprimirArrayDouble(deltatij);
             * Console.WriteLine("feromonas");
             * Program.imprimirArrayDouble(feromonas);
             * Console.WriteLine("probabilidades");
             * Program.imprimirArrayDouble(probabilidadArco); */
            foreach (var x in caminos)
            {
                x.imprimirCamino();
            }
            List <double[]> matrizCaminosNuevos = getNuevaMatriz(nij.Length, hormigas.Count, nij, hormigas);

            Console.WriteLine("NUEVOS CAMINOS");
            foreach (var i in matrizCaminosNuevos)
            {
                foreach (var j in i)
                {
                    Console.Write($"{j}-");
                }
                Console.WriteLine("");
            }
            //generarNuevosCaminos(nij.Length,hormigas.Count,matrizCaminosNuevos);
        }
Esempio n. 3
0
        static void leerGrafo()
        {
            string archivoTxt = Path.Combine(Directory.GetCurrentDirectory(), "adyacenciaCiclado.txt");

            string[] lines = File.ReadAllLines(archivoTxt);
            Console.WriteLine(lines.Length);
            grafo = new AdjacencyList(int.Parse(lines[0]));
            foreach (var i in lines)
            {
                string[] j = i.Split(',');
                int      x = int.Parse(j[0]);
                try{
                    grafo.agregaVertice(int.Parse(j[0]), int.Parse(j[1]), int.Parse(j[2]));
                }catch (Exception) {      //PARA EVITAR LA PRIMERA LINEA QUE ES EL NUMERO DE NODOS
                    continue;
                }
            }
        }