GSLS#

class 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)[source]#

Bases: Optimizer

Gaussian-smoothed Line Search.

An implementation of the line search algorithm described in https://arxiv.org/pdf/1905.01332.pdf, using gradient approximation based on Gaussian-smoothed samples on a sphere.

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_algorithms.utils.algorithm_globals.random_seed = seed).

Parameters:
  • maxiter (int) – Maximum number of iterations.

  • max_eval (int) – Maximum number of evaluations.

  • disp (bool) – Set to True to display convergence messages.

  • sampling_radius (float) – Sampling radius to determine gradient estimate.

  • sample_size_factor (int) – 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) – Initial step size for the descent algorithm.

  • min_step_size (float) – Minimum step size for the descent algorithm.

  • step_size_multiplier (float) – Step size reduction after unsuccessful steps, in the interval (0, 1).

  • armijo_parameter (float) – Armijo parameter for sufficient decrease criterion, in the interval (0, 1).

  • min_gradient_norm (float) – If the gradient norm is below this threshold, the algorithm stops.

  • max_failed_rejection_sampling (int) – Maximum number of attempts to sample points within bounds.

Attributes

bounds_support_level#

Returns bounds support level

gradient_support_level#

Returns gradient support level

initial_point_support_level#

Returns initial point support level

is_bounds_ignored#

Returns is bounds ignored

is_bounds_required#

Returns is bounds required

is_bounds_supported#

Returns is bounds supported

is_gradient_ignored#

Returns is gradient ignored

is_gradient_required#

Returns is gradient required

is_gradient_supported#

Returns is gradient supported

is_initial_point_ignored#

Returns is initial point ignored

is_initial_point_required#

Returns is initial point required

is_initial_point_supported#

Returns is initial point supported

setting#

Return setting

settings#

Methods

get_support_level()[source]#

Return support level dictionary.

Returns:

A dictionary containing the support levels for different options.

Return type:

dict[str, int]

gradient_approximation(n, x, x_value, directions, sample_set_x, sample_set_y)[source]#

Construct gradient approximation from given sample.

Parameters:
  • n (int) – Dimension of the problem.

  • x (ndarray) – Point around which the sample set was constructed.

  • x_value (float) – Objective function value at x.

  • directions (ndarray) – Directions of the sample points wrt the central point x, as a 2D array.

  • sample_set_x (ndarray) – x-coordinates of the sample set, one point per row, as a 2D array.

  • sample_set_y (ndarray) – 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

static gradient_num_diff(x_center, f, epsilon, max_evals_grouped=None)#

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) – the epsilon used in the numeric differentiation.

  • max_evals_grouped (int) – max evals grouped, defaults to 1 (i.e. no batching).

Returns:

the gradient computed

Return type:

grad

ls_optimize(n, obj_fun, initial_point, var_lb, var_ub)[source]#

Run the line search optimization.

Parameters:
  • n (int) – Dimension of the problem.

  • obj_fun (Callable[[POINT], float]) – Objective function.

  • initial_point (np.ndarray) – Initial point.

  • var_lb (np.ndarray) – Vector of lower bounds on the decision variables. Vector elements can be -np.inf if the corresponding variable is unbounded from below.

  • var_ub (np.ndarray) – 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 – If the number of dimensions mismatches the size of the initial point or the length of the lower or upper bound.

Return type:

tuple[np.ndarray, float, int, float]

minimize(fun, x0, jac=None, bounds=None)[source]#

Minimize the scalar function.

Parameters:
  • fun (Callable[[POINT], float]) – 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[tuple[float, float]] | 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

print_options()#

Print algorithm-specific options.

sample_points(n, x, num_points)[source]#

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) – Dimension of the problem.

  • x (np.ndarray) – Point around which the sample set is constructed.

  • num_points (int) – Number of points in the sample set.

Returns:

A tuple containing the sampling points and the directions.

Return type:

tuple[np.ndarray, np.ndarray]

sample_set(n, x, var_lb, var_ub, num_points)[source]#

Construct sample set of given size.

Parameters:
  • n (int) – Dimension of the problem.

  • x (np.ndarray) – Point around which the sample set is constructed.

  • var_lb (np.ndarray) – Vector of lower bounds on the decision variables. Vector elements can be -np.inf if the corresponding variable is unbounded from below.

  • var_ub (np.ndarray) – 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) – 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 – If not enough samples could be generated within the bounds.

Return type:

tuple[np.ndarray, np.ndarray]

set_max_evals_grouped(limit)#

Set max evals grouped

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) – options, given as name=value.

static wrap_function(function, args)#

Wrap the function to implicitly inject the args at the call of the function.

Parameters:
  • function (func) – the target function

  • args (tuple) – the args to be injected

Returns:

wrapper

Return type:

function_wrapper