foxes_opt.constraints.nearest_group

Classes

NearestGroupConstraint

Keep every turbine in a sufficiently large nearby connected group.

Module Contents

class foxes_opt.constraints.nearest_group.NearestGroupConstraint(problem: foxes_opt.core.farm_opt_problem.FarmOptProblem, max_nearest_dist: float, min_nearest_group_size: int, name: str = 'nearest_group', sel_turbines: list[int] | None = None, infer_vars: bool = True, check_only_selected: bool = False, **kwargs: Any)[source]

Bases: foxes_opt.core.farm_constraint.FarmConstraint

Keep every turbine in a sufficiently large nearby connected group.

For every selected turbine, this constraint finds the smallest connection radius at which its distance graph component reaches the required group size. The constraint value is that radius minus max_nearest_dist. Requiring a group size of at least two also enforces the nearest-turbine upper bound when min_nearest_group_size is one.

The connection radius is piecewise equal to the length of one graph edge. Its analytical derivative follows that active edge. At equal edge lengths, a deterministic active branch is used.

Parameters:
problem

The underlying optimization problem.

max_nearest_dist

Maximum graph-edge distance for connected turbine groups.

min_nearest_group_size

Minimum number of turbines in every connected group.

name

The name of the constraint.

sel_turbines

The selected turbines.

infer_vars

Whether to infer the float variables automatically.

check_only_selected

Whether groups may contain only selected turbines. By default, fixed turbines can contribute to a selected turbine’s group.

kwargs

Additional parameters for iwopy.Constraint.

active_components(vars_float: numpy.ndarray, lower: numpy.ndarray, upper: numpy.ndarray) → numpy.ndarray

Select components that can bind within a guarded variable box.

Parameters:
vars_float

Initial values in this function’s float-variable order.

lower, upper

Enforced variable bounds in the same order. Infinite bounds must be treated conservatively.

Returns:
components

Unique local component indices. The default retains all. Overrides may omit a component only when it is guaranteed feasible throughout the box, not merely at the initial point. Full evaluation and feasibility contracts remain unchanged.

add_to_layout_figure(ax: matplotlib.axes.Axes, **kwargs: Any) → matplotlib.axes.Axes

Add to a layout figure

Parameters:
ax

The figure axis

ana_deriv(vars_int: numpy.ndarray, vars_float: numpy.ndarray, var: int, components: collections.abc.Sequence[int] | numpy.ndarray | None = None) → numpy.ndarray[source]

Calculate the analytical derivative for one float variable.

Parameters:
vars_int

The integer variable values.

vars_float

The float variable values.

var

The float variable index.

components

The selected components, or None for all.

Returns:
derivative

The derivative values for the selected components.

calc_individual(vars_int: numpy.ndarray, vars_float: numpy.ndarray, problem_results: Any, components: collections.abc.Sequence[int] | numpy.ndarray | None = None) → numpy.ndarray[source]

Calculate constraint values for one individual.

Parameters:
vars_int

The integer variable values.

vars_float

The float variable values.

problem_results

The results of applying the variables to the problem.

components

The selected components, or None for all.

Returns:
values

The selected constraint values.

calc_population(vars_int: numpy.ndarray, vars_float: numpy.ndarray, problem_results: Any, components: collections.abc.Sequence[int] | numpy.ndarray | None = None) → numpy.ndarray[source]

Calculate constraint values for a population.

Parameters:
vars_int

The integer variable values.

vars_float

The float variable values.

problem_results

The results of applying the population to the problem.

components

The selected components, or None for all.

Returns:
values

The selected constraint values for each individual.

check_individual(constraint_values: numpy.ndarray, verbosity: int = 0) → numpy.ndarray

Check if the constraints are fullfilled for the given individual.

Parameters:
constraint_values

The constraint values, shape: (n_components,)

verbosity

The verbosity level, 0 = silent

Returns:
values

The boolean result, shape: (n_components,)

check_population(constraint_values: numpy.ndarray, verbosity: int = 0) → numpy.ndarray

Check if the constraints are fullfilled for the given population.

