Halo semuanya!
Selama sekitar enam bulan terakhir, penerbit telah secara aktif bekerja pada topik komputasi kuantum dan penerapan praktisnya. Untuk waktu yang lama tidak mungkin menemukan artikel yang layak untuk diterjemahkan pada topik yang menarik ini, sampai artikel seperti itu muncul di blog Oracle. Publikasi ini akan berfungsi sebagai pengantar yang sangat baik untuk perangkat lunak, perangkat keras, dan masalah ilmu alam murni dari paradigma baru ini, jadi membaca adalah suatu keharusan.

Selama beberapa bulan dan tahun terakhir, minat dalam komputasi kuantum telah tumbuh secara signifikan. Bahan-bahan baru terus muncul dari lembaga penelitian, perusahaan atau organisasi pemerintah, menceritakan tentang pencapaian terobosan di bidang ini. Pada saat yang sama, artikel dengan basis teknis yang lebih lemah membahas konsekuensi potensial dari komputasi kuantum, dan perkiraan berkisar dari meretas sebagian besar teknik enkripsi modern hingga janji untuk menyembuhkan semua penyakit dan menyelesaikan pekerjaan dalam menciptakan AI yang lengkap. Namun, tidak semua harapan ini sama realistisnya.
Jika Anda seorang programmer yang sadar, maka Anda mungkin bertanya-tanya di mana garis antara fakta dan fiksi dalam perhitungan ini, dan bagaimana komputasi kuantum akan mempengaruhi pengembangan perangkat lunak di masa depan.
Secara alami, bertahun-tahun tetap sebelum penciptaan perangkat keras yang berfungsi untuk komputasi kuantum. Namun, prinsip umum paradigma ini sudah dipahami hari ini, ada abstraksi yang memungkinkan pengembang untuk membuat aplikasi di mana kemungkinan komputasi kuantum direalisasikan menggunakan simulator.
Apakah komputasi kuantum direduksi menjadi gain CPU lain?
Pengembangan perangkat lunak tradisional menggunakan komputer klasik melibatkan penerjemahan bahasa pemrograman tingkat tinggi (misalnya, Java) ke dalam operasi yang dilakukan pada sejumlah besar transistor (perangkat keras).
Pada Gambar 1, proses ini disusun dalam bentuk paling sederhana: Kode sumber Java dikompilasi ke dalam kode byte platform-independen, yang, pada gilirannya, diterjemahkan ke dalam kode mesin platform-spesifik. Kode mesin menggunakan sejumlah operasi (gerbang) sederhana yang dilakukan dalam memori. Komponen perangkat keras utama yang digunakan untuk tujuan ini adalah transistor yang terkenal.
Fig. 1. Penerjemahan bahasa pemrograman tingkat tinggi ke dalam operasi yang dilakukan pada transistor .
Peningkatan produktivitas yang dicapai dalam beberapa tahun terakhir telah dicapai terutama karena peningkatan teknologi perangkat keras. Ukuran transistor tunggal telah menurun secara drastis, dan semakin banyak transistor yang dapat Anda letakkan di setiap milimeter persegi, semakin banyak memori dan daya pemrosesan yang dimiliki komputer.
Komputasi kuantum adalah teknologi yang mengganggu, karena di sini unit komputasi paling sederhana bukanlah transistor klasik, tetapi qubit, yang akan kita bicarakan di bawah ini.
Intinya tidak hanya dalam perbedaan elemen-elemen utama ini, tetapi juga dalam perangkat katup yang berbeda. Jadi, tumpukan dengan ara. 1 dalam komputasi kuantum tidak berlaku.
Akankah komputasi kuantum memecah seluruh tumpukan di atas hingga ke tingkat Java?
Singkatnya - "tidak juga." Para ilmuwan secara bertahap setuju bahwa komputer kuantum akan sangat baik untuk memecahkan masalah tertentu, sementara masalah lainnya akan lebih dipecahkan secara rasional menggunakan komputer tradisional. Kedengarannya familiar, bukan? Situasi serupa diamati ketika membandingkan GPU dan CPU. Sementara transistor juga digunakan dalam GPU, mereka pada prinsipnya berbeda dari CPU. Namun, banyak aplikasi yang ditulis dalam bahasa tingkat tinggi menggunakan kemampuan CPU dan GPU di bawah tenda. GPU sangat baik untuk pemrosesan vektor, dan di banyak aplikasi dan pustaka, pekerjaan CPU dan GPU dibedakan.
Misalnya, ini persis situasi ketika menggunakan JavaFX atau Deeplearning4j. Jika Anda menulis aplikasi antarmuka pengguna menggunakan JavaFX, Anda hanya bekerja dengan kode Java (mungkin juga FXML untuk mendeklarasikan antarmuka pengguna). Ketika adegan JavaFX perlu ditampilkan di layar, implementasi JavaFX internal menggunakan shader dan tekstur untuk ini, langsung menghubungi driver GPU tingkat rendah, seperti yang ditunjukkan pada Gambar 2. Oleh karena itu, Anda tidak perlu khawatir tentang bagian mana dari kode yang lebih baik disesuaikan untuk bekerja dengan CPU dan yang mana dengan GPU.
Fig. 2. JavaFX mendelegasikan pekerjaan GPU dan CPU.Seperti yang ditunjukkan pada gambar. 2, kode implementasi JavaFX mendelegasikan pekerjaan dengan meneruskannya ke GPU dan CPU. Meskipun operasi ini disembunyikan dari pengembang (tidak disediakan melalui API), pengetahuan tertentu tentang GPU sering berguna ketika Anda perlu mengembangkan aplikasi JavaFX yang lebih kuat.
Saat menggunakan Deeplearning4j, situasi serupa terjadi. Deeplearning4j memiliki sejumlah implementasi untuk melakukan operasi vektor dan matriks yang diperlukan, dan beberapa di antaranya menggunakan GPU. Namun, tidak masalah bagi Anda sebagai pengembang akhir yang kapasitas kode Anda akan digunakan - CPU atau GPU.
Tampaknya komputer kuantum akan melakukan pekerjaan yang sangat baik untuk menyelesaikan masalah yang, sebagai suatu peraturan, meningkat secara eksponensial ketika volume masalah bertambah dan, oleh karena itu, hampir tidak dapat dipecahkan atau hampir tidak dapat dipecahkan menggunakan komputer klasik. Secara khusus, para ahli berbicara tentang perwujudan hibrida: aplikasi end-to-end khas berisi kode klasik yang berjalan pada CPU, tetapi mungkin juga mengandung kode kuantum.
Bagaimana sistem mengeksekusi kode kuantum?
Saat ini, perangkat keras untuk komputer kuantum masih sangat eksperimental. Sementara perusahaan besar dan, mungkin, beberapa negara terlibat dalam pengembangan prototipe, teknologi seperti itu tidak tersedia secara luas. Tetapi, ketika muncul, bentuknya mungkin berbeda:
- Sebuah prosesor kuantum dapat diintegrasikan dengan CPU dalam sistem.
- Masalah kuantum dapat didelegasikan ke sistem cloud kuantum.
Meskipun masih ada ketidakpastian besar tentang latar belakang praktis dari keputusan semacam itu, kami semakin sepakat tentang bagaimana seharusnya kode kuantum. Pada level terendah haruslah batu bata berikut:
qubit dan
gerbang kuantum . Berdasarkan mereka, Anda dapat membuat
simulator kuantum yang menerapkan perilaku yang diharapkan.
Oleh karena itu, simulator kuantum adalah alat yang ideal untuk pengembangan semacam itu.
Hasil yang mereka berikan harus hampir sama dengan yang akan diperoleh pada peralatan nyata komputer kuantum - tetapi simulator bekerja lebih lambat, karena efek kuantum yang mempercepat peralatan kuantum harus disimulasikan menggunakan perangkat lunak tradisional.
Apa blok bangunan dasar komputasi kuantum?
Seringkali penting untuk membandingkan perhitungan klasik dengan perhitungan kuantum. Dalam komputasi klasik, kami memiliki bit dan gerbang.
Sedikit mengandung sedikit informasi, dan nilainya mungkin 0 atau 1.
Katup bekerja pada satu atau lebih bit dan dapat beroperasi pada mereka. Sebagai contoh, katup NOT, ditunjukkan pada Gambar 3, membalikkan nilai bit. Jika inputnya 0, maka output dari gerbang NOT akan menjadi 1 dan sebaliknya.
Fig. 3. BUKAN katupDalam komputasi kuantum, kami memiliki bit dan gerbang yang setara. Setara kuantum bit adalah qubit. Nilai qubit bisa sama dengan 0 atau 1, seperti bit klasik, namun, itu juga bisa disebut superposisi. Ini adalah konsep yang kompleks, di mana qubit dapat secara bersamaan berada di kedua negara: 0 dan 1.
Ketika qubit dalam superposisi, nilainya adalah kombinasi linear dari status 0 dan 1. Ini dapat ditulis seperti yang ditunjukkan pada Gambar. 4:
Fig. 4. Kesetaraan di mana qubit berada di superposisi.Catatan: qubit sering ditulis dalam
notasi braket , di mana nama variabel ditempatkan di antara karakter "|" dan ">".
Ekspresi pada Gambar. 4 melaporkan bahwa qubit x berada dalam superposisi status | 0> dan | 1>. Ini tidak berarti bahwa ia dalam keadaan | 0> ATAU dalam keadaan | 1>; ini berarti bahwa keadaannya saat ini tidak diketahui oleh kita.
Faktanya, itu ada di kedua negara pada saat yang bersamaan, dan dalam bentuk ini dapat dimanipulasi. Namun, ketika kita mengukur qubit, itu akan berada dalam satu keadaan, baik | 0> atau | 1>. Ada batasan lain dalam ungkapan di atas: a ^ 2 + b ^ 2 = 1.
Nilai a dan b adalah probabilistik: ada probabilitas a ^ 2 bahwa, ketika kita mengukur qubit | x>, itu akan berisi nilai | 0>, dan probabilitas b ^ 2 bahwa qubit yang diukur akan berisi nilai | 1>.
Ada faktor pembatas penting yang memutus kegembiraan komputasi kuantum: setelah qubit diukur, semua informasi tentang superposisi potensial tempat ia berada hilang. Nilai qubit bisa 0 atau 1.
Dalam perhitungan, qubit dalam superposisi dapat sesuai dengan 0 dan 1 pada saat yang sama (dengan probabilitas berbeda). Jika kita memiliki dua qubit, maka mereka dapat digunakan untuk mewakili empat negara (00, 01, 10, dan 11), sekali lagi, dengan probabilitas yang berbeda. Di sini kita sampai pada esensi kekuatan komputer kuantum. Memiliki delapan bit klasik, Anda dapat mewakili tepat satu angka dalam rentang dari 0 hingga 255. Nilai dari masing-masing delapan bit adalah 0 atau 1. Memiliki delapan qubit, Anda dapat secara bersamaan mewakili semua angka dari 0 hingga 255.
Apa gunanya superposisi jika Anda hanya bisa mengukur satu negara?
Seringkali hasil dari algoritma ini sederhana (ya atau tidak), tetapi untuk sampai pada itu, banyak komputasi paralel diperlukan. Memegang qubit dalam posisi superposisi selama perhitungan, Anda dapat segera mempertimbangkan berbagai opsi. Tanpa memenuhi keputusan untuk setiap kombinasi individu, komputer kuantum dapat menghitung semua opsi dalam satu langkah.
Kemudian, dalam banyak algoritma kuantum, tahap penting berikutnya dimulai: untuk menghubungkan hasil algoritma dengan pengukuran yang memberikan hasil yang bermakna. Seringkali, gangguan diperhitungkan: hasil yang menarik secara struktural ditumpukkan satu sama lain, sementara yang tidak menarik membatalkan satu sama lain (gangguan destruktif).
Bagaimana seseorang bisa "mengubah" qubit menjadi kondisi superposisi?
Sama seperti gerbang klasik memanipulasi bit, gerbang kuantum memanipulasi qubit. Beberapa gerbang kuantum menyerupai yang klasik; misalnya, gerbang Pauli-X mentransfer qubit dari state a | 0> + b | 1> ke state b | 0 | + a | 1>, yang mirip dengan prinsip gerbang NOT klasik. Memang, ketika a = 1 dan b = 0, qubit awalnya dalam keadaan | 0>. Setelah aksi katup Pauli-X, qubit ini akan masuk ke status | 1>, seperti yang ditunjukkan pada Gambar. 5.
Fig. 5. Hasil menggunakan katup Pauli-X.Dalam konteks ini, katup Hadamard sangat menarik. Ini menempatkan qubit di negara | 0>: 1 / sqrt (2) * (| 0> + | 1>) ke dalam superposisi, seperti yang ditunjukkan pada Gambar. 6.
Fig. 6. Hasil penerapan katup Hadamard.Setelah kami menerapkan katup Hadamard ke qubit dan mengukur qubit, ada kemungkinan 50% bahwa nilai qubit akan menjadi 0 dan 50% bahwa nilai qubit akan menjadi 1. Sampai qubit diukur, ia tetap dalam status superposisi .
Bagaimana ini semua mungkin?
Jika Anda benar-benar tertarik pada jawaban untuk pertanyaan ini, Anda harus mempelajari fisika kuantum secara terperinci. Tetapi, untungnya, seluruh dasar teori dari fenomena ini tidak perlu dipahami. Sementara fenomena superposisi mungkin tampak tidak dapat dipahami, penting untuk menekankan bahwa sifat-sifat inilah yang menjadi ciri khas partikel elementer di alam. Oleh karena itu, komputasi kuantum jauh lebih dekat dengan dasar-dasar realitas fisik daripada yang terlihat pada pandangan pertama.
Haruskah saya menunggu beberapa tahun, dan kemudian melihat lebih dekat pada komputasi kuantum?
Tidak. Dalam hal ini, Anda akan terlambat. Secara teori dimungkinkan untuk terlebih dahulu mengembangkan perangkat keras, dan kemudian melanjutkan ke studi tingkat perangkat lunak dan melihat apa yang dapat dicapai dengannya. Namun, semua konsep sudah lebih atau kurang jelas, dan sudah dimungkinkan untuk menulis simulator kuantum dalam bahasa populer, termasuk Java, C #, Python dan lain-lain.
Kemudian simulator ini dapat digunakan untuk bekerja pada algoritma kuantum. Meskipun, algoritma ini tidak akan memberikan peningkatan kinerja yang dapat dicapai dengan bantuan mereka ketika bekerja pada peralatan kuantum nyata, mereka harus secara fungsional sepenuhnya lengkap.
Jadi, jika Anda sedang mengembangkan algoritma kuantum, maka Anda punya waktu untuk memperbaikinya, dan Anda bisa memulainya ketika peralatan kuantum muncul dalam akses.
Algoritma kuantum memerlukan pendekatan intelektual yang berbeda dari yang klasik. Ilmuwan terkemuka mulai mengembangkan algoritma kuantum kembali pada abad terakhir, dan sekarang semakin banyak artikel yang diterbitkan menggambarkan algoritma seperti itu, termasuk yang untuk perkalian bilangan bulat, pencarian daftar, pekerjaan optimasi jalur, dan banyak lagi.
Ada alasan lain mengapa mungkin layak melakukan komputasi kuantum saat ini. Refactoring sistem perangkat lunak di perusahaan besar modern bukanlah salah satu dari hal-hal yang dapat dilakukan dalam semalam. Namun, salah satu area di mana komputasi kuantum akan membuat revolusi nyata adalah enkripsi; setelah semua, itu semua didasarkan pada teori bahwa pada komputer klasik praktis tidak mungkin untuk menguraikan bilangan bulat besar menjadi faktor prima.
Meskipun mungkin dibutuhkan bertahun-tahun sebelum komputer kuantum menjadi cukup besar untuk dengan mudah menyelesaikan masalah faktorisasi bilangan bulat, pengembang tahu bahwa perlu bertahun-tahun untuk mengubah sistem dan memperkenalkan teknologi baru yang lebih aman ke dalamnya.
Bagaimana saya bisa belajar bekerja dengan algoritma kuantum di Jawa?
Anda dapat mengunduh dan menguasai
Strange , simulator komputer kuantum open source di Jawa. Strange memungkinkan Anda untuk mensimulasikan algoritma kuantum dengan membuat serangkaian qubit dan menerapkan beberapa gerbang kuantum kepada mereka.
Sebagai contoh sederhana, mari kita buat dua qubit, q [0] dan q [1], sehingga awalnya keduanya dalam keadaan 0. Kemudian kita menerapkan dua gerbang sederhana untuk masing-masing qubit, sehingga secara grafis operasi ini sesuai dengan gambar. 7.
Qubit pertama akan pertama-tama pergi ke katup Pauli-X, dan kemudian ke katup Hadamard. Katup Pauli-X akan menerjemahkannya dari keadaan | 0 & gt ke | 1 & gt, dan katup Hadamard akan menerjemahkannya menjadi superposisi dengan probabilitas yang sama | 0 & gt dan | 1 & gt. Oleh karena itu, jika kita menyelesaikan seluruh urutan 1000 kali dan mengukur qubit pertama 1000 kali pada akhir siklus ini, maka rata-rata kita dapat berharap bahwa dalam 500 kasus ia akan memiliki nilai 0 dan dalam 500 kasus ia akan memiliki nilai 1.
Qubit kedua bahkan lebih sederhana. Kita mulai dengan gerbang Identity, yang tidak mengubah perilaku qubit, dan kemudian meneruskannya ke gerbang Pauli-X, mengubah nilainya dari 0 menjadi 1.
Fig. 7. Contoh algoritma kuantum yang dapat disimulasikan menggunakan Strange.Untuk memastikan alasan kami benar, Anda dapat membuat program kuantum sederhana menggunakan Strange.
public static void main(String[] args) { Program p = new Program(2); Step s = new Step(); s.addGate(new X(0)); p.addStep(s); Step t = new Step(); t.addGate(new Hadamard(0)); t.addGate(new X(1)); p.addStep(t); SimpleQuantumExecutionEnvironment sqee = new SimpleQuantumExecutionEnvironment(); Result res = sqee.runProgram(p); Qubit[] qubits = res.getQubits(); Arrays.asList(qubits).forEach(q -> System.out.println("qubit with probability on 1 = "+q.getProbability()+", measured it gives "+ q.measure())); }
Dalam aplikasi ini, program kuantum dengan dua qubit dibuat:
Program p = new Program(2);
Sebagai bagian dari program ini, kami melewati dua tahap. Pada langkah pertama, terapkan katup Pauli-X ke q [0]. Kami tidak menerapkan katup ke q [1], dan dengan demikian menyiratkan bahwa itu akan bekerja dengan katup Identitas. Tambahkan langkah ini ke program:
Step s = new Step(); s.addGate(new X(0)); p.addStep(s);
Kemudian kita menuju ke tahap kedua, di mana kita menerapkan katup Hadamard ke q [0] dan katup Pauli-X ke q [1]; tambahkan langkah ini ke program:
Step t = new Step(); t.addGate(new Hadamard(0)); t.addGate(new X(1)); p.addStep(t);
Jadi, program kami sudah siap. Sekarang mari kita lakukan. Simulator kuantum dibangun ke Strange, namun, Strange juga dapat menggunakan layanan cloud untuk menjalankan program di beberapa jenis cloud, misalnya, di
Oracle Cloud .
Dalam contoh berikut, kami menggunakan simulator bawaan yang sederhana, menjalankan program dan mendapatkan qubit yang dihasilkan:
SimpleQuantumExecutionEnvironment sqee = new SimpleQuantumExecutionEnvironment(); Result res = sqee.runProgram(p); Qubit[] qubits = res.getQubits();
Sebelum kami mengukur qubit (dan kehilangan semua informasi), kami menampilkan probabilitas. Sekarang ukur qubit dan lihat nilainya:
Arrays.asList(qubits).forEach(q -> System.out.println("qubit with probability on 1 = "+q.getProbability()+", measured it gives "+ q.measure()));
Menjalankan aplikasi ini, kami mendapatkan output berikut:
qubit with probability on 1 = 0.50, measured it gives 1
qubit with probability on 1 = 1, measured it gives 1
Harap dicatat: untuk qubit pertama, nilai 0 juga dapat diukur, seperti yang kami harapkan.
Jika Anda menjalankan program ini berkali-kali, maka nilai qubit pertama rata-rata adalah 0 dalam setengah kasus dan 1 dalam setengah kasus.
Apakah hanya itu yang perlu Anda ketahui tentang komputasi kuantum?
Tentu saja tidak. Di sini kami tidak menyentuh sejumlah konsep penting, khususnya, kami tidak membahas
seluk -
beluk yang memastikan interaksi antara dua qubit, bahkan jika secara fisik mereka sangat jauh satu sama lain. Kami tidak berbicara tentang algoritma kuantum yang paling terkenal, di antaranya algoritma Shore, yang memungkinkan penguraian bilangan menjadi faktor utama. Kami juga mengabaikan sejumlah fakta matematika dan fisik, khususnya, tidak memperhitungkan bahwa dalam superposisi | x> = a | 0> + b | 1>, kedua angka, a dan b, dapat menjadi kompleks.
Namun, tujuan utama dari artikel ini adalah untuk memberi Anda kesan komputasi kuantum dan untuk memahami bagaimana mereka masuk ke masa depan pengembangan perangkat lunak.