コード例 #1
0
    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
コード例 #2
0
    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__()