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
tolfor the optimization to stopnum_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