Beispiel #1
0
 public int InsertSubRoute(SubRoute subRoute)
 {
     using (var connection = OpenConnection())
     {
         return(connection.QuerySingleOrDefault <int>(INSERT_SUB_ROUTE, subRoute));
     }
 }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
                    }
                }
            }
        }
Beispiel #4
0
        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++;
            }
        }
Beispiel #5
0
 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 &lt;see cref="!:IRouteData" /&gt; for the route.
        /// </summary>
        /// <returns>
        /// The &lt;see cref="!:RouteData" /&gt; 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);
        }
Beispiel #8
0
        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);
        }