Source code for optiwindnet.MILP
# SPDX-License-Identifier: MIT
# https://gitlab.windenergy.dtu.dk/TOPFARM/OptiWindNet/
from ._core import (
FeederLimit,
FeederRoute,
ModelMetadata,
ModelOptions,
OWNWarmupFailed,
OWNSolutionNotFound,
SolutionInfo,
Solver,
Topology,
)
__all__ = (
'Solver',
'Topology',
'FeederRoute',
'FeederLimit',
'ModelOptions',
'ModelMetadata',
'OWNWarmupFailed',
'OWNSolutionNotFound',
'SolutionInfo',
'solver_factory',
)
[docs]
def solver_factory(solver_name: str) -> Solver:
"""Create a Solver object tied to the specified external MILP solver.
Note that the only solver that is a dependency of OptiWindNet is 'ortools'.
Check OptiWindNet's documentation on how to install optional solvers.
Args:
solver_name: one of 'ortools', 'cplex', 'gurobi', 'cbc', 'scip', 'highs'.
Returns:
Solver instance that can produce solutions for the cable routing problem.
"""
match solver_name:
case 'ortools':
from .ortools import SolverORTools
return SolverORTools()
case 'cplex':
from .cplex import SolverCplex
return SolverCplex()
case 'gurobi':
from .gurobi import SolverGurobi
return SolverGurobi()
case 'cbc' | 'scip':
from .pyomo import SolverPyomo
return SolverPyomo(solver_name)
case 'highs':
from .pyomo import SolverPyomoAppsi
from pyomo.contrib.appsi.solvers.highs import Highs
return SolverPyomoAppsi(solver_name, Highs)
case _:
raise ValueError(f'Unsupported solver: {solver_name}')