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()