Switch tests to simpler Knapsack encoding; remove outdated test

pull/1/head
Alinson S. Xavier 6 years ago
parent c82de560f4
commit 6685f4ff23

@ -3,16 +3,16 @@
# Written by Alinson S. Xavier <axavier@anl.gov> # Written by Alinson S. Xavier <axavier@anl.gov>
from miplearn import BranchPriorityComponent, LearningSolver from miplearn import BranchPriorityComponent, LearningSolver
from miplearn.problems.knapsack import MultiKnapsackInstance from miplearn.problems.knapsack import KnapsackInstance
import numpy as np import numpy as np
import tempfile import tempfile
def _get_instances(): def _get_instances():
return [ return [
MultiKnapsackInstance( KnapsackInstance(
weights=np.array([[23., 26., 20., 18.]]), weights=[23., 26., 20., 18.],
prices=np.array([505., 352., 458., 220.]), prices=[505., 352., 458., 220.],
capacities=np.array([67.]) capacity=67.,
), ),
] * 2 ] * 2
@ -23,11 +23,11 @@ def test_branching():
for instance in instances: for instance in instances:
component.after_solve(None, instance, None) component.after_solve(None, instance, None)
component.fit(None) component.fit(None)
for key in [0, 1, 2, 3]: for key in ["default"]:
assert key in component.x_train.keys() assert key in component.x_train.keys()
assert key in component.y_train.keys() assert key in component.y_train.keys()
assert component.x_train[key].shape == (2, 9) assert component.x_train[key].shape == (8, 4)
assert component.y_train[key].shape == (2, 1) assert component.y_train[key].shape == (8, 1)
def test_branch_priority_save_load(): def test_branch_priority_save_load():
@ -36,14 +36,14 @@ def test_branch_priority_save_load():
solver.parallel_solve(_get_instances(), n_jobs=2) solver.parallel_solve(_get_instances(), n_jobs=2)
solver.fit() solver.fit()
comp = solver.components["branch-priority"] comp = solver.components["branch-priority"]
assert comp.x_train[0].shape == (2, 9) assert comp.x_train["default"].shape == (8, 4)
assert comp.y_train[0].shape == (2, 1) assert comp.y_train["default"].shape == (8, 1)
assert 0 in comp.predictors.keys() assert "default" in comp.predictors.keys()
solver.save_state(state_file.name) solver.save_state(state_file.name)
solver = LearningSolver(components={"branch-priority": BranchPriorityComponent()}) solver = LearningSolver(components={"branch-priority": BranchPriorityComponent()})
solver.load_state(state_file.name) solver.load_state(state_file.name)
comp = solver.components["branch-priority"] comp = solver.components["branch-priority"]
assert comp.x_train[0].shape == (2, 9) assert comp.x_train["default"].shape == (8, 4)
assert comp.y_train[0].shape == (2, 1) assert comp.y_train["default"].shape == (8, 1)
assert 0 in comp.predictors.keys() assert "default" in comp.predictors.keys()

@ -3,17 +3,17 @@
# Written by Alinson S. Xavier <axavier@anl.gov> # Written by Alinson S. Xavier <axavier@anl.gov>
from miplearn import LearningSolver from miplearn import LearningSolver
from miplearn.problems.knapsack import MultiKnapsackInstance from miplearn.problems.knapsack import KnapsackInstance
from miplearn.branching import BranchPriorityComponent from miplearn.branching import BranchPriorityComponent
from miplearn.warmstart import WarmStartComponent from miplearn.warmstart import WarmStartComponent
import numpy as np import numpy as np
def _get_instance(): def _get_instance():
return MultiKnapsackInstance( return KnapsackInstance(
weights=np.array([[23., 26., 20., 18.]]), weights=[23., 26., 20., 18.],
prices=np.array([505., 352., 458., 220.]), prices=[505., 352., 458., 220.],
capacities=np.array([67.]) capacity=67.,
) )
def test_solver(): def test_solver():
@ -50,8 +50,8 @@ def test_parallel_solve():
solver = LearningSolver() solver = LearningSolver()
results = solver.parallel_solve(instances, n_jobs=3) results = solver.parallel_solve(instances, n_jobs=3)
assert len(results) == 10 assert len(results) == 10
assert len(solver.components["warm-start"].x_train[0]) == 10 assert len(solver.components["warm-start"].x_train["default"]) == 40
assert len(solver.components["warm-start"].y_train[0]) == 10 assert len(solver.components["warm-start"].y_train["default"]) == 40
def test_solver_random_branch_priority(): def test_solver_random_branch_priority():
instance = _get_instance() instance = _get_instance()

