private static void CollectLines() { int lid = 0; foreach (SubwayLine sl in subwayMap.Lines) { LineStations.Add(new List <int>()); LineId[sl.Name] = lid; int lastStationId = -1; foreach (string stationName in sl.Path) { int sid = StationId[stationName]; LineStations[lid].Add(sid); if (!StationLines[sid].Contains(lid)) { StationLines[sid].Add(lid); } if (lastStationId != -1) { RouteSet.Add(new Tuple <int, int>(lastStationId, sid)); RouteSet.Add(new Tuple <int, int>(sid, lastStationId)); } lastStationId = sid; } lid++; } }
public RouteSet Solve(string folderPath, RouteSet solution) { RouteSet newSolution = new RouteSet(); for (int i = 0; i < solution.Count; i++) { if (solution[i].IsEmpty) { continue; } string routePath = Path.Combine(folderPath, i.ToString()); DirectoryInfo routeDir = Directory.CreateDirectory(routePath); int[] mapping = GenerateDataFile(routePath, solution[i]); templete = GAMSTemplate.VRPSPD_RouteOptimal; GenerateSolverFile(routePath); Execute(routePath); Route newRoute = ParseGamsSolution(routePath, mapping, solution[i]); newSolution.Add(newRoute); } return(newSolution); }
private Tuple <RouteSet, List <int> > BuildOverlappedSolution(List <Tuple <Route, double> > coveringSelection) { coveringSelection.Sort((x, y) => - 1 * x.Item2.CompareTo(y.Item2)); bool[] included = new bool[ProblemData.Clients.Count + 1];/*numeracion de los clientes comienza en 1 para n tener q estar restando 1 en las verificaciones*/ int toInclude = ProblemData.Clients.Count; List <int> overlapped = new List <int>(); RouteSet overSolution = new RouteSet(); int routeIndex = 0; do { bool newIncluded = false; List <int> newOverlapped = new List <int>(); foreach (var c in coveringSelection[routeIndex].Item1) { if (!included[c]) { included[c] = true; newIncluded = true; toInclude--; } else { newOverlapped.Add(c); } } if (newIncluded) { overSolution.Add(coveringSelection[routeIndex].Item1); overlapped.AddRange(newOverlapped); } routeIndex++; }while (toInclude > 0); return(new Tuple <RouteSet, List <int> >(overSolution, overlapped)); }
public virtual void AddRoute(IRoute route) { _routes.Add((Route)route, ((Route)route).AddShape); }
public virtual void AddRoute(IRoute route) { _routes.Add((Route)route, ((Route)route).AddProduct); }