Rename solvers to CplexPyomoSolver and GurobyPyomoSolver

pull/3/head
Alinson S. Xavier 5 years ago
parent 78b9982f3d
commit 15473b6a8c

@ -12,7 +12,8 @@ from .components.objective import ObjectiveValueComponent
from .components.lazy import LazyConstraintsComponent from .components.lazy import LazyConstraintsComponent
from .components.cuts import UserCutsComponent from .components.cuts import UserCutsComponent
from .components.primal import PrimalSolutionComponent from .components.primal import PrimalSolutionComponent
from .components.branching import BranchPriorityComponent, BranchPriorityExtractor from .components.branching import (BranchPriorityComponent,
BranchPriorityExtractor)
from .classifiers.adaptive import AdaptiveClassifier from .classifiers.adaptive import AdaptiveClassifier
from .classifiers.threshold import MinPrecisionThreshold from .classifiers.threshold import MinPrecisionThreshold
@ -21,7 +22,8 @@ from .benchmark import BenchmarkRunner
from .instance import Instance from .instance import Instance
from .solvers.learning import LearningSolver from .solvers.pyomo.base import BasePyomoSolver
from .solvers.cplex import CPLEXSolver from .solvers.pyomo.cplex import CplexPyomoSolver
from .solvers.gurobi import GurobiSolver from .solvers.pyomo.gurobi import GurobiPyomoSolver
from .solvers.internal import InternalSolver from .solvers.internal import InternalSolver
from .solvers.learning import LearningSolver

@ -4,7 +4,7 @@
import numpy as np import numpy as np
import pyomo.environ as pe import pyomo.environ as pe
from miplearn import Instance, GurobiSolver, LearningSolver from miplearn import Instance, GurobiPyomoSolver, LearningSolver
from miplearn.problems.knapsack import ChallengeA from miplearn.problems.knapsack import ChallengeA
@ -25,7 +25,7 @@ class CutInstance(Instance):
def test_cut(): def test_cut():
challenge = ChallengeA() challenge = ChallengeA()
gurobi = GurobiSolver() gurobi = GurobiPyomoSolver()
solver = LearningSolver(solver=gurobi, time_limit=10) solver = LearningSolver(solver=gurobi, time_limit=10)
solver.solve(challenge.training_instances[0]) solver.solve(challenge.training_instances[0])
# assert False # assert False

@ -5,15 +5,14 @@
import logging import logging
from copy import deepcopy from copy import deepcopy
from typing import Optional, List from typing import Optional, List
from p_tqdm import p_map from p_tqdm import p_map
from .cplex import CPLEXSolver
from .gurobi import GurobiSolver
from .. import (ObjectiveValueComponent, from .. import (ObjectiveValueComponent,
PrimalSolutionComponent, PrimalSolutionComponent,
LazyConstraintsComponent, LazyConstraintsComponent,
UserCutsComponent) UserCutsComponent)
from .pyomo.cplex import CplexPyomoSolver
from .pyomo.gurobi import GurobiPyomoSolver
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -77,9 +76,9 @@ class LearningSolver:
def _create_internal_solver(self): def _create_internal_solver(self):
logger.debug("Initializing %s" % self.internal_solver_factory) logger.debug("Initializing %s" % self.internal_solver_factory)
if self.internal_solver_factory == "cplex": if self.internal_solver_factory == "cplex":
solver = CPLEXSolver() solver = CplexPyomoSolver()
elif self.internal_solver_factory == "gurobi": elif self.internal_solver_factory == "gurobi":
solver = GurobiSolver() solver = GurobiPyomoSolver()
elif callable(self.internal_solver_factory): elif callable(self.internal_solver_factory):
solver = self.internal_solver_factory() solver = self.internal_solver_factory()
else: else:

@ -0,0 +1,3 @@
# MIPLearn: Extensible Framework for Learning-Enhanced Mixed-Integer Optimization
# Copyright (C) 2020, UChicago Argonne, LLC. All rights reserved.
# Released under the modified BSD license. See COPYING.md for more details.

@ -2,24 +2,27 @@
# Copyright (C) 2020, UChicago Argonne, LLC. All rights reserved. # Copyright (C) 2020, UChicago Argonne, LLC. All rights reserved.
# Released under the modified BSD license. See COPYING.md for more details. # Released under the modified BSD license. See COPYING.md for more details.
import logging
import re import re
import sys import sys
import logging
import pyomo
from abc import abstractmethod from abc import abstractmethod
from io import StringIO from io import StringIO
from pyomo import environ as pe
import pyomo
import pyomo.environ as pe
from pyomo.core import Var from pyomo.core import Var
from . import RedirectOutput from .. import RedirectOutput
from .internal import InternalSolver from ..internal import InternalSolver
from ..instance import Instance from ...instance import Instance
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
class PyomoSolver(InternalSolver): class BasePyomoSolver(InternalSolver):
"""
Base class for all Pyomo solvers.
"""
def __init__(self): def __init__(self):
self.instance = None self.instance = None
self.model = None self.model = None

