INTERCONNECT案例:统一电路生成与仿真
这个例子演示了如何构建和模拟一个光子集成电路(PIC),表示任意维度和值的统一矩阵,仅使用定向耦合器和移相器。构建了一个电路来模拟非相互作用玻色-哈伯德模型或“跳跃”哈密顿量的统一演化,并模拟了代表不可区分和可区分光子的三光子输入状态的各种测量成功概率。最后,用定向耦合器间隙宽度的变化来模拟电路,以表征制造缺陷对测量成功概率的影响。
步骤
本例中的仿真是用qINTERCONNECT求解器进行的。模拟是通过Python API设置和运行的,它可以直接在INTERCONNECT中运行,也可以在外部Python环境中运行。由于qINTERCONNECT需要一个INTERCONNECT GUI许可证才能运行,因此至少需要两个GUI许可证才能直接从INTERCONNECT环境运行qINTERCONNECT。Python API的文档可以在这里找到。
elements设计用于将酉矩阵解构为2x2分束器和移相器阵列的方形网格[1]。每个分束器可以由两个移相器和两个50:50方向耦合器组成。作为一个例子,构造并模拟了表示“跳跃”哈密顿量的酉矩阵[2]。如[2]所示,对6种不同的相互作用强度生成酉矩阵,代表不同的时间。跳跃哈密顿量可以用矩阵形式表示为
其中对应的酉矩阵可以通过取矩阵指数得到
步骤1:生成酉矩阵电路
生成了6个文件,其中包含对应于幺正矩阵的光子电路,这些幺正矩阵描述了时间步长从0.1秒到5秒的跳变哈密顿量,如[2]所示。
步骤2:在qINTERCONNECT中进行模拟
在上一步中生成的文件用于qINTERCONNECT仿真,以测量电路输出的不可区分和可区分光子。
步骤3:参数扫描
单位矩阵电路中定向耦合器的间隙宽度从其理想值变化,以表征制造缺陷的影响。
结果
步骤1:生成酉矩阵电路
打开空白仿真文件step1_generate_U。icp在INTERCONNECT。然后拖放文件lumfoundry_CML.cml。关闭项目文件(临时步骤)。
step1_generate_U开放。运行step1_generate_U.py脚本
在此步骤中,计算6个时间步长的跳频哈密顿量,并用于为每个时间步长生成标记为“U_0.1.icp”到“U_5.icp”的光子电路。
步骤2:在qINTERCONNECT中进行模拟
- 打开U_0.1.icp。运行step2_1 .py
- 打开step2_2_U_Uinv_0.1.icp。运行step2_2 .py
- 打开step2_3_U_Uinv_QFT_0.1.icp。运行step2_3 .py
在第一步中,对上一步产生的电路进行仿真
脚本step2_1 .py加载上一步中生成的每个电路,并为每个时间步执行多个模拟。首先,输入状态为,在通道1、2和3中每个通道都包含一个不可区分的光子,而在通道4中没有光子,将其注入电路并执行第一通道的测量。这些测量的成功概率在下图中以红点表示每个光子数的结果。此外,用可区分的光子重复模拟,用蓝点表示。
结果与[2]的图3相似。接下来,在不可区分光子的输入状态下进行了额外的模拟,除了这次测量所有四个输出通道。测量每种可能结果的概率如下所示。
在第二步中,仿真文件包含t = 0.1 s时的上述酉矩阵的电路,然后是酉矩阵的逆电路。在理想条件下,这些电路的组合表示单位矩阵,如下图所示,与[2]中的图3一致。
在第三步中,模拟类似于上面的一个,除了跟随酉矩阵的电路现在代表了跟随三通道量子傅里叶变换的酉矩阵的逆。
步骤3:参数扫描
- 打开step3.icp。运行step_3.py
脚本step_3.py在定向耦合器间隙中生成一组新的电路。间隙值不是理想值200 nm,而是取自间隙值以200 nm为中心的正态分布,标准差为10 nm。步骤2中的模拟(测量所有通道的输出)然后用新电路重复,并与理想情况进行比较,如下所示。
重要的模型设置
The simulation parameters can be changed by modifying the parameter dictionary for each simulation, for instance:
"mode_per_channel": 1,
"nchannel": 4,
"nmax": 3,
"input_dims": [3]*4,
"interconnect_file": "U_0.1.icp",
"circuit": "Unitary Matrix",
"input_ports": ['input_1', 'input_2', 'input_3', 'input_4'],
"output_ports": ['output_1', 'output_2', 'output_3', 'output_4'],
"ket_in": {
(1, 1, 1, 0): [1, 0],
},
"measurement_mask": [100, 200, 200, 200]
常见的设置
- interconnect_file: INTERCONNECT文件U_0.1的名称。Icp”包含酉矩阵电路。
- 电路,n通道,每通道模式:在qINTERCONNECT中模拟的每个电路必须包含在一个复合元件中,因此我们将这个复合元件(电路)命名为“酉矩阵”。酉矩阵电路包含四个通道,因此nchannel设置为4,mode_per_channel设置为1。
- Input_ports, output_ports:在INTERCONNECT电路中命名的输入和输出端口的名称。
- Input_dims:在每种模式下要模拟的最大光子数,在本例中为3。
- Frequency_points:用于多频率模拟的可选参数。
- ket_in:输入状态在字典“ket_in”下的Fock基中指定,其中键是对应每个通道光子数的元组,值是对应该状态在极坐标下的概率幅度的列表,先大小后角度排序。这里,信号通道中的输入对应于状态
- 利用频率自由度可以模拟可分辨的光子。例如,将frequency_points的个数设置为3,由可分辨光子组成的状态
可以表示为
对应于ket_in的值(1,0,0,0,1,0,0,0,0):[1,0]。
- Measurement_mask:指我们在每个模式的输出处测量的内容。值为100意味着我们不直接测量模态,但我们想知道它在模拟结束时的状态,而值为200意味着模态中的信息被跟踪,因此它不会出现在最终的密度矩阵中。任何其他值都意味着我们只保留检测到如此多光子的结果。
- Ket_out:要计算的保真度的预期输出状态。
使用参数更新模型
改变电路参数
通过修改custom_builder.py脚本文件的内容,可以将定向耦合器CML元素替换为自定义定向耦合器。此外,可以修改该文件以支持自定义分束器配置,只要它们可以由
描述到全局阶段。如果使用不同的定向耦合器或分束器配置,分束器的全局相位将受到影响,并且必须在custom_builder.py脚本中更改此更新相位的值。
将模型进一步扩展
UnitaryCircuit方法支持创建任意幺正矩阵,并可用于模拟其他哈密顿量,如[2]图3b中的远程哈密顿量。
Related publications
W. R. Clements, P. C. Humphreys, B. J. Metcalf, W. S. Kolthammer and I. A. Walmsley, "Optimal design for universal multiport interferometers", Optica Vol. 3, No. 12, p. 1460-1465, 2016.
F. H. B. Somhorst et al, "Quantum simulation of thermodynamics in an integrated quantum photonic processor", Nat Commun, Vol. 14, No. 3895, 2023.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律