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); }
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); }
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); }
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); }