コード例 #1
0
        public void RouteCacheTestDifferentRanges()
        {
            var sw = new Stopwatch();

            DataSetup();
            RouteFinder.ClearCache();

            var rf1 = new RouteFinder();

            rf1.JumpRange = 30.0F;
            sw.Start();
            rf1.Route(EDSystemManager.Instance.Find("HIP 41181"), EDSystemManager.Instance.Find("Vamm"));
            sw.Stop();
            var uncachedTime = sw.ElapsedTicks;

            Assert.AreEqual(false, rf1.LastResultWasFromCache);

            var rf2 = new RouteFinder();

            rf2.JumpRange = 40F;
            sw.Reset();
            sw.Start();
            rf2.Route(EDSystemManager.Instance.Find("HIP 41181"), EDSystemManager.Instance.Find("Vamm"));
            sw.Stop();
            var cachedTime = sw.ElapsedTicks;

            Assert.AreEqual(false, rf2.LastResultWasFromCache);
        }
コード例 #2
0
        public void ComputesEdgeDistanceWithInnerWaypointsCorrectly()
        {
            var w0 = new Waypoint("0", 0.0, 0.0);
            var w1 = new Waypoint("1", 1.0, 1.0);
            var w2 = new Waypoint("2", 1.0, -0.9999);
            var w3 = new Waypoint("3", 0.0, 2.0);

            var wptList = GetWptList(w0, w1, w2, w3);
            int i0      = wptList.FindByWaypoint(w0);
            int i1      = wptList.FindByWaypoint(w1);
            int i2      = wptList.FindByWaypoint(w2);
            int i3      = wptList.FindByWaypoint(w3);
            var n       = new Neighbor(
                "03",
                new[] { w0, w1, w2 }.TotalDistance(),
                new[] { w1 }, InnerWaypointsType.Track);

            wptList.AddNeighbor(i0, i2, n);
            wptList.AddNeighbor(i0, "02", i2);
            wptList.AddNeighbor(i2, "23", i3);

            var route = new RouteFinder(wptList).FindRoute(i0, i3);

            var expected = GetRoute(
                w0, "02", -1.0,
                w2, "23", -1.0,
                w3);

            Assert.IsTrue(expected.Equals(route));
        }
コード例 #3
0
        public void CanAvoidCountry()
        {
            var w1 = new Waypoint("1", 0.0, 1.0);
            var w2 = new Waypoint("2", 0.0, 2.0, 0);
            var w3 = new Waypoint("3", 5.0, 2.0, 1);
            var w4 = new Waypoint("4", 0.0, 3.0);

            var wptList = GetWptList(w1, w2, w3, w4);
            int i1      = wptList.FindByWaypoint(w1);
            int i2      = wptList.FindByWaypoint(w2);
            int i3      = wptList.FindByWaypoint(w3);
            int i4      = wptList.FindByWaypoint(w4);

            wptList.AddNeighbor(i1, "12", i2);
            wptList.AddNeighbor(i1, "13", i3);
            wptList.AddNeighbor(i2, "24", i4);
            wptList.AddNeighbor(i3, "34", i4);

            var avoid = new CountryCodeCollection(new[] { 0 });
            var route = new RouteFinder(wptList, avoid).FindRoute(i1, i4);

            var expected = GetRoute(
                w1, "13", -1.0,
                w3, "34", -1.0,
                w4);

            Assert.IsTrue(expected.Equals(route));
        }
コード例 #4
0
        private static TestScenarioRunner CreateTestScenarioRunner(List <ConnectedStations> connectedStations)
        {
            var distanceCalculator = new SpecificRouteDistanceCalculator(connectedStations);
            var routesFinder       = new RouteFinder(connectedStations);
            var testScenarioRunner = new TestScenarioRunner(Console.Out, distanceCalculator, routesFinder);

            return(testScenarioRunner);
        }
