class qctrl.dynamic.types.closed_loop_optimization_step.GaussianProcessInitializer(*, length_scale_bounds, 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.

  • length_scale_bounds (List[qctrl.dynamic.types.closed_loop_optimization_step.BoxConstraint]) – 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.

  • 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) – Seed for the random number generator.