mindquantum.algorithm.nisq.QubitUCCAnsatz

查看源文件
class mindquantum.algorithm.nisq.QubitUCCAnsatz(n_qubits=None, n_electrons=None, occ_orb=None, vir_orb=None, generalized=False, trotter_step=1)[源代码]

量子比特幺正耦合簇(qUCC)是幺正耦合簇的变体,它使用量子比特激励算子而不是费米子激励算子。 量子比特激励算子跨越的Fock空间相当于费米子算子,因此可以使用量子比特激发算子以更高阶的 Trotterization 为代价来近似精确的波函数。

qUCC最大的优点是:即使使用3阶或4阶Trotterization,CNOT门的数量比UCC的原始版本小得多。 此外,尽管变分参数的数量增加,但精度也大大提高。

说明

不包括哈特里-福克电路。 目前,不允许generalized=True,因为需要理论验证。 参考文献: Efficient quantum circuits for quantum computational chemistry

参数:
  • n_qubits (int) - 模拟中量子比特(自旋轨道)的数量。默认值: None

  • n_electrons (int) - 给定分子的电子数。默认值: None

  • occ_orb (list) - 手动分配的占用空间轨道的索引。默认值: None

  • vir_orb (list) - 手动分配的虚拟空间轨道的索引。默认值: None

  • generalized (bool) - 是否使用不区分占用轨道或虚拟轨道的广义激励(qUCCGSD)。目前,不允许 generalized=True ,因为需要理论验证。默认值: False

  • trotter_step (int) - 梯度的数量。建议设置大于等于2的值,以获得较好的精度。默认值: 1

样例:

>>> from mindquantum.algorithm.nisq import QubitUCCAnsatz
>>> QubitUCCAnsatz().n_qubits
0
>>> qucc = QubitUCCAnsatz(4, 2, trotter_step=2)
>>> qucc.circuit[:6]
      ┏━━━┓                   ┏━━━┓
q0: ──┨╺╋╸┠─────────■─────────┨╺╋╸┠─────────────────────────────────
      ┗━┳━┛         ┃         ┗━┳━┛
        ┃           ┃           ┃   ┏━━━┓                   ┏━━━┓
q2: ────╂───────────╂───────────╂───┨╺╋╸┠─────────■─────────┨╺╋╸┠───
        ┃           ┃           ┃   ┗━┳━┛         ┃         ┗━┳━┛
        ┃   ┏━━━━━━━┻━━━━━━━┓   ┃     ┃   ┏━━━━━━━┻━━━━━━━┓   ┃
q1: ────■───┨ RY(t_0_q_s_0) ┠───■─────■───┨ RY(t_0_q_s_1) ┠───■─────
            ┗━━━━━━━━━━━━━━━┛             ┗━━━━━━━━━━━━━━━┛
>>> qucc.n_qubits
4
>>> qucc_2 = QubitUCCAnsatz(occ_orb=[0, 1], vir_orb=[2])
>>> qucc_2.operator_pool
[-1.0*t_0_q_s_0 [Q0^ Q4] +
1.0*t_0_q_s_0 [Q4^ Q0] , -1.0*t_0_q_s_1 [Q1^ Q4] +
1.0*t_0_q_s_1 [Q4^ Q1] , -1.0*t_0_q_s_2 [Q2^ Q4] +
1.0*t_0_q_s_2 [Q4^ Q2] , -1.0*t_0_q_s_3 [Q3^ Q4] +
1.0*t_0_q_s_3 [Q4^ Q3] , -1.0*t_0_q_s_4 [Q0^ Q5] +
1.0*t_0_q_s_4 [Q5^ Q0] , -1.0*t_0_q_s_5 [Q1^ Q5] +
1.0*t_0_q_s_5 [Q5^ Q1] , -1.0*t_0_q_s_6 [Q2^ Q5] +
1.0*t_0_q_s_6 [Q5^ Q2] , -1.0*t_0_q_s_7 [Q3^ Q5] +
1.0*t_0_q_s_7 [Q5^ Q3] , -1.0*t_0_q_d_0 [Q1^ Q0^ Q5 Q4] +
1.0*t_0_q_d_0 [Q5^ Q4^ Q1 Q0] , -1.0*t_0_q_d_1 [Q2^ Q0^ Q5 Q4] +
1.0*t_0_q_d_1 [Q5^ Q4^ Q2 Q0] , -1.0*t_0_q_d_2 [Q2^ Q1^ Q5 Q4] +
1.0*t_0_q_d_2 [Q5^ Q4^ Q2 Q1] , -1.0*t_0_q_d_3 [Q3^ Q0^ Q5 Q4] +
1.0*t_0_q_d_3 [Q5^ Q4^ Q3 Q0] , -1.0*t_0_q_d_4 [Q3^ Q1^ Q5 Q4] +
1.0*t_0_q_d_4 [Q5^ Q4^ Q3 Q1] , -1.0*t_0_q_d_5 [Q3^ Q2^ Q5 Q4] +
1.0*t_0_q_d_5 [Q5^ Q4^ Q3 Q2] ]