qiskit.aqua.algorithms.HHL¶

class
HHL
(matrix, vector, truncate_powerdim=False, truncate_hermitian=False, eigs=None, init_state=None, reciprocal=None, num_q=0, num_a=0, orig_size=None, quantum_instance=None)[소스]¶ The HHL algorithm.
The HHL algorithm (after the author’s surnames HarrowHassidimLloyd) is a quantum algorithm to solve systems of linear equations \(A\overrightarrow{x}=\overrightarrow{b}\). Using Quantum Phase Estimation, the linear system is transformed into diagonal form in which the matrix \(A\) is easily invertible. The inversion is achieved by rotating an ancillary qubit by an angle \(\arcsin{ \frac{C}{\lambda_\mathrm{i}}}\) around the yaxis where \(\lambda_\mathrm{i}\) are the eigenvalues of \(A\). After uncomputing the register storing the eigenvalues using the inverse QPE, one measures the ancillary qubit. A measurement of 1 indicates that the matrix inversion succeeded. This leaves the system in a state proportional to the solution vector \(x\rangle\). In many cases one is not interested in the single vector elements of \(x\rangle\) but only on certain properties. These are accessible by using problemspecific operators. Another usecase is the implementation in a larger quantum program.
When using nonhermitian matrices and matrices with dimensions other than \(2^{n}\) the must be converted to an hermitian matrix and next higher dimension \(2^{n}\), respectively. The truncate_hermitian, truncate_powerdim flags and orig_size are used to indicate conversion and the returned result of the HHL algorithm for expanded matrices will be truncated. The
matrix_resize()
method is provided for convenience to do this but any method of your choice can be used.To further explain truncate_hermitian indicates whether or not to truncate matrix and result vector to half the dimension by simply cutting off entries with other indices after the input matrix was expanded to be hermitian following
\[\begin{split}\begin{pmatrix} 0 & A^\mathsf{H}\\ A & 0 \end{pmatrix}\end{split}\]where the conjugate transpose of matrix \(A\) is denoted by \(A^\mathsf{H}\). The truncation of the result vector is done by simply cutting off entries of the upper half.
truncate_powerdim indicates whether to truncate matrix and result vector from dimension \(2^{n}\) to dimension given by orig_size by simply cutting off entries with larger indices.
Running the algorithm will execute the circuit and return the result vector, measured (real hardware backend) or derived (qasm_simulator) via state tomography or calculated from the statevector (statevector_simulator).
See also https://arxiv.org/abs/0811.3171
 매개변수
matrix (
ndarray
) – The input matrix of linear system of equationsvector (
ndarray
) – The input vector of linear system of equationstruncate_powerdim (
bool
) – Flag indicating expansion to 2**n matrix to be truncatedtruncate_hermitian (
bool
) – Flag indicating expansion to hermitian matrix to be truncatedeigs (
Optional
[Eigenvalues
]) – The eigenvalue estimation instanceinit_state (
Union
[QuantumCircuit
,InitialState
,None
]) – The initial quantum state preparationreciprocal (
Optional
[Reciprocal
]) – The eigenvalue reciprocal and controlled rotation instancenum_q (
int
) – Number of qubits required for the matrix Operator instancenum_a (
int
) – Number of ancillary qubits for Eigenvalues instanceorig_size (
Optional
[int
]) – The original dimension of the problem (if truncate_powerdim)quantum_instance (
Union
[QuantumInstance
,Backend
,BaseBackend
,None
]) – Quantum Instance or Backend
 예외
ValueError – Invalid input

