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.PulseAnsatz(
...     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 object

  • pulse (PulseAnsatzLike) – RydOpt PulseAnsatz object

  • initial_params (ParamsFloatLike) – initial pulse 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[TypeAliasForwardRef(‘ParamsFloatLike’), float, ndarray[tuple[Any, …], dtype[float64]] | None]

multi_start_optimize(gate, pulse, min_initial_params, max_initial_params, fixed_initial_params=None, *, num_steps=1000, learning_rate=0.05, 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.PulseAnsatz(
...     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 (PulseAnsatzLike) – RydOpt PulseAnsatz 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

  • 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[TypeAliasForwardRef(‘ParamsFloatLike’) | list[TypeAliasForwardRef(‘ParamsFloatLike’)], float | ndarray[tuple[Any, …], dtype[float64]], ndarray[tuple[Any, …], dtype[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 (ValueType)

  • 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:

rydopt.optimization.optimize.ValueType

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