ToolDingo

Simulator Komputer Kuantum

Tulis litar kuantum kecil dalam JavaScript, jalankan simulasi dalam pelayar dan lihat rajah litar, kebarangkalian serta vektor keadaan. Anda juga boleh menerangkan pengiraan aras tinggi dan melihatnya ditukar secara automatik kepada litar kuantum boleh balik.

Model hingar

Komputer kuantum sebenar tidak mengira dengan sempurna. Qubit sangat sensitif dan boleh kehilangan maklumat melalui penyahkoherenan akibat haba, medan elektromagnet dan interaksi dengan qubit bersebelahan. Operasi get dan bacaan akhir juga boleh tersilap. Simulator mengira secara ideal secara lalai; aktifkan model ralat untuk melihat kesannya pada hasil.

Terpakai pada setiap simulasi di halaman ini, termasuk operasi aras tinggi dan litar yang ditulis secara manual.
%
Nilai digunakan bagi setiap get dan qubit terlibat, atau bagi setiap bit bacaan untuk model bacaan. Pilih nilai yang sesuai dengan senario yang ingin anda terokai.

Kod program

Terangkan pengiraan dengan quantum.add, quantum.subtract, quantum.multiply, quantum.divide atau quantum.random. Tekan Ctrl+Enter untuk memulakan simulasi. Dokumentasi lengkap tersedia melalui butang Dokumentasi.

Dokumentasi

Terangkan pengiraan dalam editor. Litar kuantum sebenar dijana secara automatik daripada penerangan itu dan disimulasikan. Maksimum 4,000 aksara. Ctrl+Enter memulakan simulasi.

RumusPeneranganHad
quantum.add({ a, b })Tambah dua nomborHasil maksimum 4 bit (0–15)
quantum.subtract({ a, b })Penolakana ≥ b; maksimum 4 bit
quantum.multiply({ a, b })PendarabanFaktor 0–7 (3 bit)
quantum.divide({ a, b })Pembahagian (hasil bahagi dan baki)b ≥ 1; sangat ketat: bit(a) + bit(b)+bit(a÷b) +1 ≤ 10
quantum.random({ bits })Nombor rawak kuantum sebenarbit 1–10

Pilih contoh

Kod litar

Maksimum 4000 aksara. Kaedah QuantumCircuit yang tersedia: x, y, z, h, s, sdg, t, tdg, rx, ry, rz, cnot, cz, ccnot (alias: toffoli), swap, measureAll, run. Ctrl+Enter memulakan simulasi.

Pilih contoh

Asas: Bagaimanakah ia berfungsi?

Konfigurasi komputer kuantum skematik: sebuah komputer kawalan mengarahkan beberapa sinar laser melalui jadual optik ke qubit di dalam ruang vakum.
Daripada komputer kawalan klasik melalui laser dan optik ke qubit fizikal.

Daripada program ke qubit fizikal

Komputer kuantum sebenar bukan sekadar cip. Elektronik kawalan klasik menukar litar kepada denyutan yang tepat. Dalam contoh ini, laser penyejukan, pengepaman semula, kawalan qubit dan bacaan dibentuk pada meja optik lalu diarahkan ke ruang vakum terlindung. Di situ laser menukar dan mengira keadaan qubit sebelum hasil kembali ke komputer klasik.

Qubit dan keadaan asas

Bit klasik ialah 0 atau 1. Qubit juga boleh berada dalam superposisi dua keadaan asas |0⟩ dan |1⟩Dengan beberapa qubit, semua keadaan asas ditulis sebagai rentetan bit, contohnya |10⟩ bagi 2 qubit, dengan q0 q0 sentiasa menjadi bit paling ketara di sebelah kiri dalam simulator ini.

Superposisi

Qubit dalam superposisi membawa komponen beberapa keadaan asas serentak. Komponen diterangkan oleh amplitud kompleks; kuasa dua magnitud amplitud memberikan kebarangkalian memperoleh keadaan tersebut apabila pengukuran.

Bola Bloch

Keadaan satu qubit boleh digambarkan sebagai anak panah pada sfera: kutub utara mewakili |0⟩, kutub selatan |1⟩, manakala setiap titik pada khatulistiwa ialah superposisi seimbang. Fasa menentukan arah anak panah sepanjang khatulistiwa. Get putaran rx, ry, dan rz Apabila qubit terjerat, anak panah mengecil ke arah pusat sfera: qubit individu tidak lagi mempunyai keadaan tulen sendiri, maka keterbelitan boleh dilihat. Get putaran memutarkan anak panah mengelilingi paksi masing-masing, manakala get fasa seperti S dan T berputar mengelilingi paksi Z.

Pengukuran & percubaan

