Exemple #1
0
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)
Exemple #2
0
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)
Exemple #3
0
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())
Exemple #4
0
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