Apa saja bahasa pemrograman Q# dan Quantum Development Kit?

Q# adalah bahasa pemrograman sumber terbuka Microsoft untuk mengembangkan dan menjalankan algoritma kuantum. Ini adalah bagian dari Quantum Development Kit (QDK), SDK yang menawarkan serangkaian alat untuk membantu Anda dalam proses pengembangan perangkat lunak kuantum.

Sebagai bahasa pemrograman, Q# menggambar elemen yang akrab dari Python, C#, dan F#, dan mendukung model prosedural dasar untuk menulis program dengan perulangan, pernyataan if/then, dan jenis data umum. Ini juga memperkenalkan struktur dan operasi data khusus kuantum baru, seperti estimasi faserepeat-until-success dan adaptif, yang memungkinkan integrasi komputasi kuantum dan klasik. Misalnya, kontrol alur program klasik dapat didasarkan pada hasil pengukuran kuantum.

Dengan Quantum Development Kit, Anda dapat membangun program yang berjalan pada perangkat keras kuantum atau merumuskan masalah yang berjalan pada pemecah pengoptimalan yang terinspirasi kuantum di Azure Quantum, ekosistem cloud terbuka dengan beragam solusi dan teknologi kuantum. QDK menawarkan dukungan untuk Q#, Qiskit, dan Cirq untuk komputasi kuantum, jadi jika Anda sudah bekerja dalam bahasa pengembangan lain, Anda juga dapat menjalankan sirkuit Anda di Azure Quantum.

Memulai dengan Q#

Untuk langsung masuk, Anda dapat menjelajahi Q# portal Azure Quantum tanpa memerlukan penginstalan. Untuk informasi selengkapnya, lihat Mulai menggunakan Q# dan buku catatan Azure Quantum.

Untuk opsi lingkungan pengembangan lainnya, lihat Menyiapkan Quantum Development Kit.

Bahasa pemrograman kuantum Q#

Q# adalah bahasa pemrograman kuantum sumber terbuka, tingkat tinggi untuk mengekspresikan algoritma kuantum. Ini dirancang untuk menjadi agnostik perangkat keras, menskalakan ke berbagai aplikasi kuantum, dan untuk mengoptimalkan eksekusi. Untuk informasi selengkapnya tentang Q# proyek pengembangan bahasa, lihat Q# repositori desain pustaka inti dan di GitHub.

Integrasi dengan komputasi kuantum dan klasik

Q# adalah bahasa mandiri yang menawarkan tingkat abstraksi yang tinggi. Tidak ada gagasan tentang keadaan kuantum atau sirkuit; sebaliknya, Q# mengimplementasikan program dalam hal pernyataan dan ekspresi, seperti bahasa pemrograman klasik. Kemampuan kuantum yang berbeda, seperti dukungan untuk funktor dan konstruksi aliran kontrol, memfasilitasi mengekspresikan, misalnya, estimasi fase dan algoritma kimia kuantum .

Bahasa ini Q# mendukung integrasi komputasi klasik dan kuantum yang kaya. Ini memungkinkan ekspresi bersih algoritma adaptif seperti operasi estimasi fase berjalan acak yang sulit diekspresikan langsung dalam model sirkuit dari urutan tetap gerbang kuantum.

Q# mendukung kontrol aliran klasik umum selama eksekusi algoritma. Secara khusus, kontrol aliran klasik didasarkan pada hasil pengukuran kuantum, yang membuatnya jauh lebih mudah untuk menulis hal-hal yang bergantung pada pengukuran menengah. Misalnya, perulangan yang diperlukan untuk algoritma probabilistik seperti pencarian Grover dapat dengan mudah diekspresikan dalam Q#, daripada harus kembali ke driver klasik untuk menguji apakah hasilnya memenuhi oracle dan menjalankan ulang jika tidak.

Qubit sebagai referensi buram

Dalam Q#, qubit adalah sumber daya yang diminta dari runtime saat diperlukan dan dikembalikan saat tidak lagi digunakan. Ini mirip dengan cara bahasa klasik menangani memori tumpuk.

