bonni.optimize_ipopt#
- bonni.optimize_ipopt(fn, x0, bounds, max_fn_eval=None, max_iterations=None, save_path=None, tol=1e-08, direction='minimize', bound_contract_ratio=0.001)[source]#
Optimize a black-box function using the Interior Point Optimizer (IPOPT).
This function acts as a convenient wrapper around cyipopt, managing the interface between the objective function (which must provide gradients) and the solver. It handles bound constraints, optimization direction, and recording of the optimization history.
- Parameters:
fn (Callable[[np.ndarray], tuple[np.ndarray, np.ndarray]]) – The objective function to optimize. It must accept an input array of shape (num_dims,) and return a tuple (y, g), where y is the scalar objective value and g represents gradients of shape (num_dims,).
x0 (np.ndarray) – The initial starting point for the optimization. Must have shape (num_dims,).
bounds (np.ndarray) – A 2D array of shape (num_dims, 2) specifying the (lower, upper) search space boundaries for each of the num_dims input dimensions.
max_fn_eval (int | None, optional) – The maximum number of allowed function evaluations. Note that IPOPT performs line searches, so one iteration results in multiple function evaluations. Defaults to None.
max_iterations (int | None, optional) – The maximum number of solver iterations. Defaults to None.
save_path (Path | str | None, optional) – Directory path to save the results of function evaluation as an npz-file. Defaults to None.
tol (float, optional) – The tolerance for convergence. Defaults to 1e-8.
direction (Literal["maximize", "minimize"], optional) – The optimization goal. Defaults to “minimize”.
bound_contract_ratio (float, optional) – A small epsilon value used to contract the provided bounds slightly (bounds +/- eps * bound_range). This prevents the interior point method from starting or evaluating exactly on the boundary, which can cause numerical issues. Defaults to 1e-3.
- Returns:
- A tuple containing the full history of:
xs: Input parameters (shape (N, D)).
ys: Objective values (shape (N,)).
gs: Gradients (shape (N, D)).
- Return type:
tuple[np.ndarray, np.ndarray, np.ndarray]