Source code for foxes_opt.core.farm_objective
from typing import Any, TYPE_CHECKING
from iwopy import Objective
from foxes.core import WindFarm
from foxes.utils import new_instance, all_subclasses
if TYPE_CHECKING:
from matplotlib.axes import Axes
from .farm_opt_problem import FarmOptProblem
[docs]
class FarmObjective(Objective):
"""
Abstract base class for foxes wind farm
objective functions.
"""
def __init__(
self,
problem: "FarmOptProblem",
name: str,
sel_turbines: list[int] | None = None,
**kwargs: Any,
) -> None:
"""
Parameters
----------
problem
The underlying optimization problem
name
The name of the objective function
sel_turbines
The selected turbines
kwargs
Additional parameters for `iwopy.Objective`
"""
super().__init__(problem, name, **kwargs)
self._sel_turbines = sel_turbines
@property
def farm(self) -> WindFarm:
"""
The wind farm
Returns
-------
value
The wind farm
"""
return self.problem.farm
@property
def sel_turbines(self) -> list[int]:
"""
The list of selected turbines
Returns
-------
value
The list of selected turbines
"""
return (
self.problem.sel_turbines
if self._sel_turbines is None
else self._sel_turbines
)
@property
def n_sel_turbines(self) -> int:
"""
The numer of selected turbines
Returns
-------
value
The numer of selected turbines
"""
return len(self.sel_turbines)
[docs]
@classmethod
def print_models(cls) -> None:
"""
Prints all model names.
"""
names = sorted([scls.__name__ for scls in all_subclasses(cls)])
for n in names:
print(n)
[docs]
@classmethod
def new(cls, objective_type: str, *args: Any, **kwargs: Any) -> Any:
"""
Run-time farm objective factory.
Parameters
----------
objective_type
The selected derived class name
args
Additional parameters for the constructor
kwargs
Additional parameters for the constructor
"""
return new_instance(cls, objective_type, *args, **kwargs)