public LinkedList <KeyValuePair <decimal, string[]> > DownloadData(string title, float minLat, float minLon, float maxLat, float maxLon) { Models.Data data; using (GraphContext dopravnaSietContext = new GraphContext()) { decimal id = dopravnaSietContext.Data.Max(d => d.IdData); dopravnaSietContext.Data.Where(d => d.Active == true).FirstOrDefault().Active = false; dopravnaSietContext.SaveChanges(); SpracovanieOSMDat spracovanieOSMDat = new SpracovanieOSMDat(); spracovanieOSMDat.SpracovanieXMLDat(dopravnaSietContext, new Models.Data() { IdData = ++id, Title = title, MinLat = minLat, MinLon = minLon, MaxLat = maxLat, MaxLon = maxLon, Active = true }); data = dopravnaSietContext.Data.Where(d => d.Active == true).FirstOrDefault(); } PrepareData.PrepareNodesGraph(data); PrepareData.PrepareDisabledMovementGraph(); LinkedList <KeyValuePair <decimal, string[]> > array = new LinkedList <KeyValuePair <decimal, string[]> >(); using (GraphContext dopravnaSietContext = new GraphContext()) { foreach (Models.Data d in dopravnaSietContext.Data) { string[] field = new string[5] { d.Title, d.MinLat.ToString(CultureInfo.InvariantCulture), d.MinLon.ToString(CultureInfo.InvariantCulture), d.MaxLat.ToString(CultureInfo.InvariantCulture), d.MaxLon.ToString(CultureInfo.InvariantCulture) }; if (d.Active) { array.AddFirst(new KeyValuePair <decimal, string[]>(d.IdData, field)); } else { array.AddLast(new KeyValuePair <decimal, string[]>(d.IdData, field)); } } } return(array); }
private KeyValuePair <NodeGraphDTO, NodeGraphDTO> BeforeCalculateDisabledShortestPath(string startLatLon, string endLatLon) { PrepareData.PrepareNodesGraph(); var startLat = double.Parse(startLatLon.Split(',')[0], CultureInfo.InvariantCulture); var startLon = double.Parse(startLatLon.Split(',')[1], CultureInfo.InvariantCulture); var startNode = PrepareData.NodesGraph.OrderBy(n1 => (Utils.Distance(n1.Key.Lat, n1.Key.Lon, startLat, startLon))).First(); var endLat = double.Parse(endLatLon.Split(',')[0], CultureInfo.InvariantCulture); var endLon = double.Parse(endLatLon.Split(',')[1], CultureInfo.InvariantCulture); var endNode = PrepareData.NodesGraph.OrderBy(n1 => (Utils.Distance(n1.Key.Lat, n1.Key.Lon, endLat, endLon))).First(); return(new KeyValuePair <NodeGraphDTO, NodeGraphDTO>(startNode.Value, endNode.Value)); }
public bool SetData(string id) { Models.Data data; using (GraphContext dopravnaSietContext = new GraphContext()) { dopravnaSietContext.Data.Where(d => d.Active == true).FirstOrDefault().Active = false; dopravnaSietContext.Data.Where(d => d.IdData == Convert.ToDecimal(id)).FirstOrDefault().Active = true; dopravnaSietContext.SaveChanges(); data = dopravnaSietContext.Data.Where(d => d.Active == true).FirstOrDefault(); } if (data != null) { PrepareData.PrepareNodesGraph(data); PrepareData.PrepareDisabledMovementGraph(); } return(true); }
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)); }
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); app.UseWebpackDevMiddleware(new WebpackDevMiddlewareOptions { HotModuleReplacement = true }); } else { app.UseExceptionHandler("/Home/Error"); } app.UseStaticFiles(); app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); routes.MapSpaFallbackRoute( name: "spa-fallback", defaults: new { controller = "Home", action = "Index" }); }); Models.Data data; using (GraphContext dopravnaSietContext = new GraphContext()) { data = dopravnaSietContext.Data.Where(d => d.Active == true).FirstOrDefault(); if (data == null && dopravnaSietContext.Data.Count() > 0) { data = dopravnaSietContext.Data.First(); } } if (data != null) { long memBefore = GC.GetTotalMemory(true); var watch = Stopwatch.StartNew(); PrepareData.PrepareNodesGraph(data); watch.Stop(); long memAfter = GC.GetTotalMemory(true); Utils.GraphTime = watch.Elapsed; Utils.GraphMemory = memAfter - memBefore; memBefore = GC.GetTotalMemory(true); watch = Stopwatch.StartNew(); PrepareData.PrepareDisabledMovementGraph(); watch.Stop(); memAfter = GC.GetTotalMemory(true); Utils.DisabledGraphTime = Utils.GraphTime + watch.Elapsed; Utils.DisabledGraphMemory = Utils.GraphMemory + memAfter - memBefore; //TimeSpan time; //double lat, lon; //Random random = new Random(); //double maximumLat = data.MaxLat, minimumLat = data.MinLat; //double maximumLon = data.MaxLon, minimumLon = data.MinLon; //for (int i = 0; i < 1000; i++) //{ // lat = random.NextDouble() * (maximumLat - minimumLat) + minimumLat; // lon = random.NextDouble() * (maximumLon - minimumLon) + minimumLon; // watch = Stopwatch.StartNew(); // var startNode = PrepareData.NodesGraph.OrderBy(n1 => (Utils.Distance(n1.Key.Lat, // n1.Key.Lon, // lat, // lon) // )).First(); // watch.Stop(); // time += watch.Elapsed; //} //var timeAverage = time / 1000; //System.Device.Location.GeoCoordinate coord; //for (int i = 0; i < 1000; i++) //{ // lat = random.NextDouble() * (maximumLat - minimumLat) + minimumLat; // lon = random.NextDouble() * (maximumLon - minimumLon) + minimumLon; // coord = new System.Device.Location.GeoCoordinate(lat, lon); // watch = Stopwatch.StartNew(); // var startNode = PrepareData.NodesGraph.Select(x => new System.Device.Location.GeoCoordinate(x.Key.Lat, x.Key.Lon)) // .OrderBy(x => x.GetDistanceTo(coord)) // .First(); // watch.Stop(); // time += watch.Elapsed; //} //var timeAverageOrdered = time / 1000; // 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(); // 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.NodesGraph); // 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]; // TimeSpan[] CasVypoctu = new TimeSpan[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; // TimeSpan CasVypoctuA = new TimeSpan(); // 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++; // } // } //} //private void AfterCalculateShortestPath(NodeGraphDTO nodeCon, TimeSpan time, RoutesDTO routes) //{ // if (nodeCon == null) // return; // NodeGraphDTO node = nodeCon; // LinkedList<NodeLocationDTO> nodeRoute = new LinkedList<NodeLocationDTO>(); // while (node != null) // { // nodeRoute.AddLast(new NodeLocationDTO() // { // Lat = node.Node.Lat, // Lon = node.Node.Lon // }); // node = node.PreviousNode; // } // RouteDTO route = new RouteDTO() // { // PocetHranCesty = nodeRoute.Count, // PocetSpracovanychVrcholov = Utils.PocetSpracovanychVrcholov, // DlzkaCesty = nodeCon.CurrentDistance / 1000, // CasVypoctu = time // }; // routes.Route.AddLast(route); //} //private void AfterCalculateShortestPathDuplex(NodeGraphDTO nodeCon, TimeSpan time, RoutesDTO routes) //{ // if (nodeCon == null) // return; // NodeGraphDTO node = nodeCon; // LinkedList<NodeLocationDTO> nodeRoute = new LinkedList<NodeLocationDTO>(); // while (node != null) // { // nodeRoute.AddLast(new NodeLocationDTO() // { // Lat = node.Node.Lat, // Lon = node.Node.Lon // }); // node = node.PreviousNode; // } // node = nodeCon != null ? nodeCon.PreviousNodeR : null; // while (node != null) // { // nodeRoute.AddFirst(new NodeLocationDTO() // { // Lat = node.Node.Lat, // Lon = node.Node.Lon // }); // node = node.PreviousNodeR; // } // RouteDTO route = new RouteDTO() // { // PocetHranCesty = nodeRoute.Count, // PocetSpracovanychVrcholov = Utils.PocetSpracovanychVrcholov, // DlzkaCesty = nodeCon.CurrentDistance / 1000, // CasVypoctu = time // }; // routes.Route.AddLast(route); } }