@ -1,44 +0,0 @@
# MIPLearn, an extensible framework for Learning-Enhanced Mixed-Integer Optimization
# Copyright (C) 2019-2020 Argonne National Laboratory. All rights reserved.
# Written by Alinson S. Xavier <axavier@anl.gov>
from miplearn import LearningSolver
from miplearn.transformers import PerVariableTransformer
from miplearn.problems.knapsack import MultiKnapsackInstance
import numpy as np
import pyomo.environ as pe
def test_transform_with_categories():
transformer = PerVariableTransformer()
instance = MultiKnapsackInstance(
weights=np.array([[23., 26., 20., 18.]]),
prices=np.array([505., 352., 458., 220.]),
capacities=np.array([67.])
)
model = instance.to_model()
solver = pe.SolverFactory('gurobi')
solver.options["threads"] = 1
solver.solve(model)
var_split = transformer.split_variables(instance, model)
var_split_expected = {
0: [(model.x, 0)],
1: [(model.x, 1)],
2: [(model.x, 2)],
3: [(model.x, 3)],
}
assert var_split == var_split_expected
var_index_pairs = var_split[0]
x_actual = transformer.transform_instance(instance, var_index_pairs)
x_expected = np.hstack([
instance.get_instance_features(),
instance.get_variable_features(model.x, 0),
])
assert (x_expected == x_actual).all()
solver.solve(model)
y_actual = transformer.transform_solution(var_index_pairs)
y_expected = np.array([[0., 1.]])
assert y_actual.tolist() == y_expected.tolist()

@ -3,17 +3,17 @@
# Written by Alinson S. Xavier <axavier@anl.gov> # Written by Alinson S. Xavier <axavier@anl.gov>
from miplearn import WarmStartComponent, LearningSolver from miplearn import WarmStartComponent, LearningSolver
from miplearn.problems.knapsack import MultiKnapsackInstance from miplearn.problems.knapsack import KnapsackInstance
import numpy as np import numpy as np
import tempfile import tempfile
def _get_instances(): def _get_instances():
return [ return [
MultiKnapsackInstance( KnapsackInstance(
weights=np.array([[23., 26., 20., 18.]]), weights=[23., 26., 20., 18.],
prices=np.array([505., 352., 458., 220.]), prices=[505., 352., 458., 220.],
capacities=np.array([67.]) capacity=67.,
), ),
] * 2 ] * 2
@ -24,14 +24,14 @@ def test_warm_start_save_load():
solver.parallel_solve(_get_instances(), n_jobs=2) solver.parallel_solve(_get_instances(), n_jobs=2)
solver.fit() solver.fit()
comp = solver.components["warm-start"] comp = solver.components["warm-start"]
assert comp.x_train[0].shape == (2, 9) assert comp.x_train["default"].shape == (8, 4)
assert comp.y_train[0].shape == (2, 2) assert comp.y_train["default"].shape == (8, 2)
assert 0 in comp.predictors.keys() assert "default" in comp.predictors.keys()
solver.save_state(state_file.name) solver.save_state(state_file.name)
solver = LearningSolver(components={"warm-start": WarmStartComponent()}) solver = LearningSolver(components={"warm-start": WarmStartComponent()})
solver.load_state(state_file.name) solver.load_state(state_file.name)
comp = solver.components["warm-start"] comp = solver.components["warm-start"]
assert comp.x_train[0].shape == (2, 9) assert comp.x_train["default"].shape == (8, 4)
assert comp.y_train[0].shape == (2, 2) assert comp.y_train["default"].shape == (8, 2)
assert 0 in comp.predictors.keys() assert "default" in comp.predictors.keys()

Loading…
Cancel
Save