コード例 #5
0
        private static void AssertPathFromMap(
            string[] map, Vector from, Vector to, IEnumerable <Vector> expected)
        {
            var result = RouteFinder.FindRoute(
                from, to, vector => IsValidMove(map, vector));

            AssertPath(expected, result);
        }
コード例 #6
0
        static void Main(string[] args)
        {
            const string path   = "../data1.txt";
            var          finder = new RouteFinder();
            var          route  = finder.FindNumericalRouteFromFile(path);

            Console.WriteLine(route);
            Console.WriteLine($"Sum: {route.Steps.Sum()}");
        }
コード例 #7
0
        public void RouteFinder_Should_Call_RouteExplorer()
        {
            // Arrange
            var startPoint = this.pointA;
            var endPoint   = this.pointD;

            var routes = new List <Path>
            {
                new Path {
                    Id = 1, PointOne = this.pointA, PointTwo = this.pointB, Distance = 1
                },
                new Path {
                    Id = 2, PointOne = this.pointB, PointTwo = this.pointC, Distance = 4
                },
                new Path {
                    Id = 3, PointOne = this.pointC, PointTwo = this.pointD, Distance = 3
                },
                new Path {
                    Id = 4, PointOne = this.pointA, PointTwo = this.pointD, Distance = 20
                }
            };

            var expected = new List <Route>
            {
                new Route()
                {
                    Paths = new List <Path>()
                }
            };


            var mockRouteExplorer = new Mock <IRouteExplorer>();

            mockRouteExplorer
            .Setup(x => x.GetAllPossibleRoutes(It.IsAny <List <Path> >(), It.IsAny <Point>(), It.IsAny <Point>()))
            .Returns(expected);

            var mockShortestRouteFinder = new Mock <IShortestRouteFinder>();

            var mockShortestRouteFinderResult = new Route();

            var mockRouteValidator = new Mock <IRouteValidator>();

            mockShortestRouteFinder
            .Setup(x => x.GetShortestRoute(expected))
            .Returns(mockShortestRouteFinderResult);

            var routeFinder = new RouteFinder(mockRouteExplorer.Object, mockShortestRouteFinder.Object, new DatabaseReader(), mockRouteValidator.Object);

            // Act
            var result = routeFinder.CalculateShortestRoute(startPoint, endPoint);

            // Assert
            mockRouteExplorer.Verify(x => x.GetAllPossibleRoutes(routes, startPoint, endPoint), Times.Once);
            mockShortestRouteFinder.Verify(x => x.GetShortestRoute(expected), Times.Once);
            mockShortestRouteFinderResult.Should().Be(result);
        }
コード例 #8
0
        public void MultiRouteTestThreeRoutes()
        {
            //multiroute from="39 leonis" route="hip 41181,vamm,tocorii" route="bd+34 1378,hip 11693" route="lugh,brohman" jump=30
            DataSetup();
            var mr = new MultiRouteFinder();

            mr.JumpRange = 30.0F;

            var start  = EDSystemManager.Instance.Find("39 leonis");
            var routes = new List <Queue <EDSystem> >();

            var routeA = new Queue <EDSystem>();

            routeA.Enqueue(EDSystemManager.Instance.Find("hip 41181"));
            routeA.Enqueue(EDSystemManager.Instance.Find("vamm"));
            routeA.Enqueue(EDSystemManager.Instance.Find("tocorii"));
            routes.Add(routeA);

            var routeB = new Queue <EDSystem>();

            routeB.Enqueue(EDSystemManager.Instance.Find("bd+34 1378"));
            routeB.Enqueue(EDSystemManager.Instance.Find("hip 11693"));
            routes.Add(routeB);

            var routeC = new Queue <EDSystem>();

            routeC.Enqueue(EDSystemManager.Instance.Find("lugh"));
            routeC.Enqueue(EDSystemManager.Instance.Find("brohman"));
            routes.Add(routeC);

            var finalRoute = mr.Route(start, routes);

            Assert.AreEqual(9, finalRoute.Count());

            int         i    = 0;
            EDSystem    prev = null;
            RouteFinder r    = new RouteFinder();

            r.JumpRange = 30;

            while (finalRoute.Count() > 0)
            {
                var dest = finalRoute.Dequeue();
                Console.Write($"{i} {dest.name}");
                if (prev != null)
                {
                    var distance = Astrogation.Distance(prev, dest);
                    var jumps    = r.Route(prev, dest).Count();
                    Console.Write($" ({distance:n1} LY, {jumps:n0} jumps)");
                }
                Console.WriteLine();

                prev = dest;
                i++;
            }
        }
