mirror of
https://github.com/ANL-CEEESA/MIPLearn.git
synced 2025-12-09 02:48:52 -06:00
55 lines
1.4 KiB
Python
55 lines
1.4 KiB
Python
from os.path import dirname
|
|
|
|
import numpy as np
|
|
from scipy.stats import uniform, randint
|
|
|
|
from miplearn.collectors.basic import BasicCollector
|
|
from miplearn.io import write_pkl_gz
|
|
from miplearn.problems.tsp import (
|
|
TravelingSalesmanGenerator,
|
|
TravelingSalesmanPerturber,
|
|
build_tsp_model_gurobipy,
|
|
build_tsp_model_pyomo,
|
|
)
|
|
|
|
np.random.seed(42)
|
|
gen = TravelingSalesmanGenerator(
|
|
x=uniform(loc=0.0, scale=1000.0),
|
|
y=uniform(loc=0.0, scale=1000.0),
|
|
n=randint(low=20, high=21),
|
|
gamma=uniform(loc=1.0, scale=0.0),
|
|
round=True,
|
|
)
|
|
|
|
# Generate a reference instance with fixed cities
|
|
reference_instance = gen.generate(1)[0]
|
|
|
|
# Generate perturbed instances with same cities but different distance scaling
|
|
perturber = TravelingSalesmanPerturber(
|
|
gamma=uniform(loc=1.0, scale=0.25),
|
|
round=True,
|
|
)
|
|
data = perturber.perturb(reference_instance, 3)
|
|
|
|
params = {"seed": 42, "threads": 1}
|
|
|
|
# Gurobipy
|
|
data_filenames = write_pkl_gz(data, dirname(__file__), prefix="tsp-gp-n20-")
|
|
collector = BasicCollector()
|
|
collector.collect(
|
|
data_filenames,
|
|
lambda d: build_tsp_model_gurobipy(d, params=params),
|
|
progress=True,
|
|
verbose=True,
|
|
)
|
|
|
|
# Pyomo
|
|
data_filenames = write_pkl_gz(data, dirname(__file__), prefix="tsp-pyo-n20-")
|
|
collector = BasicCollector()
|
|
collector.collect(
|
|
data_filenames,
|
|
lambda d: build_tsp_model_pyomo(d, params=params),
|
|
progress=True,
|
|
verbose=True,
|
|
)
|