def main(): experiment = "tuning" if sys.argv[1] == "tuning" else int(sys.argv[1]) instance = int(sys.argv[2]) Problem.from_instance(experiment, instance) valid = True for method in ["ilp", "heuristic"]: path = f"experiments/{experiment}/{instance}-{method}.json" try: with open(path) as file: solution = [ tuple(assignment) for assignment in json.load(file) ] except IOError: print(f"{path}: solution file does not exist.") else: for rule in RULES: if not rule(solution): valid = False print(f"{path}: solution violates {rule.__name__}.") exit(0 if valid else 1)
def main(): args = parse_args() Problem.from_instance(args.experiment, args.instance) result = ilp() res_loc = f"experiments/{args.experiment}/{args.instance}-ilp.json" with open(res_loc, "w") as file: json.dump(result, file)
def compute(parser, args): measures = [] for instance in np.arange(1, 101): location = Path(f"experiments/{args.experiment}/" f"{instance}-{args.method}.json") if not location.exists(): print(f"{parser.prog}: {location} does not exist; skipping.") continue Problem.from_instance(args.experiment, instance) sol = Solution.from_file(location) measures.append({name: fn(sol) for name, fn in MEASURES.items()}) return pd.DataFrame.from_records(measures, columns=MEASURES.keys())
def main(): args = parse_args() Problem.from_instance(args.experiment, args.instance) if args.experiment == "tuning": generator = rnd.default_rng(args.instance) else: # E.g. for exp 72 and inst. 1, this becomes 7201. This way, even for # inst. 100, there will never be overlap between random number streams # across experiments. generator = rnd.default_rng(100 * args.experiment + args.instance) alns = ALNS(generator) # noqa for operator in DESTROY_OPERATORS: if args.exclude == operator.__name__: continue alns.add_destroy_operator(operator) for operator in REPAIR_OPERATORS: if args.exclude == operator.__name__: continue alns.add_repair_operator(operator) if args.exclude == "reinsert_learner": alns.on_best(reinsert_learner) init = initial_solution() criterion = get_criterion(init.objective()) result = alns.iterate(init, WEIGHTS, DECAY, criterion, ITERATIONS) location = f"experiments/{args.experiment}/{args.instance}-heuristic.json" result.best_state.to_file(location) # noqa