| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- import numpy as np
- from threading import Lock
- from ._optimize import _check_unknown_options
- COBYQA_LOCK = Lock()
- def _minimize_cobyqa(fun, x0, args=(), bounds=None, constraints=(),
- callback=None, disp=False, maxfev=None, maxiter=None,
- f_target=-np.inf, feasibility_tol=1e-8,
- initial_tr_radius=1.0, final_tr_radius=1e-6, scale=False,
- **unknown_options):
- """
- Minimize a scalar function of one or more variables using the
- Constrained Optimization BY Quadratic Approximations (COBYQA) algorithm [1]_.
- .. versionadded:: 1.14.0
- Options
- -------
- disp : bool
- Set to True to print information about the optimization procedure.
- Default is ``False``.
- maxfev : int
- Maximum number of function evaluations. Default is ``500 * n``, where
- ``n`` is the number of variables.
- maxiter : int
- Maximum number of iterations. Default is ``1000 * n``, where ``n`` is
- the number of variables.
- f_target : float
- Target value for the objective function. The optimization procedure is
- terminated when the objective function value of a feasible point (see
- `feasibility_tol` below) is less than or equal to this target. Default
- is ``-numpy.inf``.
- feasibility_tol : float
- Absolute tolerance for the constraint violation. Default is ``1e-8``.
- initial_tr_radius : float
- Initial trust-region radius. Typically, this value should be in the
- order of one tenth of the greatest expected change to the variables.
- Default is ``1.0``.
- final_tr_radius : float
- Final trust-region radius. It should indicate the accuracy required in
- the final values of the variables. If provided, this option overrides
- the value of `tol` in the `minimize` function. Default is ``1e-6``.
- scale : bool
- Set to True to scale the variables according to the bounds. If True and
- if all the lower and upper bounds are finite, the variables are scaled
- to be within the range :math:`[-1, 1]`. If any of the lower or upper
- bounds is infinite, the variables are not scaled. Default is ``False``.
- References
- ----------
- .. [1] COBYQA
- https://www.cobyqa.com/stable/
- """
- from .._lib.cobyqa import minimize # import here to avoid circular imports
- _check_unknown_options(unknown_options)
- options = {
- 'disp': bool(disp),
- 'maxfev': int(maxfev) if maxfev is not None else 500 * len(x0),
- 'maxiter': int(maxiter) if maxiter is not None else 1000 * len(x0),
- 'target': float(f_target),
- 'feasibility_tol': float(feasibility_tol),
- 'radius_init': float(initial_tr_radius),
- 'radius_final': float(final_tr_radius),
- 'scale': bool(scale),
- }
- with COBYQA_LOCK:
- return minimize(fun, x0, args, bounds, constraints, callback, options)
|