private ClientSet <PickupDeliveryClient> GetDivisiblePDClientSet(int clientInterval) { int lastID = Clients.Count + 1; ClientSet <PickupDeliveryClient> extSet = new ClientSet <PickupDeliveryClient>(); foreach (var spd in Clients) { if (spd.ID % clientInterval == 0) { extSet.Add(new PickupDeliveryClient(spd.ID, spd.Delivery, 0)); } else { extSet.Add(spd); } } foreach (var dc in Clients) { if (dc.ID % clientInterval == 0) { extSet.Add(new PickupDeliveryClient(lastID, 0, dc.Pickup)); lastID++; } } return(extSet); }
private ClientSet <PickupDeliveryClient> GetDivisiblePDClientSet() { int lastID = Clients.Count; ClientSet <PickupDeliveryClient> extSet = new ClientSet <PickupDeliveryClient>(); foreach (var delivery in Clients) { extSet.Add(new PickupDeliveryClient(delivery.ID, delivery.Delivery, 0)); } foreach (var pickup in Clients) { extSet.Add(new PickupDeliveryClient(pickup.ID + lastID, 0, pickup.Pickup)); } return(extSet); }
private static Tuple <ClientSet <PickupDeliveryClient>, TravelData> LoadTaillardClients(StreamReader reader) { int clients = int.Parse(reader.ReadLine().Trim()); List <double> deliveryDemand = new List <double>(); List <Tuple <double, double> > locations = new List <Tuple <double, double> >(); Regex clientsexp = new Regex(@"(?<id>\d+)\s+(?<x>\d+)\s+(?<y>\d+)\s+(?<dem>\d+)"); for (int i = 0; i < clients + 1; i++) { string line = reader.ReadLine().Trim(); Match m = clientsexp.Match(line); deliveryDemand.Add(double.Parse(m.Groups["dem"].Value)); locations.Add(new Tuple <double, double>(double.Parse(m.Groups["x"].Value), double.Parse(m.Groups["y"].Value))); } ClientSet <PickupDeliveryClient> clientSet = new ClientSet <PickupDeliveryClient>(); for (int i = 1; i < clients + 1; i++) { PickupDeliveryClient c = new PickupDeliveryClient(i, deliveryDemand[i], 0); clientSet.Add(c); } TravelData matrix = LoadTaillarTravelMatrix(locations); return(new Tuple <ClientSet <PickupDeliveryClient>, TravelData>(clientSet, matrix)); }
private static ClientSet <PickupDeliveryClient> BuildSalhiMixedClientSet(List <Tuple <double, double, double> > clientInfo, int clientInterval) { ClientSet <PickupDeliveryClient> mixedSet = new ClientSet <PickupDeliveryClient>(); for (int i = 1; i < clientInfo.Count; i++) { if (i % clientInterval == 0) { mixedSet.Add(new PickupDeliveryClient(i, 0, clientInfo[i].Item3)); } else { mixedSet.Add(new PickupDeliveryClient(i, clientInfo[i].Item3, 0)); } } return(mixedSet); }
private ClientSet <PickupDeliveryClient> GetMixedPCClienteSet(int clientInterval) { ClientSet <PickupDeliveryClient> extSet = new ClientSet <PickupDeliveryClient>(); foreach (var item in Clients) { if (item.ID % clientInterval == 0) { extSet.Add(new PickupDeliveryClient(item.ID, 0, item.Delivery)); } else { extSet.Add(new PickupDeliveryClient(item.ID, item.Delivery, 0)); } } return(extSet); }
private static ClientSet <PickupDeliveryClient> BuildClientSet(List <Tuple <double, double, double> > clientsInfo, bool serieX) { ClientSet <PickupDeliveryClient> clients = new ClientSet <PickupDeliveryClient>(); for (int i = 1; i < clientsInfo.Count; i++) { double rate = Math.Min(clientsInfo[i].Item1 / clientsInfo[i].Item2, clientsInfo[i].Item2 / clientsInfo[i].Item1); double demand1 = Math.Round(rate * clientsInfo[i].Item3, 8); double demand2 = Math.Round((1 - rate) * clientsInfo[i].Item3, 8); if (serieX) { clients.Add(new PickupDeliveryClient(i, demand1, demand2)); } else { clients.Add(new PickupDeliveryClient(i, demand2, demand1)); } } return(clients); }
private static ClientSet <PickupDeliveryClient> ParseClientInfo(StreamReader reader, int clientAmount) { ClientSet <PickupDeliveryClient> clients = new ClientSet <PickupDeliveryClient>(); for (int i = 0; i < clientAmount; i++) { double delivery = double.Parse(reader.ReadLine()); double pickup = double.Parse(reader.ReadLine()); clients.Add(new PickupDeliveryClient(i + 1, delivery, pickup)); } return(clients); }
public static VRPSimultaneousPickupDelivery Combine(VRPSimultaneousPickupDelivery problem1, VRPSimultaneousPickupDelivery problem2) { ClientSet <PickupDeliveryClient> clientSet = new ClientSet <PickupDeliveryClient>(); foreach (var item in problem1.Clients) { clientSet.Add(item); } for (int i = 0; i < problem2.Clients.Count; i++) { PickupDeliveryClient newClient = (PickupDeliveryClient)problem2.Clients[i + 1].Clone(); newClient.ID = clientSet.Count + 1; clientSet.Add(newClient); } Fleet fleet = new Fleet(); foreach (var item in problem1.Vehicles) { fleet.Add(item); } foreach (var item in problem2.Vehicles) { fleet.Add(item); } double[,] travel = new double[clientSet.Count + 1, clientSet.Count + 1]; double maxCost = int.MaxValue / 10; for (int i = 0; i < travel.GetLength(0); i++) { for (int j = i + 1; j < travel.GetLength(1); j++) { travel[i, j] = travel[j, i] = maxCost; } } for (int i = 0; i < problem1.Clients.Count + 1; i++) { for (int j = 0; j < problem1.Clients.Count + 1; j++) { travel[i, j] = problem1.TravelDistance[i, j]; } } for (int i = 0; i < problem2.Clients.Count + 1; i++) { for (int j = 0; j < problem2.Clients.Count + 1; j++) { if (i == 0 && j != 0) { travel[0, problem1.Clients.Count + j] = problem2.TravelDistance[0, j]; } else if (j == 0 && i != 0) { travel[problem1.Clients.Count + i, 0] = problem2.TravelDistance[i, 0]; } else if (i != 0 && j != 0) { travel[problem1.Clients.Count + i, problem1.Clients.Count + j] = problem2.TravelDistance[i, j]; } } } return(new VRPSimultaneousPickupDelivery(clientSet, fleet, new TravelData(travel))); }