예제 #1
0
        public RoutesDTO AStar(string startLatLon, string endLatLon)
        {
            KeyValuePair <NodeGraphDTO, NodeGraphDTO> nodes = BeforeCalculateShortestPath(startLatLon, endLatLon);
            var          watch = Stopwatch.StartNew();
            NodeGraphDTO node  = astar.CalculateShortestPath(nodes.Key, nodes.Value);

            watch.Stop();
            time = watch.Elapsed;
            return(AfterCalculateShortestPath(node));
        }
예제 #2
0
        static void Main(string[] args)
        {
            /*            Dijkstra dijkstra = new Dijkstra();
             *          dijkstra.ReadNodeFile("C:\\Users\\miros\\source\\repos\\MetaHeruistiky_csharp\\MetaHeruistiky_csharp\\Data\\nodes.txt");
             *          dijkstra.ReadEdgeFile("C:\\Users\\miros\\source\\repos\\MetaHeruistiky_csharp\\MetaHeruistiky_csharp\\Data\\edges.txt");
             *          dijkstra.CalculateShortesPathFromNode(6);
             *          var tmpList = dijkstra.FormatOutput();
             *          foreach (var item in tmpList)
             *          {
             *              Console.WriteLine(item);
             *          }
             *          Console.WriteLine();
             *          Floyd floyd = new Floyd();
             *          floyd.ReadNodeFile("C:\\Users\\miros\\source\\repos\\MetaHeruistiky_csharp\\MetaHeruistiky_csharp\\Data\\nodes.txt");
             *          floyd.ReadEdgeFile("C:\\Users\\miros\\source\\repos\\MetaHeruistiky_csharp\\MetaHeruistiky_csharp\\Data\\edges.txt");
             *          floyd.CalculatePath();
             *          var floydList = floyd.FormatOutput(6);
             *          foreach (var item in tmpList)
             *          {
             *              Console.WriteLine(item);
             *          }*/
            AStar astar = new AStar();

            /*astar.ReadMyNodes("C:\\Users\\miros\\source\\repos\\MetaHeruistiky_csharp\\MetaHeruistiky_csharp\\Data\\my_nodes.txt");
             * astar.ReadMyEdges("C:\\Users\\miros\\source\\repos\\MetaHeruistiky_csharp\\MetaHeruistiky_csharp\\Data\\my_edges.txt");
             * astar.ReadMyIncidentEdges("C:\\Users\\miros\\source\\repos\\MetaHeruistiky_csharp\\MetaHeruistiky_csharp\\Data\\my_incident_edges.txt");
             * astar.CalculateShortestPath(12, 4);*/
            astar.ReadNodes("C:\\Users\\miros\\source\\repos\\MetaHeruistiky_csharp\\MetaHeruistiky_csharp\\Data\\SR_nodes.atr");
            astar.ReadNodeCords("C:\\Users\\miros\\source\\repos\\MetaHeruistiky_csharp\\MetaHeruistiky_csharp\\Data\\SR_nodes.vec");
            astar.ReadEdges("C:\\Users\\miros\\source\\repos\\MetaHeruistiky_csharp\\MetaHeruistiky_csharp\\Data\\SR_edges.atr");
            astar.ReadIncidentEdges("C:\\Users\\miros\\source\\repos\\MetaHeruistiky_csharp\\MetaHeruistiky_csharp\\Data\\SR_edges_incid.txt");
            //astar.CalculateShortestPath(12, 4);
            astar.CalculateShortestPath(154, 12);
            //astar.TestConnectionOfGraph();
            Console.WriteLine("Kontrolujem spojenie");
            astar.FindConnectedComponents();
            //dijkstra.ReadNodeFile(".\\Data\\nodes.txt");
        }
