def __init__(self, name: str = "", sense: str = MINIMIZE, solver_name: str = ''): # initializing variables with default values self.name: str = name self.sense: str = sense self.solver_name: str = solver_name self.solver: Solver = None # list of constraints and variables self.constrs: List[Constr] = [] self.vars: List[Var] = [] if solver_name.upper() == GUROBI: from mip.gurobi import SolverGurobi self.solver = SolverGurobi(self, name, sense) elif solver_name.upper() == CBC: from mip.cbc import SolverCbc self.solver = SolverCbc(self, name, sense) else: # search for the best solver available if gurobi.has_gurobi: from mip.gurobi import SolverGurobi self.solver = SolverGurobi(self, name, sense) elif cbc.has_cbc: from mip.cbc import SolverCbc self.solver = SolverCbc(self, name, sense)
def __init__(self, name: str = "", sense: str = MINIMIZE, solver_name: str = ""): """Model constructor Creates a Mixed-Integer Linear Programming Model. The default model optimization direction is Minimization. To store and optimize the model the MIP package automatically searches and connects in runtime to the dynamic library of some MIP solver installed on your computer, nowadays gurobi and cbc are supported. This solver is automatically selected, but you can force the selection of a specific solver with the parameter solver_name. Args: name (str): model name sense (str): MINIMIZATION ("MIN") or MAXIMIZATION ("MAX") solver_name: gurobi or cbc, searches for which solver is available if not informed """ # initializing variables with default values self.name = name self.solver_name = solver_name self.solver = None if "solver_name" in environ: solver_name = environ["solver_name"] if "solver_name".upper() in environ: solver_name = environ["solver_name".upper()] self.__mipStart = [] # list of constraints and variables self.constrs = [] self.constrs_by_name = {} self.vars = [] self.vars_by_name = {} self.cut_generators = [] if solver_name.upper() == GUROBI: from mip.gurobi import SolverGurobi self.solver = SolverGurobi(self, name, sense) elif solver_name.upper() == CBC: from mip.cbc import SolverCbc self.solver = SolverCbc(self, name, sense) else: # checking which solvers are available from mip import gurobi if gurobi.has_gurobi: from mip.gurobi import SolverGurobi self.solver = SolverGurobi(self, name, sense) self.solver_name = GUROBI else: from mip import cbc from mip.cbc import SolverCbc self.solver = SolverCbc(self, name, sense) self.solver_name = CBC self.sense = sense
def clear(self: Solver): """Clears the model All variables, constraints and parameters will be reset. In addition, a new solver instance will be instantiated to implement the formulation. """ # creating a new solver instance sense = self.sense if self.solver_name.upper() == GUROBI: from mip.gurobi import SolverGurobi self.solver = SolverGurobi(self, self.name, sense) elif self.solver_name.upper() == CBC: from mip.cbc import SolverCbc self.solver = SolverCbc(self, self.name, sense) else: # checking which solvers are available from mip import gurobi if gurobi.found: from mip.gurobi import SolverGurobi self.solver = SolverGurobi(self, self.name, sense) self.solver_name = GUROBI else: from mip.cbc import SolverCbc self.solver = SolverCbc(self, self.name, sense) self.solver_name = CBC # list of constraints and variables self.constrs = ConstrList(self) self.vars = VarList(self) # initializing additional control variables self.__cuts = 1 self.__cuts_generator = None self.__lazy_constrs_generator = None self.__start = [] self._status = OptimizationStatus.LOADED self.__threads = 0
def __init__(self, name: str = "", sense: str = MINIMIZE, solver_name: str = ""): """Model constructor Creates a Mixed-Integer Linear Programming Model. The default model optimization direction is Minimization. To store and optimize the model the MIP package automatically searches and connects in runtime to the dynamic library of some MIP solver installed on your computer, nowadays gurobi and cbc are supported. This solver is automatically selected, but you can force the selection of a specific solver with the parameter solver_name. Args: name (str): model name sense (str): MINIMIZATION ("MIN") or MAXIMIZATION ("MAX") solver_name: gurobi or cbc, searches for which solver is available if not informed """ # initializing variables with default values self.name = name self.solver_name = solver_name self.solver = None # reading solver_name from an environment variable (if applicable) if not self.solver_name and "solver_name" in environ: self.solver_name = environ["solver_name"] if not self.solver_name and "solver_name".upper() in environ: self.solver_name = environ["solver_name".upper()] # creating a solver instance if self.solver_name.upper() == GUROBI: from mip.gurobi import SolverGurobi self.solver = SolverGurobi(self, self.name, sense) elif self.solver_name.upper() == CBC: from mip.cbc import SolverCbc self.solver = SolverCbc(self, self.name, sense) else: # checking which solvers are available from mip import gurobi if gurobi.has_gurobi: from mip.gurobi import SolverGurobi self.solver = SolverGurobi(self, self.name, sense) self.solver_name = GUROBI else: from mip.cbc import SolverCbc self.solver = SolverCbc(self, self.name, sense) self.solver_name = CBC # list of constraints and variables self.constrs = ConstrList(self) self.vars = VarList(self) # initializing additional control variables self.__cuts = 1 self.__cuts_generator = None self.__lazy_constrs_generator = None self.__start = None self.__status = OptimizationStatus.LOADED self.__threads = 0 self.__n_cols = 0 self.__n_rows = 0
def __init__( self: "Model", name: str = "", sense: str = MINIMIZE, solver_name: str = "", solver: Optional[Solver] = None, ): """Model constructor Creates a Mixed-Integer Linear Programming Model. The default model optimization direction is Minimization. To store and optimize the model the MIP package automatically searches and connects in runtime to the dynamic library of some MIP solver installed on your computer, nowadays gurobi and cbc are supported. This solver is automatically selected, but you can force the selection of a specific solver with the parameter solver_name. Args: name (str): model name sense (str): MINIMIZATION ("MIN") or MAXIMIZATION ("MAX") solver_name(str): gurobi or cbc, searches for which solver is available if not informed solver(Solver): a (:class:`~mip.solver.Solver`) object; note that if this argument is provided, solver_name will be ignored """ self._ownSolver = True # initializing variables with default values self.solver_name = solver_name self.solver = solver # type: Optional[Solver] # reading solver_name from an environment variable (if applicable) if not solver: if not self.solver_name and "solver_name" in environ: self.solver_name = environ["solver_name"] if not self.solver_name and "solver_name".upper() in environ: self.solver_name = environ["solver_name".upper()] # creating a solver instance if self.solver_name.upper() in ["GUROBI", "GRB"]: from mip.gurobi import SolverGurobi self.solver = SolverGurobi(self, name, sense) elif self.solver_name.upper() == "CBC": from mip.cbc import SolverCbc self.solver = SolverCbc(self, name, sense) else: # checking which solvers are available try: from mip.gurobi import SolverGurobi has_gurobi = True except ImportError: has_gurobi = False if has_gurobi: from mip.gurobi import SolverGurobi self.solver = SolverGurobi(self, name, sense) self.solver_name = GUROBI else: from mip.cbc import SolverCbc self.solver = SolverCbc(self, name, sense) self.solver_name = CBC # list of constraints and variables self.constrs = ConstrList(self) self.vars = VarList(self) self._status = OptimizationStatus.LOADED # initializing additional control variables self.__cuts = -1 self.__cut_passes = -1 self.__clique = -1 self.__preprocess = -1 self.__cuts_generator = None self.__lazy_constrs_generator = None self.__start = None self.__threads = 0 self.__lp_method = LP_Method.AUTO self.__n_cols = 0 self.__n_rows = 0 self.__gap = INF self.__store_search_progress_log = False self.__plog = ProgressLog() self.__integer_tol = 1e-6 self.__infeas_tol = 1e-6 self.__opt_tol = 1e-6 self.__max_mip_gap = 1e-4 self.__max_mip_gap_abs = 1e-10