コード例 #9
0
        public void Given_a_route_of_B_to_B_then_return_the_shortest_distance_available_to_travel()
        {
            var routingData = TestData.ConnectedStations;

            var routesFinder = new RouteFinder(routingData);

            var distance = routesFinder.GetShortestRoute("B", "B").TotalDistance;

            Assert.That(distance, Is.EqualTo(9));
        }
コード例 #10
0
        public void Given_a_route_of_A_to_C_then_return_the_number_of_routes_with_exactly_4_stops()
        {
            var routingData = TestData.ConnectedStations;

            var routesFinder = new RouteFinder(routingData);

            var numberOfRoutes = routesFinder.GetRoutes("A", "C").WithExactStops(4).Count();

            Assert.That(numberOfRoutes, Is.EqualTo(3));
        }
コード例 #11
0
        public void OriginDestinationWaypointsTheSameShouldThrow()
        {
            var w = new Waypoint("1", 0.0, 1.0);

            var wptList = GetWptList(w);
            int i       = wptList.FindByWaypoint(w);
            var finder  = new RouteFinder(wptList);

            Assert.Throws <ArgumentException>(() => finder.FindRoute(i, i));
        }
コード例 #12
0
        public void Given_a_route_of_C_to_C_then_return_the_number_of_routes_with_a_distance_less_than_30()
        {
            var routingData = TestData.ConnectedStations;

            var routesFinder = new RouteFinder(routingData);

            var numberOfRoutes = routesFinder.GetRoutes("C", "C").WithADistanceLessThan(30).Count();

            Assert.That(numberOfRoutes, Is.EqualTo(7));
        }
コード例 #13
0
        public void RouteTest()
        {
            DataSetup();
            var j = new RouteFinder();

            j.JumpRange = 30.0F;
            var route = j.Route(EDSystemManager.Instance.Find("Olgrea"), EDSystemManager.Instance.Find("Te Kaha"));

            Assert.AreEqual(8, route.Count());
        }
コード例 #14
0
        public void RouteTest2()
        {
            DataSetup();
            var j = new RouteFinder();

            j.JumpRange = 30.0F;
            var route = j.Route(EDSystemManager.Instance.Find("HIP 41181"), EDSystemManager.Instance.Find("Vamm"));

            Assert.AreEqual(6, route.Count());
        }
コード例 #15
0
        public void Given_a_route_of_C_to_C_then_return_the_number_of_routes_with_no_more_than_3_stops()
        {
            var routingData = TestData.ConnectedStations;

            var routesFinder = new RouteFinder(routingData);

            var numberOfRoutes = routesFinder.GetRoutes("C", "C").WithMaxStops(3).Count();

            Assert.That(numberOfRoutes, Is.EqualTo(2));
        }
コード例 #16
0
        public async Task <IActionResult> GetRoute(string originStationName, string destinationStationName, TimeSpan leavingAfter, string primaryStations)
        {
            RouteFinder  routeFinder = new RouteFinder(_context);
            List <Train> trains      = routeFinder.GetTrains(originStationName, destinationStationName, leavingAfter);

            ViewBag.originStationName      = originStationName;
            ViewBag.destinationStationName = destinationStationName;
            ViewBag.primaryStations        = primaryStations;
            return(View(trains));
            //return View(ticket);
        }
