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);
        }
예제 #2
0
        public override bool IsAllowedMovement(TwoInterMove m)
        {
            double maxDemand = Math.Max(ProblemData.TotalPickup(m.deRoute) + ProblemData.Clients[m.current[m.orIndex]].Pickup + ProblemData.Clients[m.current[m.orIndex + 1]].Pickup,
                                        ProblemData.TotalDelivery(m.deRoute) + ProblemData.Clients[m.current[m.orIndex]].Delivery + ProblemData.Clients[m.current[m.orIndex + 1]].Delivery);

            if (maxDemand <= m.deRoute.Vehicle.Capacity)
            {
                return(true);
            }
            return((maxDemand - m.deRoute.Vehicle.Capacity) / m.deRoute.Vehicle.Capacity < WeakThreshold);
        }
예제 #3
0
 public override bool IsAllowedMovement(TwoInterMove m)
 {
     return(ProblemData.StrongAddOverload(m.deRoute, m.deIndex, m.current.GetRange(m.orIndex, 2)) <= epsilon);
 }