-
Notifications
You must be signed in to change notification settings - Fork 81
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Co-authored-by: abbycross <[email protected]>
- Loading branch information
Showing
3 changed files
with
15 additions
and
15 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -3,17 +3,17 @@ title: Sample-based quantum diagonalization | |
description: Overview of the Sample-based quantum diagonalization (SQD) workflow | ||
--- | ||
|
||
# Sample-based quantum diagonalization (SQD) | ||
# Sample-based quantum diagonalization (SQD) overview | ||
|
||
Sample-based quantum diagonalization (SQD) is a technique for finding eigenvalues and eigenvectors of quantum operators, such as the Hamiltonian of a quantum system, using quantum and distributed classical computing together. This post-processing technique may be especially useful for users simulating chemical or other quantum systems. | ||
|
||
Classical computing is used to process samples obtained from a quantum processor, and to project and diagonalize a target Hamiltonian in a subspace spanned by them. This allows SQD to be robust to samples corrupted by quantum noise and manage large Hamiltonians, such as chemical systems with millions of interacting terms, beyond the reach of exact diagonalization methods. | ||
|
||
The SQD tool can target Hamiltonians expressed as linear combinations of Pauli operators, or second-quantized fermionic operators. The input samples are obtained by quantum circuits defined by the user, which are believed to be good representations of eigenstates (for example the ground state) of a target operator. The convergence rate of SQD as a function of the number of samples improves with the sparseness of the target eigenstate. | ||
The SQD tool can target Hamiltonians expressed as linear combinations of Pauli operators, or second-quantized fermionic operators. The input samples are obtained by quantum circuits defined by the user, which are believed to be good representations of eigenstates (for example, the ground state) of a target operator. The convergence rate of SQD as a function of the number of samples improves with the sparseness of the target eigenstate. | ||
|
||
## Install SQD package | ||
## Install the SQD package | ||
|
||
There are two ways to install the SQD package. Via PyPI and building from source. We also recommend installing these packages in a [virtual environment](https://docs.python.org/3.10/tutorial/venv.html) to ensure separation between package dependencies. | ||
There are two ways to install the SQD package: PyPI and building from source. It is recommended to install these packages in a [virtual environment](https://docs.python.org/3.10/tutorial/venv.html) to ensure separation between package dependencies. | ||
|
||
### Install from PyPI | ||
|
||
|
@@ -25,13 +25,13 @@ pip install qiskit-addon-sqd | |
|
||
### Build from source | ||
|
||
Users who wish to contribute to this package or who want to install it manually may do so by first cloning the repository | ||
If you wish to contribute to this package or want to install it manually, first clone the repository: | ||
|
||
```bash | ||
git clone [email protected]:Qiskit/qiskit-addon-sqd.git | ||
``` | ||
|
||
and install the package via `pip`. The repository also contains example notebooks which can be run and if you plan on developing in the repository, you may want to also install the `dev` dependencies. | ||
and install the package via `pip`. The repository also contains example notebooks that you can run. If you plan on developing in the repository, you can install the `dev` dependencies. | ||
|
||
Adjust the options to suit your needs. | ||
|
||
|
@@ -41,26 +41,26 @@ pip install tox notebook -e '.[notebook-dependencies, dev]' | |
|
||
## Theoretical background | ||
|
||
The SQD workflow using self-consistent configuration recovery is explained in detail in [[1]](#references). This section will briefly overview the technique depicted in the following diagram. | ||
The SQD workflow using self-consistent configuration recovery is explained in detail in [[1]](#references). This section provides an overview to the technique depicted in the following diagram. | ||
|
||
![SQD diagram depicting configuration recovery, collecting subsamples, and obtaining eigenstates from those subsamples](/images/guides/qiskit-addons/sqd_diagram.png) | ||
|
||
Here $\bar{\mathcal{X}}$ is a set of noisy samples obtained from a QPU which contain, in the context of the Hamiltonian being simulated, physical and non-physical configurations (represented as bitstrings) obtained from execution on a QPU. The non-physical configurations are due to noise and can be processed by the `sqd.configuration_recovery.recover_configurations()` method to refine the samples into a new set $\mathcal{X}_R$. | ||
Here $\bar{\mathcal{X}}$ is a set of noisy samples which contain, in the context of the Hamiltonian being simulated, physical and non-physical configurations (represented as bitstrings) obtained from execution on a QPU. The non-physical configurations are due to noise and can be processed by the `sqd.configuration_recovery.recover_configurations()` method to refine the samples into a new set $\mathcal{X}_R$. | ||
|
||
From this set, batches of configurations $\mathcal{S}^{(1)}...\ \mathcal{S}^{(K)}$ are collected and represent samples obtained from different subspaces of the Hamiltonian. These subspace samples are built from a set of basis states, $\mathcal{S}^{(k)}=\{|\mathbf{x}^{(k)}\rangle\}$, and are projections of the system Hamiltonian, $\hat{H}$. This projection is defined as | ||
|
||
$$ \hat{H}_{S^{(k)}} = \hat{P}_{\mathcal{S}^{(k)}}\hat{H}\hat{P}_{\mathcal{S}^{(k)}}\text{, with } \hat{P}_{\mathcal{S}^{(k)}} = \sum_{\mathbf{x} \in \mathcal{S}^{(k)}} |\mathbf{x}\rangle\langle\mathbf{x}|$$ | ||
$$ \hat{H}_{S^{(k)}} = \hat{P}_{\mathcal{S}^{(k)}}\hat{H}\hat{P}_{\mathcal{S}^{(k)}}\text{, with } \hat{P}_{\mathcal{S}^{(k)}} = \sum_{\mathbf{x} \in \mathcal{S}^{(k)}} |\mathbf{x}\rangle\langle\mathbf{x}|,$$ | ||
|
||
where $\hat{H}_{\mathcal{S}^{(k)}}$ is the Hamiltonian of a given subspace. | ||
|
||
The bulk of the SQD workflow lies here where each of these subspace Hamiltonians are diagonalized. The ground states obtained from each of these subspaces, $|\psi^{(k)}\rangle$, are used to obtain an estimate of a reference vector of occupancies $\mathbf{n}^{(K)}$ averaged over each of the $K$ subspaces and sent back to the configuration recovery step. Then a new set of subspaces are obtained and diagonalized, and this procedure iterates in a self-consistent loop until the ground state energy estimate has converged. | ||
The bulk of the SQD workflow lies here wherein each of these subspace Hamiltonians is diagonalized. The ground states obtained from each of these subspaces, $|\psi^{(k)}\rangle$, are used to obtain an estimate of a reference vector of occupancies $\mathbf{n}^{(K)}$ averaged over each of the $K$ subspaces and sent back to the configuration recovery step. A new set of subspaces are then obtained and diagonalized, and this procedure iterates in a self-consistent loop until the ground state energy estimate has converged. | ||
|
||
|
||
## Next steps | ||
|
||
<Admonition type="tip" title="Recommendations"> | ||
- Read about basis gates in the [Represent quantum computers](./represent-quantum-computers#basis-gates) topic. | ||
- Apply your knowledge of basis gates to one of these [workflow example tutorials.](https://learning.quantum.ibm.com/catalog/tutorials?category=workflow-example) | ||
- Read about basis gates in the [Represent quantum computers](/guides/represent-quantum-computers#basis-gates) topic. | ||
- Apply your knowledge of basis gates to a tutorial in [IBM Quantum Learning](https://learning.quantum.ibm.com/catalog/tutorials). | ||
</Admonition> | ||
|
||
## References | ||
|