Bosonic adalah perpustakaan yang dikembangkan untuk simulasi sistem fotonik yang masukannya adalah boson yang tidak dapat dibedakan (dalam kasus kepentingan penulis, foton). Secara khusus, ini berfokus pada penghitungan cepat fungsi transfer multi-partikel untuk sistem ini dan mendukung penghitungan gradien fungsi biaya sehubungan dengan parameter sistem. Ini awalnya dikembangkan untuk pengembangan Jaringan Syaraf Optik Kuantum kami [1] dan berisi fungsi khusus untuk simulasi dan pengoptimalannya.
Fokus utama perpustakaan ini ada dua:
Motivasi inti dari paket ini adalah penghitungan cepat transformasi kesatuan multi-partikel sebagai fungsi kesatuan partikel tunggal dan jumlah masukan bosonik. Artinya, jika kita mempunyai kesatuan empat dimensi U, dan kita mengetahui terdapat 3 foton pada masukan, kita ingin mengetahui transformasi pada
Hal ini didukung oleh fungsi bosonic.aa_phi
, yang diambil dari nama Aaronson dan Arkhipov, yang menentukan bentuk fungsi ini yang kita gunakan sebagai fungsi Φ(U) di [2]. Misalnya, kita dapat mendemonstrasikan efek Hong-Ou-Mandel yang terkenal dengan beamsplitter:
>> > 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 ]]
Di sini, kita membangun kesatuan yang sesuai dengan beamsplitter 50/50 di U. Seperti yang ditunjukkan garis setelah kita mencetak phiU, basisnya di sini adalah [2, 0], [1, 1], dan [0, 2]. Jadi keadaan yang berhubungan dengan satu kejadian foton pada setiap masukan adalah [0, 1, 0]. Pada baris terakhir, dua baris, kita melihat bahwa keluarannya merupakan superposisi yang sama atas dua foton pada satu keluaran dan dua foton pada keluaran lainnya, tanpa kemungkinan foton keluar melalui port yang berbeda.
Seperti dijelaskan dalam [1], kami telah mengembangkan arsitektur yang diusulkan untuk jaringan saraf optik kuantum yang melibatkan penggabungan transformasi kesatuan sewenang-wenang dengan nonlinier situs tunggal. Lihat makalah untuk lebih jelasnya, tetapi berikut ringkasan visual arsitekturnya:
Mengkloning repositori ini saat ini merupakan satu-satunya cara untuk mendapatkan bosonic
di sistem Anda. Sebelum melakukan itu, Anda perlu menginstal paket python Cython
, untuk membangun bosonic
dengan benar. Sesuatu seperti ini seharusnya bisa digunakan di linux (menggunakan manajer paket python pilihan Anda alih-alih pip
, jika diinginkan):
$ pip install Cython
$ git clone [email protected]:steinbrecher/bosonic.git
$ cd bosonic
$ pip install .
Di Mac, Anda juga memerlukan gcc dari homebrew dan libopenmp:
$ brew install gcc
$ brew install libomp
$ pip install Cython
$ git clone [email protected]:steinbrecher/bosonic.git
$ cd bosonic
$ CC=gcc-8 pip install .
Anda kemudian dapat menguji apakah bosonic
diinstal dengan benar dengan menjalankannya
$ python setup.py test
[1] Steinbrecher, GR, Olson, JP, Englund, D., & Carolan, J. (2018). Jaringan saraf optik kuantum. arXiv pracetak arXiv:1808.10047. https://arxiv.org/abs/1808.10047
[2] Aaronson, Scott, dan Alex Arkhipov. "Kompleksitas komputasi optik linier." Prosiding simposium ACM tahunan keempat puluh tiga tentang Teori komputasi. ACM, 2011. https://arxiv.org/pdf/1011.3245.pdf