コード例 #17
0
        public void FindRouteNoWalls()
        {
            var result = RouteFinder.FindRoute(
                Vector.Create(1, 1), Vector.Create(1, 3), vector => true);

            Assert.IsTrue(result.HasValue);

            AssertPath(
                new [] { Vector.Create(1, 2), Vector.Create(1, 3) },
                result);
        }
コード例 #18
0
        public void RouteTestNoSystemsInRange()
        {
            // You can't get from Olgrea to Sheela Na Gig with 5LY jumps, it is 6.597303LY
            DataSetup();
            var j = new RouteFinder();

            j.JumpRange = 5;
            var route = j.Route(EDSystemManager.Instance.Find("Olgrea"), EDSystemManager.Instance.Find("Sheela Na Gig"));

            Assert.AreEqual(0, route.Count());
        }
コード例 #19
0
        /// <summary>
        /// Creates new Twino MVC
        /// </summary>
        public TwinoMvc()
        {
            Routes            = new List <RouteLeaf>();
            Services          = new ServiceContainer();
            RouteFinder       = new RouteFinder();
            ControllerFactory = new ControllerFactory();
            NotFoundResult    = StatusCodeResult.NotFound();
            ErrorHandler      = new DefaultErrorHandler();
            Policies          = new PolicyContainer();

            AppBuilder = new MvcAppBuilder(this);
        }
コード例 #20
0
        public void TestFindRouteWhenMaxDepthReached()
        {
            RouteFinder limitedRouteFinder = Factory.CreateMockedRouteFinder(2);

            Flight[] route = limitedRouteFinder.FindRouteAsync("LINE_1", "LINE_4", CancellationToken.None).Result;
            Assert.IsNotNull(route);
            Assert.AreEqual(0, route.Length);

            route = routeFinder.FindRouteAsync("LINE_1", "LINE_4", CancellationToken.None).Result;
            Assert.IsNotNull(route);
            Assert.AreNotEqual(0, route.Length);
        }
コード例 #21
0
        /// <summary>
        /// Find optimal running route through cougar
        /// </summary>
        /// <param name="geometry"></param>
        private static void RunCougarFinder(Geometry geometry)
        {
            geometry = new DropBuildings().Transform(geometry);
            geometry = new DropWater().Transform(geometry);

            OutputPolygons("275765", geometry);

            geometry = new OnlyTraversable().Transform(geometry);
            geometry = new CollapseParkingLots().Transform(geometry);
            var cougar = geometry.Relations.First(x => x.Id == "275765");
            var ways   = new LabelWaysInRelation().Transform(cougar, geometry);

            ways = new SplitBisectedWays().Transform(ways);
            DebugOut(ways, "labeledWays.json");

            var targetNodes = new HashSet <Node>();

            foreach (var way in ways)
            {
                if (way.Tags["rfInPolygon"] == "in")
                {
                    targetNodes.Add(way.Nodes.First());
                    targetNodes.Add(way.Nodes.Last());
                }
            }

            var graph = new GraphBuilder(new RequiredEdgeGraphFilter(), new ReasonablyEnjoyableRunningCost()).BuildGraph(ways.ToArray(), out var originalEdgeWays);

            new GraphSummaryOutputter(outputLocation).OutputGraph(graph, originalEdgeWays, "reducedGraph.json");

            var requiredCost = graph.RequiredEdgeCost();

            // lazy route
            var lazyRouteFinder = new RouteFinder <Node>(new LazyGraphAugmenter <Node>());
            var lazyRoute       = lazyRouteFinder.GetRoute(graph);
            var lazyRouteCost   = lazyRoute.Select(x => x.Distance).Sum();

            // do regular route (rebuilds graph)
            graph = new GraphBuilder(new RequiredEdgeGraphFilter(), new ReasonablyEnjoyableRunningCost()).BuildGraph(ways.ToArray(), out originalEdgeWays);
            var greedRouteFinder = new RouteFinder <Node>(new GreedyGraphAugmenter <Node>());
            var route            = greedRouteFinder.GetRoute(graph);

            var routeCost = route.Select(x => x.Distance).Sum();

            //new RouteCoverageOutputter(outputLocation).OutputGraph(route, originalEdgeWays, "greedyRouteCoverage.json");

            new RouteDetailOutputter(ways, outputLocation, "lazyRouteCoverage.json", "instructions.txt").DescribeRoutesAsWays(lazyRoute);

            Console.WriteLine($"Required running: {requiredCost}");
            Console.WriteLine($"Lazy Route: {lazyRouteCost}");
            Console.WriteLine($"Greedy Route: {routeCost}");
            Console.Read();
        }
        public ActionResult <BusScheduleInfo> GetSchedule([FromQuery] string from, string to, string start)
        {
            var         data      = reader.ReadBusScheduleAsync();
            var         routes    = parser.ParseBusSchedule(data.Result);
            RouteFinder finder    = new RouteFinder(routes);
            var         routeInfo = finder.FindRoute(from, to, start);

            if (routeInfo == null)
            {
                return(NotFound());
            }
            return(Ok(routeInfo));
        }
