explorator module

Define Explorator, a module to explore the design space.

In order to be consistent with the ABC OptimisationAlgorithm, it also returns the solution with the lowest residue value – hence it is also a “brute-force” optimisation algorithm.

Todo

Make this class more robust. In particular: save all objectives (not just the norm), handle export when there is more than two variables, also save complementary data (e.g.: always save phi_s even it is not in the constraints nor variables).

Todo

Allow for different number of points according to variable.

class Explorator(compute_constraints: Callable[[SimulationOutput], ndarray])

Bases: OptimisationAlgorithm

Method that tries all the possible solutions.

Notes

Very inefficient for optimisation. It is however useful to study a specific case.

All the attributes but solution are inherited from the Abstract Base Class OptimisationAlgorithm.

supports_constraints: bool = True
compute_constraints: Callable[[SimulationOutput], ndarray]
optimise(keep_history: bool = True, save_history: bool = True) tuple[bool, SetOfCavitySettings | None, OptiInfo]

Set up the optimisation and solve the problem.

Returns:

  • success (bool) – Tells if the optimisation algorithm managed to converge.

  • optimized_cavity_settings (SetOfCavitySettings | None) – Best solution found by the optimization algorithm.

  • info (OptiInfo) – Gives list of solutions, corresponding objective, convergence violation if applicable, etc.

_check_dimensions() bool

Check that we have proper number of vars and objectives.

_algorithm_parameters() dict

Create the kwargs for the optimisation.

_generate_combinations(n_points: int = 10, **kwargs) tuple[ndarray, ndarray]

Generate all the possible combinations of the variables.

_wrapper_residuals(var: ndarray) tuple[float, bool]

Give norm of residual and if phi_s constraint is respected.

_array_of_values_to_mesh(objectives_values: ndarray, n_points: int = 10, **kwargs) ndarray

Reformat the results for plotting purposes.

_take_best_solution(variable_comb: ndarray, objectives_values: ndarray, criterion: Literal['minimize norm of objective']) tuple[ndarray | None, ndarray | None]

Take the “best” of the calculated solutions.

Parameters:
  • variable_comb (numpy.ndarray) – All the set of variables (cavity parameters) that were tried.

  • objectives_values (numpy.ndarray) – The values of the objective corresponding to variable_comb.

  • criterion (Literal['minimize norm of objective']) – Name of the criterion that will determine which solution is the “best”. Only one is implemented for now, may add others in the future.

Returns:

  • best_solution (numpy.ndarray | None) – “Best” solution.

  • best_objective (numpy.ndarray | None) – Objective values corresponding to best_solution.

_plot_design_space(variable_mesh: ndarray, objective_mesh: ndarray, constraint_mesh: ndarray) Axes3D

Plot the design space.

_add_the_best_point(axes: Axes3D, var: ndarray, obj: ndarray) None

Add the best solution to the plot.

_save_optimization_history(filepath: Path, hist_X: ndarray | None = None, hist_F: ndarray | None = None, hist_G: ndarray | None = None, n_phi: int = 10, **info: ndarray) None
__init__(compute_constraints: Callable[[SimulationOutput], ndarray]) None

Instantiate the object.

_abc_impl = <_abc._abc_data object at 0x7fd3c8124880>