__init__
(matrix, vector, truncate_powerdim=False, truncate_hermitian=False, eigs=None, init_state=None, reciprocal=None, num_q=0, num_a=0, orig_size=None, quantum_instance=None)[소스]¶  매개변수
matrix (
ndarray
) – The input matrix of linear system of equationsvector (
ndarray
) – The input vector of linear system of equationstruncate_powerdim (
bool
) – Flag indicating expansion to 2**n matrix to be truncatedtruncate_hermitian (
bool
) – Flag indicating expansion to hermitian matrix to be truncatedeigs (
Optional
[Eigenvalues
]) – The eigenvalue estimation instanceinit_state (
Union
[QuantumCircuit
,InitialState
,None
]) – The initial quantum state preparationreciprocal (
Optional
[Reciprocal
]) – The eigenvalue reciprocal and controlled rotation instancenum_q (
int
) – Number of qubits required for the matrix Operator instancenum_a (
int
) – Number of ancillary qubits for Eigenvalues instanceorig_size (
Optional
[int
]) – The original dimension of the problem (if truncate_powerdim)quantum_instance (
Union
[QuantumInstance
,Backend
,BaseBackend
,None
]) – Quantum Instance or Backend
 예외
ValueError – Invalid input
Methods
__init__
(matrix, vector[, …]) type matrix
ndarray
construct_circuit
([measurement])Construct the HHL circuit.
expand_to_hermitian
(matrix, vector)Expand a nonhermitian matrix A to a hermitian matrix by [[0, A.H], [A, 0]] and expand vector b to [b.conj, b].
expand_to_powerdim
(matrix, vector)Expand a matrix to the nextlarger 2**n dimensional matrix with ones on the diagonal and zeros on the offdiagonal and expand the vector with zeros accordingly.
matrix_resize
(matrix, vector)Resizes matrix if necessary
run
([quantum_instance])Execute the algorithm with selected backend.
set_backend
(backend, **kwargs)Sets backend with configuration.
Attributes
Returns backend.
Returns quantum instance.
Return a numpy random.

property
backend
¶ Returns backend.
 반환 형식
Union
[Backend
,BaseBackend
]

construct_circuit
(measurement=False)[소스]¶ Construct the HHL circuit.
 매개변수
measurement (
bool
) – indicate whether measurement on ancillary qubit should be performed 반환 형식
QuantumCircuit
 반환값
the QuantumCircuit object for the constructed circuit

static
expand_to_hermitian
(matrix, vector)[소스]¶ Expand a nonhermitian matrix A to a hermitian matrix by [[0, A.H], [A, 0]] and expand vector b to [b.conj, b].
 매개변수
matrix (
ndarray
) – the input matrixvector (
ndarray
) – the input vector
 반환 형식
Tuple
[ndarray
,ndarray
] 반환값
the expanded matrix, the expanded vector

static
expand_to_powerdim
(matrix, vector)[소스]¶ Expand a matrix to the nextlarger 2**n dimensional matrix with ones on the diagonal and zeros on the offdiagonal and expand the vector with zeros accordingly.
 매개변수
matrix (
ndarray
) – the input matrixvector (
ndarray
) – the input vector
 반환 형식
Tuple
[ndarray
,ndarray
] 반환값
the expanded matrix, the expanded vector

static
matrix_resize
(matrix, vector)[소스]¶ Resizes matrix if necessary
 매개변수
matrix (
ndarray
) – the input matrix of linear system of equationsvector (
ndarray
) – the input vector of linear system of equations
 반환 형식
Tuple
[ndarray
,ndarray
,bool
,bool
] 반환값
new matrix, vector, truncate_powerdim, truncate_hermitian
 예외
ValueError – invalid input

property
quantum_instance
¶ Returns quantum instance.
 반환 형식
Optional
[QuantumInstance
]

property
random
¶ Return a numpy random.

run
(quantum_instance=None, **kwargs)¶ Execute the algorithm with selected backend.
 매개변수
quantum_instance (
Union
[QuantumInstance
,Backend
,BaseBackend
,None
]) – the experimental setting.kwargs (dict) – kwargs
 반환값
results of an algorithm.
 반환 형식
dict
 예외
AquaError – If a quantum instance or backend has not been provided

set_backend
(backend, **kwargs)¶ Sets backend with configuration.
 반환 형식
None