public ActionResult FindRoute() { FindRouteViewModel emptyModel = new FindRouteViewModel(); emptyModel.GARoute = new List <Node>(); emptyModel.CWRoute = new List <Node>(); ManageFile mf = new ManageFile(); List <Node> allAddressList = mf.GetNodes(Server.MapPath("~/Files/Rzeszow_Addresses.json")); TempData["AllAddresses"] = allAddressList; return(View(emptyModel)); }
public ActionResult FindRoute(FindRouteViewModel findRouteVM, string speed) { Graph basedGraph = new Graph(Server.MapPath("~/Files/Rzeszow_AdjacencyList.json"), Server.MapPath("~/Files/Rzeszow_Nodes.json")); Graph vrpGraph = new Graph(); FindRouteBusinessLayer findRouteBL = new FindRouteBusinessLayer(); List <int> addressArrayIndexList = new List <int>(); //indeksy adresów w grafie bazowym FindRouteBusinessLayer.CompleteGraphAndDijPaths completeGraphAndDijPaths = new FindRouteBusinessLayer.CompleteGraphAndDijPaths(); List <Route> vrpPathMemoryList = new List <Route>(); GeneticAlgorithm ga; ClarkeAndWrightAlgorithm clarkeWright; Chromosome gaResult; List <int> clarkeWrightResult; List <Node> gaResultNodeList, cwResultNodeList; Route gaFullResult, cwFullResult; ManageFile mf = new ManageFile(); List <Node> allAddressList = mf.GetNodes(Server.MapPath("~/Files/Rzeszow_Addresses.json")); List <Node> destinationList = new List <Node>(); //validation for (int i = 0; i < findRouteVM.AddressList.Count(); i++) { if (!findRouteBL.ValidAddress(findRouteVM.AddressList[i].StreetName, findRouteVM.AddressList[i].HouseNumber, allAddressList)) { ModelState.AddModelError(string.Empty, "Adres " + findRouteVM.AddressList[i].StreetName + " " + findRouteVM.AddressList[i].HouseNumber + " nie został odnaleziony"); return(View(findRouteVM)); } else { Node destination = allAddressList.Where(x => x.dict["addr:street"].Equals(findRouteVM.AddressList[i].StreetName) && x.dict["addr:housenumber"].Equals(findRouteVM.AddressList[i].HouseNumber)).First(); destinationList.Add(destination); } } basedGraph.ConnectAddressesToGraph(destinationList); for (int i = 0; i < findRouteVM.AddressList.Count(); i++) { addressArrayIndexList.Add(basedGraph.NodeList.Where(n => n.dict.ContainsKey("addr:housenumber") && n.dict["addr:street"] == findRouteVM.AddressList[i].StreetName && n.dict["addr:housenumber"] == findRouteVM.AddressList[i].HouseNumber).First().ArrayIndex); } completeGraphAndDijPaths = findRouteBL.CreateCompleteGraph(basedGraph, addressArrayIndexList, double.Parse(speed.Replace(".", ","))); vrpGraph = completeGraphAndDijPaths.Graph; vrpPathMemoryList = completeGraphAndDijPaths.PathMemoryList; //mf.SaveAdjacencyList(completeGraphAndDijPaths.Graph.Edges); //mf.SaveNodes(completeGraphAndDijPaths.Graph.NodeList); //mf.SavePathMemory(completeGraphAndDijPaths.PathMemoryList); ga = new GeneticAlgorithm(vrpGraph); clarkeWright = new ClarkeAndWrightAlgorithm(vrpGraph); gaResult = ga.Main().Last(); gaResult.NodeIndexList.Add(gaResult.NodeIndexList[0]); clarkeWrightResult = clarkeWright.Main(); gaResultNodeList = findRouteBL.ConvertSolution(gaResult.NodeIndexList, vrpGraph); cwResultNodeList = findRouteBL.ConvertSolution(clarkeWrightResult, vrpGraph); gaFullResult = findRouteBL.CreateFullRoute(gaResultNodeList, vrpPathMemoryList); cwFullResult = findRouteBL.CreateFullRoute(cwResultNodeList, vrpPathMemoryList); findRouteVM.GARouteCost = gaFullResult.Cost; findRouteVM.CWRouteCost = cwFullResult.Cost; findRouteVM.GARouteCost = Math.Round(findRouteVM.GARouteCost, 3); findRouteVM.CWRouteCost = Math.Round(findRouteVM.CWRouteCost, 3); //display full result findRouteVM.GARoute = gaFullResult.Path; findRouteVM.CWRoute = cwFullResult.Path; return(View(findRouteVM)); }