Source code for optalg.opt_solver.cbc

#****************************************************#
# This file is part of OPTALG.                       #
#                                                    #
# Copyright (c) 2019, Tomas Tinoco De Rubira.        #
#                                                    #
# OPTALG is released under the BSD 2-clause license. #
#****************************************************#

from __future__ import print_function
import numpy as np
from .opt_solver_error import *
from .opt_solver import OptSolver
from .problem import OptProblem

[docs]class OptSolverCbc(OptSolver): parameters = {'quiet' : False} def __init__(self): """ Mixed integer linear "branch and cut" solver from COIN-OR. """ # Import from ._cbc import CbcContext OptSolver.__init__(self) self.parameters = OptSolverCbc.parameters.copy() def supports_properties(self, properties): for p in properties: if p not in [OptProblem.PROP_CURV_LINEAR, OptProblem.PROP_VAR_CONTINUOUS, OptProblem.PROP_VAR_INTEGER, OptProblem.PROP_TYPE_FEASIBILITY, OptProblem.PROP_TYPE_OPTIMIZATION]: return False return True def solve(self, problem): # Import from ._cbc import CbcContext # Local vars params = self.parameters # Parameters quiet = params['quiet'] # Problem try: self.problem = problem.to_mixintlin() except: raise OptSolverError_BadProblemType(self) # Cbc context self.cbc_context = CbcContext() self.cbc_context.loadProblem(self.problem.get_num_primal_variables(), self.problem.A, self.problem.l, self.problem.u, self.problem.c, self.problem.b, self.problem.b) self.cbc_context.setInteger(self.problem.P) # Reset self.reset() # Options if quiet: self.cbc_context.setParameter("loglevel", 0) # Solve self.cbc_context.solve() # Save self.x = self.cbc_context.getColSolution() if self.cbc_context.status() == 0: self.set_status(self.STATUS_SOLVED) self.set_error_msg('') else: raise OptSolverError_Cbc(self)