예제 #3
0
        public ActionResult Statistics()
        {
            var statistic = new
            {
                GraphMemory         = Utils.GraphMemory,
                DisabledGraphMemory = Utils.DisabledGraphMemory,
                GraphTime           = Utils.GraphTime,
                DisabledGraphTime   = Utils.DisabledGraphTime,
                PocetVrcholov       = Utils.PocetVrcholov
            };
            int            opakovani  = 10;
            int            algoritmus = 0;
            TimeSpan       time;
            Zakladny       zakladny       = new Zakladny();
            Dijkster       dijkster       = new Dijkster();
            AStar          astar          = new AStar();
            LabelCorrect   labelCorrect   = new LabelCorrect();
            LabelSet       labelSet       = new LabelSet();
            DuplexDijkster duplexDijkster = new DuplexDijkster();
            var            watch          = Stopwatch.StartNew();
            Random         random         = new Random();

            NodeGraphDTO[]   startNodes = new NodeGraphDTO[opakovani];
            NodeGraphDTO[]   endNodes   = new NodeGraphDTO[opakovani];
            List <RoutesDTO> routesAll  = new List <RoutesDTO>(6);

            for (int i = 0; i < opakovani; i++)
            {
                startNodes[i] = PrepareData.NodesGraph.Values.ElementAt(random.Next(PrepareData.NodesGraph.Count));
                endNodes[i]   = PrepareData.NodesGraph.Values.ElementAt(random.Next(PrepareData.NodesGraph.Count));
            }

            for (int j = 0; j < 6; j++)
            {
                RoutesDTO routes = new RoutesDTO();
                for (int i = 0; i < opakovani; i++)
                {
                    PrepareData.PrepareNodesGraph();
                    switch (j)
                    {
                    case 0:
                        PrepareData.PutStartEnd(startNodes[i], endNodes[i]);
                        watch.Restart();
                        var n = zakladny.CalculateShortestPath(startNodes[i], endNodes[i], PrepareData.DisabledMovementGraph);
                        watch.Stop();
                        time = watch.Elapsed;
                        AfterCalculateShortestPath(n, time, routes);
                        PrepareData.RemoveStartEnd(startNodes[i], endNodes[i]);
                        break;

                    case 1:
                        PrepareData.PutStartEnd(startNodes[i], endNodes[i]);
                        watch.Restart();
                        n = dijkster.CalculateShortestPath(startNodes[i], endNodes[i]);
                        watch.Stop();
                        time = watch.Elapsed;
                        AfterCalculateShortestPath(n, time, routes);
                        PrepareData.RemoveStartEnd(startNodes[i], endNodes[i]);
                        break;

                    case 2:
                        PrepareData.PutStartEnd(startNodes[i], endNodes[i]);
                        watch.Restart();
                        n = astar.CalculateShortestPath(startNodes[i], endNodes[i]);
                        watch.Stop();
                        time = watch.Elapsed;
                        var a = routes.Route.Last;
                        AfterCalculateShortestPath(n, time, routes);
                        PrepareData.RemoveStartEnd(startNodes[i], endNodes[i]);
                        break;

                    case 3:
                        PrepareData.PutStartEnd(startNodes[i], endNodes[i]);
                        watch.Restart();
                        n = labelSet.CalculateShortestPath(startNodes[i], endNodes[i]);
                        watch.Stop();
                        time = watch.Elapsed;
                        AfterCalculateShortestPath(n, time, routes);
                        PrepareData.RemoveStartEnd(startNodes[i], endNodes[i]);
                        break;

                    case 4:
                        PrepareData.PutStartEnd(startNodes[i], endNodes[i]);
                        watch.Restart();
                        n = labelCorrect.CalculateShortestPath(startNodes[i], endNodes[i]);
                        watch.Stop();
                        time = watch.Elapsed;
                        AfterCalculateShortestPath(n, time, routes);
                        PrepareData.RemoveStartEnd(startNodes[i], endNodes[i]);
                        break;

                    case 5:
                        PrepareData.PutStartEnd(startNodes[i], endNodes[i]);
                        watch.Restart();
                        n = duplexDijkster.CalculateShortestPath(startNodes[i], endNodes[i]);
                        watch.Stop();
                        time = watch.Elapsed;
                        AfterCalculateShortestPathDuplex(n, time, routes);
                        PrepareData.RemoveStartEnd(startNodes[i], endNodes[i]);
                        break;
                    }
                }
                routesAll.Add(routes);
            }

            double[] PocetHranCesty            = new double[6];
            double[] PocetSpracovanychVrcholov = new double[6];
            double[] DlzkaCesty = new double[6];
            double[] CasVypoctu = new double[6];
            algoritmus = 0;
            foreach (RoutesDTO r in routesAll)
            {
                opakovani = r.Route.Count == 0 ? opakovani : r.Route.Count;
                long   PocetHranCestyA            = 0;
                long   PocetSpracovanychVrcholovA = 0;
                double DlzkaCestyA = 0;
                double CasVypoctuA = 0;
                foreach (RouteDTO route in r.Route)
                {
                    PocetHranCestyA            += route.PocetHranCesty;
                    PocetSpracovanychVrcholovA += route.PocetSpracovanychVrcholov;
                    DlzkaCestyA += route.DlzkaCesty;
                    CasVypoctuA += route.CasVypoctu;
                }
                PocetHranCesty[algoritmus]            = (double)PocetHranCestyA / opakovani;
                PocetSpracovanychVrcholov[algoritmus] = (double)PocetSpracovanychVrcholovA / opakovani;
                DlzkaCesty[algoritmus] = DlzkaCestyA / opakovani;
                CasVypoctu[algoritmus] = CasVypoctuA / opakovani;
                algoritmus++;
            }
            return(Json(statistic));
        }