def get_requests_from(self, csv_trips): # List of requests request_list = [] # Try opening csv file with open(csv_trips) as f: reader = csv.reader(f) header = next(reader) # Id customer according to number of rows id_customer = 0 # For each data row for row in reader: id_customer+=1 # Revealing instant revealing = datetime.strptime(row[0], '%Y-%m-%d %H:%M') # Pickup latitude pickup_x = float(row[1]) # Pickup longitude pickup_y = float(row[2]) # Dropoff latitude dropoff_x = float(row[3]) # Dropoff longitude dropoff_y = float(row[4]) # Order configuration as dictionary, e.g. A=2/C=1 => {'A':2, 'C':1} order = {o.split('=')[0]:int(o.split('=')[1]) for o in row[5].split('/')} # Create request for data row req = Request.factory_request_coord('SARP_PL', 'H_'+str(id_customer), pickup_x, pickup_y, dropoff_x, dropoff_y, revealing, 100, order) # Append request into list of requests request_list.append(req) return request_list
def __init__(self): self.nodes_dic = {} # start and end depots self.start_depot = Node.factory_node( 'DP', None, 5, 2, {'p1': 0, 'p2': 0, 'p3': 0, 'p4': 0, 's1': 0, 's2': 0, 's3': 0}) self.end_depot = Node.factory_node( 'DP', None, 7, 2, {'p1': 0, 'p2': 0, 'p3': 0, 'p4': 0, 's1': 0, 's2': 0, 's3': 0}) self.nodes_dic[self.start_depot.get_id()] = self.start_depot self.nodes_dic[self.end_depot.get_id()] = self.end_depot # self, id, pos, capacity self.vehicle_list = [Vehicle. factory_vehicle('SARP_PL', 'AV1', self.start_depot, {'p1': 4, 'p2': 4, 'p3': 4, 'p4': 4, 's1': 4, 's2': 4, 's3': 4}), Vehicle. factory_vehicle('SARP_PL', 'AV2', self.start_depot, {'p1': 4, 'p2': 4, 'p3': 4, 'p4': 4, 's1': 4, 's2': 4, 's3': 4}), Vehicle. factory_vehicle('SARP_PL', 'AV3', self.start_depot, {'p1': 4, 'p2': 4, 'p3': 4, 'p4': 4, 's1': 4, 's2': 4, 's3': 4}), Vehicle. factory_vehicle('SARP_PL', 'AV4', self.start_depot, {'p1': 4, 'p2': 4, 'p3': 4, 'p4': 4, 's1': 4, 's2': 4, 's3': 4})] self.vehicle_dic = {v.get_id(): v for v in self.vehicle_list} # id, origin, destination, earliest, latest, demand self.request_list = [Request.factory_request_coord('SARP_PL', '$H_1$', 7, 5, 3.77, 0.20, 100, 100, {'p1': 1}), Request.factory_request_coord( 'SARP_PL', '$H_2$', 9, 0.5, 7.38, 7, 100, 100, {'p2': 1}), Request.factory_request_coord( 'SARP_PL', '$H_3$', 10, 4, 5, 4, 30, 30, {'s1': 2, 's2': 1}), Request.factory_request_coord( 'SARP_PL', '$H_4$', 5, 5.85, 3, 3, 200, 200, {'s3': 1}), Request.factory_request_coord('SARP_PL', '$H_5$', 2, 8, 2.00, 1.91, 400, 400, {'s1': 4})] self.price_parcel_locker = { 'p1': 40, 'p2': 30, 'p3': 20, 'p4': 10, 's1': 10, 's2': 15, 's3': 20} print("Demand of requests") for r in self.request_list: pprint.pprint(r.get_demand()) print('Parcel locker:') pprint.pprint(self.price_parcel_locker.keys()) print("Req. list") # Insert nodes information in dictionary for r in self.request_list: self.nodes_dic[r.get_origin().get_id()] = r.get_origin() self.nodes_dic[r.get_destination().get_id()] = r.get_destination() # The compartments not declared in the request have zero demand for n in self.nodes_dic.keys(): for c in self.price_parcel_locker.keys(): if c not in self.nodes_dic[n].get_demand().keys(): self.nodes_dic[n].get_demand()[c] = 0 print("Demand of nodes") for n in self.nodes_dic.keys(): print(self.nodes_dic[n].get_id()) pprint.pprint(self.nodes_dic[n].get_demand()) self.request_dic = { r.get_origin().get_id(): r for r in self.request_list} print("REQUEST DICTIONARY") print(self.request_dic) # Number of passengers picked-up or delivered: # pk = load and dl = -load # se (start/end) = 0 # Nodes pickup and delivery demands self.pk_dl = {(p, c): self.nodes_dic[p].get_demand()[c] for p in self.nodes_dic.keys() for c in self.nodes_dic[p].get_demand().keys()} print("Pick-up delivery dictionary:") for d in self.pk_dl: print(d) duration_pk_dl = 6000 duration_service = 0 self.service_t = {key: duration_pk_dl for key in self.nodes_dic} self.service_t[self.start_depot.get_id()] = 0 self.service_t[self.end_depot.get_id()] = 0 # Define earliest latest times to attend request self.earliest_t = {p.get_origin().get_id(): p.get_earliest() for p in self.request_list} # Define earliest latest times to attend request self.earliest_tstamp = {p.get_origin().get_id(): p.get_earliest_tstamp() for p in self.request_list} # Set of pick-up points (human) self.pk_points_list = [p.get_origin().get_id() for p in self.request_list] # Set of drop-off points (human) self.dl_points_list = [p.get_destination().get_id() for p in self.request_list] # List of pk and dp points self.pd_nodes = [] self.pd_nodes.extend(self.pk_points_list) self.pd_nodes.extend(self.dl_points_list) # List of pickup/delivery tuples from requests self.pd_tuples = [(p.get_origin().get_id(), p.get_destination( ).get_id()) for p in self.request_list] # Dictionary of pickup/delivery tuples from requests self.pd_pairs = {p.get_origin().get_id(): p.get_destination().get_id() for p in self.request_list} self.T = {k.get_id(): Dao.MAX_TRIP_SIZE for k in self.vehicle_list} # Max load per vehicle dictionary self.capacity_vehicles = {(k.get_id(), c): k.get_capacity()[c] for k in self.vehicle_list for c in k.get_capacity()} super().__init__()