Bosonic 是一个为模拟光子系统而开发的库,其输入是无法区分的玻色子(在作者感兴趣的情况下是光子)。特别是,它专注于这些系统的多粒子传递函数的快速计算,并支持成本函数相对于系统参数的梯度的计算。它最初是为了开发我们的量子光学神经网络 [1] 而开发的,并包含用于模拟和优化的专门功能。
该库的重点有两个:
该软件包的核心动机是快速计算多粒子酉变换作为单粒子酉变换和玻色子输入数量的函数。也就是说,如果我们有一个四维酉 U,并且我们知道输入处有 3 个光子,我们想知道
这由函数bosonic.aa_phi
提供支持,该函数以 Aaronson 和 Arkhipov 的名字命名,他们指定了我们在 [2] 中用作 Φ(U) 函数的该函数的形式。例如,我们可以用分束器演示著名的红欧曼德尔效应:
>> > import bosonic as b
>> > import numpy as np
>> > U = np . array ([[ 1 , 1 ], [ 1 , - 1 ]], dtype = complex ) / np . sqrt ( 2 )
>> > phiU = b . aa_phi ( U , 2 )
>> > print ( phiU )
[[ 0.5 + 0.j 0.70710678 + 0.j 0.5 + 0.j ]
[ 0.70710678 + 0.j 0. + 0.j - 0.70710678 + 0.j ]
[ 0.5 + 0.j - 0.70710678 + 0.j 0.5 + 0.j ]]
>> > print ( b . fock . basis ( 2 , 2 ))
[[ 2 , 0 ], [ 1 , 1 ], [ 0 , 2 ]]
>> > input = np . array ([[ 0 ], [ 1 ], [ 0 ]], dtype = complex )
>> > phiU = b . aa_phi ( U , 2 )
>> > print ( phiU . dot ( input ))
[[ 0.70710678 + 0.j ]
[ 0. + 0.j ]
[ - 0.70710678 + 0.j ]]
>> > print ( np . abs ( phiU . dot ( input )) ** 2 )
[[ 0.5 ]
[ 0. ]
[ 0.5 ]]
在这里,我们构建对应于 U 中的 50/50 分束器的幺正。如打印 phiU 后的行所示,这里的基是 [2, 0]、[1, 1] 和 [0, 2]。因此,每个输入处对应一个光子入射的状态是 [0, 1, 0]。在最后一行(两行)中,我们看到输出是一个输出处的两个光子和另一处输出处的两个光子的相等叠加,光子不存在从不同端口离开的可能性。
如 [1] 中所述,我们开发了一种量子光学神经网络的拟议架构,其中涉及使用单点非线性平铺任意酉变换。有关更多详细信息,请参阅论文,但以下是该架构的直观摘要:
克隆此存储库是目前在系统上获取bosonic
的唯一方法。在此之前,您需要安装 python 包Cython
,才能正确构建bosonic
。像这样的东西应该在 Linux 上工作(如果需要,使用您喜欢的 python 包管理器而不是pip
):
$ pip install Cython
$ git clone [email protected]:steinbrecher/bosonic.git
$ cd bosonic
$ pip install .
在 Mac 上,您还需要 homebrew 中的 gcc 和 libopenmp:
$ brew install gcc
$ brew install libomp
$ pip install Cython
$ git clone [email protected]:steinbrecher/bosonic.git
$ cd bosonic
$ CC=gcc-8 pip install .
然后,您应该能够通过运行来测试bosonic
是否已正确安装
$ python setup.py test
[1] Steinbrecher, GR、Olson, JP、Eglund, D. 和 Carolan, J. (2018)。量子光学神经网络。 arXiv 预印本 arXiv:1808.10047。 https://arxiv.org/abs/1808.10047
[2] 阿伦森、斯科特和亚历克斯·阿尔希波夫。 “线性光学的计算复杂性。”第四十三届 ACM 计算理论年度研讨会论文集。 ACM,2011。https://arxiv.org/pdf/1011.3245.pdf