Dalam Q# qubit dimodelkan sebagai jenis data buram yang mewakili referensi ke sistem kuantum dua status tertentu, baik fisik atau logis (diperbaiki kesalahan), di mana operasi kuantum dapat dilakukan. Ini adalah tampilan operasional qubit - yaitu, qubit didefinisikan oleh apa yang dapat Anda lakukan padanya.

Pemetaan dari variabel qubit dalam program ke kubit logis atau fisik aktual diputuskan oleh runtime, dan pemetaan tersebut dapat ditangguhkan sampai setelah topologi dan detail lain dari perangkat target diketahui. Runtime bertanggung jawab untuk menentukan pemetaan yang memungkinkan algoritma untuk dijalankan, termasuk transfer status qubit dan pemetaan ulang yang diperlukan selama eksekusi.

Representasi yang digunakan dalam Q# memiliki implikasi menarik bahwa semua komputasi kuantum yang sebenarnya dilakukan dengan efek samping. Tidak ada cara untuk berinteraksi langsung dengan kondisi kuantum komputer; tidak memiliki representasi perangkat lunak sama sekali. Sebagai gantinya, Anda melakukan operasi pada entitas qubit yang memiliki efek samping memodifikasi status kuantum. Secara efektif, kondisi kuantum komputer adalah variabel global buram yang tidak dapat diakses kecuali melalui satu set kecil aksesori primitif (pengukuran) - dan bahkan aksesori ini memiliki efek samping pada kondisi kuantum, dan begitu juga benar-benar "mutator dengan hasil" daripada aksesori sejati.

Menghormati hukum fisika

Program kuantum harus diharuskan untuk menghormati hukum fisika. Misalnya, menyalin status qubit atau mengakses status qubit secara langsung tidak dimungkinkan dalam Q#.

Oleh karena itu, Q# tidak memiliki kemampuan untuk introspeksi ke dalam kondisi qubit atau sifat lain dari mekanika kuantum secara langsung, yang menjamin bahwa suatu Q# program dapat dijalankan secara fisik pada komputer kuantum apa pun. Sebaliknya, program Q# memiliki kemampuan untuk memanggil operasi dan fungsi, seperti DumpOperation operation, untuk mengekstrak informasi klasik dari qubit, yang memungkinkan validasi dan pemeriksaan status untuk memfasilitasi penelusuran kesalahan dengan simulator. Untuk informasi selengkapnya, lihat pengujian dan penelusuran kesalahan.

Agnostik perangkat keras

Q# adalah agnostik perangkat keras, yang berarti menyediakan sarana untuk mengekspresikan dan memanfaatkan konsep komputasi kuantum yang kuat secara independen tentang bagaimana perangkat keras berkembang di masa depan. Agar dapat digunakan di berbagai aplikasi, Q# memungkinkan Anda membangun komponen dan lapisan abstraksi yang dapat digunakan kembali. Untuk mencapai performa dengan ukuran perangkat keras kuantum yang berkembang, bahasa pemrograman kuantum Q# memastikan skalabilitas aplikasi dan upaya pengembangan. Meskipun kompleksitas penuh dari perhitungan tersebut membutuhkan pengembangan perangkat keras lebih lanjut, program Q# dapat ditargetkan untuk berjalan pada berbagai backend perangkat keras kuantum di Azure Quantum.

Eksekusi efisien

Bahasa Q# ini berfokus pada mengekspresikan informasi untuk mengoptimalkan eksekusi komponen kuantum, terlepas dari konteks di mana mereka dipanggil. Q# memungkinkan pengembang mengkomunikasikan pengetahuan mereka tentang perhitungan sehingga kompiler dapat membuat keputusan berdasarkan informasi mengenai cara menerjemahkannya ke petunjuk, memanfaatkan informasi tentang aplikasi menyeluruh yang tidak tersedia untuk pengembang.

Untuk mempelajari selengkapnya tentang fitur QDK dan bagian umum yang sesuai dalam Q# program, lihat Q# panduan pengguna bahasa pemrograman kuantum.

Kit Pengembangan Quantum

Quantum Development Kit adalah kit pengembangan berformat lengkap yang Q# dapat Anda gunakan dengan alat dan bahasa umum untuk mengembangkan aplikasi kuantum yang berjalan pada perangkat keras kuantum atau pada simulator kuantum berbasis cloud atau lokal. Program Q# dapat dikompilasi ke dalam aplikasi mandiri, dijalankan di Jupyter Notebook, atau dipanggil oleh program host yang ditulis baik dalam bahasa Python atau .NET.

