Source code for optalg.opt_solver.cbc
#****************************************************#
# This file is part of OPTALG. #
# #
# Copyright (c) 2015-2017, 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_mixintlin import MixIntLinProblem
[docs]class OptSolverCbc(OptSolver):
parameters = {'quiet' : False}
def __init__(self):
"""
Mixed integer linear "branch and cut" sovler from COIN-OR.
"""
OptSolver.__init__(self)
self.parameters = OptSolverCbc.parameters.copy()
def solve(self,problem):
# Import
from ._cbc import CbcContext
# Local vars
params = self.parameters
# Parameters
quiet = params['quiet']
# Problem
if not isinstance(problem,MixIntLinProblem):
raise OptSolverError_BadProblemType(self)
self.problem = problem
# Cbc context
self.cbc_context = CbcContext()
self.cbc_context.loadProblem(problem.get_num_primal_variables(),
problem.A,
problem.l,
problem.u,
problem.c,
problem.b,
problem.b)
self.cbc_context.setInteger(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)