measureAll() Oleh sebab satu pengukuran hanya menghasilkan satu hasil rawak, litar diukur secara konsep sebanyak bilangan percubaan yang dipilih. Setiap hasil dikira mengikut kekerapan kemunculannya. run({ shots }), lalu taburan kebarangkalian muncul sebagai histogram. Kebarangkalian tepat turut dikira terus daripada vektor keadaan dan tidak bergantung pada bilangan percubaan.

Get Hadamard

Get Hadamard h(q) mengambil qubit daripada keadaan tertentu (|0⟩ atau |1⟩) menjadi superposisi yang sama beratnya |0⟩ dan |1⟩ sehingga sekitar 50% / 50% apabila diukur.

Get fasa: S dan T

Get s(q) dan t(q) tidak menukar kebarangkalian pengukuran satu qubit; get hanya memutarkan fasa |1⟩ amplitud |1⟩ sebanyak 90° bagi S dan 45° bagi T. Kesan hanya kelihatan bersama superposisi: antara dua get Hadamard, fasa menentukan cara amplitud menguatkan atau membatalkan melalui interferens. Varian dagger sdg(q) dan tdg(q) berputar ke arah songsang dan membatalkan S atau T. Dua T membentuk S dan dua S membentuk Z.

CNOT dan keterbelitan bersyarat

Get CNOT cnot(control, target) membalikkan qubit sasaran tepat apabila qubit kawalan berada dalam keadaan |1⟩Jika qubit kawalan berada dalam superposisi sebelum itu, CNOT boleh menghasilkan keterbelitan. Kedua-dua qubit tidak lagi boleh dihuraikan secara bebas, seperti keadaan Bell. Jika qubit kawalan berada dalam keadaan asas yang pasti, CNOT hanya melakukan pembalikan bit bersyarat tanpa keterbelitan.

CZ: get simetri yang berkaitan dengan CNOT

Get CZ cz(a, b) menyongsangkan tanda amplitud tepat apabila kedua-dua qubit ialah |1⟩Berbeza daripada CNOT, CZ tiada qubit kawalan atau sasaran khusus dan bertindak sama pada kedua-duanya. CZ dan CNOT boleh ditukar antara satu sama lain dengan meletakkan get Hadamard sebelum dan selepas CZ pada qubit sasaran. CZ ialah blok binaan utama dalam algoritma seperti carian Grover.

Keadaan GHZ: tiga qubit saling terikat

Keadaan GHZ, dinamakan sempena Greenberger, Horne dan Zeilinger, melanjutkan prinsip keadaan Bell kepada tiga qubit. Satu Hadamard dan dua CNOT menjerat ketiga-tiganya sehingga pengukuran hanya menghasilkan |000⟩ atau |111⟩ dan tidak pernah rentetan bit bercampur. Tiada qubit mempunyai keadaan tersendiri; maklumat terkandung dalam korelasi bersama.

Algoritma Deutsch: kelebihan kuantum terkecil

Algoritma Deutsch menentukan melalui satu penilaian orakel sama ada fungsi yang tidak diketahui itu malar atau seimbang, sedangkan komputer klasik memerlukan dua penilaian. Input dihantar melalui orakel dalam superposisi dan interferens mengekodkan jawapan pada qubit input. Prinsip ini, yang dikenali sebagai anjakan balik fasa, menjadi asas banyak algoritma kuantum.

Carian Grover: penguatan amplitud

Carian Grover mencari entri bertanda dalam set tidak diisih dengan lebih sedikit pertanyaan berbanding kaedah klasik. Orakel menandakan keadaan melalui pembalikan fasa, kemudian pengendali difusi menguatkan amplitud bertanda. Dengan 2 qubit, satu lelaran menghasilkan keadaan sasaran dengan kebarangkalian 100%.

Penambahan boleh balik: daripada quantum.add() kepada litar

Editor kod program di atas menerjemahkan quantum.add({ a, b }) kepada litar get X, CNOT dan CCNOT (Toffoli) yang melaksanakan penambahan klasik secara boleh balik. Setiap get boleh disongsangkan kerana tiada maklumat dibuang. Get CCNOTccnot(c1, c2, target)) membalikkan qubit sasaran hanya apabila kedua qubit kawalan |1⟩ menjadi blok binaan yang mencukupi untuk membina semula litar klasik secara boleh balik, termasuk penambah penuh dengan bawaan. Input A dan B dimulakan sebagai keadaan asas tertentu menggunakan get X. Oleh sebab litar melalui keadaan pasti dan bukannya superposisi, pengukuran menghasilkan tepat satu hasil dengan kebarangkalian 100%. Itulah sebabnya quantum.add() menghasilkan hasil deterministik walaupun disimulasikan sebagai litar kuantum.