Ketika Anda mengkompilasi dan menjalankan program, itu membuat instans simulator kuantum dan meneruskan kode Q# ke sana. Simulator menggunakan kode Q# untuk membuat qubit (simulasi partikel kuantum) dan menerapkan transformasi untuk memodifikasi kondisi mereka. Hasil operasi kuantum di simulator kemudian dikembalikan ke program. Mengisolasi kode Q# di simulator memastikan bahwa algoritma mengikuti hukum fisika kuantum dan dapat berjalan dengan benar pada komputer kuantum.

Semua yang Anda butuhkan untuk menulis dan menjalankan Q# program, termasuk Q# pengkompilasi, Q# pustaka, dan simulator kuantum, telah disebarkan sebelumnya di Jupyter Notebooks yang dihosting di portal Azure. QDK juga dapat diinstal dan dijalankan dari komputer lokal Anda, sehingga Anda dapat menggunakan IDE dan bahasa pilihan Anda secara lokal dan mengirimkan pekerjaan ke perangkat keras kuantum atau simulator berbasis cloud di Azure Quantum, atau bekerja dengan simulator lokal. Untuk informasi selengkapnya, lihat mengonfigurasi lingkungan pengembangan kuantum Anda.

Alur kerja pengembangan kuantum dengan QDK

Diagram berikut menunjukkan tahap-tahap yang dilewati program kuantum mulai dari ide ke implementasi penuh di Azure Quantum, dan alat yang ditawarkan oleh QDK untuk setiap tahap.

Diagram memperlihatkan alur kerja pengembangan pemrograman kuantum.

Catatan

Anda menggunakan kode Q# yang sama untuk semua langkah alur kerja. Dalam jangka pendek Anda mungkin harus menyesuaikan beberapa bagian dari kode untuk memperhitungkan keterbatasan perangkat keras saat ini. Tapi dalam jangka panjang, Anda akan dapat beralih antara berbagai simulator dan penyedia perangkat keras tanpa mengubah kode apa pun.

Menulis program kuantum Anda

Jika Anda ingin mulai berlatih dan menulis program tanpa Q# menginstal perangkat lunak tambahan, Anda dapat menggunakan Jupyter Notebook yang dihosting yang tersedia di ruang kerja Azure Quantum Anda di portal Azure. Galeri sampel berisi kumpulan sampel notebook yang diannotasi - pilih sampel yang ingin Anda jelajahi dan jalankan pada simulator berbasis cloud atau komputer kuantum nyata.

Jika Anda lebih suka lingkungan pengembangan lokal, Anda dapat membuat Q# program menggunakan Jupyter Notebooks dengan kernel IQ#, atau ekstensi QDK untuk Visual Studio Code dan Visual Studio 2022, lalu menjalankannya terhadap perangkat keras kuantum, atau simulator berbasis cloud atau lokal.

Lingkungan mana pun yang Anda sukai, Anda dapat mengikuti Q# tutorial dan mulai menulis program kuantum untuk mengeksplorasi konsep kuantum seperti superposisi, entanglemen, algoritma kuantum Grover, dan fenomena kuantum lainnya.

Jika Anda tidak memiliki akun Azure, dan ingin mencoba Q# tanpa menginstal QDK secara lokal, Anda dapat menggunakan Binder untuk menjalankan Q# sampel di Jupyter Notebooks secara online.

Menjelajahi pustaka khusus domain

Pustaka Q# akan membantu Anda menjaga kode Anda tetap tinggi, memungkinkan Anda menjalankan operasi kuantum yang kompleks tanpa harus merancang urutan operasi tingkat rendah. Proyek baru Q# secara otomatis mencakup Q#pustaka standar, yang menyediakan serangkaian fungsi dan operasi penting dan sangat berguna yang dapat digunakan saat menulis program kuantum di Q#.

