Bosonic เป็นห้องสมุดที่พัฒนาขึ้นสำหรับการจำลองระบบโฟตอนซึ่งอินพุตเป็นโบซอนที่แยกไม่ออก (ในกรณีที่ผู้เขียนสนใจคือโฟตอน) โดยเฉพาะอย่างยิ่งจะมุ่งเน้นไปที่การคำนวณอย่างรวดเร็วของฟังก์ชันการถ่ายโอนหลายอนุภาคสำหรับระบบเหล่านี้ และสนับสนุนการคำนวณการไล่ระดับสีของฟังก์ชันต้นทุนที่เกี่ยวข้องกับพารามิเตอร์ของระบบ เดิมทีได้รับการพัฒนาเพื่อพัฒนาเครือข่ายประสาทเทียมเชิงแสงควอนตัม [1] และมีฟังก์ชันเฉพาะสำหรับการจำลองและการเพิ่มประสิทธิภาพ
จุดสนใจหลักของห้องสมุดนี้มีสองเท่า:
แรงจูงใจหลักสำหรับแพ็คเกจนี้คือการคำนวณอย่างรวดเร็วของการแปลงหน่วยรวมหลายอนุภาคในฐานะฟังก์ชันของหน่วยอนุภาคเดี่ยวและจำนวนอินพุตโบโซนิก นั่นคือ หากเรามี U รวมสี่มิติ และเรารู้ว่ามีโฟตอน 3 โฟตอนที่อินพุต เราต้องการทราบการเปลี่ยนแปลงของ
สิ่งนี้ได้รับการสนับสนุนโดยฟังก์ชัน bosonic.aa_phi
ซึ่งตั้งชื่อตาม Aaronson และ Arkhipov ซึ่งระบุรูปแบบของฟังก์ชันนี้ที่เราใช้เป็นฟังก์ชัน Φ(U) ใน [2] ตัวอย่างเช่น เราสามารถสาธิตเอฟเฟกต์ Hong-Ou-Mandel อันโด่งดังด้วยบีมสปลิตเตอร์:
>> > 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 ]]
ที่นี่ เราสร้างหน่วยรวมที่สอดคล้องกับตัวแยกลำแสง 50/50 ใน U ดังที่แสดงบรรทัดหลังจากที่เราพิมพ์ 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 คุณจะต้องมี gcc จาก homebrew และ 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, Englund, D., & Carolan, J. (2018) เครือข่ายประสาทแสงควอนตัม arXiv พิมพ์ล่วงหน้า arXiv:1808.10047 https://arxiv.org/abs/1808.10047
(2) แอรอนสัน, สก็อตต์ และอเล็กซ์ อาร์คิปอฟ "ความซับซ้อนในการคำนวณของเลนส์เชิงเส้น" การดำเนินการของการประชุมสัมมนา ACM ประจำปีครั้งที่สี่สิบสามเกี่ยวกับทฤษฎีการคำนวณ พลอากาศเอก, 2011. https://arxiv.org/pdf/1011.3245.pdf