コード例 #23
0
        /// <exception cref="RouteNotFoundException"></exception>
        /// <exception cref="ArgumentException"></exception>
        private Route GetRouteWaypointToWaypoint()
        {
            EnsureOrigWptExists();
            EnsureDestWptExists();

            var fuelModel = model.FuelPlanningModel;

            var finder = new RouteFinder(
                fuelModel.AirwayNetwork.WptList,
                fuelModel.CheckedCountryCodes.Instance,
                model.WindCalc());

            return(finder.FindRoute(OrigWaypointIndex, DestWaypointIndex));
        }
コード例 #24
0
        public void SameStations()
        {
            StationEntity fromStation = MetroWebEntity.Instance.StationList["宜山路", "4号线"];
            StationEntity toStation   = MetroWebEntity.Instance.StationList["宝山路", "3号线"];

            finder = new RouteFinder();
            Tuple <List <StationLineEntity>, TimeSpan> result1 = finder.GetTheNearestRouteBetween(fromStation, toStation);

            Assert.AreEqual(10, result1.Item1.Count);

            Tuple <List <StationLineEntity>, TimeSpan> result2 = finder.GetTheNearestRouteBetween(toStation, fromStation);

            Assert.AreEqual(10, result2.Item1.Count);
        }
コード例 #25
0
        public void ComplexTransfer()
        {
            StationEntity fromStation = MetroWebEntity.Instance.StationList["东川路", "5号线"];
            StationEntity toStation   = MetroWebEntity.Instance.StationList["北洋泾路", "6号线"];

            finder = new RouteFinder();
            Tuple <List <StationLineEntity>, TimeSpan> result1 = finder.GetTheNearestRouteBetween(fromStation, toStation);

            Assert.AreEqual(26, result1.Item1.Count);

            finder = new RouteFinder();
            Tuple <List <StationLineEntity>, TimeSpan> result2 = finder.GetTheNearestRouteBetween(toStation, fromStation);

            Assert.AreEqual(25, result2.Item1.Count);
        }
コード例 #26
0
        public void GetTwoStationsALittleFar()
        {
            StationEntity fromStation = MetroWebEntity.Instance.StationList["临港大道", "16号线"];
            StationEntity toStation   = MetroWebEntity.Instance.StationList["惠南东", "16号线"];

            finder = new RouteFinder();
            Tuple <List <StationLineEntity>, TimeSpan> result1 = finder.GetTheNearestRouteBetween(fromStation, toStation);

            Assert.AreEqual(3, result1.Item1.Count);

            finder = new RouteFinder();
            Tuple <List <StationLineEntity>, TimeSpan> result2 = finder.GetTheNearestRouteBetween(toStation, fromStation);

            Assert.AreEqual(3, result2.Item1.Count);
        }