Selain pustaka standar, QDK mencakup pustaka kimia kuantum untuk mensimulasikan dinamika kuantum dan masalah struktur elektronik pada komputer kuantum, pustaka pembelajaran mesin kuantum yang menyediakan implementasi pengklasifikasi berurutan yang memanfaatkan komputasi kuantum untuk menjalankan eksperimen pembelajaran mesin kuantum/klasik hibrida, dan pustaka numerik kuantum yang menyediakan dukungan untuk berbagai fungsionalitas numerik.

Menjalankan program di simulator

Setelah Anda menulis program, QDK menawarkan serangkaian simulator kuantum - program klasik yang mensimulasikan perilaku sistem kuantum - sehingga Anda dapat menjalankan instans kecil program Anda dan melihat apa yang dilakukannya tanpa akses perangkat keras yang sebenarnya. Anda dapat menjalankan program kuantum Anda pada simulator kuantum status penuh, simulator Toffoli cakupan terbatas, simulator jarang untuk sistem dengan jumlah qubit yang lebih besar, dan bahkan menggunakan simulator kebisingan untuk mensimulasikan perilaku Q# program di bawah pengaruh lingkungan yang bising.

Lihat daftar lengkap simulator kuantum.

Memperkirakan sumber daya

Sebelum berjalan pada perangkat keras kuantum, Anda harus mencari tahu apakah program Anda dapat berjalan pada perangkat keras yang ada, dan berapa banyak sumber daya yang akan digunakannya. Anda dapat menggunakan simulator jejak untuk memperkirakan berapa banyak qubit dan gerbang kuantum yang Anda butuhkan dan debug kode klasik yang merupakan bagian dari program kuantum Anda.

Anda juga dapat mengirimkan program kuantum Anda ke target Azure Quantum Resource Estimator di portal Azure. Azure Quantum Resource Estimator menghitung estimasi sumber daya fisik pasca-tata letak dengan mempertimbangkan asumsi tentang parameter kubit, kode koreksi kesalahan kuantum, dan anggaran kesalahan. Ini gratis dan memerlukan akun Azure.

Mengirimkan pekerjaan ke layanan Azure Quantum

Azure Quantum adalah layanan komputasi kuantum cloud Azure, dengan beragam solusi dan teknologi kuantum. Azure Quantum memastikan jalur terbuka, fleksibel, dan tahan masa depan ke komputasi kuantum yang memungkinkan Anda menjalankan program Anda pada perangkat keras kuantum. Anda dapat menjalankan Qiskit, Cirq, dan Q# program pada beberapa sistem kuantum. Lihat Penyedia komputasi Quantum untuk daftar penyedia perangkat keras yang didukung saat ini.

Tip

Pengguna pertama kali secara otomatis mendapatkan kredit Azure Quantumgratis $500 (USD) untuk digunakan dengan setiap penyedia perangkat keras kuantum yang berpartisipasi. Jika semua kredit telah digunakan dan Anda membutuhkan lebih banyak, Anda dapat mendaftar ke Program Kredit Azure Quantum.

Setelah membuat ruang kerja Azure Quantum, Anda dapat mengirimkan Q# program (juga dikenal sebagai pekerjaan) ke Azure Quantum melalui lingkungan pengembangan pilihan Anda, baik secara lokal maupun online. Untuk informasi selengkapnya, lihat cara mengirimkan Q# pekerjaan. Anda juga dapat menjalankan dan mengirimkan sirkuit kuantum yang ditulis dalam Qiskit atau Cirq.

Diagram berikut menunjukkan alur kerja dasar setelah Anda mengirimkan pekerjaan Anda:

Diagram memperlihatkan alur kerja setelah pengiriman pekerjaan ke Azure Quantum.

Azure Quantum menawarkan beberapa sumber daya kuantum yang paling menarik dan beragam yang tersedia saat ini dari industri terdepan. Dengan Azure Quantum dan QDK Anda dapat menulis komputasi kuantum dan program pengoptimalan yang terinspirasi kuantum , dan mengirimkannya ke Azure Quantum untuk berjalan pada perangkat keras kuantum dan pemecah pengoptimalan.

Langkah berikutnya

Jika Anda ingin mempelajari lebih lanjut, Quantum Katas memberikan pengantar yang baik untuk konsep komputasi kuantum seperti operasi kuantum umum dan cara memanipulasi qubit.