rydopt.optimization

optimize(gate, pulse, initial_params, fixed_initial_params=None, *, num_steps=1000, learning_rate=0.05, tol=1e-07, return_history=False, verbose=False)[source]

Function that optimizes an initial parameter guess in order to realize the desired gate.

Example

>>> import rydopt as ro
>>> import numpy as np
>>> gate = ro.gates.TwoQubitGate(
...     phi=None,
...     theta=np.pi,
...     Vnn=float("inf"),
...     decay=0,
... )
>>> pulse = ro.pulses.SinglePhotonPulseAnsatz(
...     detuning_ansatz=ro.pulses.Const(),
...     phase_ansatz=ro.pulses.SinCrab(2),
... )
>>> initial_params = ro.pulses.PulseParams(7.6, [-0.1], [1.8, -0.6], [])
>>> result = ro.optimization.optimize(
...     gate,
...     pulse,
...     initial_params,
...     num_steps=200,
...     tol=1e-7,
... )
Started optimization ...
>>> optimized_params = result.params
Parameters:
  • gate (Optimizable) – RydOpt Gate or GateFamily object

  • pulse (TypeAliasForwardRef('PulseAnsatz') | PulseFamilyAnsatz) – RydOpt SinglePhotonPulseAnsatz, TwoPhotonPulseAnsatz, or PulseFamilyAnsatz object

  • initial_params (ParamsFloatLike) – initial pulse (family) parameters

  • fixed_initial_params (TypeAliasForwardRef('ParamsBoolLike') | None) – which parameters shall not be optimized

  • num_steps (int) – number of optimization steps

  • learning_rate (float) – optimizer learning rate hyperparameter

  • tol (float) – target gate infidelity, also sets the ODE solver tolerance

  • return_history (bool) – whether or not to return the cost history of the optimization

  • verbose (bool) – whether detail information is printed or only a progress bar is shown

Returns:

OptimizationResult object containing the final parameters, the final cost, and the optimization history

Return type:

OptimizationResult[PulseParams[float] | PulseFamilyParams[float], float, NDArray[float64] | None]

multi_start_optimize(gate, pulse, min_initial_params, max_initial_params, fixed_initial_params=None, *, num_steps=1000, learning_rate=0.05, rescale=False, tol=1e-07, num_initializations=10, min_converged_initializations=None, num_processes=None, seed=None, return_history=False, return_all=False, verbose=False)[source]

Function that optimizes multiple random initial parameter guesses in order to realize the desired gate.

Example

>>> import rydopt as ro
>>> import numpy as np
>>> gate = ro.gates.TwoQubitGate(
...     phi=None,
...     theta=np.pi,
...     Vnn=float("inf"),
...     decay=0,
... )
>>> pulse = ro.pulses.SinglePhotonPulseAnsatz(
...     detuning_ansatz=ro.pulses.Const(),
...     phase_ansatz=ro.pulses.SinCrab(2),
... )
>>> min_initial_params = ro.pulses.PulseParams(6, [-2], [-2, -2], [])
>>> max_initial_params = ro.pulses.PulseParams(8, [2], [2, 2], [])
>>> result = ro.optimization.multi_start_optimize(
...     gate,
...     pulse,
...     min_initial_params,
...     max_initial_params,
...     num_steps=200,
...     tol=1e-7,
...     num_initializations=10,
...     num_processes=1,
... )
Started optimization ...
>>> optimized_params = result.params
Parameters:
  • gate (Optimizable) – RydOpt Gate object

  • pulse (TypeAliasForwardRef('PulseAnsatz') | PulseFamilyAnsatz) – RydOpt SinglePhotonPulseAnsatz, TwoPhotonPulseAnsatz, or PulseFamilyAnsatz object

  • min_initial_params (ParamsFloatLike) – lower bound for the random parameter initialization

  • max_initial_params (ParamsFloatLike) – upper bound for the random parameter initialization

  • fixed_initial_params (TypeAliasForwardRef('ParamsBoolLike') | None) – which parameters shall not be optimized

  • num_steps (int) – number of optimization steps

  • learning_rate (float) – optimizer learning rate hyperparameter

  • rescale (bool) – whether to rescale each parameter’s update step by the width of its initialization interval max_initial_params - min_initial_params

  • tol (float) – target gate infidelity, also sets the ODE solver tolerance

  • num_initializations (int) – number of runs in the search for gate pulses

  • min_converged_initializations (int | None) – number of runs that must reach tol for the optimization to stop

  • num_processes (int | None) – number of parallel processes

  • seed (int | None) – seed for the random number generator

  • return_history (bool) – whether or not to return the cost history of the optimization

  • return_all (bool) – whether or not to return all optimization results

  • verbose (bool) – whether detail information is printed or only a progress bar is shown

Returns:

OptimizationResult object containing the final parameters, the final cost, and the optimization history

Return type:

OptimizationResult[PulseParams[float] | PulseFamilyParams[float] | list[PulseParams[float] | PulseFamilyParams[float]], float | NDArray[float64], NDArray[float64] | None]

class OptimizationResult(params, infidelity, duration, infidelity_history, duration_history, grad_norm_history, num_steps, tol, runtime_in_sec)[source]

Data class that stores the results of a gate pulse optimization.

Parameters:
  • params (ParamsType)

  • infidelity (ValueType)

  • duration (float | Sequence[float] | Array | NDArray[float64])

  • infidelity_history (HistoryType)

  • duration_history (HistoryType)

  • grad_norm_history (HistoryType)

  • num_steps (int)

  • tol (float)

  • runtime_in_sec (float)

params

Final pulse parameters.

Type:

rydopt.optimization.optimize.ParamsType

infidelity

Final cost function evaluation.

Type:

rydopt.optimization.optimize.ValueType

duration

Final duration

Type:

float | collections.abc.Sequence[float] | jax.Array | numpy._typing._array_like.NDArray[numpy.float64]

infidelity_history

Cost function evaluations during the optimization.

Type:

rydopt.optimization.optimize.HistoryType

duration_history

Durations during the optimization.

Type:

rydopt.optimization.optimize.HistoryType

grad_norm_history

Norm of the parameter gradient during the optimization.

Type:

rydopt.optimization.optimize.HistoryType

num_steps

Number of optimization steps.

Type:

int

tol

Target gate infidelity.

Type:

float

runtime_in_sec

Runtime of the optimization in seconds.

Type:

float