Penolakan: penambahan songsang

Oleh sebab setiap get kuantum boleh disongsangkan, rangkaian penambah boleh dijalankan ke belakang untuk menukar penambahan menjadi penolakan: quantum.subtract({ a, b }) menggunakan get penambah yang sama dalam urutan terbalik untuk mengira a − b. Tiada langkah memusnahkan maklumat dan setiap langkah boleh diterbalikkan. Versi ini memerlukan a ≥ b supaya hasil tidak negatif.

Pendaraban: quantum.multiply()

Pendarab dibina daripada penambahan boleh balik menggunakan kaedah lazim: faktor a ditambah pada kedudukan teranjak mengikut bit faktor b. Setiap hasil darab separa menggunakan penambah bawaan riak yang sama. Faktor dihadkan kepada 3 bit (0–7) supaya faktor, hasil darab dan qubit bawaan muat dalam had 10 qubit.

Pembahagian: quantum.divide()

Pembahagian juga hanya menggunakan blok binaan boleh balik: quantum.divide({ a, b }) melaksanakan pembahagian panjang melalui anjakan dan penolakan pembahagi secara boleh balik daripada daftar baki. Hasilnya ialah hasil bahagi dan sisa ()a = quotient · b + remainderKerana dividen, pembahagi, hasil bahagi dan dan qubit pinjaman mesti muat bersama dalam 10 qubit, maka pembahagian ialah operasi yang paling terhad: bits(a) + bits(b) + bits(a÷b) + 1 ≤ 10 dividen mesti muat dalam julat dan pembahagi b mestilah sekurang-kurangnya 1. Jika input melebihi had, editor melaporkannya tanpa menjalankan pengiraan.

Rawak sebenar: quantum.random()

Komputer klasik tidak boleh menghasilkan kerawakan sebenar; nombor rawaknya datang daripada algoritma deterministik atau rawak semu. quantum.random({ bits }) quantum.random() meletakkan setiap bit dalam superposisi 50/50 menggunakan get Hadamard. Pengukuran menentukan nilai yang terhasil dan nilainya tidak boleh diramal. Pada perkakasan kuantum sebenar, ini merupakan kerawakan fizikal; simulator menirunya dengan penjana nombor rawak semu dalam pelayar.

Simulator berbanding perkakasan kuantum sebenar

Simulator mengira keadaan menggunakan aritmetik titik apung klasik dalam pelayar. Ini boleh dilakukan kerana litar dihadkan kepada 10 qubit. Komputer kuantum sebenar menggunakan qubit fizikal yang terdedah kepada ralat seperti penyahkoherenan dan hingar. Kelebihan utamanya muncul pada litar jauh lebih besar yang tidak praktikal untuk disimulasikan secara klasik.

Soalan lazim

Adakah ini komputer kuantum sebenar?
Alat ini ialah simulator vektor keadaan klasik yang mengira matematik litar kuantum kecil sehingga 10 qubit dengan aritmetik titik apung dalam pelayar. Perkakasan kuantum sebenar menggunakan qubit fizikal dan berfungsi dengan cara yang berbeza.
Qubit manakah yang menjadi q0 dalam rentetan bit seperti 10?
q0 sentiasa menjadi bit paling ketara di sebelah kiri. Dengan 2 qubit, x(0) menghasilkan keadaan |10⟩, bukan |01⟩.
Apakah maksud percubaan (shots)?
Shots ialah bilangan pengukuran berulang yang disimulasikan, antara 1 hingga 10,000. Setiap percubaan memilih hasil mengikut taburan kebarangkalian tepat daripada vektor keadaan. Kebarangkalian tepat itu sendiri tidak bergantung pada kerawakan dan dipaparkan secara berasingan.
Mengapakah sesetengah contoh memaparkan mesej ralat?
Versi ini membenarkan satu litar dengan tepat satu panggilan run({ shots }) selepas measureAll(). Indeks qubit tidak sah, get selepas measureAll(), sudut atau bilangan percubaan tidak sah serta ralat sintaks ditolak dengan mesej yang boleh difahami.
Apakah fungsi get Hadamard, X dan CNOT?
X menukar |0⟩ dengan |1⟩. Hadamard menukar keadaan asas kepada superposisi berwajaran sama. CNOT membalikkan sasaran apabila qubit kawalan ialah |1⟩ dan boleh menghasilkan keterbelitan apabila digabungkan dengan superposisi.
Bagaimanakah keterbelitan diwujudkan?
Satu contoh menggunakan get Hadamard pada qubit pertama, kemudian CNOT pada qubit kedua. Kedua-dua qubit tidak lagi boleh dihuraikan secara bebas dan pengukuran menghasilkan hasil berkorelasi seperti |00⟩ atau |11⟩.