qiskit-documentation/docs/api/qiskit/0.44/qiskit.algorithms.optimizer...

319 lines
16 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: GSLS
description: API reference for qiskit.algorithms.optimizers.GSLS
in_page_toc_min_heading_level: 1
python_api_type: class
python_api_name: qiskit.algorithms.optimizers.GSLS
---
# GSLS
<Class id="qiskit.algorithms.optimizers.GSLS" isDedicatedPage={true} github="https://github.com/qiskit/qiskit/tree/stable/0.25/qiskit/algorithms/optimizers/gsls.py" signature="qiskit.algorithms.optimizers.GSLS(maxiter=10000, max_eval=10000, disp=False, sampling_radius=1e-06, sample_size_factor=1, initial_step_size=0.01, min_step_size=1e-10, step_size_multiplier=0.4, armijo_parameter=0.1, min_gradient_norm=1e-08, max_failed_rejection_sampling=50)" modifiers="class">
Bases: [`Optimizer`](qiskit.algorithms.optimizers.Optimizer "qiskit.algorithms.optimizers.optimizer.Optimizer")
Gaussian-smoothed Line Search.
An implementation of the line search algorithm described in [https://arxiv.org/pdf/1905.01332.pdf](https://arxiv.org/pdf/1905.01332.pdf), using gradient approximation based on Gaussian-smoothed samples on a sphere.
<Admonition title="Note" type="note">
This component has some function that is normally random. If you want to reproduce behavior then you should set the random number generator seed in the algorithm\_globals (`qiskit.utils.algorithm_globals.random_seed = seed`).
</Admonition>
**Parameters**
* **maxiter** ([*int*](https://docs.python.org/3/library/functions.html#int "(in Python v3.12)")) Maximum number of iterations.
* **max\_eval** ([*int*](https://docs.python.org/3/library/functions.html#int "(in Python v3.12)")) Maximum number of evaluations.
* **disp** ([*bool*](https://docs.python.org/3/library/functions.html#bool "(in Python v3.12)")) Set to True to display convergence messages.
* **sampling\_radius** ([*float*](https://docs.python.org/3/library/functions.html#float "(in Python v3.12)")) Sampling radius to determine gradient estimate.
* **sample\_size\_factor** ([*int*](https://docs.python.org/3/library/functions.html#int "(in Python v3.12)")) The size of the sample set at each iteration is this number multiplied by the dimension of the problem, rounded to the nearest integer.
* **initial\_step\_size** ([*float*](https://docs.python.org/3/library/functions.html#float "(in Python v3.12)")) Initial step size for the descent algorithm.
* **min\_step\_size** ([*float*](https://docs.python.org/3/library/functions.html#float "(in Python v3.12)")) Minimum step size for the descent algorithm.
* **step\_size\_multiplier** ([*float*](https://docs.python.org/3/library/functions.html#float "(in Python v3.12)")) Step size reduction after unsuccessful steps, in the interval (0, 1).
* **armijo\_parameter** ([*float*](https://docs.python.org/3/library/functions.html#float "(in Python v3.12)")) Armijo parameter for sufficient decrease criterion, in the interval (0, 1).
* **min\_gradient\_norm** ([*float*](https://docs.python.org/3/library/functions.html#float "(in Python v3.12)")) If the gradient norm is below this threshold, the algorithm stops.
* **max\_failed\_rejection\_sampling** ([*int*](https://docs.python.org/3/library/functions.html#int "(in Python v3.12)")) Maximum number of attempts to sample points within bounds.
## Attributes
### bounds\_support\_level
<Attribute id="qiskit.algorithms.optimizers.GSLS.bounds_support_level">
Returns bounds support level
</Attribute>
### gradient\_support\_level
<Attribute id="qiskit.algorithms.optimizers.GSLS.gradient_support_level">
Returns gradient support level
</Attribute>
### initial\_point\_support\_level
<Attribute id="qiskit.algorithms.optimizers.GSLS.initial_point_support_level">
Returns initial point support level
</Attribute>
### is\_bounds\_ignored
<Attribute id="qiskit.algorithms.optimizers.GSLS.is_bounds_ignored">
Returns is bounds ignored
</Attribute>
### is\_bounds\_required
<Attribute id="qiskit.algorithms.optimizers.GSLS.is_bounds_required">
Returns is bounds required
</Attribute>
### is\_bounds\_supported
<Attribute id="qiskit.algorithms.optimizers.GSLS.is_bounds_supported">
Returns is bounds supported
</Attribute>
### is\_gradient\_ignored
<Attribute id="qiskit.algorithms.optimizers.GSLS.is_gradient_ignored">
Returns is gradient ignored
</Attribute>
### is\_gradient\_required
<Attribute id="qiskit.algorithms.optimizers.GSLS.is_gradient_required">
Returns is gradient required
</Attribute>
### is\_gradient\_supported
<Attribute id="qiskit.algorithms.optimizers.GSLS.is_gradient_supported">
Returns is gradient supported
</Attribute>
### is\_initial\_point\_ignored
<Attribute id="qiskit.algorithms.optimizers.GSLS.is_initial_point_ignored">
Returns is initial point ignored
</Attribute>
### is\_initial\_point\_required
<Attribute id="qiskit.algorithms.optimizers.GSLS.is_initial_point_required">
Returns is initial point required
</Attribute>
### is\_initial\_point\_supported
<Attribute id="qiskit.algorithms.optimizers.GSLS.is_initial_point_supported">
Returns is initial point supported
</Attribute>
### setting
<Attribute id="qiskit.algorithms.optimizers.GSLS.setting">
Return setting
</Attribute>
### settings
<Attribute id="qiskit.algorithms.optimizers.GSLS.settings" />
## Methods
### get\_support\_level
<Function id="qiskit.algorithms.optimizers.GSLS.get_support_level" signature="get_support_level()">
Return support level dictionary.
**Returns**
A dictionary containing the support levels for different options.
**Return type**
[dict](https://docs.python.org/3/library/stdtypes.html#dict "(in Python v3.12)")\[[str](https://docs.python.org/3/library/stdtypes.html#str "(in Python v3.12)"), [int](https://docs.python.org/3/library/functions.html#int "(in Python v3.12)")]
</Function>
### gradient\_approximation
<Function id="qiskit.algorithms.optimizers.GSLS.gradient_approximation" signature="gradient_approximation(n, x, x_value, directions, sample_set_x, sample_set_y)">
Construct gradient approximation from given sample.
**Parameters**
* **n** ([*int*](https://docs.python.org/3/library/functions.html#int "(in Python v3.12)")) Dimension of the problem.
* **x** ([*ndarray*](https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html#numpy.ndarray "(in NumPy v1.26)")) Point around which the sample set was constructed.
* **x\_value** ([*float*](https://docs.python.org/3/library/functions.html#float "(in Python v3.12)")) Objective function value at x.
* **directions** ([*ndarray*](https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html#numpy.ndarray "(in NumPy v1.26)")) Directions of the sample points wrt the central point x, as a 2D array.
* **sample\_set\_x** ([*ndarray*](https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html#numpy.ndarray "(in NumPy v1.26)")) x-coordinates of the sample set, one point per row, as a 2D array.
* **sample\_set\_y** ([*ndarray*](https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html#numpy.ndarray "(in NumPy v1.26)")) Objective function values of the points in sample\_set\_x, as a 1D array.
**Returns**
Gradient approximation at x, as a 1D array.
**Return type**
[*ndarray*](https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html#numpy.ndarray "(in NumPy v1.26)")
</Function>
### gradient\_num\_diff
<Function id="qiskit.algorithms.optimizers.GSLS.gradient_num_diff" signature="gradient_num_diff(x_center, f, epsilon, max_evals_grouped=None)" modifiers="static">
We compute the gradient with the numeric differentiation in the parallel way, around the point x\_center.
**Parameters**
* **x\_center** (*ndarray*) point around which we compute the gradient
* **f** (*func*) the function of which the gradient is to be computed.
* **epsilon** ([*float*](https://docs.python.org/3/library/functions.html#float "(in Python v3.12)")) the epsilon used in the numeric differentiation.
* **max\_evals\_grouped** ([*int*](https://docs.python.org/3/library/functions.html#int "(in Python v3.12)")) max evals grouped, defaults to 1 (i.e. no batching).
**Returns**
the gradient computed
**Return type**
grad
</Function>
### ls\_optimize
<Function id="qiskit.algorithms.optimizers.GSLS.ls_optimize" signature="ls_optimize(n, obj_fun, initial_point, var_lb, var_ub)">
Run the line search optimization.
**Parameters**
* **n** ([*int*](https://docs.python.org/3/library/functions.html#int "(in Python v3.12)")) Dimension of the problem.
* **obj\_fun** ([*Callable*](https://docs.python.org/3/library/collections.abc.html#collections.abc.Callable "(in Python v3.12)")*\[\[*[*float*](https://docs.python.org/3/library/functions.html#float "(in Python v3.12)") *|*[*ndarray*](https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html#numpy.ndarray "(in NumPy v1.26)")*],* [*float*](https://docs.python.org/3/library/functions.html#float "(in Python v3.12)")*]*) Objective function.
* **initial\_point** ([*ndarray*](https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html#numpy.ndarray "(in NumPy v1.26)")) Initial point.
* **var\_lb** ([*ndarray*](https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html#numpy.ndarray "(in NumPy v1.26)")) Vector of lower bounds on the decision variables. Vector elements can be -np.inf if the corresponding variable is unbounded from below.
* **var\_ub** ([*ndarray*](https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html#numpy.ndarray "(in NumPy v1.26)")) Vector of upper bounds on the decision variables. Vector elements can be np.inf if the corresponding variable is unbounded from below.
**Returns**
Final iterate as a vector, corresponding objective function value, number of evaluations, and norm of the gradient estimate.
**Raises**
[**ValueError**](https://docs.python.org/3/library/exceptions.html#ValueError "(in Python v3.12)") If the number of dimensions mismatches the size of the initial point or the length of the lower or upper bound.
**Return type**
[tuple](https://docs.python.org/3/library/stdtypes.html#tuple "(in Python v3.12)")\[[numpy.ndarray](https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html#numpy.ndarray "(in NumPy v1.26)"), [float](https://docs.python.org/3/library/functions.html#float "(in Python v3.12)"), [int](https://docs.python.org/3/library/functions.html#int "(in Python v3.12)"), [float](https://docs.python.org/3/library/functions.html#float "(in Python v3.12)")]
</Function>
### minimize
<Function id="qiskit.algorithms.optimizers.GSLS.minimize" signature="minimize(fun, x0, jac=None, bounds=None)">
Minimize the scalar function.
**Parameters**
* **fun** (*Callable\[\[POINT],* [*float*](https://docs.python.org/3/library/functions.html#float "(in Python v3.12)")*]*) The scalar function to minimize.
* **x0** (*POINT*) The initial point for the minimization.
* **jac** (*Callable\[\[POINT], POINT] | None*) The gradient of the scalar function `fun`.
* **bounds** ([*list*](https://docs.python.org/3/library/stdtypes.html#list "(in Python v3.12)")*\[*[*tuple*](https://docs.python.org/3/library/stdtypes.html#tuple "(in Python v3.12)")*\[*[*float*](https://docs.python.org/3/library/functions.html#float "(in Python v3.12)")*,* [*float*](https://docs.python.org/3/library/functions.html#float "(in Python v3.12)")*]] | None*) Bounds for the variables of `fun`. This argument might be ignored if the optimizer does not support bounds.
**Returns**
The result of the optimization, containing e.g. the result as attribute `x`.
**Return type**
[OptimizerResult](qiskit.algorithms.optimizers.OptimizerResult "qiskit.algorithms.optimizers.OptimizerResult")
</Function>
### print\_options
<Function id="qiskit.algorithms.optimizers.GSLS.print_options" signature="print_options()">
Print algorithm-specific options.
</Function>
### sample\_points
<Function id="qiskit.algorithms.optimizers.GSLS.sample_points" signature="sample_points(n, x, num_points)">
Sample `num_points` points around `x` on the `n`-sphere of specified radius.
The radius of the sphere is `self._options['sampling_radius']`.
**Parameters**
* **n** ([*int*](https://docs.python.org/3/library/functions.html#int "(in Python v3.12)")) Dimension of the problem.
* **x** ([*ndarray*](https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html#numpy.ndarray "(in NumPy v1.26)")) Point around which the sample set is constructed.
* **num\_points** ([*int*](https://docs.python.org/3/library/functions.html#int "(in Python v3.12)")) Number of points in the sample set.
**Returns**
A tuple containing the sampling points and the directions.
**Return type**
[tuple](https://docs.python.org/3/library/stdtypes.html#tuple "(in Python v3.12)")\[[numpy.ndarray](https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html#numpy.ndarray "(in NumPy v1.26)"), [numpy.ndarray](https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html#numpy.ndarray "(in NumPy v1.26)")]
</Function>
### sample\_set
<Function id="qiskit.algorithms.optimizers.GSLS.sample_set" signature="sample_set(n, x, var_lb, var_ub, num_points)">
Construct sample set of given size.
**Parameters**
* **n** ([*int*](https://docs.python.org/3/library/functions.html#int "(in Python v3.12)")) Dimension of the problem.
* **x** ([*ndarray*](https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html#numpy.ndarray "(in NumPy v1.26)")) Point around which the sample set is constructed.
* **var\_lb** ([*ndarray*](https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html#numpy.ndarray "(in NumPy v1.26)")) Vector of lower bounds on the decision variables. Vector elements can be -np.inf if the corresponding variable is unbounded from below.
* **var\_ub** ([*ndarray*](https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html#numpy.ndarray "(in NumPy v1.26)")) Vector of lower bounds on the decision variables. Vector elements can be np.inf if the corresponding variable is unbounded from above.
* **num\_points** ([*int*](https://docs.python.org/3/library/functions.html#int "(in Python v3.12)")) Number of points in the sample set.
**Returns**
Matrices of (unit-norm) sample directions and sample points, one per row. Both matrices are 2D arrays of floats.
**Raises**
[**RuntimeError**](https://docs.python.org/3/library/exceptions.html#RuntimeError "(in Python v3.12)") If not enough samples could be generated within the bounds.
**Return type**
[tuple](https://docs.python.org/3/library/stdtypes.html#tuple "(in Python v3.12)")\[[numpy.ndarray](https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html#numpy.ndarray "(in NumPy v1.26)"), [numpy.ndarray](https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html#numpy.ndarray "(in NumPy v1.26)")]
</Function>
### set\_max\_evals\_grouped
<Function id="qiskit.algorithms.optimizers.GSLS.set_max_evals_grouped" signature="set_max_evals_grouped(limit)">
Set max evals grouped
</Function>
### set\_options
<Function id="qiskit.algorithms.optimizers.GSLS.set_options" signature="set_options(**kwargs)">
Sets or updates values in the options dictionary.
The options dictionary may be used internally by a given optimizer to pass additional optional values for the underlying optimizer/optimization function used. The options dictionary may be initially populated with a set of key/values when the given optimizer is constructed.
**Parameters**
**kwargs** ([*dict*](https://docs.python.org/3/library/stdtypes.html#dict "(in Python v3.12)")) options, given as name=value.
</Function>
### wrap\_function
<Function id="qiskit.algorithms.optimizers.GSLS.wrap_function" signature="wrap_function(function, args)" modifiers="static">
Wrap the function to implicitly inject the args at the call of the function.
**Parameters**
* **function** (*func*) the target function
* **args** ([*tuple*](https://docs.python.org/3/library/stdtypes.html#tuple "(in Python v3.12)")) the args to be injected
**Returns**
wrapper
**Return type**
function\_wrapper
</Function>
</Class>