You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
MIPLearn/tests/test_features.py

83 lines
2.4 KiB

# MIPLearn: Extensible Framework for Learning-Enhanced Mixed-Integer Optimization
# Copyright (C) 2020-2021, UChicago Argonne, LLC. All rights reserved.
# Released under the modified BSD license. See COPYING.md for more details.
from miplearn.features import (
FeaturesExtractor,
InstanceFeatures,
Variable,
Constraint,
)
from miplearn.solvers.gurobi import GurobiSolver
from miplearn.solvers.tests import assert_equals
def test_knapsack() -> None:
solver = GurobiSolver()
instance = solver.build_test_instance_knapsack()
model = instance.to_model()
solver.set_instance(instance, model)
FeaturesExtractor(solver).extract(instance)
assert_equals(
instance.features.variables,
{
"x[0]": Variable(
category="default",
lower_bound=0.0,
obj_coeff=505.0,
type="B",
upper_bound=1.0,
user_features=[23.0, 505.0],
),
"x[1]": Variable(
category="default",
lower_bound=0.0,
obj_coeff=352.0,
type="B",
upper_bound=1.0,
user_features=[26.0, 352.0],
),
"x[2]": Variable(
category="default",
lower_bound=0.0,
obj_coeff=458.0,
type="B",
upper_bound=1.0,
user_features=[20.0, 458.0],
),
"x[3]": Variable(
category="default",
lower_bound=0.0,
obj_coeff=220.0,
type="B",
upper_bound=1.0,
user_features=[18.0, 220.0],
),
},
)
assert_equals(
instance.features.constraints,
{
"eq_capacity": Constraint(
lhs={
"x[0]": 23.0,
"x[1]": 26.0,
"x[2]": 20.0,
"x[3]": 18.0,
},
sense="<",
rhs=67.0,
lazy=False,
category="eq_capacity",
user_features=[0.0],
)
},
)
assert_equals(
instance.features.instance,
InstanceFeatures(
user_features=[67.0, 21.75],
lazy_constraint_count=0,
),
)