paddle_quantum.trotter

Trotter 哈密顿量时间演化的功能实现。

construct_trotter_circuit(circuit, hamiltonian, tau, steps, method='suzuki', order=1, grouping=None, coefficient=None, permutation=None)

向 circuit 的后面添加 trotter 时间演化电路,即给定一个系统的哈密顿量 H,该电路可以模拟系统的时间演化 \(U_{cir} e^{-iHt}\)

参数:
  • circuit (Circuit) – 需要添加时间演化电路的 Circuit 对象。

  • hamiltonian (Hamiltonian) – 需要模拟时间演化的系统的哈密顿量 H。

  • tau (float) – 每个 trotter 块的演化时间长度。

  • steps (int) – 添加多少个 trotter 块。(提示: steps * tau 即演化的时间总长度 t)

  • method (str, optional) – 搭建时间演化电路的方法,默认为 'suzuki' ,即使用 Trotter-Suzuki 分解。可以设置为 'custom' 来使用自定义的演化策略。(需要用 permutation 和 coefficient 来定义)。

  • order (int, optional) – Trotter-Suzuki decomposition 的阶数,默认为 1,仅在使用 method='suzuki' 时有效。

  • grouping (str, optional) – 是否对哈密顿量进行指定策略的重新排列,默认为 None ,支持 'xyz''even_odd' 两种方法。

  • coefficient (np.ndarrayorpaddle.Tensor, optional) – 自定义时间演化电路的系数,对应哈密顿量中的各项,默认为 None ,仅在 method='custom' 时有效。

  • permutation (np.ndarray, optional) – 自定义哈密顿量的排列方式,默认为 None,仅在 method='custom' 时有效。

抛出:
  • ValueError – Trotter-Suzuki 分解的阶数 order 必须为 1, 2, 或 2k, 其中 k 是一个整数

  • ValueErrorpermutationcoefficient 的形状不一致

  • ValueError – 重排策略 grouping 的方法不支持, 仅支持 'xyz', 'even_odd'

  • ValueError – 搭建时间演化电路的方法 method 不支持, 仅支持 'suzuki', 'custom'

提示

想知道该函数是如何模拟的?更多信息请移步至量桨官网教程: https://qml.baidu.com/tutorials/overview.html.

optimal_circuit(circuit, theta, which_qubits)

添加一个优化电路,哈密顿量为’XXYYZZ’。

参数:
  • circuit (paddle_quantum.ansatz.Circuit) – 需要添加门的电路。

  • theta (Union[paddle.Tensor, float]) – 旋转角度需要传入三个参数。

  • which_qubits (Iterable) – pauli_word 中的每个算符所作用的量子比特编号。

paddle_quantum.trotter.add_n_pauli_gate(circuit, theta, pauli_word, which_qubits)

添加一个对应着 N 个泡利算符张量积的旋转门,例如 \(e^{-\theta/2 \cdot X\otimes I\otimes X\otimes Y}\)

参数:
  • circuit (paddle_quantum.ansatz.Circuit) – 需要添加门的电路。

  • theta (Union[paddle.Tensor, float]) – 旋转角度。

  • pauli_word (str) – 泡利算符组成的字符串,例如 "XXZ"

  • which_qubits (Iterable) – pauli_word 中的每个算符所作用的量子比特编号。

抛出:

ValueError – The which_qubits 需要为 list, tuple, 或者 np.ndarray 格式。

get_suzuki_permutation(length, order)

计算 Suzuki 分解对应的置换数组。

参数:
  • length (int) – 对应哈密顿量中的项数,即需要置换的项数。

  • order (int) – Suzuki 分解的阶数。

返回:

置换数组。

返回类型:

np.ndarray

get_suzuki_p_values(k)

计算 Suzuki 分解中递推关系中的因数 p(k)。

参数:

k (int) – Suzuki 分解的阶数。

返回:

一个长度为 5 的列表,其形式为 [p, p, (1 - 4 * p), p, p]。

返回类型:

list

get_suzuki_coefficients(length, order)

计算 Suzuki 分解对应的系数数组。

参数:
  • length (int) – 对应哈密顿量中的项数,即需要置换的项数。

  • order (int) – Suzuki 分解的阶数。

返回:

系数数组。

返回类型:

np.ndarray

get_1d_heisenberg_hamiltonian(length, j_x=1.0, j_y=1.0, j_z=1.0, h_z=0.0, periodic_boundary_condition=True)

生成一个一维海森堡链的哈密顿量。

参数:
  • length (int) – 链长。

  • j_x (float, optional) – x 方向的自旋耦合强度 Jx,默认为 1

  • j_y (float, optional) – y 方向的自旋耦合强度 Jy,默认为 1

  • j_z (float, optional) – z 方向的自旋耦合强度 Jz,默认为 1

  • h_z (floatornp.ndarray, optional) – z 方向的磁场,默认为 0,若输入为单个 float 则认为是均匀磁场。(施加在每一个格点上)

  • periodic_boundary_condition (bool, optional) – 是否考虑周期性边界条件,即 l + 1 = 0,默认为 True

返回:

该海森堡链的哈密顿量。

返回类型:

Hamiltonian