public override bool IsAllowedMovement(TwoInterMove m)
        {
            double delivery = ProblemData.TotalDelivery(m.deRoute) + ProblemData.Clients[m.current[m.orIndex]].Delivery + ProblemData.Clients[m.current[m.orIndex + 1]].Delivery;
            double pickup   = ProblemData.TotalPickup(m.deRoute) + ProblemData.Clients[m.current[m.orIndex]].Pickup + +ProblemData.Clients[m.current[m.orIndex + 1]].Pickup;

            return(Math.Max(delivery, pickup) <= m.deRoute.Vehicle.Capacity);
        }
        protected double MaxDemandAfterReplace(Route current, List <int> oldRange, List <int> newRange)
        {
            double pickup    = ProblemData.TotalPickup(current) - oldRange.Sum(c => ProblemData.Clients[c].Pickup) + newRange.Sum(c => ProblemData.Clients[c].Pickup);
            double delivery  = ProblemData.TotalDelivery(current) - oldRange.Sum(c => ProblemData.Clients[c].Delivery) + newRange.Sum(c => ProblemData.Clients[c].Delivery);
            double maxDemand = Math.Max(pickup, delivery);

            return(maxDemand);
        }
示例#3
0
        public override bool IsAllowedMovement(InterMove m)
        {
            double maxDemand = Math.Max(ProblemData.TotalPickup(m.deRoute) + ProblemData.Clients[m.current[m.orIndex]].Pickup, ProblemData.TotalDelivery(m.deRoute) + ProblemData.Clients[m.current[m.orIndex]].Delivery);

            if (maxDemand <= m.deRoute.Vehicle.Capacity)
            {
                return(true);
            }
            return((maxDemand - m.deRoute.Vehicle.Capacity) / m.deRoute.Vehicle.Capacity < WeakThreshold);
        }
示例#4
0
        public double AlphaWeakFeasibility(Route current)
        {
            double maxDemand = Math.Max(ProblemData.TotalPickup(current), ProblemData.TotalDelivery(current));

            if (maxDemand <= current.Vehicle.Capacity)
            {
                return(0);
            }
            return((maxDemand - current.Vehicle.Capacity) / current.Vehicle.Capacity);
        }
示例#5
0
        protected double AlphaWeakFeasibilityAfterReplace(Route current, List <int> oldRange, List <int> newRange)
        {
            double pickup    = ProblemData.TotalPickup(current) - oldRange.Sum(c => ProblemData.Clients[c].Pickup) + newRange.Sum(c => ProblemData.Clients[c].Pickup);
            double delivery  = ProblemData.TotalDelivery(current) - oldRange.Sum(c => ProblemData.Clients[c].Delivery) + newRange.Sum(c => ProblemData.Clients[c].Delivery);
            double maxDemand = Math.Max(pickup, delivery);

            if (maxDemand <= current.Vehicle.Capacity)
            {
                return(0);
            }
            return((maxDemand - current.Vehicle.Capacity) / current.Vehicle.Capacity);
        }