'Returns the result of the call to the solver.
Parameters
objective : LinOp
The canonicalized objective.
constraints : list
The list of canonicalized cosntraints.
cached_data : dict
A map of solver name to cached problem data.
warm_start : bool
Not used.
verbose : bool
Should the solver print output?
solver_opts : dict
Additional arguments for the solver.
Returns
tuple
(status, optimal value, primal, equality dual, inequality dual)'

def solve(self, objective, constraints, cached_data, warm_start, verbose, solver_opts):

    from cylp.cy import CyClpSimplex
    data = self.get_problem_data(objective, constraints, cached_data)
    c = data[s.C]
    b = data[s.B]
    A = data[s.A]
    dims = data[s.DIMS]
    n = c.shape[0]
    model = CyClpSimplex()
    x = model.addVariable('x', n)
    if self.is_mip(data):
        for i in data[s.BOOL_IDX]:
            model.setInteger(x[i])
        for i in data[s.INT_IDX]:
            model.setInteger(x[i])
    model += ((A[0:dims[s.EQ_DIM], :] * x) == b[0:dims[s.EQ_DIM]])
    leq_start = dims[s.EQ_DIM]
    leq_end = (dims[s.EQ_DIM] + dims[s.LEQ_DIM])
    model += ((A[leq_start:leq_end, :] * x) <= b[leq_start:leq_end])
    if self.is_mip(data):
        for i in data[s.BOOL_IDX]:
            model += (0 <= x[i] <= 1)
    model.objective = c
    status = None
    if self.is_mip(data):
        cbcModel = model.getCbcModel()
        if (not verbose):
            cbcModel.logLevel = 0
        for (cut_name, cut_func) in six.iteritems(self.SUPPORTED_CUT_GENERATORS):
            if ((cut_name in solver_opts) and solver_opts[cut_name]):
                module = importlib.import_module('cylp.cy.CyCgl')
                funcToCall = getattr(module, cut_func)
                cut_gen = funcToCall()
                cbcModel.addCutGenerator(cut_gen, name=cut_name)
        status = cbcModel.branchAndBound()
    else:
        if (not verbose):
            model.logLevel = 0
        status = model.primal()
    results_dict = {}
    results_dict['status'] = status
    if self.is_mip(data):
        results_dict['x'] = cbcModel.primalVariableSolution['x']
        results_dict['obj_value'] = cbcModel.objectiveValue
    else:
        results_dict['x'] = model.primalVariableSolution['x']
        results_dict['obj_value'] = model.objectiveValue
    return self.format_results(results_dict, data, cached_data)