@ -2,16 +2,16 @@
# Copyright (C) 2020, UChicago Argonne, LLC. All rights reserved. # Copyright (C) 2020, UChicago Argonne, LLC. All rights reserved.
# Released under the modified BSD license. See COPYING.md for more details. # Released under the modified BSD license. See COPYING.md for more details.
import pyomo.environ as pe from pyomo import environ as pe
from scipy.stats import randint from scipy.stats import randint
from .pyomo import PyomoSolver from .base import BasePyomoSolver
class CPLEXSolver(PyomoSolver): class CplexPyomoSolver(BasePyomoSolver):
def __init__(self, options=None): def __init__(self, options=None):
""" """
Creates a new CPLEXSolver. Creates a new CPLEX solver, accessed through Pyomo.
Parameters Parameters
---------- ----------
@ -47,4 +47,3 @@ class CPLEXSolver(PyomoSolver):
def set_branching_priorities(self, priorities): def set_branching_priorities(self, priorities):
raise NotImplementedError raise NotImplementedError

@ -2,25 +2,24 @@
# Copyright (C) 2020, UChicago Argonne, LLC. All rights reserved. # Copyright (C) 2020, UChicago Argonne, LLC. All rights reserved.
# Released under the modified BSD license. See COPYING.md for more details. # Released under the modified BSD license. See COPYING.md for more details.
import logging
import sys import sys
import logging
from io import StringIO from io import StringIO
from pyomo import environ as pe
import pyomo.environ as pe
from miplearn.solvers import RedirectOutput
from scipy.stats import randint from scipy.stats import randint
from .pyomo import PyomoSolver from .base import BasePyomoSolver
from .. import RedirectOutput
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
class GurobiSolver(PyomoSolver): class GurobiPyomoSolver(BasePyomoSolver):
def __init__(self, def __init__(self,
use_lazy_callbacks=True, use_lazy_callbacks=True,
options=None): options=None):
""" """
Creates a new GurobiSolver. Creates a new Gurobi solver, accessed through Pyomo.
Parameters Parameters
---------- ----------

@ -5,8 +5,7 @@ from io import StringIO
import pyomo.environ as pe import pyomo.environ as pe
from miplearn.solvers import RedirectOutput from miplearn.solvers import RedirectOutput
from miplearn.solvers.cplex import CPLEXSolver from miplearn import CplexPyomoSolver, GurobiPyomoSolver
from miplearn.solvers.gurobi import GurobiSolver
from . import _get_instance from . import _get_instance
from ...problems.knapsack import ChallengeA from ...problems.knapsack import ChallengeA
@ -23,7 +22,7 @@ def test_redirect_output():
def test_internal_solver_warm_starts(): def test_internal_solver_warm_starts():
for solver in [GurobiSolver(), CPLEXSolver()]: for solver in [GurobiPyomoSolver(), CplexPyomoSolver()]:
instance = _get_instance() instance = _get_instance()
model = instance.to_model() model = instance.to_model()
@ -64,7 +63,7 @@ def test_internal_solver_warm_starts():
def test_internal_solver(): def test_internal_solver():
for solver in [GurobiSolver(), CPLEXSolver()]: for solver in [GurobiPyomoSolver(), CplexPyomoSolver()]:
instance = _get_instance() instance = _get_instance()
model = instance.to_model() model = instance.to_model()
@ -99,9 +98,9 @@ def test_internal_solver():
def test_node_count(): def test_node_count():
for solver in [GurobiSolver(), for solver in [GurobiPyomoSolver(),
GurobiSolver(use_lazy_callbacks=False), GurobiPyomoSolver(use_lazy_callbacks=False),
CPLEXSolver()]: CplexPyomoSolver()]:
challenge = ChallengeA() challenge = ChallengeA()
solver.set_time_limit(1) solver.set_time_limit(1)
solver.set_instance(challenge.test_instances[0]) solver.set_instance(challenge.test_instances[0])

@ -5,9 +5,8 @@
import pickle import pickle
import tempfile import tempfile
from miplearn import BranchPriorityComponent from miplearn import BranchPriorityComponent, GurobiPyomoSolver
from miplearn import LearningSolver from miplearn import LearningSolver
from miplearn.solvers.gurobi import GurobiSolver
from . import _get_instance from . import _get_instance
@ -15,7 +14,7 @@ from . import _get_instance
def test_learning_solver(): def test_learning_solver():
instance = _get_instance() instance = _get_instance()
for mode in ["exact", "heuristic"]: for mode in ["exact", "heuristic"]:
for internal_solver in ["cplex", "gurobi", GurobiSolver]: for internal_solver in ["cplex", "gurobi", GurobiPyomoSolver]:
solver = LearningSolver(time_limit=300, solver = LearningSolver(time_limit=300,
gap_tolerance=1e-3, gap_tolerance=1e-3,
threads=1, threads=1,

Loading…
Cancel
Save