mindquantum.algorithm.nisq.Transform

查看源文件
class mindquantum.algorithm.nisq.Transform(operator, n_qubits=None)[源代码]

将费米子或者玻色子进行转化的模块。 jordan_wigner , parity , bravyi_kitaev , bravyi_kitaev_tree , bravyi_kitaev_superfast 将会把 FermionOperator 转换为 QubitOperatorreversed_jordan_wigner 将会把 QubitOperator 转换为 FermionOperator

参数:
  • operator (Union[FermionOperator, QubitOperator]) - 需要进行转换的 FermionOperatorQubitOperator

  • n_qubits (int) - 输入算符的比特数。如果为 None , 系统将会自动数出比特数。默认值: None

样例:

>>> from mindquantum.core.operators import FermionOperator
>>> op1 = FermionOperator('1^')
>>> op1
1.0 [1^]
>>> op_transform = Transform(op1)
>>> from mindquantum.algorithm.nisq import Transform
>>> op_transform.jordan_wigner()
0.5 [Z0 X1] +
-0.5j [Z0 Y1]
>>> op_transform.parity()
0.5 [Z0 X1] +
-0.5j [Y1]
>>> op_transform.bravyi_kitaev()
0.5 [Z0 X1] +
-0.5j [Y1]
>>> op_transform.ternary_tree()
0.5 [X0 Z1] +
-0.5j [Y0 X2]
>>> op2 = FermionOperator('1^', 'a')
>>> Transform(op2).jordan_wigner()
0.5*a [Z0 X1] +
-0.5*I*a [Z0 Y1]
bravyi_kitaev()[源代码]

进行Bravyi-Kitaev变换。

Bravyi-Kitaev是介于Jordan-Wigner变换和parity变换之间的变换。也就是说,它平衡了占据的局部性和宇称信息,以提高模拟效率。在此方案中,量子比特存储一组 \(2^x\) 轨道的宇称,其中 \(x \ge 0\) 。索引 \(j\) 的量子比特总是存储轨道 \(j\) 。对于偶数的 \(j\) ,这是它存储的唯一轨道。但对于奇数的 \(j\) ,它还存储索引小于 \(j\) 的一组相邻轨道。 对于占据态变换,我们遵循公式:

\[b_{i} = \sum{[\beta_{n}]_{i,j}} f_{j},\]

其中 \(\beta_{n}\)\(N\times N\) 维平方矩阵, \(N\) 是总量子数。量子比特的索引分为三个集合,宇称集、更新集和翻转集。这组量子比特的宇称与索引小于 \(j\) 的轨道集具有相同的宇称,因此我们将称这组量子比特索引为“宇称集” \(j\) ,或 \(P(j)\)

索引为 \(j\) 的更新集,或 \(U(j)\) 包含除序号为 \(j\) 的量子比特会被更新,当轨道 \(j\) 被占据时。 索引为 \(j\) 的翻转集,或 \(F(j)\) ,包含所有的BravyiKitaev量子比特,这些比特将决定量子比特 \(j\) 相对于轨道 \(j\) 来说是否有相同或者相反的宇称。

请参见论文中的一些详细解释 The Bravyi-Kitaev transformation for quantum computation of electronic structure

本方法基于 Fermionic quantum computationA New Data Structure for Cumulative Frequency Tables 实现。

返回:

QubitOperator,经过 bravyi_kitaev 变换的玻色子算符。

bravyi_kitaev_superfast()[源代码]

作用快速Bravyi-Kitaev变换。 基于 Bravyi-Kitaev Superfast simulation of fermions on a quantum computer 实现。

请注意,只有如下的厄米共轭算符才能进行转换。

\[C + \sum_{p, q} h_{p, q} a^\dagger_p a_q + \sum_{p, q, r, s} h_{p, q, r, s} a^\dagger_p a^\dagger_q a_r a_s\]

其中 \(C\) 是一个常数。

返回:

QubitOperator,经过快速bravyi_kitaev变换之后的玻色子算符。

jordan_wigner()[源代码]

应用Jordan-Wigner变换。Jordan-Wigner变换能够保留初始占据数的局域性,并按照如下的形式将费米子转化为玻色子。

\[ \begin{align}\begin{aligned}a^\dagger_{j}\rightarrow \sigma^{-}_{j} X \prod_{i=0}^{j-1}\sigma^{Z}_{i}\\a_{j}\rightarrow \sigma^{+}_{j} X \prod_{i=0}^{j-1}\sigma^{Z}_{i},\end{aligned}\end{align} \]

其中 \(\sigma_{+} = \sigma^{X} + i \sigma^{Y}\)\(\sigma_{-} = \sigma^{X} - i\sigma^{Y}\) 分别是自旋升算符和降算符。

返回:

QubitOperator,Jordan-Wigner变换后的量子比特算符。

parity()[源代码]

应用宇称变换。宇称变换保存初始占据数的非局域性。公式为:

\[\left|f_{M-1}, f_{M-2},\cdots, f_0\right> \rightarrow \left|q_{M-1}, q_{M-2},\cdots, q_0\right>,\]

其中

\[q_{m} = \left|\left(\sum_{i=0}^{m-1}f_{i}\right) mod\ 2 \right>\]

该公式可以写成这样,

\[p_{i} = \sum{[\pi_{n}]_{i,j}} f_{j},\]

其中 \(\pi_{n}\)\(N\times N\) 维的方矩阵, \(N\) 是总量子比特数。运算按照如下等式进行:

\[ \begin{align}\begin{aligned}a^\dagger_{j}\rightarrow\frac{1}{2}\left(\prod_{i=j+1}^N \left(\sigma_i^X X\right)\right)\left( \sigma^{X}_{j}-i\sigma_j^Y\right) X \sigma^{Z}_{j-1}\\a_{j}\rightarrow\frac{1}{2}\left(\prod_{i=j+1}^N \left(\sigma_i^X X\right)\right)\left( \sigma^{X}_{j}+i\sigma_j^Y\right) X \sigma^{Z}_{j-1}\end{aligned}\end{align} \]
返回:

QubitOperator,经过宇称变换后的玻色子算符。

reversed_jordan_wigner()[源代码]

应用Jordan-Wigner逆变换。

返回:

FermionOperator,Jordan-Wigner逆变换后的费米子算符。

ternary_tree()[源代码]

作用Ternary tree变换。 基于 Optimal fermion-to-qubit mapping via ternary trees with applications to reduced quantum states learning 实现。

返回:

QubitOperator,Ternary tree变换后的玻色子算符。