Source code for discrete_optimization.maximum_independent_set.solvers_map

"""Utility module to launch different solvers on the maximum independent set problem."""

#  Copyright (c) 2022 AIRBUS and its affiliates.
#  This source code is licensed under the MIT license found in the
#  LICENSE file in the root directory of this source tree.

from typing import Any

from discrete_optimization.generic_tools.lp_tools import ParametersMilp
from discrete_optimization.generic_tools.result_storage.result_storage import (
    ResultStorage,
)
from discrete_optimization.maximum_independent_set.problem import MisProblem
from discrete_optimization.maximum_independent_set.solvers.asp import AspMisSolver
from discrete_optimization.maximum_independent_set.solvers.cpsat import CpSatMisSolver
from discrete_optimization.maximum_independent_set.solvers.gurobi import (
    GurobiMisSolver,
    GurobiQuadraticMisSolver,
)
from discrete_optimization.maximum_independent_set.solvers.kamis import KamisMisSolver
from discrete_optimization.maximum_independent_set.solvers.mis_solver import MisSolver
from discrete_optimization.maximum_independent_set.solvers.networkx import (
    NetworkxMisSolver,
)
from discrete_optimization.maximum_independent_set.solvers.toulbar import (
    ToulbarMisSolver,
)

solvers: dict[str, list[tuple[type[MisSolver], dict[str, Any]]]] = {
    "lp": [
        (
            GurobiMisSolver,
            {
                "parameters_milp": ParametersMilp.default(),
            },
        ),
        (
            GurobiQuadraticMisSolver,
            {
                "parameters_milp": ParametersMilp.default(),
            },
        ),
    ],
    "cp": [
        (
            CpSatMisSolver,
            {},
        ),
    ],
    "networkX": [(NetworkxMisSolver, {})],
    "kamis": [(KamisMisSolver, {})],
    "asp": [(AspMisSolver, {"time_limit": 20})],
    "toulbar": [(ToulbarMisSolver, {"time_limit": 20})],
}

solvers_map = {}
for key in solvers:
    for solver, param in solvers[key]:
        solvers_map[solver] = (key, param)


[docs] def solve( method_solver: type[MisSolver], problem: MisProblem, **kwargs: Any ) -> ResultStorage: """Solve a mis instance with a given class of solver. Args: method_solver: class of the solver to use problem: mis problem instance **args: specific options of the solver Returns: a ResultsStorage objecting obtained by the solver. """ solver_ = method_solver(problem, **kwargs) try: solver_.init_model(**kwargs) except AttributeError: pass return solver_.solve(**kwargs)