Parameters:
constraint_values

The constraint values, shape: (n_pop, n_components,)

verbosity

The verbosity level, 0 = silent

Returns:
values

The boolean result, shape: (n_pop, n_components)

component_turbines(components: collections.abc.Sequence[int] | numpy.ndarray | None = None) → set[int][source]

Return turbines represented by constraint components.

Parameters:
components

The selected component indices, or None for all components.

Returns:
turbines

The represented turbine indices.

finalize(verbosity: int = 0, /) → None
finalize(*, verbosity: int = 0) → None

Finalize the object.

Parameters:
verbosity

The verbosity level, 0 = silent

finalize_individual(vars_int: numpy.ndarray, vars_float: numpy.ndarray, problem_results: object, verbosity: int = 1) → numpy.ndarray

Finalization, given the champion data.

Parameters:
vars_int

The optimal integer variable values, shape: (n_vars_int,)

vars_float

The optimal float variable values, shape: (n_vars_float,)

problem_results

The results of the variable application to the problem

verbosity

The verbosity level, 0 = silent

Returns:
values

The component values, shape: (n_components,)

finalize_population(vars_int: numpy.ndarray, vars_float: numpy.ndarray, problem_results: object, verbosity: int = 1) → numpy.ndarray

Finalization, given the final population data.

Parameters:
vars_int

The integer variable values of the final generation, shape: (n_pop, n_vars_int)

vars_float

The float variable values of the final generation, shape: (n_pop, n_vars_float)

problem_results

The results of the variable application to the problem

verbosity

The verbosity level, 0 = silent

Returns:
values

The component values, shape: (n_pop, n_components)

get_bounds() → tuple[numpy.ndarray, numpy.ndarray]

Returns the bounds for all components.

Non-existing bounds are expressed by np.inf.

Returns:
min

The lower bounds, shape: (n_components,)

max

The upper bounds, shape: (n_components,)

initialize(verbosity: int = 0) → None[source]

Initialize the constraint.

Parameters:
verbosity

The verbosity level, where zero is silent.

n_components() → int[source]

Return the number of constraint components.

Returns:
value

The number of selected turbines.

classmethod new(constraint_type: str, *args: Any, **kwargs: Any) → Any

Run-time farm constraint factory.

Parameters:
constraint_type

The selected derived class name

args

Additional parameters for the constructor

kwargs

Additional parameters for the constructor

classmethod print_models() → None

Prints all model names.

rename_vars_float(varmap: collections.abc.Mapping[str | int, str]) → None

Rename float variables.

Parameters:
varmap

The name mapping. Key: old name str, Value: new name str

rename_vars_int(varmap: collections.abc.Mapping[str | int, str]) → None

Rename integer variables.

Parameters:
varmap

The name mapping. Key: old name str, Value: new name str

vardeps_float() → numpy.ndarray[source]

Return float-variable dependencies for all components.

Returns:
dependencies

The dependency mask, with shape (n_components, n_vars_float).

vardeps_int() → numpy.ndarray

Gets the dependencies of all components on the function int variables

Returns:
deps

The dependencies of components on function variables, shape: (n_components, n_vars_int)

check_only_selected = False
property component_names : list[str]

The names of the components

Returns:
names

The component names

property farm : foxes.core.WindFarm

The wind farm

Returns:
value

The wind farm

infer_vars = True
property initialized : bool

Flag for finished initialization

Returns:
initialized

True if initialization has been done

max_nearest_dist
min_nearest_group_size
property n_sel_turbines : int

The numer of selected turbines

Returns:
value

The numer of selected turbines

property n_vars_float : int

The number of float variables

Returns:
n

The number of float variables

property n_vars_int : int

The number of int variables

Returns:
n

The number of int variables

name = 'Base'
problem
property sel_turbines : list[int]

The list of selected turbines

Returns:
value

The list of selected turbines

tol = 1e-05
property var_names_float : list[str]

The names of the float variables

Returns:
names

The float variable names

property var_names_int : list[str]

The names of the integer variables

Returns:
names

The integer variable names