GaussianProcessInitializer

class qctrl.dynamic.types.closed_loop_optimization_step.GaussianProcessInitializer(*, length_scale_bounds=None, bounds, rng_seed=None)

Configuration for the Gaussian process based optimizer. The optimizer first trains a Gaussian process model with the data you provide and then generates new test points from the model. The Gaussian process is defined by the kernel \(k({\mathbf x}_j, {\mathbf x}_k) = \exp \left(-\frac{1}{2} ( {\mathbf x}_j - {\mathbf x}_k )^\top \Sigma^{-2} ( {\mathbf x}_j - {\mathbf x}_k )\right)\), where \({\mathbf x}_j\) is a \(n\) dimensional vector representing the \(j\)-th test point, \(\Sigma= {\rm diag}(l_1, \cdots, l_n)\) is a \(n\) by \(n\) diagonal matrix. \(\{ l_j \}\) are tunable while training the Gaussian process model. Use the length_scale_bounds option to set the bounds for them with the consideration of the properties of your system. Note that you must pass a non-empty list of results in the input to the initial step when using this initializer. It’s recommended to provide non-zero cost_uncertainty in CostFunctionResult when using this optimizer, otherwise you might encounter a numerical error when the optimizer tries to fit the kernel with your input data. If the error persists, try increasing the cost_uncertainty value. However, such numerical error is also an indication that your data might not be suitable to be modelled by a Gaussian process, and in that case, consider using other closed-loop optimizers.

Variables
  • length_scale_bounds (List[qctrl.dynamic.types.closed_loop_optimization_step.BoxConstraint], optional) – The lower and upper bounds of the length scales \(\{ l_j \}\) in the kernel. These bounds must be positive and set in the same order as parameters in CostFunctionResult. If not specified, defaults to a value derived from bounds by picking orders of magnitudes below/above the sidelength for each box axis.

  • bounds (List[qctrl.dynamic.types.closed_loop_optimization_step.BoxConstraint]) – The per-parameter bounds on the test points. The bounds are defined by imposing a box constraint on each individual parameter. That is, for each parameter \(x_j\), the optimizer is only allowed to search the next test point subject to the constraint such that \(x^{\rm lower}_j \leq x_j \leq x^{\rm upper}_j\). These constraints must be in the same order as parameters in CostFunctionResult.

  • rng_seed (int, optional) – Seed for the random number generator. Use this option to generate deterministic results from the optimizer.