QAOA Parametrisations¶
We currently offer 7 different parametrisations for QAOA, which can be found in
the entropica_qaoa.qaoa.parameters
module. They fall broadly into three categories: The Standard
classes are parametrisations that have the
\(\gamma\) ‘s and \(\beta\) ‘s as free parameters, as defined in the
seminal paper by Farhi et al in
A Quantum Approximate Optimization Algorithm.
The Fourier
classes have the discrete cosine and sine transforms of the \(\gamma\) ‘s respective \(\beta\)’s as free parameters, as proposed by
Zhou et al. in Quantum Approximate Optimization Algorithm: Performance, Mechanism, and Implementation on Near-Term Devices.
Finally, the Annealing
class is based on the idea of QAOA being a form of discretised, adiabatic annealing. Here the function values \(s(t_i)\)
at equally spaced times \(t_i\) are the free parameters.
Except for the Annealing
parameters, each class also comes in three levels of detail: StandardParams
and FourierParams
offer the \(\gamma\) ‘s and \(\beta\)’s as proposed in above papers. StandardWithBiasParams
and FourierWithBiasParams
allow for extra \(\gamma\)’s for possible single-qubit bias terms, resp. their discrete sine transform. Lastly, ExtendedParams
and FourierExtendedParams
offer full control by having a seperate set of rotation angles for each term in the cost and mixer Hamiltonians, respective having a seperate set of Fourier coefficients for each term.
You can always convert parametrisations with fewer degrees of freedom to ones with more using the .from_other_parameters()
classmethod. The full type
tree is shown below, where the arrows mark possible conversions:
ExtendedParams <--------- FourierExtendedParams
^ ^
| |
StandardWithBiasParams <------ FourierWithBiasParams
^ ^
| |
StandardParams <----------- FourierParams
^
|
AnnealingParams
Standard Parameters¶
-
class
qaoa.parameters.
StandardParams
(hyperparameters, parameters)¶ QAOA parameters that implement a state preparation circuit with
\[e^{-i \beta_p H_0} e^{-i \gamma_p H_c} \cdots e^{-i \beta_0 H_0} e^{-i \gamma_0 H_c}\]This corresponds to the parametrization used by Farhi in his original paper [https://arxiv.org/abs/1411.4028]
- Variables
betas (np.array) – 1D array with the betas from above
gammas (np.array) – 1D array with the gamma from above
- Parameters
hyperparameters (
Tuple
[PauliSum
,int
]) – The hyperparameters containing the hamiltonian and the number of stepshyperparameters = (hamiltonian, n_steps)
parameters (
Tuple
) – Tuple containing(betas, gammas)
with dimensions(n_steps, n_steps)
-
classmethod
empty
(hyperparameters)¶ Alternative to
__init__
that only takeshyperparameters
and fillsparameters
vianp.empty
- Parameters
hyperparameters – Same as the hyperparameters argument for
cls.__init__()
- Returns
A Parameter object with the parameters filled by
np.empty
- Return type
Type[AbstractParams]
-
classmethod
from_AbstractParameters
(abstract_params, parameters)¶ Alternative to
__init__
that takeshyperparameters
from an existingAbstractQAOAParameter
object.Create a ConcreteQAOAParameters instance from an AbstractQAOAParameters instance with hyperparameters from
abstract_params
and normal parameters fromparameters
- Parameters
abstract_params (AbstractParams) – An AbstractQAOAParameters instance to which to add the parameters
parameter – A tuple containing the parameters. Must be the same as in
__init__
- Returns
A
StandardParams
object with the hyperparameters taken fromabstract_params
and the normal parameters fromparameters
- Return type
-
classmethod
from_other_parameters
(params)¶ Alternative to
__init__
that takes parameters with less degrees of freedom as the input.- Parameters
params (Type[AbstractParams]) – The input parameters
- Returns
The converted paramters s.t. all the rotation angles of the in and output parameters are the same.
- Return type
Type[AbstractParams]
Note
If all conversion functions for your parametrization are in qaoa._parameter_conversions.py and correctly registered for converter you don’t need to override this function in its child classes
-
classmethod
linear_ramp_from_hamiltonian
(hamiltonian, n_steps, time=None)¶ Alternative to
__init__
that already fillsparameters
.Calculate initial parameters from a hamiltonian corresponding to a linear ramp annealing schedule and return a
QAOAParams
object.- Parameters
hamiltonian (
PauliSum
) –hamiltonian
for which to calculate the initial QAOA parameters.n_steps (
int
) – Number of timesteps.time (
Optional
[float
]) – Total annealing time. Defaults to0.7*n_steps
.
- Returns
A
StandardParams
object with parameters according to a linear ramp schedule forhamiltonian
- Return type
-
plot
(ax=None, **kwargs)¶ Plots
self
in a sensible way to the canvasax
, if provided.- Parameters
ax (matplotlib.axes._subplots.AxesSubplot) – The canvas to plot itself on
kwargs – All remaining keyword arguments are passed forward to the plot function
-
raw
()¶ Return the parameters in a 1D array.
This 1D array is needed by
scipy.optimize.minimize
which expects the parameters that need to be optimized to be a 1D array.- Returns
The parameters in a 1D array. Has the same output format as the expected input of
self.update_from_raw
. Hence corresponds to the flattened parameters in __init__()- Return type
np.array
-
raw_rotation_angles
()¶ Flat array of the rotation angles for the memory map for the parametric circuit.
- Returns
Returns all single rotation angles in the ordering
(x_rotation_angles, gamma_singles, zz_rotation_angles)
wherex_rotation_angles = (beta_q0_t0, beta_q1_t0, ... , beta_qn_tp)
and the same forz_rotation_angles
andzz_rotation_angles
- Return type
np.array
-
update_from_raw
(new_values)¶ Update all the parameters from a 1D array.
The input has the same format as the output of
self.raw()
. This is useful forscipy.optimize.minimize
which expects the parameters that need to be optimized to be a 1D array.- Parameters
new_values – A 1D array with the new parameters. Must have length
len(self)
and the ordering of the flattendparameters
in__init__()
.
-
property
x_rotation_angles
¶ 2D array with the X-rotation angles.
1st index goes over n_steps and the 2nd index over the qubits to apply X-rotations on. These are needed by
qaoa.cost_function.make_qaoa_memory_map
-
property
z_rotation_angles
¶ 2D array with the ZZ-rotation angles.
1st index goes over the n_steps and the 2nd index over the qubit pairs, to apply ZZ-rotations on. These are needed by
qaoa.cost_function.make_qaoa_memory_map
-
property
zz_rotation_angles
¶ 2D array with Z-rotation angles.
1st index goes over the n_steps and the 2nd index over the qubit pairs, to apply Z-rotations on. These are needed by
qaoa.cost_function.make_qaoa_memory_map
-
class
qaoa.parameters.
StandardWithBiasParams
(hyperparameters, parameters)¶ QAOA parameters that implement a state preparation circuit with
\[e^{-i \beta_p H_0} e^{-i \gamma_{\textrm{singles}, p} H_{c, \textrm{singles}}} e^{-i \gamma_{\textrm{pairs}, p} H_{c, \textrm{pairs}}} \cdots e^{-i \beta_0 H_0} e^{-i \gamma_{\textrm{singles}, 0} H_{c, \textrm{singles}}} e^{-i \gamma_{\textrm{pairs}, 0} H_{c, \textrm{pairs}}}\]where the cost hamiltonian is split into \(H_{c, \textrm{singles}}\) the bias terms, that act on only one qubit, and \(H_{c, \textrm{pairs}}\) the coupling terms, that act on two qubits.
- Variables
betas (np.array) – A 1D array containing the betas from above for each timestep
gammas_pairs (np.array) – A 1D array containing the gammas_singles from above for each timestep
gammas_singles (np.array) – A 1D array containing the gammas_pairs from above for each timestep
- Parameters
hyperparameters (
Tuple
[PauliSum
,int
]) – The hyperparameters containing the hamiltonian and the number of stepshyperparameters = (hamiltonian, n_steps)
parameters (
Tuple
) – Tuple containing(betas, gammas_singles, gammas_pairs)
with dimensions(n_steps, n_steps, n_steps)
-
classmethod
empty
(hyperparameters)¶ Alternative to
__init__
that only takeshyperparameters
and fillsparameters
vianp.empty
- Parameters
hyperparameters – Same as the hyperparameters argument for
cls.__init__()
- Returns
A Parameter object with the parameters filled by
np.empty
- Return type
Type[AbstractParams]
-
classmethod
from_AbstractParameters
(abstract_params, parameters)¶ Alternative to
__init__
that takeshyperparameters
from an existingAbstractQAOAParameter
object.Create a ConcreteQAOAParameters instance from an AbstractQAOAParameters instance with hyperparameters from
abstract_params
and normal parameters fromparameters
- Parameters
abstract_params (AbstractParams) – An AbstractQAOAParameters instance to which to add the parameters
parameter – A tuple containing the parameters. Must be the same as in
__init__
- Returns
An
AlternatatingOperatorsQAOAParameters
object with the hyperparameters taken fromabstract_params
and the normal parameters fromparameters
- Return type
-
classmethod
from_other_parameters
(params)¶ Alternative to
__init__
that takes parameters with less degrees of freedom as the input.- Parameters
params (Type[AbstractParams]) – The input parameters
- Returns
The converted paramters s.t. all the rotation angles of the in and output parameters are the same.
- Return type
Type[AbstractParams]
Note
If all conversion functions for your parametrization are in qaoa._parameter_conversions.py and correctly registered for converter you don’t need to override this function in its child classes
-
classmethod
linear_ramp_from_hamiltonian
(hamiltonian, n_steps, time=None)¶ Alternative to
__init__
that already fillsparameters
.Calculate initial parameters from a hamiltonian corresponding to a linear ramp annealing schedule and return a
QAOAParams
object.- Parameters
hamiltonian (
PauliSum
) –hamiltonian
for which to calculate the initial QAOA parameters.n_steps (
int
) – Number of timesteps.time (
Optional
[float
]) – Total annealing time. Defaults to0.7*n_steps
.
- Returns
An AlternatingOperatorsQAOAParameters object holding all the parameters
- Return type
-
plot
(ax=None, **kwargs)¶ Plots
self
in a sensible way to the canvasax
, if provided.- Parameters
ax (matplotlib.axes._subplots.AxesSubplot) – The canvas to plot itself on
kwargs – All remaining keyword arguments are passed forward to the plot function
-
raw
()¶ Return the parameters in a 1D array.
This 1D array is needed by
scipy.optimize.minimize
which expects the parameters that need to be optimized to be a 1D array.- Returns
The parameters in a 1D array. Has the same output format as the expected input of
self.update_from_raw
. Hence corresponds to the flattened parameters in __init__()- Return type
np.array
-
raw_rotation_angles
()¶ Flat array of the rotation angles for the memory map for the parametric circuit.
- Returns
Returns all single rotation angles in the ordering
(x_rotation_angles, gamma_singles, zz_rotation_angles)
wherex_rotation_angles = (beta_q0_t0, beta_q1_t0, ... , beta_qn_tp)
and the same forz_rotation_angles
andzz_rotation_angles
- Return type
np.array
-
update_from_raw
(new_values)¶ Update all the parameters from a 1D array.
The input has the same format as the output of
self.raw()
. This is useful forscipy.optimize.minimize
which expects the parameters that need to be optimized to be a 1D array.- Parameters
new_values – A 1D array with the new parameters. Must have length
len(self)
and the ordering of the flattendparameters
in__init__()
.
-
property
x_rotation_angles
¶ 2D array with the X-rotation angles.
1st index goes over n_steps and the 2nd index over the qubits to apply X-rotations on. These are needed by
qaoa.cost_function.make_qaoa_memory_map
-
property
z_rotation_angles
¶ 2D array with the ZZ-rotation angles.
1st index goes over the n_steps and the 2nd index over the qubit pairs, to apply ZZ-rotations on. These are needed by
qaoa.cost_function.make_qaoa_memory_map
-
property
zz_rotation_angles
¶ 2D array with Z-rotation angles.
1st index goes over the n_steps and the 2nd index over the qubit pairs, to apply Z-rotations on. These are needed by
qaoa.cost_function.make_qaoa_memory_map
-
class
qaoa.parameters.
ExtendedParams
(hyperparameters, parameters)¶ QAOA parameters in their most general form with different angles for each operator.
This means, that at the i-th timestep the evolution hamiltonian is given by
\[H(t_i) = \sum_{\textrm{qubits } j} \beta_{ij} X_j + \sum_{\textrm{qubits } j} \gamma_{\textrm{single } ij} Z_j + \sum_{\textrm{qubit pairs} (jk)} \gamma_{\textrm{pair } i(jk)} Z_j Z_k\]and the complete circuit is then
\[U = e^{-i H(t_p)} \cdots e^{-iH(t_1)}.\]- Variables
betas (np.array) – 2D array with the gammas from above for each timestep and qubit. 1st index goes over the timesteps, 2nd over the qubits.
gammas_pairs (np.array) – 2D array with the gammas_pairs from above for each timestep and coupled pair. 1st index goes over timesteps, 2nd over pairs.
gammas_singles (np.array) – 2D array with the gammas_singles from above for each timestep and bias term. 1st index goes over timesteps, 2nd over bias terms.
- Parameters
hyperparameters (
Tuple
[PauliSum
,int
]) – The hyperparameters containing the hamiltonian and the number of stepshyperparameters = (hamiltonian, n_steps)
parameters (
Tuple
) – Tuple containing(betas, gammas_singles, gammas_pairs)
with dimensions((n_steps x nqubits), (n_steps x nsingle_terms), (n_steps x npair_terms))
-
classmethod
empty
(hyperparameters)¶ Alternative to
__init__
that only takeshyperparameters
and fillsparameters
vianp.empty
- Parameters
hyperparameters – Same as the hyperparameters argument for
cls.__init__()
- Returns
A Parameter object with the parameters filled by
np.empty
- Return type
Type[AbstractParams]
-
classmethod
from_AbstractParameters
(abstract_params, parameters)¶ Alternative to
__init__
that takeshyperparameters
from an existingAbstractQAOAParameter
object.Create a ConcreteQAOAParameters instance from an AbstractQAOAParameters instance with hyperparameters from
abstract_params
and normal parameters fromparameters
- Parameters
abstract_params (AbstractParams) – An AbstractQAOAParameters instance to which to add the parameters
parameter – A tuple containing the parameters. Must be the same as in
__init__
- Returns
A
GeneralQAOAParameters
object with the hyperparameters taken fromabstract_params
and the normal parameters fromparameters
- Return type
-
classmethod
from_other_parameters
(params)¶ Alternative to
__init__
that takes parameters with less degrees of freedom as the input.- Parameters
params (Type[AbstractParams]) – The input parameters
- Returns
The converted paramters s.t. all the rotation angles of the in and output parameters are the same.
- Return type
Type[AbstractParams]
Note
If all conversion functions for your parametrization are in qaoa._parameter_conversions.py and correctly registered for converter you don’t need to override this function in its child classes
-
get_constraints
()¶ Constraints on the parameters for constrained parameters.
- Returns
A list of tuples (0, upper_boundary) of constraints on the parameters s.t. we are exploiting the periodicity of the cost function. Useful for constrained optimizers.
- Return type
List[Tuple]
-
classmethod
linear_ramp_from_hamiltonian
(hamiltonian, n_steps, time=None)¶ Alternative to
__init__
that already fillsparameters
.Calculate initial parameters from a hamiltonian corresponding to a linear ramp annealing schedule and return a
QAOAParams
object.- Parameters
hamiltonian (
PauliSum
) –hamiltonian
for which to calculate the initial QAOA parameters.n_steps (
int
) – Number of timesteps.time (
Optional
[float
]) – Total annealing time. Defaults to0.7*n_steps
.
- Returns
The initial parameters according to a linear ramp for
hamiltonian
.- Return type
Todo
Refactor this s.t. it supers from __init__
-
plot
(ax=None, **kwargs)¶ Plots
self
in a sensible way to the canvasax
, if provided.- Parameters
ax (matplotlib.axes._subplots.AxesSubplot) – The canvas to plot itself on
kwargs – All remaining keyword arguments are passed forward to the plot function
-
raw
()¶ Return the parameters in a 1D array.
This 1D array is needed by
scipy.optimize.minimize
which expects the parameters that need to be optimized to be a 1D array.- Returns
The parameters in a 1D array. Has the same output format as the expected input of
self.update_from_raw
. Hence corresponds to the flattened parameters in __init__()- Return type
np.array
-
raw_rotation_angles
()¶ Flat array of the rotation angles for the memory map for the parametric circuit.
- Returns
Returns all single rotation angles in the ordering
(x_rotation_angles, gamma_singles, zz_rotation_angles)
wherex_rotation_angles = (beta_q0_t0, beta_q1_t0, ... , beta_qn_tp)
and the same forz_rotation_angles
andzz_rotation_angles
- Return type
np.array
-
update_from_raw
(new_values)¶ Update all the parameters from a 1D array.
The input has the same format as the output of
self.raw()
. This is useful forscipy.optimize.minimize
which expects the parameters that need to be optimized to be a 1D array.- Parameters
new_values – A 1D array with the new parameters. Must have length
len(self)
and the ordering of the flattendparameters
in__init__()
.
-
property
x_rotation_angles
¶ 2D array with the X-rotation angles.
1st index goes over n_steps and the 2nd index over the qubits to apply X-rotations on. These are needed by
qaoa.cost_function.make_qaoa_memory_map
-
property
z_rotation_angles
¶ 2D array with the ZZ-rotation angles.
1st index goes over the n_steps and the 2nd index over the qubit pairs, to apply ZZ-rotations on. These are needed by
qaoa.cost_function.make_qaoa_memory_map
-
property
zz_rotation_angles
¶ 2D array with Z-rotation angles.
1st index goes over the n_steps and the 2nd index over the qubit pairs, to apply Z-rotations on. These are needed by
qaoa.cost_function.make_qaoa_memory_map
Fourier Parameters¶
-
class
qaoa.parameters.
FourierParams
(hyperparameters, parameters)¶ The QAOA parameters as the sine/cosine transform of the original gammas and x_rotation_angles. See “Quantum Approximate Optimization Algorithm: Performance, Mechanism, and Implementation on Near-Term Devices” [https://arxiv.org/abs/1812.01041] for a detailed description.
- Variables
q (int) – The number of coefficients for the discrete sine and cosine transforms below
u (np.array) – The discrete sine transform of the
gammas
inStandardParams
v (np.array) – The discrete cosine transform of the
betas
inStandardParams
- Parameters
hyperparameters (
Tuple
[PauliSum
,int
,float
]) – The hyperparameters containing the hamiltonian, the number of steps and the total annealing timehyperparameters = (hamiltonian, n_steps, q)
.q
is the number of fourier coefficients. Forq == n_steps
we have the full expressivity ofStandardParams
. More are redundant.parameters (
Tuple
) – Tuple containing(v, u)
with dimensions(q, q)
-
classmethod
empty
(hyperparameters)¶ Alternative to
__init__
that only takeshyperparameters
and fillsparameters
vianp.empty
- Parameters
hyperparameters – Same as the hyperparameters argument for
cls.__init__()
- Returns
A Parameter object with the parameters filled by
np.empty
- Return type
Type[AbstractParams]
-
classmethod
from_AbstractParameters
(abstract_params, parameters, q=4)¶ Alternative to
__init__
that takeshyperparameters
from an existingAbstractQAOAParameter
object.Create a ConcreteQAOAParameters instance from an AbstractQAOAParameters instance with hyperparameters from
abstract_params
and normal parameters fromparameters
- Parameters
abstract_params (
AbstractParams
) – An AbstractQAOAParameters instance to which to add the parametersparameters (
Tuple
) – Same asparameters
in.__init__()
q (
int
) – Number of fourier coefficients. Defaults to 4
- Returns
A
FourierParams
object with the hyperparameters taken fromabstract_params
and the normal parameters fromparameters
- Return type
-
classmethod
from_other_parameters
(params)¶ Alternative to
__init__
that takes parameters with less degrees of freedom as the input.- Parameters
params (Type[AbstractParams]) – The input parameters
- Returns
The converted paramters s.t. all the rotation angles of the in and output parameters are the same.
- Return type
Type[AbstractParams]
Note
If all conversion functions for your parametrization are in qaoa._parameter_conversions.py and correctly registered for converter you don’t need to override this function in its child classes
-
classmethod
linear_ramp_from_hamiltonian
(hamiltonian, n_steps, q=4, time=None)¶ NOTE: rather than implement an exact linear schedule, this instead implements the lowest frequency component, i.e. a sine curve for gammas, and a cosine for betas.
- Parameters
hamiltonian (
PauliSum
) – The hamiltoniann_steps (
int
) – number of timestepsq (
int
) – Number of Fourier coefficients. Defaults to 4time (
Optional
[float
]) – total time. Set to0.7*n_steps
ifNone
is passed.
- Returns
A
FourierParams
object with initial parameters corresponding to a the 0th order Fourier component (a sine curve for gammas, cosine for betas)- Return type
Todo
Make a more informed choice of the default value for
q
. Probably depending onn_qubits
-
plot
(ax=None, **kwargs)¶ Plots
self
in a sensible way to the canvasax
, if provided.- Parameters
ax (matplotlib.axes._subplots.AxesSubplot) – The canvas to plot itself on
kwargs – All remaining keyword arguments are passed forward to the plot function
-
raw
()¶ Return the parameters in a 1D array.
This 1D array is needed by
scipy.optimize.minimize
which expects the parameters that need to be optimized to be a 1D array.- Returns
The parameters in a 1D array. Has the same output format as the expected input of
self.update_from_raw
. Hence corresponds to the flattened parameters in __init__()- Return type
np.array
-
raw_rotation_angles
()¶ Flat array of the rotation angles for the memory map for the parametric circuit.
- Returns
Returns all single rotation angles in the ordering
(x_rotation_angles, gamma_singles, zz_rotation_angles)
wherex_rotation_angles = (beta_q0_t0, beta_q1_t0, ... , beta_qn_tp)
and the same forz_rotation_angles
andzz_rotation_angles
- Return type
np.array
-
update_from_raw
(new_values)¶ Update all the parameters from a 1D array.
The input has the same format as the output of
self.raw()
. This is useful forscipy.optimize.minimize
which expects the parameters that need to be optimized to be a 1D array.- Parameters
new_values – A 1D array with the new parameters. Must have length
len(self)
and the ordering of the flattendparameters
in__init__()
.
-
property
x_rotation_angles
¶ 2D array with the X-rotation angles.
1st index goes over n_steps and the 2nd index over the qubits to apply X-rotations on. These are needed by
qaoa.cost_function.make_qaoa_memory_map
-
property
z_rotation_angles
¶ 2D array with the ZZ-rotation angles.
1st index goes over the n_steps and the 2nd index over the qubit pairs, to apply ZZ-rotations on. These are needed by
qaoa.cost_function.make_qaoa_memory_map
-
property
zz_rotation_angles
¶ 2D array with Z-rotation angles.
1st index goes over the n_steps and the 2nd index over the qubit pairs, to apply Z-rotations on. These are needed by
qaoa.cost_function.make_qaoa_memory_map
-
class
qaoa.parameters.
FourierWithBiasParams
(hyperparameters, parameters)¶ The QAOA parameters as the sine/cosine transform of the original gammas and x_rotation_angles. See “Quantum Approximate Optimization Algorithm: Performance, Mechanism, and Implementation on Near-Term Devices” [https://arxiv.org/abs/1812.01041] for a detailed description.
- Variables
q (int) – The number of coefficients for the discrete sine and cosine transforms below
u_pairs (np.array) – The discrete sine transform of the
gammas_pairs
inStandardWithBiasParams
u_singles (np.array) – The discrete sine transform of the
gammas_singles
inStandardWithBiasParams
v (np.array) – The discrete cosine transform of the betas in
StandardWithBiasParams
- Parameters
hyperparameters (
Tuple
[PauliSum
,int
,float
]) – The hyperparameters containing the hamiltonian, the number of steps and the total annealing timehyperparameters = (hamiltonian, n_steps, q)
.q
is the number of fourier coefficients. Forq == n_steps
we have the full expressivity ofStandardWithBiasParams
. More are redundant.parameters (
Tuple
) – Tuple containing(v, u_singles, u_pairs)
with dimensions(q, q, q)
-
classmethod
empty
(hyperparameters)¶ Alternative to
__init__
that only takeshyperparameters
and fillsparameters
vianp.empty
- Parameters
hyperparameters – Same as the hyperparameters argument for
cls.__init__()
- Returns
A Parameter object with the parameters filled by
np.empty
- Return type
Type[AbstractParams]
-
classmethod
from_AbstractParameters
(abstract_params, parameters, q=4)¶ Alternative to
__init__
that takeshyperparameters
from an existingAbstractQAOAParameter
object.Create a ConcreteQAOAParameters instance from an AbstractQAOAParameters instance with hyperparameters from
abstract_params
and normal parameters fromparameters
- Parameters
abstract_params (
AbstractParams
) – An AbstractQAOAParameters instance to which to add the parametersparameters (
Tuple
) – Same asparameters
in.__init__()
q (
int
) – Number of fourier coefficients. Defaults to 4
- Returns
A
FourierWithBiasParams
object with the hyperparameters taken fromabstract_params
and the normal parameters fromparameters
- Return type
-
classmethod
from_other_parameters
(params)¶ Alternative to
__init__
that takes parameters with less degrees of freedom as the input.- Parameters
params (Type[AbstractParams]) – The input parameters
- Returns
The converted paramters s.t. all the rotation angles of the in and output parameters are the same.
- Return type
Type[AbstractParams]
Note
If all conversion functions for your parametrization are in qaoa._parameter_conversions.py and correctly registered for converter you don’t need to override this function in its child classes
-
classmethod
linear_ramp_from_hamiltonian
(hamiltonian, n_steps, q=4, time=None)¶ Alternative to
__init__
that already fillsparameters
.Calculate initial parameters from a hamiltonian corresponding to a linear ramp annealing schedule and return a
QAOAParams
object.- Parameters
hamiltonian (
PauliSum
) – The hamiltoniann_steps (
int
) – number of timestepsq (
int
) – Number of Fourier coefficients. Defaults to 4time (
Optional
[float
]) – total time. Set to0.7*n_steps
ifNone
is passed.
- Returns
A
FourierWithBiasParams
object with initial parameters corresponding to a linear ramp annealing schedule- Return type
Todo
Make a more informed choice of the default value for
q
. Probably depending onn_qubits
-
plot
(ax=None, **kwargs)¶ Plots
self
in a sensible way to the canvasax
, if provided.- Parameters
ax (matplotlib.axes._subplots.AxesSubplot) – The canvas to plot itself on
kwargs – All remaining keyword arguments are passed forward to the plot function
-
raw
()¶ Return the parameters in a 1D array.
This 1D array is needed by
scipy.optimize.minimize
which expects the parameters that need to be optimized to be a 1D array.- Returns
The parameters in a 1D array. Has the same output format as the expected input of
self.update_from_raw
. Hence corresponds to the flattened parameters in __init__()- Return type
np.array
-
raw_rotation_angles
()¶ Flat array of the rotation angles for the memory map for the parametric circuit.
- Returns
Returns all single rotation angles in the ordering
(x_rotation_angles, gamma_singles, zz_rotation_angles)
wherex_rotation_angles = (beta_q0_t0, beta_q1_t0, ... , beta_qn_tp)
and the same forz_rotation_angles
andzz_rotation_angles
- Return type
np.array
-
update_from_raw
(new_values)¶ Update all the parameters from a 1D array.
The input has the same format as the output of
self.raw()
. This is useful forscipy.optimize.minimize
which expects the parameters that need to be optimized to be a 1D array.- Parameters
new_values – A 1D array with the new parameters. Must have length
len(self)
and the ordering of the flattendparameters
in__init__()
.
-
property
x_rotation_angles
¶ 2D array with the X-rotation angles.
1st index goes over n_steps and the 2nd index over the qubits to apply X-rotations on. These are needed by
qaoa.cost_function.make_qaoa_memory_map
-
property
z_rotation_angles
¶ 2D array with the ZZ-rotation angles.
1st index goes over the n_steps and the 2nd index over the qubit pairs, to apply ZZ-rotations on. These are needed by
qaoa.cost_function.make_qaoa_memory_map
-
property
zz_rotation_angles
¶ 2D array with Z-rotation angles.
1st index goes over the n_steps and the 2nd index over the qubit pairs, to apply Z-rotations on. These are needed by
qaoa.cost_function.make_qaoa_memory_map
-
class
qaoa.parameters.
FourierExtendedParams
(hyperparameters, parameters)¶ The Fourier pendant to ExtendedParams.
- Variables
q (int) – The number of coefficients for the discrete sine and cosine transforms below
v (np.array) – The discrete cosine transform of the
betas
inExtendedParams
u_singles (np.array) – The discrete sine transform of the
gammas_singles
inExtendedParams
u_pairs (np.array) – The discrete sine transform of the
gammas_pairs
inExtendedParams
- Parameters
hyperparameters (
Tuple
[PauliSum
,int
]) – The hyperparameters containing the hamiltonian and the number of steps and the number of fourier coefficientshyperparameters = (hamiltonian, n_steps, q)
parameters (
Tuple
) – Tuple containing(v, u_singles, u_pairs)
with dimensions((q x nqubits), (q x nsingle_terms), (q x npair_terms))
-
classmethod
empty
(hyperparameters)¶ Alternative to
__init__
that only takeshyperparameters
and fillsparameters
vianp.empty
- Parameters
hyperparameters – Same as the hyperparameters argument for
cls.__init__()
- Returns
A Parameter object with the parameters filled by
np.empty
- Return type
Type[AbstractParams]
-
classmethod
from_AbstractParameters
(abstract_params, parameters, q=4)¶ Alternative to
__init__
that takeshyperparameters
from an existingAbstractQAOAParameter
object.Create a ConcreteQAOAParameters instance from an AbstractQAOAParameters instance with hyperparameters from
abstract_params
and normal parameters fromparameters
- Parameters
abstract_params (AbstractParams) – An AbstractQAOAParameters instance to which to add the parameters
parameter – A tuple containing the parameters. Must be the same as in
__init__
- Returns
A
FourierExtendedParams
object with the hyperparameters taken fromabstract_params
and the normal parameters fromparameters
- Return type
-
classmethod
from_other_parameters
(params)¶ Alternative to
__init__
that takes parameters with less degrees of freedom as the input.- Parameters
params (Type[AbstractParams]) – The input parameters
- Returns
The converted paramters s.t. all the rotation angles of the in and output parameters are the same.
- Return type
Type[AbstractParams]
Note
If all conversion functions for your parametrization are in qaoa._parameter_conversions.py and correctly registered for converter you don’t need to override this function in its child classes
-
classmethod
linear_ramp_from_hamiltonian
(hamiltonian, n_steps, q=4, time=None)¶ Alternative to
__init__
that already fillsparameters
.Calculate initial parameters from a hamiltonian corresponding to a linear ramp annealing schedule and return a
QAOAParams
object.- Parameters
hamiltonian (
PauliSum
) –hamiltonian
for which to calculate the initial QAOA parameters.n_steps (
int
) – Number of timesteps.time (
Optional
[float
]) – Total annealing time. Defaults to0.7*n_steps
.
- Returns
The initial parameters according to a linear ramp for
hamiltonian
.- Return type
-
plot
(ax=None, **kwargs)¶ Plots
self
in a sensible way to the canvasax
, if provided.- Parameters
ax (matplotlib.axes._subplots.AxesSubplot) – The canvas to plot itself on
kwargs – All remaining keyword arguments are passed forward to the plot function
-
raw
()¶ Return the parameters in a 1D array.
This 1D array is needed by
scipy.optimize.minimize
which expects the parameters that need to be optimized to be a 1D array.- Returns
The parameters in a 1D array. Has the same output format as the expected input of
self.update_from_raw
. Hence corresponds to the flattened parameters in __init__()- Return type
np.array
-
raw_rotation_angles
()¶ Flat array of the rotation angles for the memory map for the parametric circuit.
- Returns
Returns all single rotation angles in the ordering
(x_rotation_angles, gamma_singles, zz_rotation_angles)
wherex_rotation_angles = (beta_q0_t0, beta_q1_t0, ... , beta_qn_tp)
and the same forz_rotation_angles
andzz_rotation_angles
- Return type
np.array
-
update_from_raw
(new_values)¶ Update all the parameters from a 1D array.
The input has the same format as the output of
self.raw()
. This is useful forscipy.optimize.minimize
which expects the parameters that need to be optimized to be a 1D array.- Parameters
new_values – A 1D array with the new parameters. Must have length
len(self)
and the ordering of the flattendparameters
in__init__()
.
-
property
x_rotation_angles
¶ 2D array with the X-rotation angles.
1st index goes over n_steps and the 2nd index over the qubits to apply X-rotations on. These are needed by
qaoa.cost_function.make_qaoa_memory_map
-
property
z_rotation_angles
¶ 2D array with the ZZ-rotation angles.
1st index goes over the n_steps and the 2nd index over the qubit pairs, to apply ZZ-rotations on. These are needed by
qaoa.cost_function.make_qaoa_memory_map
-
property
zz_rotation_angles
¶ 2D array with Z-rotation angles.
1st index goes over the n_steps and the 2nd index over the qubit pairs, to apply Z-rotations on. These are needed by
qaoa.cost_function.make_qaoa_memory_map
Annealing Parameters¶
-
class
qaoa.parameters.
AnnealingParams
(hyperparameters, parameters)¶ QAOA parameters that implement a state preparation circuit of the form
\[U = e^{-i (1-s(t_p)) H_M \Delta t} e^{-i s(t_p) H_C \Delta t} \cdots e^{-i(1-s(t_1)H_M \Delta t} e^{-i s(t_1) H_C \Delta t}\]where the \(s(t_i) =: s_i\) are the variable parameters and \(\Delta t= \frac{T}{N}\). So the schedule is specified by specifying s(t) at evenly spaced timesteps.
- Variables
schedule (np.array) – An 1D array holding the values of the schedule function at each timestep.
- Parameters
hyperparameters (
Tuple
[PauliSum
,int
,float
]) – The hyperparameters containing the hamiltonian, the number of steps and the total annealing timehyperparameters = (hamiltonian, n_steps, time)
parameters (Tuple) – Tuple containing
(schedule values)
of lengthn_steps
-
classmethod
empty
(hyperparameters)¶ Alternative to
__init__
that only takeshyperparameters
and fillsparameters
vianp.empty
- Parameters
hyperparameters – Same as the hyperparameters argument for
cls.__init__()
- Returns
A Parameter object with the parameters filled by
np.empty
- Return type
Type[AbstractParams]
-
classmethod
from_AbstractParameters
(abstract_params, parameters, time=None)¶ Alternative to
__init__
that takeshyperparameters
from an existingAbstractQAOAParameter
object.Create a ConcreteQAOAParameters instance from an AbstractQAOAParameters instance with hyperparameters from
abstract_params
and normal parameters fromparameters
- Parameters
abstract_params (AbstractParams) – An AbstractQAOAParameters instance to which to add the parameters
parameter – A tuple containing the parameters. Must be the same as in
__init__
- Returns
An
AnnealingParams
object with the hyperparameters taken fromabstract_params
and the normal parameters fromparameters
- Return type
-
classmethod
from_other_parameters
(params)¶ Alternative to
__init__
that takes parameters with less degrees of freedom as the input.- Parameters
params (Type[AbstractParams]) – The input parameters
- Returns
The converted paramters s.t. all the rotation angles of the in and output parameters are the same.
- Return type
Type[AbstractParams]
Note
If all conversion functions for your parametrization are in qaoa._parameter_conversions.py and correctly registered for converter you don’t need to override this function in its child classes
-
classmethod
linear_ramp_from_hamiltonian
(hamiltonian, n_steps, time=None)¶ Alternative to
__init__
that already fillsparameters
.Calculate initial parameters from a hamiltonian corresponding to a linear ramp annealing schedule and return a
QAOAParams
object.- Parameters
hamiltonian (
PauliSum
) –hamiltonian
for which to calculate the initial QAOA parameters.n_steps (
int
) – Number of timesteps.time (
Optional
[float
]) – Total annealing time. Defaults to0.7*n_steps
.
- Returns
An
AnnealingParams
object corresponding to a linear ramp schedule.- Return type
-
plot
(ax=None, **kwargs)¶ Plots
self
in a sensible way to the canvasax
, if provided.- Parameters
ax (matplotlib.axes._subplots.AxesSubplot) – The canvas to plot itself on
kwargs – All remaining keyword arguments are passed forward to the plot function
-
raw
()¶ Return the parameters in a 1D array.
This 1D array is needed by
scipy.optimize.minimize
which expects the parameters that need to be optimized to be a 1D array.- Returns
The parameters in a 1D array. Has the same output format as the expected input of
self.update_from_raw
. Hence corresponds to the flattened parameters in __init__()- Return type
np.array
-
raw_rotation_angles
()¶ Flat array of the rotation angles for the memory map for the parametric circuit.
- Returns
Returns all single rotation angles in the ordering
(x_rotation_angles, gamma_singles, zz_rotation_angles)
wherex_rotation_angles = (beta_q0_t0, beta_q1_t0, ... , beta_qn_tp)
and the same forz_rotation_angles
andzz_rotation_angles
- Return type
np.array
-
update_from_raw
(new_values)¶ Update all the parameters from a 1D array.
The input has the same format as the output of
self.raw()
. This is useful forscipy.optimize.minimize
which expects the parameters that need to be optimized to be a 1D array.- Parameters
new_values – A 1D array with the new parameters. Must have length
len(self)
and the ordering of the flattendparameters
in__init__()
.
-
property
x_rotation_angles
¶ 2D array with the X-rotation angles.
1st index goes over n_steps and the 2nd index over the qubits to apply X-rotations on. These are needed by
qaoa.cost_function.make_qaoa_memory_map
-
property
z_rotation_angles
¶ 2D array with the ZZ-rotation angles.
1st index goes over the n_steps and the 2nd index over the qubit pairs, to apply ZZ-rotations on. These are needed by
qaoa.cost_function.make_qaoa_memory_map
-
property
zz_rotation_angles
¶ 2D array with Z-rotation angles.
1st index goes over the n_steps and the 2nd index over the qubit pairs, to apply Z-rotations on. These are needed by
qaoa.cost_function.make_qaoa_memory_map
Parameter Iterators¶
To facilitate iterating one or more of the free parameters over a given range (e.g. for landscape plots) we also provide a way to build Iterables that leave all parameters except one fixed. The one is iterated over a range specified by the user.
-
class
qaoa.parameters.
QAOAParameterIterator
(qaoa_params, the_parameter, the_range)¶ An iterator to sweep one parameter over a range in a QAOAParameter object.
- Parameters
qaoa_params (
Type
[AbstractParams
]) – The initial QAOA parameters, where one of them is swept overthe_parameter (
str
) – A string specifying, which parameter should be varied. It has to be of the form<attr_name>[i]
where<attr_name>
is the name of the _internal_ list andi
the index, at which it sits. E.g. ifqaoa_params
is of typeAnnealingParams
and we want to vary over the second timestep, it isthe_parameter = "times[1]"
.the_range (
Iterable
[float
]) – The range, thatthe_parameter
should be varied over
Todo
Add checks, that the number of indices in
the_parameter
matches the dimensions ofthe_parameter
Add checks, that the index is not too large
Example
Assume qaoa_params is of type
StandardWithBiasParams
and has n_steps >= 2. Then the following code produces a loop that sweepsgammas_singles[1]
over the range(0, 1)
in 4 steps:the_range = np.arange(0, 1, 0.4) the_parameter = "gammas_singles[1]" param_iterator = QAOAParameterIterator(qaoa_params, the_parameter, the_range) for params in param_iterator: # do what ever needs to be done. # we have type(params) == type(qaoa_params)