В Google Directions есть API для решения задачи для коммивояжера - рассчитать кратчайший маршрут по набору точек, но за него нужно заплатить.В мире Apple, Polyline и MKRoute кажутся многообещающими, но я не могу найти ничего в документации, чтобы предположить, что они поддерживают более двух пунктов - start и dest.Кому-нибудь повезло с проблемой TSP с использованием MapKit и / или Core Location?Кажется, можно вычислить расстояние во времени для всех ребер между узлами, используя что-то вроде:
request.source = startLocation
request.destination = destLocation
request.requestsAlternateRoutes = true
request.transportType = .automobile
let directions = MKDirections(request: request)
directions.calculate { (directions, error) in
if var routeResponse = directions?.routes {
routeResponse.sort(by: {$0.expectedTravelTime <
$1.expectedTravelTime})
let quickestRouteForSegment: MKRoute = routeResponse[0]
completion(quickestRouteForSegment.expectedTravelTime)
}
}
}
и вручную разработать алгоритм, который опробует возможности и выбирает самый быстрый.Но это быстро усложняется и требует много запросов.Просто интересно, нашел ли кто-нибудь более изощренный способ приблизиться к нему.