| import logging | |
| import pickle | |
| import numpy as np | |
| root_dir = "/home/cwan5/OR/attention-learn-to-route/data/vrp/" | |
| def load(filename, root_dir=root_dir): | |
| return pickle.load(open(root_dir + filename, "rb")) | |
| file_catalog = { | |
| "test": { | |
| 20: "vrp20_test_seed1234.pkl", | |
| 50: "vrp50_test_seed1234.pkl", | |
| 100: "vrp100_test_seed1234.pkl", | |
| }, | |
| "eval": { | |
| 20: "vrp20_validation_seed4321.pkl", | |
| 50: "vrp50_validation_seed4321.pkl", | |
| 100: "vrp100_validation_seed4321.pkl", | |
| }, | |
| } | |
| def make_instance(args): | |
| depot, loc, demand, capacity, *args = args | |
| grid_size = 1 | |
| if len(args) > 0: | |
| depot_types, customer_types, grid_size = args | |
| return { | |
| "loc": np.array(loc) / grid_size, | |
| "demand": np.array(demand) / capacity, | |
| "depot": np.array(depot) / grid_size, | |
| } | |
| class lazyClass: | |
| data = { | |
| "test": {}, | |
| "eval": {}, | |
| } | |
| def __getitem__(self, index): | |
| partition, nodes, idx = index | |
| if not (partition in self.data) or not (nodes in self.data[partition]): | |
| logging.warning( | |
| f"Data sepecified by ({partition}, {nodes}) was not initialized. Attepmting to load it for the first time." | |
| ) | |
| data = load(file_catalog[partition][nodes]) | |
| self.data[partition][nodes] = [make_instance(instance) for instance in data] | |
| return self.data[partition][nodes][idx] | |
| VRPDataset = lazyClass() | |