QUBOQAOA#

class iqm.qaoa.qubo_qaoa.QUBOQAOA(problem, num_layers, *, betas=None, gammas=None, initial_angles=None)[source]#

Bases: QAOA

The class for QAOA with quadratic unconstrained binary (QUBO) cost function.

The class inherits a lot of functionality from its parent iqm.qaoa.generic_qaoa.QAOA. One new addition is the attribute bqm which stores the coefficient of the problem Hamiltonian. The same data in the form of Graph is hamiltonian_graph.

Parameters:
  • problem (QUBOInstance | ConstrainedQuadraticInstance) – A QUBOInstance object describing the QUBO problem to be solved.

  • num_layers (int) – The number of QAOA layers, commonly referred to as p in the literature.

  • betas (Sequence[float] | ndarray | None) – An optional list of the initial beta angles of QAOA. Has to be provided together with gammas.

  • gammas (Sequence[float] | ndarray | None) – An optional list of the initial gamma angles of QAOA. Has to be provided together with betas.

  • initial_angles (Sequence[float] | ndarray | None) – An optional list of the initial QAOA angles as one variable. Shouldn’t be provided together with either betas or gammas.

Attributes

bqm

The BQM representation of the problem, taken from the input QUBOInstance.

hamiltonian_graph

The graph whose edges / nodes have weights bias equal to the coefficients in the problem Hamiltonian.

interactions

Returns an upper-triangular matrix of the ZZ interactions between the variables.

local_fields

Returns a ndarray of the local fields of the model (Z coefficients).

Methods

estimate(estimator)

The method for taking estimates of the expected value of the Hamiltonian from the QAOA circuit.

sample(sampler[, shots])

The method for taking samples (i.e., measurement results) from the QAOA circuit.

train([estimator, min_method])

The function that performs the training of the angles.

property bqm: BinaryQuadraticModel#

The BQM representation of the problem, taken from the input QUBOInstance.

property hamiltonian_graph: Graph#

The graph whose edges / nodes have weights bias equal to the coefficients in the problem Hamiltonian.

property interactions: ndarray#

Returns an upper-triangular matrix of the ZZ interactions between the variables.

If the Hamiltonian representing the problem is

\[H = \sum_{i<j} J_{ij} Z_i Z_j + \sum_i h_i Z_i\]

then this method outputs \(J_{ij}\) as upper-triangular square matrix ndarray. Note that these are different from the off-diagonal elements of qubo_matrix of the input problem because the QUBO cost function has different coefficients than the Hamiltonian.

property local_fields: ndarray#

Returns a ndarray of the local fields of the model (Z coefficients).

If the Hamiltonian representing the problem is

\[H = \sum_{i<j} J_{ij} Z_i Z_j + \sum_i h_i Z_i\]

then this method outputs \(h_{i}\) as 1-dimensional ndarray. Note that these are different from the diagonal elements of qubo_matrix of the input problem because the QUBO cost function has different coefficients than the Hamiltonian.

train(estimator=None, min_method='COBYLA')[source]#

The function that performs the training of the angles.

The training modifies angles in-place using the minimize() function from scipy. The training uses the provided estimator.

Parameters:
Return type:

None

sample(sampler, shots=20000)[source]#

The method for taking samples (i.e., measurement results) from the QAOA circuit.

Takes a SamplerBackend and uses it to get shots samples. The backend is responsible for building the quantum circuit and taking the measurements (or obtaining the samples some other way), using information from the QAOA object that is passed to its method sample().

Parameters:
  • sampler (SamplerBackend) – The sampler to use to generate samples. The sampler is an instance of a subclass of SamplerBackend with a sample() method of the appropriate signature.

  • shots (int) – The number of shots to be taken.

Returns:

A dictionary whose keys are bitstrings representing the samples and whose values are their respective frequencies, so that the sum of the values of the dictionary equals to shots.

Return type:

dict[str, int]

estimate(estimator)[source]#

The method for taking estimates of the expected value of the Hamiltonian from the QAOA circuit.

Takes a EstimatorBackend and uses it to get estimates of the expected value. The backend takes all the necessary information from the QAOA object that is passed to its method estimate().

Parameters:

estimator (EstimatorBackend) – The estimator used to get the expected value. The estimator is an instance of a subclass of EstimatorBackend with a method estimate() of the appropriate signature.

Returns:

An estimate of the expectation value fo the Hamiltonian. Not normalized in any way.

Return type:

float