public Vehicle GetNextAvailableVehicleFor(Solution solution, Destination destination, int currentVehicleNumber) { while (currentVehicleNumber <= solution.VehicleFleet.Vehicles.Count) { var currentVehicle = solution.VehicleFleet.GetByNumber(currentVehicleNumber); var distanceFromCurrentDestinationToNewDestination = solution.Map.GetDistance(currentVehicle.Route.CurrentLastDestination, destination); var distanceFromNewDestinationToEnding = solution.Map.GetDistance(destination, currentVehicle.Route.EndingPoint); if (currentVehicle.Route.GetDistanceWithoutFinalReturn(solution.Map) + distanceFromCurrentDestinationToNewDestination + distanceFromNewDestinationToEnding <= currentVehicle.MaxDistance) return currentVehicle; currentVehicleNumber++; } return null; }
public decimal GetDistance(Destination destinationFrom, Destination destinationTo) { var xDiff = destinationFrom.Coordinate.X - destinationTo.Coordinate.X; var yDiff = destinationFrom.Coordinate.Y - destinationTo.Coordinate.Y; return Convert.ToDecimal(Math.Sqrt((double)(xDiff * xDiff + yDiff * yDiff))); }
public Route(Destination startingPoint, Destination endingPoint) { Destinations = new List<Destination>(); StartingPoint = startingPoint; EndingPoint = endingPoint; }
public void AddDestination(Destination destination) { Destinations.Add(destination); }
public Vehicle(short number, decimal maxDistance, Destination startingPoint, Destination endingPoint) { Number = number; MaxDistance = maxDistance; Route = new Route(startingPoint, endingPoint); }