示例#1
0
文件: Map.cs 项目: lytning98/subway
        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++;
            }
        }
示例#2
0
        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);
        }
示例#3
0
        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));
        }
示例#4
0
 public virtual void AddRoute(IRoute route)
 {
     _routes.Add((Route)route, ((Route)route).AddShape);
 }
示例#5
0
 public virtual void AddRoute(IRoute route)
 {
     _routes.Add((Route)route, ((Route)route).AddProduct);
 }