Implement iteration_cb for LearningSolver; reactivate TSP

This commit is contained in:
2020-09-23 17:46:18 -05:00
parent 5390a5b656
commit e527e75481
8 changed files with 91 additions and 60 deletions

View File

@@ -19,56 +19,56 @@ def test_generator():
assert len(instances) == 100
assert instances[0].n_cities == 100
assert norm(instances[0].distances - instances[0].distances.T) < 1e-6
d = [instance.distances[0,1] for instance in instances]
d = [instance.distances[0, 1] for instance in instances]
assert np.std(d) > 0
# def test_instance():
# n_cities = 4
# distances = np.array([
# [0., 1., 2., 1.],
# [1., 0., 1., 2.],
# [2., 1., 0., 1.],
# [1., 2., 1., 0.],
# ])
# instance = TravelingSalesmanInstance(n_cities, distances)
# for solver_name in ['gurobi', 'cplex']:
# solver = LearningSolver(solver=solver_name)
# solver.solve(instance)
# x = instance.solution["x"]
# assert x[0,1] == 1.0
# assert x[0,2] == 0.0
# assert x[0,3] == 1.0
# assert x[1,2] == 1.0
# assert x[1,3] == 0.0
# assert x[2,3] == 1.0
# assert instance.lower_bound == 4.0
# assert instance.upper_bound == 4.0
#
#
# def test_subtour():
# n_cities = 6
# cities = np.array([
# [0., 0.],
# [1., 0.],
# [2., 0.],
# [3., 0.],
# [0., 1.],
# [3., 1.],
# ])
# distances = squareform(pdist(cities))
# instance = TravelingSalesmanInstance(n_cities, distances)
# for solver_name in ['gurobi', 'cplex']:
# solver = LearningSolver(solver=solver_name)
# solver.solve(instance)
# assert hasattr(instance, "found_violated_lazy_constraints")
# assert hasattr(instance, "found_violated_user_cuts")
# x = instance.solution["x"]
# assert x[0,1] == 1.0
# assert x[0,4] == 1.0
# assert x[1,2] == 1.0
# assert x[2,3] == 1.0
# assert x[3,5] == 1.0
# assert x[4,5] == 1.0
# solver.fit([instance])
# solver.solve(instance)
def test_instance():
n_cities = 4
distances = np.array([
[0., 1., 2., 1.],
[1., 0., 1., 2.],
[2., 1., 0., 1.],
[1., 2., 1., 0.],
])
instance = TravelingSalesmanInstance(n_cities, distances)
for solver_name in ['gurobi', 'cplex']:
solver = LearningSolver(solver=solver_name)
solver.solve(instance)
x = instance.solution["x"]
assert x[0, 1] == 1.0
assert x[0, 2] == 0.0
assert x[0, 3] == 1.0
assert x[1, 2] == 1.0
assert x[1, 3] == 0.0
assert x[2, 3] == 1.0
assert instance.lower_bound == 4.0
assert instance.upper_bound == 4.0
def test_subtour():
n_cities = 6
cities = np.array([
[0., 0.],
[1., 0.],
[2., 0.],
[3., 0.],
[0., 1.],
[3., 1.],
])
distances = squareform(pdist(cities))
instance = TravelingSalesmanInstance(n_cities, distances)
for solver_name in ['gurobi', 'cplex']:
solver = LearningSolver(solver=solver_name)
solver.solve(instance)
assert hasattr(instance, "found_violated_lazy_constraints")
assert hasattr(instance, "found_violated_user_cuts")
x = instance.solution["x"]
assert x[0, 1] == 1.0
assert x[0, 4] == 1.0
assert x[1, 2] == 1.0
assert x[2, 3] == 1.0
assert x[3, 5] == 1.0
assert x[4, 5] == 1.0
solver.fit([instance])
solver.solve(instance)