public int InsertSubRoute(SubRoute subRoute) { using (var connection = OpenConnection()) { return(connection.QuerySingleOrDefault <int>(INSERT_SUB_ROUTE, subRoute)); } }
private static GenericTraveltimeSegment CreateSegmentFromRoute(SubRoute subRoute, long UpdateTime) { GenericTraveltimeSegment segment = new GenericTraveltimeSegment { Source = "Waze", SegmentName = subRoute.FromName + ";" + subRoute.ToName, FromPoint = subRoute.FromName, ToPoint = subRoute.ToName, Timestamp = new DocumentDate(Util.GetDateTimeFromUnixInMillies(UpdateTime)), Coordinates = subRoute.Line, Length = subRoute.Length, Duration = subRoute.Time, OptimalSpeed = subRoute.Length / (double)subRoute.HistoricTime * 3.6 }; try { segment.FromLatitude = subRoute.Line[0]?.Latitude ?? 0; segment.FromLongitude = subRoute.Line[0]?.Longitude ?? 0; segment.ToLatitude = subRoute.Line[subRoute.Line.Length - 1]?.Latitude ?? 0; segment.ToLongitude = subRoute.Line[subRoute.Line.Length - 1]?.Longitude ?? 0; } catch (Exception e) { //do nothing values stay at 0 // Console.WriteLine("Index out of range!"); } segment.SetId(); segment.SetSpeed(); return(segment); }
public void GetOptimalSequenceOfClientsToVisit(Depot depot, VehicleRoute vehicleRoute, int[][] routeMatrix, CeplexParameters ceplexParameters, List <Address> addresses) { vehicleRoute.SubRoutes = new List <SubRoute>(); int sequenceNumber = 1; for (int j = 0; j <= ceplexParameters.QuantityOfClients; j++) { for (int i = 0; i <= ceplexParameters.QuantityOfClients; i++) { if (routeMatrix[j][i] == 1 && j != i && j == 0) { var subRoute = new SubRoute(); subRoute.AddressOriginId = depot.Address.AddressId; var addressDestiny = addresses.FirstOrDefault(a => a.indexVRPDistanceMatrix == i); subRoute.AddressDestinyId = addressDestiny.AddressId; subRoute.Distance = ceplexParameters.Distance[j][i]; subRoute.Duration = ceplexParameters.Duration[j][i].ConvertMinutesToDateTime(); subRoute.AddressOrigin = depot.Address; subRoute.AddressDestiny = addressDestiny; subRoute.SequenceNumber = sequenceNumber; sequenceNumber++; vehicleRoute.SubRoutes.Add(subRoute); } else if (routeMatrix[j][i] == 1 && j != i && j > 0 && i != 0) { var subRoute = new SubRoute(); var addressOrigin = addresses.FirstOrDefault(c => c.indexVRPDistanceMatrix == j); subRoute.AddressOriginId = addressOrigin.AddressId; var addressDestiny = addresses.FirstOrDefault(c => c.indexVRPDistanceMatrix == i); subRoute.AddressDestinyId = addressDestiny.AddressId; subRoute.Distance = ceplexParameters.Distance[j][i]; subRoute.Duration = ceplexParameters.Duration[j][i].ConvertMinutesToDateTime(); subRoute.AddressOrigin = addressOrigin; subRoute.AddressDestiny = addressDestiny; subRoute.SequenceNumber = sequenceNumber; sequenceNumber++; vehicleRoute.SubRoutes.Add(subRoute); } else if (routeMatrix[j][i] == 1 && j != i && j > 0 && i == 0) { var subRoute = new SubRoute(); var addressOrigin = addresses.FirstOrDefault(c => c.indexVRPDistanceMatrix == j); subRoute.AddressOriginId = addressOrigin.AddressId; subRoute.AddressDestinyId = depot.Address.AddressId; subRoute.Distance = ceplexParameters.Distance[j][i]; subRoute.Duration = ceplexParameters.Duration[j][i].ConvertMinutesToDateTime(); subRoute.AddressOrigin = addressOrigin; subRoute.AddressDestiny = depot.Address; subRoute.SequenceNumber = sequenceNumber; sequenceNumber++; vehicleRoute.SubRoutes.Add(subRoute); } } } }
private void PostProcessWithMinimumPathAlgorithm(Depot depot, VehicleRoute vehicleRoute, CeplexParameters ceplexParameters, List <Address> addresses) { vehicleRoute.SubRoutes = new List <SubRoute>(); int i = 0; int indexOrigin = 0; int indexDestiny = 0; List <int> indexesAlreadyVisited = new List <int>(); indexesAlreadyVisited.Add(0); while (i <= ceplexParameters.QuantityOfClients) { if (i == 0) { var subRoute = new SubRoute(); subRoute.AddressOriginId = depot.Address.AddressId; indexDestiny = GetIndexNearestAddress(i, ceplexParameters, addresses, indexesAlreadyVisited); var addressDestiny = addresses.FirstOrDefault(a => a.indexVRPDistanceMatrix == indexDestiny); subRoute.AddressDestinyId = addressDestiny.AddressId; subRoute.Distance = ceplexParameters.Distance[0][addressDestiny.indexVRPDistanceMatrix]; subRoute.Duration = ceplexParameters.Duration[0][addressDestiny.indexVRPDistanceMatrix].ConvertMinutesToDateTime(); subRoute.AddressOrigin = depot.Address; subRoute.AddressDestiny = addressDestiny; vehicleRoute.SubRoutes.Add(subRoute); } else if (i == ceplexParameters.QuantityOfClients) { var subRoute = new SubRoute(); var addressOrigin = addresses.FirstOrDefault(a => a.indexVRPDistanceMatrix == indexOrigin); subRoute.AddressOriginId = addressOrigin.AddressId; subRoute.AddressDestinyId = depot.Address.AddressId; subRoute.Distance = ceplexParameters.Distance[indexOrigin][0]; subRoute.Duration = ceplexParameters.Duration[indexOrigin][0].ConvertMinutesToDateTime(); subRoute.AddressOrigin = addressOrigin; subRoute.AddressDestiny = depot.Address; vehicleRoute.SubRoutes.Add(subRoute); } else { var subRoute = new SubRoute(); var addressOrigin = addresses.FirstOrDefault(a => a.indexVRPDistanceMatrix == indexOrigin); subRoute.AddressOriginId = addressOrigin.AddressId; indexDestiny = GetIndexNearestAddress(indexOrigin, ceplexParameters, addresses, indexesAlreadyVisited); var addressDestiny = addresses.FirstOrDefault(a => a.indexVRPDistanceMatrix == indexDestiny); subRoute.AddressDestinyId = addressDestiny.AddressId; subRoute.Distance = ceplexParameters.Distance[indexOrigin][addressDestiny.indexVRPDistanceMatrix]; subRoute.Duration = ceplexParameters.Duration[indexOrigin][addressDestiny.indexVRPDistanceMatrix].ConvertMinutesToDateTime(); subRoute.AddressOrigin = addressOrigin; subRoute.AddressDestiny = addressDestiny; vehicleRoute.SubRoutes.Add(subRoute); } indexesAlreadyVisited.Add(indexDestiny); indexOrigin = indexDestiny; i++; } }
public static SubRouteDto CreateDto(this SubRoute entity) { return(new SubRouteDto() { subRouteId = entity.SubRouteId, vehicleRouteId = entity.VehicleRouteId, addressOrigin = entity.AddressOrigin.CreateDto(), addressDestiny = entity.AddressDestiny.CreateDto(), distance = entity.Distance, duration = entity.Duration, sequenceNumber = entity.SequenceNumber }); }
/// <summary> /// Determine whether this route is a match for the incoming request by looking up the <see cref="!:IRouteData" /> for the route. /// </summary> /// <returns> /// The <see cref="!:RouteData" /> for a route if matches; otherwise null. /// </returns> /// <param name="virtualPathRoot">The virtual path root.</param><param name="request">The request.</param> public IHttpRouteData GetRouteData(string virtualPathRoot, HttpRequestMessage request) { var route = new SubRoute(request.RequestUri.LocalPath); while (!route.AtEnd()) { var key = Tuple.Create(request.Method.Method, route); IHttpRoute[] data; if (routDataCache.TryGetValue(key, out data)) { var httpRouteDatas = data.Select(x => x.GetRouteData(virtualPathRoot, request)).Where(x => x != null).ToArray(); return(new RavenRouteCollectionRouteData(this, httpRouteDatas)); } route.NextSubRoute(); } return(LocateRouteData(virtualPathRoot, request)); }
private RavenRouteCollectionRouteData LocateRouteData(string virtualPathRoot, HttpRequestMessage request) { var matches = ( from route in subRoutes let match = route.GetRouteData(virtualPathRoot, request) where match != null select new { match, route } ).ToArray(); var matchesTemplateRoutes = matches.Select(m => m.match.Route.RouteTemplate).Distinct(); var result = matches.Length == 0 ? null : new RavenRouteCollectionRouteData(this, matches.Select(x => x.match).ToArray()); var routes = matches.Select(x => x.route).ToArray(); foreach (var matchRoute in matchesTemplateRoutes) { var subRoute = new SubRoute(request.RequestUri.LocalPath); subRoute.ReduceRouteMatchTemplate(matchRoute); routDataCache.TryAdd(Tuple.Create(request.Method.Method, subRoute), routes); } return(result); }
private List <VehicleRoute> GetRoutesFindedMultipleVehicleRouteProblem(Depot depot, List <DeliveryTruckTrip> fractionedScheduledTrips, CeplexParameters ceplexParameters, int[][][] routeMatrix) { var routes = new List <VehicleRoute>(); for (int k = 0; k < ceplexParameters.QuantityOfVehiclesAvailable; k++) { var route = new VehicleRoute(); route.DepotId = depot.DepotId; route.DateCreation = DateTime.Now.Date; route.DateScheduled = DateTime.Now.Date; for (int j = 0; j <= ceplexParameters.QuantityOfClients; j++) { for (int i = 0; i <= ceplexParameters.QuantityOfClients; i++) { if (routeMatrix[k][j][i] == 1 && j != i && j == 0) { var subRoute = new SubRoute(); subRoute.AddressOriginId = depot.Address.AddressId; subRoute.DemandOrigin = 0; var clientDestiny = fractionedScheduledTrips.FirstOrDefault(c => c.ColumnIndex == i); subRoute.DemandDestiny = clientDestiny.QuantityProduct; subRoute.AddressDestinyId = clientDestiny.Address.AddressId; subRoute.Distance = ceplexParameters.Distance[j][i]; subRoute.Duration = ceplexParameters.Duration[j][i].ConvertMinutesToDateTime(); subRoute.AddressOrigin = depot.Address; subRoute.AddressDestiny = clientDestiny.Address; route.SubRoutes.Add(subRoute); } else if (routeMatrix[k][j][i] == 1 && j != i && j > 0 && i != 0) { var subRoute = new SubRoute(); var clientOrigin = fractionedScheduledTrips.FirstOrDefault(c => c.ColumnIndex == j); subRoute.DemandOrigin = clientOrigin.QuantityProduct; subRoute.AddressOriginId = clientOrigin.Address.AddressId; var clientDestiny = fractionedScheduledTrips.FirstOrDefault(c => c.ColumnIndex == i); subRoute.DemandDestiny = clientDestiny.QuantityProduct; subRoute.AddressDestinyId = clientDestiny.Address.AddressId; subRoute.Distance = ceplexParameters.Distance[j][i]; subRoute.Duration = ceplexParameters.Duration[j][i].ConvertMinutesToDateTime(); subRoute.AddressOrigin = clientOrigin.Address; subRoute.AddressDestiny = clientDestiny.Address; route.SubRoutes.Add(subRoute); } else if (routeMatrix[k][j][i] == 1 && j != i && j > 0 && i == 0) { var subRoute = new SubRoute(); var clientOrigin = fractionedScheduledTrips.FirstOrDefault(c => c.ColumnIndex == j); subRoute.DemandOrigin = clientOrigin.QuantityProduct; subRoute.AddressOriginId = clientOrigin.Address.AddressId; subRoute.DemandDestiny = 0; subRoute.AddressDestinyId = depot.Address.AddressId; subRoute.Distance = ceplexParameters.Distance[j][i]; subRoute.Duration = ceplexParameters.Duration[j][i].ConvertMinutesToDateTime(); subRoute.AddressOrigin = clientOrigin.Address; subRoute.AddressDestiny = depot.Address; route.SubRoutes.Add(subRoute); } } } if (route.SubRoutes.Count > 0) { routes.Add(route); } } return(routes); }