sellar_design_space module¶
The design space for the MDO problem proposed by Sellar et al. in.
Sellar, R., Batill, S., & Renaud, J. (1996). Response surface based, concurrent subspace optimization for multidisciplinary system design. In 34th aerospace sciences meeting and exhibit (p. 714).
Classes:
|
The design space for the MDO problem proposed by Sellar et al (1996). |
- class gemseo.problems.sellar.sellar_design_space.SellarDesignSpace(dtype='complex128')[source]¶
Bases:
gemseo.algos.design_space.DesignSpace
The design space for the MDO problem proposed by Sellar et al (1996).
It is composed of: - \(x_{local}\) belonging to \([0., 10.]\), - \(x_{shared,1}\) belonging to \([-10., 10.]\), - \(x_{shared,2}\) belonging to \([0., 10.]\), - \(y_1\) belonging to \([-100., 100.]\), - \(y_2\) belonging to \([-100., 100.]\).
This design space is initialized with the initial solution:
\(x_{local}=1\),
\(x_{shared,1}=4\),
\(x_{shared,2}=3\),
\(y_1=1\),
\(y_2=1\).
- Parameters
dtype (str) –
The type of the variables defined in the design space.
By default it is set to complex128.
- Return type
None
Attributes:
Methods:
add_variable
(name[, size, var_type, l_b, ...])Add a variable to the design space.
array_to_dict
(x_array)Convert the current point into a dictionary indexed by the variables names.
check
()Check the state of the design space.
check_membership
(x_vect[, variables_names])Check whether the variables satisfy the design space requirements.
clear
()dict_to_array
(x_dict[, all_vars, all_var_list])Convert an point as dictionary into an array.
export_hdf
(file_path[, append])Export the design space to an HDF file.
export_to_txt
(output_file[, fields, header_char])Export the design space to a text file.
extend
(other)Extend the design space with another design space.
filter
(keep_variables[, copy])Filter the design space to keep a subset of variables.
filter_dim
(variable, keep_dimensions)Filter the design space to keep a subset of dimensions for a variable.
get
(k[,d])get_active_bounds
([x_vec, tol])Determine which bound constraints of the current point are active.
get_current_x
([variables_names])Return the current point in the design space.
Return the current point in the design space as a dictionary.
Return the current point normalized.
get_indexed_var_name
(variable_name)Create the names of the components of a variable.
Create the names of the components of all the variables.
get_lower_bound
(name)Return the lower bound of a variable.
get_lower_bounds
([variables_names])Generate an array of the variables' lower bounds.
get_pretty_table
([fields])Build a tabular view of the design space.
get_size
(name)Get the size of a variable.
get_type
(name)Return the type of a variable.
get_upper_bound
(name)Return the upper bound of a variable.
get_upper_bounds
([variables_names])Generate an array of the variables' upper bounds.
get_variables_indexes
(variables_names)Return the indexes of a design array corresponding to the variables names.
Check if the current design value is defined for all variables.
import_hdf
(file_path)Import a design space from an HDF file.
items
()keys
()normalize_grad
(g_vect)Normalize an unnormalized gradient.
normalize_vect
(x_vect[, minus_lb])Normalize a vector of the design space.
pop
(k[,d])If key is not found, d is returned if given, otherwise KeyError is raised.
popitem
()as a 2-tuple; but raise KeyError if D is empty.
project_into_bounds
(x_c[, normalized])Project a vector onto the bounds, using a simple coordinate wise approach.
read_from_txt
(input_file[, header])Create a design space from a text file.
remove_variable
(name)Remove a variable from the design space.
round_vect
(x_vect)Round the vector where variables are of integer type.
set_current_variable
(name, current_value)Set the current value of a single variable.
set_current_x
(current_x)Set the current point.
set_lower_bound
(name, lower_bound)Set the lower bound of a variable.
set_upper_bound
(name, upper_bound)Set the upper bound of a variable.
setdefault
(k[,d])Cast the current value to complex.
transform_vect
(vector)Map a point of the design space to a vector with components in \([0,1]\).
unnormalize_grad
(g_vect)Unnormalize a normalized gradient.
unnormalize_vect
(x_vect[, minus_lb, no_check])Unnormalize a normalized vector of the design space.
untransform_vect
(vector)Map a vector with components in \([0,1]\) to the design space.
update
([E, ]**F)If E present and has a .keys() method, does: for k in E: D[k] = E[k] If E present and lacks .keys() method, does: for (k, v) in E: D[k] = v In either case, this is followed by: for k, v in F.items(): D[k] = v
values
()- AVAILABLE_TYPES = [<DesignVariableType.FLOAT: 'float'>, <DesignVariableType.INTEGER: 'integer'>]¶
- DESIGN_SPACE_GROUP = 'design_space'¶
- FLOAT = 'float'¶
- INTEGER = 'integer'¶
- LB_GROUP = 'l_b'¶
- MINIMAL_FIELDS = ['name', 'lower_bound', 'upper_bound']¶
- NAMES_GROUP = 'names'¶
- NAME_GROUP = 'name'¶
- SEP = '!'¶
- SIZE_GROUP = 'size'¶
- TABLE_NAMES = ['name', 'lower_bound', 'value', 'upper_bound', 'type']¶
- UB_GROUP = 'u_b'¶
- VALUE_GROUP = 'value'¶
- VAR_TYPE_GROUP = 'var_type'¶
- add_variable(name, size=1, var_type=DesignVariableType.FLOAT, l_b=None, u_b=None, value=None)¶
Add a variable to the design space.
- Parameters
name (str) – The name of the variable.
size (int) –
The size of the variable.
By default it is set to 1.
var_type (Union[str, Sequence[str], gemseo.algos.design_space.DesignVariableType, Sequence[gemseo.algos.design_space.DesignVariableType]]) –
Either the type of the variable or the types of its components.
By default it is set to FLOAT.
l_b (Optional[Union[float, numpy.ndarray]]) –
The lower bound of the variable. If None, use \(-\infty\).
By default it is set to None.
u_b (Optional[Union[float, numpy.ndarray]]) –
The upper bound of the variable. If None, use \(+\infty\).
By default it is set to None.
value (Optional[Union[float, numpy.ndarray]]) –
The default value of the variable. If None, do not use a default value.
By default it is set to None.
- Raises
ValueError – Either if the variable already exists or if the size is not a positive integer.
- Return type
None
- array_to_dict(x_array)¶
Convert the current point into a dictionary indexed by the variables names.
- Parameters
x_array (numpy.ndarray) – The current point.
- Returns
The dictionary version of the current point.
- Return type
Dict[str, numpy.ndarray]
- check()¶
Check the state of the design space.
- Raises
ValueError – If the design space is empty.
- Return type
None
- check_membership(x_vect, variables_names=None)¶
Check whether the variables satisfy the design space requirements.
- Parameters
x_vect (Union[Mapping[str, numpy.ndarray], numpy.ndarray]) – The values of the variables.
variables_names (Optional[Sequence[str]]) –
The names of the variables. If None, use the names of the variables of the design space.
By default it is set to None.
- Raises
ValueError – Either if the dimension of the values vector is wrong, if the values are not specified as an array or a dictionary, if the values are outside the bounds of the variables or if the component of an integer variable is an integer.
- Return type
None
- clear() None. Remove all items from D. ¶
- dict_to_array(x_dict, all_vars=True, all_var_list=None)¶
Convert an point as dictionary into an array.
- Parameters
x_dict (Dict[str, numpy.ndarray]) – The point to be converted.
all_vars (bool) –
If True, all the variables to be considered shall be in the provided point.
By default it is set to True.
all_var_list (Optional[Sequence[str]]) –
The variables to be considered. If None, use the variables of the design space.
By default it is set to None.
- Returns
The point as an array.
- Return type
numpy.ndarray
- export_hdf(file_path, append=False)¶
Export the design space to an HDF file.
- Parameters
file_path (Union[str, pathlib.Path]) – The path to the file to export the design space.
append (bool) –
If True, appends the data in the file.
By default it is set to False.
- Return type
None
- export_to_txt(output_file, fields=None, header_char='', **table_options)¶
Export the design space to a text file.
- Parameters
output_file (Union[str,Path],) – The path to the file.
fields (Optional[Sequence[str]]) –
The fields to be exported. If None, export all fields.
By default it is set to None.
header_char (str) –
The header character.
By default it is set to .
**table_options (Any) – The names and values of additional attributes for the
PrettyTable
view generated byget_pretty_table()
.
- Return type
None
- extend(other)¶
Extend the design space with another design space.
- Parameters
other (gemseo.algos.design_space.DesignSpace) – The design space to be appended to the current one.
- Return type
None
- filter(keep_variables, copy=False)¶
Filter the design space to keep a subset of variables.
- Parameters
keep_variables (Union[str, Iterable[str]]) – The names of the variables to be kept.
copy (bool) –
If True, then a copy of the design space is filtered, otherwise the design space itself is filtered.
By default it is set to False.
- Returns
Either the filtered original design space or a copy.
- Raises
ValueError – If the variable is not in the design space.
- Return type
- filter_dim(variable, keep_dimensions)¶
Filter the design space to keep a subset of dimensions for a variable.
- Parameters
variable (str) – The name of the variable.
keep_dimensions (Iterable[int]) – The dimensions of the variable to be kept, between \(0\) and \(d-1\) where \(d\) is the number of dimensions of the variable.
- Returns
The filtered design space.
- Raises
ValueError – If a dimension is unknown.
- Return type
- get(k[, d]) D[k] if k in D, else d. d defaults to None. ¶
- get_active_bounds(x_vec=None, tol=1e-08)¶
Determine which bound constraints of the current point are active.
- Parameters
x_vec (Optional[numpy.ndarray]) –
The point at which to check the bounds. If None, use the current point.
By default it is set to None.
tol (float) –
The tolerance of comparison of a scalar with a bound.
By default it is set to 1e-08.
- Returns
Whether the components of the lower and upper bound constraints are active, the first returned value representing the lower bounds and the second one the upper bounds, e.g.
({'x': array(are_x_lower_bounds_active), 'y': array(are_y_lower_bounds_active)}, {'x': array(are_x_upper_bounds_active), 'y': array(are_y_upper_bounds_active)} )
where:
are_x_lower_bounds_active = [True, False] are_x_upper_bounds_active = [False, False] are_y_lower_bounds_active = [False] are_y_upper_bounds_active = [True]
- Return type
Tuple[Dict[str, numpy.ndarray], Dict[str, numpy.ndarray]]
- get_current_x(variables_names=None)¶
Return the current point in the design space.
- Parameters
variables_names (Optional[Iterable[str]]) –
The names of the required variables. If None, use the names of the variables of the design space.
By default it is set to None.
- Raises
KeyError – If a variable has no current value.
- Return type
numpy.ndarray
- get_current_x_dict()¶
Return the current point in the design space as a dictionary.
- Returns
The current point in the design space as a dictionary, whose keys are the names of the variables and values are the values of the variables.
- Return type
Dict[str, numpy.ndarray]
- get_current_x_normalized()¶
Return the current point normalized.
- Returns
The current point as an array normalized by the bounds of the variables.
- Returns
If the current point cannot be normalized.
- Return type
KeyError
- get_indexed_var_name(variable_name)¶
Create the names of the components of a variable.
If the size of the variable is equal to 1, this method returns the name of the variable. Otherwise, it concatenates the name of the variable, the separator
SEP
and the index of the component.- Parameters
variable_name (str) – The name of the variable.
- Returns
The names of the components of the variable.
- Return type
Union[str, List[str]]
- get_indexed_variables_names()¶
Create the names of the components of all the variables.
If the size of the variable is equal to 1, this method uses its name. Otherwise, it concatenates the name of the variable, the separator
SEP
and the index of the component.- Returns
The name of the components of all the variables.
- Return type
List[str]
- get_lower_bound(name)¶
Return the lower bound of a variable.
- Parameters
name (str) – The name of the variable.
- Returns
The lower bound of the variable (possibly infinite).
- Return type
numpy.ndarray
- get_lower_bounds(variables_names=None)¶
Generate an array of the variables’ lower bounds.
- Parameters
variables_names (Optional[Sequence[str]]) –
The names of the variables of which the lower bounds are required. If None, use the variables of the design space.
By default it is set to None.
- Returns
The lower bounds of the variables.
- Return type
numpy.ndarray
- get_pretty_table(fields=None)¶
Build a tabular view of the design space.
- Parameters
fields (Optional[Sequence[str]]) –
The name of the fields to be exported. If None, export all the fields.
By default it is set to None.
- Returns
A tabular view of the design space.
- Return type
- get_size(name)¶
Get the size of a variable.
- Parameters
name (str) – The name of the variable.
- Returns
The size of the variable, None if it is not known.
- Return type
Optional[int]
- get_type(name)¶
Return the type of a variable.
- Parameters
name (str) – The name of the variable.
- Returns
The type of the variable, None if it is not known.
- Return type
Optional[str]
- get_upper_bound(name)¶
Return the upper bound of a variable.
- Parameters
name (str) – The name of the variable.
- Returns
The upper bound of the variable (possibly infinite).
- Return type
numpy.ndarray
- get_upper_bounds(variables_names=None)¶
Generate an array of the variables’ upper bounds.
- Parameters
variables_names (Optional[Sequence[str]]) –
The names of the variables of which the upper bounds are required. If None, use the variables of the design space.
By default it is set to None.
- Returns
The upper bounds of the variables.
- Return type
numpy.ndarray
- get_variables_indexes(variables_names)¶
Return the indexes of a design array corresponding to the variables names.
- Parameters
variables_names (Iterable[str]) – The names of the variables.
- Returns
The indexes of a design array corresponding to the variables names.
- Return type
numpy.ndarray
- has_current_x()¶
Check if the current design value is defined for all variables.
- Returns
Whether the current design value is defined for all variables.
- Return type
bool
- import_hdf(file_path)¶
Import a design space from an HDF file.
- Parameters
file_path (Union[str, pathlib.Path]) – The path to the file containing the description of a design space.
- Return type
None
- items() a set-like object providing a view on D's items ¶
- keys() a set-like object providing a view on D's keys ¶
- normalize_grad(g_vect)¶
Normalize an unnormalized gradient.
This method is based on the chain rule:
\[\frac{df(x)}{dx} = \frac{df(x)}{dx_u}\frac{dx_u}{dx} = \frac{df(x)}{dx_u}\frac{1}{u_b-l_b}\]where \(x_u = \frac{x-l_b}{u_b-l_b}\) is the normalized input vector, \(x\) is the unnormalized input vector and \(l_b\) and \(u_b\) are the lower and upper bounds of \(x\).
Then, the normalized gradient reads:
\[\frac{df(x)}{dx_u} = (u_b-l_b)\frac{df(x)}{dx}\]where \(\frac{df(x)}{dx}\) is the unnormalized one.
- Parameters
g_vect (numpy.ndarray) – The gradient to be normalized.
- Returns
The normalized gradient.
- Return type
numpy.ndarray
- normalize_vect(x_vect, minus_lb=True)¶
Normalize a vector of the design space.
If minus_lb is True:
\[x_u = \frac{x-l_b}{u_b-l_b}\]where \(l_b\) and \(u_b\) are the lower and upper bounds of \(x\).
Otherwise:
\[x_u = \frac{x}{u_b-l_b}\]Unbounded variables are not normalized.
- Parameters
x_vect (numpy.ndarray) – The values of the design variables.
minus_lb (bool) –
If True, remove the lower bounds at normalization.
By default it is set to True.
- Returns
The normalized vector.
- Raises
ValueError – If the array to be normalized is not one- or two-dimensional.
- Return type
numpy.ndarray
- pop(k[, d]) v, remove specified key and return the corresponding value. ¶
If key is not found, d is returned if given, otherwise KeyError is raised.
- popitem() (k, v), remove and return some (key, value) pair ¶
as a 2-tuple; but raise KeyError if D is empty.
- project_into_bounds(x_c, normalized=False)¶
Project a vector onto the bounds, using a simple coordinate wise approach.
- Parameters
normalized (bool) –
If True, then the vector is assumed to be normalized.
By default it is set to False.
x_c (numpy.ndarray) – The vector to be projected onto the bounds.
- Returns
The projected vector.
- Return type
numpy.ndarray
- static read_from_txt(input_file, header=None)¶
Create a design space from a text file.
- Parameters
input_file (Union[str, pathlib.Path]) – The path to the file.
header (Optional[Iterable[str]]) –
The names of the fields saved in the file. If None, read them in the file.
By default it is set to None.
- Returns
The design space read from the file.
- Raises
ValueError – If the file does not contain the minimal variables in its header.
- Return type
- remove_variable(name)¶
Remove a variable from the design space.
- Parameters
name (str) – The name of the variable to be removed.
- Return type
None
- round_vect(x_vect)¶
Round the vector where variables are of integer type.
- Parameters
x_vect (numpy.ndarray) – The values to be rounded.
- Returns
The rounded values values.
- Raises
ValueError – If the values is not a one- or two-dimensional
- Return type
numpy.ndarray
- set_current_variable(name, current_value)¶
Set the current value of a single variable.
- Parameters
name – The name of the variable.
current_value – The current value of the variable.
- set_current_x(current_x)¶
Set the current point.
- Parameters
current_x (Union[numpy.ndarray, Mapping[str, numpy.ndarray], gemseo.algos.opt_result.OptimizationResult]) – The value of the current point.
- Raises
ValueError – If the value has a wrong dimension.
TypeError – If the current point is neither a mapping of NumPy arrays, a NumPy array nor an
OptimizationResult
.
- Return type
None
- set_lower_bound(name, lower_bound)¶
Set the lower bound of a variable.
- Parameters
name (str) – The name of the variable.
lower_bound (numpy.ndarray) – The value of the lower bound.
- Raises
ValueError – If the variable does not exist.
- Return type
None
- set_upper_bound(name, upper_bound)¶
Set the upper bound of a variable.
- Parameters
name (str) – The name of the variable.
upper_bound (numpy.ndarray) – The value of the upper bound.
- Raises
ValueError – If the variable does not exist.
- Return type
None
- setdefault(k[, d]) D.get(k,d), also set D[k]=d if k not in D ¶
- to_complex()¶
Cast the current value to complex.
- Return type
None
- transform_vect(vector)¶
Map a point of the design space to a vector with components in \([0,1]\).
- Parameters
vector (numpy.ndarray) – A point of the design space.
- Returns
A vector with components in \([0,1]\).
- Return type
numpy.ndarray
- unnormalize_grad(g_vect)¶
Unnormalize a normalized gradient.
This method is based on the chain rule:
\[\frac{df(x)}{dx} = \frac{df(x)}{dx_u}\frac{dx_u}{dx} = \frac{df(x)}{dx_u}\frac{1}{u_b-l_b}\]where \(x_u = \frac{x-l_b}{u_b-l_b}\) is the normalized input vector, \(x\) is the unnormalized input vector, \(\frac{df(x)}{dx_u}\) is the unnormalized gradient \(\frac{df(x)}{dx}\) is the normalized one, and \(l_b\) and \(u_b\) are the lower and upper bounds of \(x\).
- Parameters
g_vect (numpy.ndarray) – The gradient to be unnormalized.
- Returns
The unnormalized gradient.
- Return type
numpy.ndarray
- unnormalize_vect(x_vect, minus_lb=True, no_check=False)¶
Unnormalize a normalized vector of the design space.
If minus_lb is True:
\[x = x_u(u_b-l_b) + l_b\]where \(x_u\) is the normalized input vector, \(x\) is the unnormalized input vector and \(l_b\) and \(u_b\) are the lower and upper bounds of \(x\).
Otherwise:
\[x = x_u(u_b-l_b)\]- Parameters
x_vect (numpy.ndarray) – The values of the design variables.
minus_lb (bool) –
If True, remove the lower bounds at normalization.
By default it is set to True.
no_check (bool) –
If True, do not check that the values are in [0,1].
By default it is set to False.
- Returns
The unnormalized vector.
- Raises
ValueError – If the array to be unnormalized is not one- or two-dimensional.
- Return type
numpy.ndarray
- untransform_vect(vector)¶
Map a vector with components in \([0,1]\) to the design space.
- Parameters
vector (numpy.ndarray) – A vector with components in \([0,1]\).
- Returns
A point of the variables space.
- Return type
numpy.ndarray
- update([E, ]**F) None. Update D from mapping/iterable E and F. ¶
If E present and has a .keys() method, does: for k in E: D[k] = E[k] If E present and lacks .keys() method, does: for (k, v) in E: D[k] = v In either case, this is followed by: for k, v in F.items(): D[k] = v
- values() an object providing a view on D's values ¶