Source code for optalg.opt_solver.clp

#****************************************************#
# 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 OptSolverClp(OptSolver): parameters = {'quiet' : False} def __init__(self): """ Linear programming solver from COIN-OR. """ # Import from ._clp import ClpContext OptSolver.__init__(self) self.parameters = OptSolverClp.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_TYPE_FEASIBILITY, OptProblem.PROP_TYPE_OPTIMIZATION]: return False return True def solve(self, problem): # Import from ._clp import ClpContext # Local vars params = self.parameters # Parameters quiet = params['quiet'] # Problem try: self.problem = problem.to_lin() except: raise OptSolverError_BadProblemType(self) # Clp context self.clp_context = ClpContext() self.clp_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) # Reset self.reset() # Options if quiet: self.clp_context.setlogLevel(0) # Solve self.clp_context.initialSolve() # Save self.x = self.clp_context.primalColumnSolution() self.lam = self.clp_context.dualRowSolution() self.pi = np.maximum(self.clp_context.dualColumnSolution(),0) self.mu = -np.minimum(self.clp_context.dualColumnSolution(),0) if self.clp_context.status() == 0: self.set_status(self.STATUS_SOLVED) self.set_error_msg('') else: raise OptSolverError_Clp(self)