itinero / routing

The routing core of itinero.
Apache License 2.0
221 stars 69 forks source link

TSP Calculation never ends. #23

Closed t22dk closed 7 years ago

t22dk commented 7 years ago

Hi.

And first thanks for a great lib.

I am using the newest versions, but have found a strange problem.

When i try to calculate old routes i have calculated with the old OSM, it often never gets done, and ends up eating on core 100%.

I have one example where i can calculate Car.Fastest, but can't calculate Car.Shortest. Its a real world problem, with about 80 coordinates.

You will need to download Dennark latest PBF from geofabrik

I have boiled the code down, so it should be easy to test

var routerDb = new RouterDb();            
using (var stream = new FileInfo(@"C:\projects\denmark-latest.osm.pbf").OpenRead())
            {
                routerDb.LoadOsmData(stream, Vehicle.Car);
            }
            routerDb.AddContracted(Vehicle.Car.Fastest());

            routerDb.AddContracted(Vehicle.Car.Shortest());

            string s4 = @"[{""Latitude"":56.83594,""Longitude"":9.892321},{""Latitude"":56.8364334,""Longitude"":9.893671},{""Latitude"":56.83575,""Longitude"":9.897157},{""Latitude"":56.8366432,""Longitude"":9.897596},{""Latitude"":56.8411942,""Longitude"":9.893644},{""Latitude"":56.841198,""Longitude"":9.893381},{""Latitude"":56.840332,""Longitude"":9.894851},{""Latitude"":56.84137,""Longitude"":9.894486},{""Latitude"":56.8467026,""Longitude"":9.893471},{""Latitude"":56.8356934,""Longitude"":9.894123},{""Latitude"":56.83976,""Longitude"":9.892929},{""Latitude"":56.8466034,""Longitude"":9.890909},{""Latitude"":56.84808,""Longitude"":9.889342},{""Latitude"":56.8480568,""Longitude"":9.890528},{""Latitude"":56.8458252,""Longitude"":9.892798},{""Latitude"":56.8400841,""Longitude"":9.897129},{""Latitude"":56.8402939,""Longitude"":9.896277},{""Latitude"":56.8382568,""Longitude"":9.889414},{""Latitude"":56.84863,""Longitude"":9.892876},{""Latitude"":56.84911,""Longitude"":9.893261},{""Latitude"":56.8357925,""Longitude"":9.89249},{""Latitude"":56.8355331,""Longitude"":9.892851},{""Latitude"":56.8474464,""Longitude"":9.897422},{""Latitude"":56.8468857,""Longitude"":9.898289},{""Latitude"":56.8478622,""Longitude"":9.89764},{""Latitude"":56.847332,""Longitude"":9.901165},{""Latitude"":56.8474,""Longitude"":9.901197},{""Latitude"":56.8394547,""Longitude"":9.891264},{""Latitude"":56.8479767,""Longitude"":9.891469},{""Latitude"":56.84936,""Longitude"":9.890043},{""Latitude"":56.8500862,""Longitude"":9.889094},{""Latitude"":56.83994,""Longitude"":9.890279},{""Latitude"":56.8397522,""Longitude"":9.890254},{""Latitude"":56.8348045,""Longitude"":9.898626},{""Latitude"":56.8348236,""Longitude"":9.899044},{""Latitude"":56.86525,""Longitude"":9.887581},{""Latitude"":56.8658562,""Longitude"":9.887463},{""Latitude"":56.840168,""Longitude"":9.894201},{""Latitude"":56.8367844,""Longitude"":9.894537},{""Latitude"":56.841713,""Longitude"":9.895949},{""Latitude"":56.8443375,""Longitude"":9.893155},{""Latitude"":56.84244,""Longitude"":9.8935},{""Latitude"":56.84259,""Longitude"":9.893135},{""Latitude"":56.8432159,""Longitude"":9.89616},{""Latitude"":56.8428574,""Longitude"":9.89318752},{""Latitude"":56.84315,""Longitude"":9.897785},{""Latitude"":56.8427467,""Longitude"":9.89635},{""Latitude"":56.8455429,""Longitude"":9.88911152},{""Latitude"":56.845623,""Longitude"":9.88909149},{""Latitude"":56.84445,""Longitude"":9.890661},{""Latitude"":56.84418,""Longitude"":9.8895},{""Latitude"":56.84093,""Longitude"":9.890483},{""Latitude"":56.8392372,""Longitude"":9.894662},{""Latitude"":56.8659668,""Longitude"":9.889367},{""Latitude"":56.8487167,""Longitude"":9.899222},{""Latitude"":56.84969,""Longitude"":9.899561},{""Latitude"":56.8486481,""Longitude"":9.899741},{""Latitude"":56.8486443,""Longitude"":9.900579},{""Latitude"":56.8495941,""Longitude"":9.899052},{""Latitude"":56.8486443,""Longitude"":9.900531},{""Latitude"":56.8489571,""Longitude"":9.902165},{""Latitude"":56.8497,""Longitude"":9.901075},{""Latitude"":56.8487244,""Longitude"":9.899226},{""Latitude"":56.8498154,""Longitude"":9.901648},{""Latitude"":56.8494568,""Longitude"":9.898844},{""Latitude"":56.849102,""Longitude"":9.902584},{""Latitude"":56.8376846,""Longitude"":9.894218},{""Latitude"":56.836853,""Longitude"":9.896951},{""Latitude"":56.8376656,""Longitude"":9.894621},{""Latitude"":56.8372879,""Longitude"":9.896749},{""Latitude"":56.8369141,""Longitude"":9.895887},{""Latitude"":56.83764,""Longitude"":9.895117},{""Latitude"":56.84576,""Longitude"":9.894394},{""Latitude"":56.84552,""Longitude"":9.895246},{""Latitude"":56.845787,""Longitude"":9.894119},{""Latitude"":56.84513,""Longitude"":9.892354},{""Latitude"":56.8607,""Longitude"":9.884906},{""Latitude"":56.7847481,""Longitude"":9.56854},{""Latitude"":56.7636,""Longitude"":9.653125},{""Latitude"":56.7499352,""Longitude"":9.598543}]";
            List<Itinero.LocalGeo.Coordinate> points = new List<Itinero.LocalGeo.Coordinate>();
            points = JsonConvert.DeserializeObject<List<Itinero.LocalGeo.Coordinate>>(s4);

            var router = new Router(routerDb);

            // calculates in about 1 sec            
            var routeFast = router.CalculateTSP(Vehicle.Car.Fastest(), points.ToArray());

            // Never finishes 
            var routeShort = router.CalculateTSP(Vehicle.Car.Shortest(), points.ToArray());
xivk commented 7 years ago

Should be fixed now using: https://github.com/itinero/optimization