コード例 #27
0
        public void TwoStationNeedTransfer()
        {
            StationEntity fromStation = MetroWebEntity.Instance.StationList["杨高中路", "9号线"];
            StationEntity toStation   = MetroWebEntity.Instance.StationList["东昌路", "2号线"];

            finder = new RouteFinder();
            Tuple <List <StationLineEntity>, TimeSpan> result1 = finder.GetTheNearestRouteBetween(fromStation, toStation);

            Assert.AreEqual(3, result1.Item1.Count);

            finder = new RouteFinder();
            Tuple <List <StationLineEntity>, TimeSpan> result2 = finder.GetTheNearestRouteBetween(toStation, fromStation);

            Assert.AreEqual(3, result2.Item1.Count);
        }
コード例 #28
0
        public void MultiRouteTest()
        {
            DataSetup();
            var mr = new MultiRouteFinder();

            mr.JumpRange = 30.0F;

            var start  = EDSystemManager.Instance.Find("Olgrea");
            var routes = new List <Queue <EDSystem> >();

            var routeA = new Queue <EDSystem>();

            routeA.Enqueue(EDSystemManager.Instance.Find("Te Kaha"));
            routeA.Enqueue(EDSystemManager.Instance.Find("Cao Junga"));
            routes.Add(routeA);

            var routeB = new Queue <EDSystem>();

            routeB.Enqueue(EDSystemManager.Instance.Find("Carnsan"));
            routeB.Enqueue(EDSystemManager.Instance.Find("HIP 13179"));
            routes.Add(routeB);

            var finalRoute = mr.Route(start, routes);

            Assert.AreEqual(6, finalRoute.Count());

            int         i    = 0;
            EDSystem    prev = null;
            RouteFinder r    = new RouteFinder();

            r.JumpRange = 30;

            while (finalRoute.Count() > 0)
            {
                var dest = finalRoute.Dequeue();
                Console.Write($"{i} {dest.name}");
                if (prev != null)
                {
                    var distance = Astrogation.Distance(prev, dest);
                    var jumps    = r.Route(prev, dest).Count();
                    Console.Write($" ({distance:n1} LY, {jumps:n0} jumps)");
                }
                Console.WriteLine();

                prev = dest;
                i++;
            }
        }
コード例 #29
0
        private void btnFindRoute_Click(object sender, EventArgs e)
        {
            RouteFinder routeFinder = new RouteFinder(0, 0, width - 1, height - 1, chbCanMoveDiagonally.Checked);

            int countInitialLocations = 0;
            int countGoalLocations    = 0;

            for (int i = 0; i < pnlMAP.Controls.Count; i++)
            {
                int x = i % width;
                int y = i / width;

                Location loc = new Location(x, y);

                switch ((string)pnlMAP.Controls[i].Tag)
                {
                case initialTag:
                    countInitialLocations++;
                    if (countInitialLocations > 1)
                    {
                        MessageBox.Show("There cannot be more than one initial location.", this.Text);
                        return;
                    }
                    routeFinder.InitialLocation = loc;
                    break;

                case obstacleTag:
                    routeFinder.AddObstacle(loc);
                    break;

                case goalTag:
                    countGoalLocations++;
                    routeFinder.AddGoal(loc);
                    break;

                case routeTag:
                    MakeEmpty(pnlMAP.Controls[i] as Button);
                    break;
                }
            }

            if (countGoalLocations == 0)
            {
                MessageBox.Show("There must be atleast one goal location.", this.Text);
            }

            DisplayRoute(routeFinder.CalculateRoute());
        }
コード例 #30
0
        public void Should_try_a_similar_route_after_exhausting_one_path()
        {
            var routingData = new List <ConnectedStations>
            {
                new ConnectedStations("A", "C", 5),
                new ConnectedStations("C", "A", 4),
                new ConnectedStations("C", "E", 5),
                new ConnectedStations("E", "A", 3)
            };

            var routesFinder = new RouteFinder(routingData);

            var routes = routesFinder.GetRoutes("A", "A");

            Assert.True(routes.Any(r => OutputRouteAsString(r) == "ACCEEA"));
        }