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.
29 lines
953 B
29 lines
953 B
# 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.
|
|
|
|
import logging
|
|
from typing import Any
|
|
|
|
from miplearn import InternalSolver
|
|
from miplearn.solvers.gurobi import GurobiSolver
|
|
from . import _get_knapsack_instance
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def test_lazy_cb() -> None:
|
|
solver = GurobiSolver()
|
|
instance = _get_knapsack_instance(solver)
|
|
model = instance.to_model()
|
|
|
|
def lazy_cb(cb_solver: InternalSolver, cb_model: Any) -> None:
|
|
cobj = (cb_model.getVarByName("x[0]") * 1.0, "<", 0.0, "cut")
|
|
if not cb_solver.is_constraint_satisfied(cobj):
|
|
cb_solver.add_constraint(cobj)
|
|
|
|
solver.set_instance(instance, model)
|
|
solver.solve(lazy_cb=lazy_cb)
|
|
solution = solver.get_solution()
|
|
assert solution["x[0]"] == 0.0
|