模拟量子计算时如何跟踪纠缠?


9

我正在尝试建立一个量子计算库作为我的大学项目。我仍在学习量子计算领域的所有方面。我知道已经有用于量子仿真的高效库。我只是想自己做一个,这将有助于我掌握一些量子计算的核心概念。

我知道 n 量子位可以与 2n元素复杂数组。也n 量子比特门是一个 2n×2n2D阵列。因此,以下是我的疑问(主要与纠缠有关):

  1. 我何时需要找到门的张量积(例如 IHI, 为一个 3qubit系统)?是否总是有必要计算阶的张量积2n×2n,即使量子位没有纠缠?

  2. 只有一个 2n元素数组(我存储系数),实际上可以以某种方式计算哪些量子位纠缠吗?还是我需要制作另一个数据结构来存储我的纠缠信息n 量子位(关于纠缠哪些量子位)?

  3. 我的第二个问题真的相关吗?我是否需要完全跟踪纠缠信息?我的意思是,我不知道用门乘以系数是否足够(即使系统纠缠了)。也许仅在测量时才有意义。


1
这取决于 n优化以跟踪纠缠模式是否为时过早。如果只有3个qubit,那么投入大量精力并不会带来太多收益,因此这将是“过早的优化”。因此,问问自己,您实际上需要多大的可扩展性。
AHusain

1
@MidhunXDA“我知道物理上正在发生什么,但是我无法将其转换为数学形式”。据我所知,有多种物理过程导致量子计算。我认为,如果您准确地描述您要模拟的物理过程之一(或者如果您认为仍然在问题范围内,则可以全部描述)将是一个好主意。我认为指定此选项可以使问题更清晰,更容易回答。
离散蜥蜴

1
请将此分为多个问题-我至少看到三个不同的问题。
heather

3
@heather我同意张贴者的观点,这些问题实际上都是同一件事的不同方面。我真的没有看到如何改善这个问题,但是我相信我已经很了解了,可以给出答案。
DaftWullie '18

2
@heather我强烈建议主持人不要自己搁置问题,除非在极端情况下(阅读:公然偏离主题或垃圾邮件)。这个问题虽然范围很广,但可以在一个帖子中合理地回答。FWIW这里基本上有两个问题:1)什么时候计算门的张量积?2)这样做时如何考虑纠缠的影响?
Sanchayan Dutta '18

Answers:


5

始终计算全部费用当然就足够了 2n×2n ary矩阵,然后将其应用于 2n进入状态向量。如果那是您选择要做的,那就是所有要做的事情,因为所有纠缠信息都包含在该向量中。查看特定量子位是否纠缠的一种快速简便的方法是对所有其他量子位进行(纯)状态向量的部分跟踪。如果所得矩阵的秩为1,则该qubit处于可分离状态,否则将被纠缠。

我认为您的问题的重点实际上是“如何避免这种巨大的计算成本?”。通常,它不能-如果您要利用量子计算机的全部功能,则始终需要2n进入状态向量。但是,有各种技巧可以降低计算成本,例如通过跟踪纠缠来延迟对如此大的状态向量的需求。

效率提升

与上述天真的实现相比,您可以节省的最大费用是避免 2n×2nary矩阵。例如,如果仅使用1或2量子位门,则仅使用矩阵的稀疏性就意味着您只需要O(2n) 存储而不是 O(22n)

然后,您可以采用其他策略。例如,假设您要应用两个量子位单一门U 在量子位上 ij。您可以从状态向量中获取4个元素的集合(|x1,2,ni,j|yi,j 用于固定 x{0,1}n2 通过采取所有不同 y{0,1}2),然后应用 4×4U在那个4元素向量上 每重复一次x 将返回 U 在原始状态向量上制定。

我想还有其他策略可以提出。最初提出问题的一个原因是纠缠跟踪。这样可以在计算开始时提高内存和速度,但最终会变得等效,因为(大概)量子计算机中的所有内容最终都会纠缠在一起。

纠缠追踪

假设您的计算包含对集合的unit演化和度量n 量子位,即没有退相干,概率图等。让我们进一步假设您从一个完全可分离的状态开始,例如 |0n。此时,每个量子位都是可分离的,足以保持n不同的寄存器,每个寄存器传递一个可分离的qubit的状态。如果您的第一个门只是单量子位运算U 在量子位上 i,那么您只需更新存储在qubit上的状态 i|ψiU|ψi,而您无需触摸其他任何东西。

如果你想做一个两比特的门 V 量子位之间 ij,例如,那么您必须将两个站点的状态结合起来。因此,您将每个维度2的两个寄存器替换为一个维度4的寄存器,其中包含状态V|ψi|ψj。问题在于您现在无法再次拆分此状态,因此您必须将这两个量子位永久保存在寄存器中。当然,如果您有1个量子比特的门U 申请qubit i,您现在必须申请 |ψi,jUI|ψi,j。然后,下一次您想要一个2量子位的门时,例如,jk,您必须将空格合并 (i,j)k。这些空间将继续增长,但是如果门仅位于一个空间上,则只需在其中应用它(使用I 运算符以将其填充到其余的qubits上),您无需对其他空间执行任何操作。

如果您正在做这样的事情,您将不会(至少在算法的前几个步骤中)没有一个 2n元素寄存器。您将不得不拥有一堆不同的寄存器,并跟踪在单独的数组中哪个寄存器描述了哪些量子位。每次合并一些量子位的空间时,都会更新该额外的数组。

这是一些非常粗糙的伪代码,可能有助于传达我的意思:

#initialise variables
entangled_blocks={{1},{2},{3},...,{n}}
quantum_states={{1,0},{1,0},...,{1,0}}

#apply action of each gate
for each gate
   for each gate_target
       target_block=entangled_blocks entry containing gate_target
   next gate_target
   if all target_blocks equal then
      apply gate on target_block (pad with identity on other qubits)
   else
      new_entangled_block=union(target_blocks)
      new_state_vec=tensor_product(quantum_states for each target block)
      apply gate on new_state_vec (pad with identity on other qubits)
      replace all target_blocks in entangled_blocks with new_entangled_block
      replace all quantum_states(all target blocks) with new_state_vec
   end if
next gate

其他选择

(绝不详尽)

您可能有兴趣阅读有关矩阵乘积状态的信息,这是一种封装不太纠缠的状态信息的好方法,并且可以为您提供替代方法,具体取决于您要实现的目标。


我要努力实现的当然是效率。另外,我想确切地知道所有这些过程是如何工作的(因为我是noobie)。因此,实际上,更好的选择是将所有qubits系数一起存储在单个数组(记录)中,对吗?感谢您的回答。
Midhun XDA

@DaftWullie您的第一句话给人的印象是,通常需要存储全部内容。 2n×2n 单一的,而不仅仅是 2n向量。
诺伯特·舒奇

@MidhunXDA在效率方面,一切基本上都是等效的,因为量子计算机最终将导致一切纠缠。要了解发生了什么,最好从与状态向量相对应的单个数组开始。但是,通过使用纠缠跟踪,您可以提高速度和内存,从而可以进行更长的仿真。
DaftWullie '18年

@NorbertSchuch我说做到这一点“足够”,这是事实。我添加了有关如何避免这种情况的更多详细信息。您可能知道其他更好的策略。
DaftWullie '18年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.