Skip to content

default_mip_solver: Allow solver = a callable #28914

@mkoeppe

Description

@mkoeppe

sage.numerical.backends.generic_backend.get_solver and MixedIntegerLinearProgram(solver=...) already accept a callable (such as a class inheriting from GenericBackend) instead of strings such as 'glpk':

    sage: from sage.numerical.backends.glpk_backend import GLPKBackend
    sage: MixedIntegerLinearProgram(solver=GLPKBackend)

But default_mip_solver only accepts strings.

    sage: from sage.numerical.backends.glpk_backend import GLPKBackend
    sage: default_mip_solver(GLPKBackend)
   AttributeError: type object 'sage.numerical.backends.glpk_backend.GLPKBackend' has no attribute 'capitalize'

Directly changing the module variable containing the setting also does not work; get_solver breaks in that case:

    sage: from sage.numerical.backends.glpk_backend import GLPKBackend
    sage: import sage.numerical.backends.generic_backend as gb
    sage: gb.default_solver = GLPKBackend
    sage: MixedIntegerLinearProgram()
    ... generic_backend.pyx in sage.numerical.backends.generic_backend.get_solver 
   1798 
   1799     else:
-> 1800         raise ValueError("'solver' should be set to 'GLPK', 'GLPK/exact', 'Coin', 'CPLEX', 'CVXOPT', 'Gurobi', 'PPL', 'InteractiveLP', None (in which case the default one is used), or a callable.")

ValueError: 'solver' should be set to 'GLPK', 'GLPK/exact', 'Coin', 'CPLEX', 'CVXOPT', 'Gurobi', 'PPL', 'InteractiveLP', None (in which case the default one is used), or a callable.

CC: @dimpase @dcoudert @sagetrac-tmonteil @vbraun

Component: numerical

Author: Matthias Koeppe

Branch/Commit: 0a70975

Reviewer: Travis Scrimshaw

Issue created by migration from https://trac.sagemath.org/ticket/28914

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions