Hari ini kita akan menganalisis pidato James Wootton dari IBM Quantum pada konferensi FDG 2020. Kita akan berbicara tentang komputasi kuantum - teknologi yang berpotensi menjanjikan, yang, bagaimanapun, hanya sedikit digunakan pada tahap pengembangan saat ini. Namun salah satunya ditemukan pada generasi prosedural.
Mari kita bicara lebih detail bagaimana mengimplementasikannya di qubit, dan juga memberikan kode programnya.
Mari kita mulai dengan apa itu komputer kuantum dan seberapa besar potensi kegunaannya. Mari kita tidak membahas detail teknis lebih dalam. Hanya untuk menyebutkan bahwa komputer kuantum adalah model komputasi yang sama sekali berbeda dari komputer digital dan analog. Mereka tidak hanya mempercepat perangkat lunak konvensional dengan quanta. Sebaliknya, mereka membutuhkan pendekatan yang sama sekali berbeda untuk mengimplementasikan program, serta perangkat keras yang berbeda untuk menjalankannya.
Komputasi kuantum suatu hari nanti akan dapat melakukan tugas-tugas tertentu jauh lebih efisien daripada komputasi digital atau analog. Ini akan memungkinkan kami untuk menangani masalah yang saat ini tidak mungkin diselesaikan. Setelah penelitian puluhan tahun, banyak algoritme kuantum telah diidentifikasi yang paling efektif menunjukkan keunggulan ini dalam kaitannya dengan sejumlah kemungkinan aplikasi - termasuk di bidang pembuatan prosedural. Ini termasuk pengoptimalan, kepuasan kendala, analisis grafik, dan lainnya.
Membangun komputer yang mampu melakukan komputasi kuantum adalah tugas yang menakutkan, dan telah dibuat selama bertahun-tahun. Salah satu parameter penting untuk mendeskripsikan perangkat kuantum adalah jumlah qubit. Faktanya, ini adalah bit yang sama, tetapi diimplementasikan dengan cara kuantum - dan karena itu memiliki lebih banyak keadaan daripada biasanya 0 dan 1. Dalam konteks fisika kuantum, kita dapat menulis nilai bit menggunakan sepasang vektor ortogonal: | 0β© dan | 1β©. Dalam kasus qubit, uraian status akan dilengkapi dengan amplitudo kompleks c 0 dan c 1 , yang memenuhi ketentuan: | c 0 | 2 + | c 1 | 2= 1, karena itu jumlah status qubit c 0 | 0β© + c 1 | 1β© yang lebih besar tercapai.
Kami membutuhkan ribuan qubit untuk menjalankan algoritme andalan, yang tidak akan kami miliki dalam beberapa tahun mendatang.
Saat ini, kami tidak memiliki ribuan qubit atau bahkan seribu yang kami miliki. Sejujurnya, kami bahkan tidak memiliki seratus qubit. Perangkat terbesar yang saat ini tersedia bagi kami memiliki 65 qubit. Meskipun ini tidak cukup untuk menjalankan algoritme paling menarik dan efisien yang kami ketahui, bahkan jumlah qubit ini dapat memberikan hasil yang tidak diharapkan dari komputer konvensional. Ini dibuktikan dengan kerumitan meniru perangkat semacam itu, yang karenanya Anda perlu menyewa superkomputer terbesar di dunia.
Jadi, perangkat keras kuantum mungkin menawarkan jawaban unik kepada kita, tetapi selama beberapa dekade kita belum belajar bagaimana mengajukan pertanyaan yang tepat. Oleh karena itu, tujuan utama penelitian kami saat ini adalah mencoba mencari tahu secepat mungkin bagaimana melakukan sesuatu yang berguna dengan mesin ini.
Ada juga perangkat dengan daya yang lebih sederhana, yang terdiri dari sekitar 20 qubit. Dan program kuantum yang melibatkan hingga 15 qubit bahkan disediakan oleh IBM secara gratis. Selain itu, mereka telah membuat perangkat lunak emulasi untuk membantu perancangan dan pengujian program kuantum. Dan meskipun meniru lebih dari 50 qubit adalah tugas komputasi yang menakutkan, bahkan laptop Anda dapat menangani meniru kira-kira 20 qubit tanpa masalah.
Semua faktor bersama-sama menjadikan 20 qubit sebagai tonggak sejarah. Terlepas dari apakah kita menggunakan perangkat keras kuantum nyata atau emulasinya, menjalankan perangkat lunak kuantum pada level ini tidaklah terlalu sulit.
Jadi apa artinya semua ini untuk generasi prosedural? Tergantung pada yang mana dari tiga era yang Anda targetkan: era hari ini, yang siap menyediakan hanya lusinan qubit; dalam waktu dekat, saat perangkat akan memiliki ratusan qubit; atau ke masa depan yang jauh, ketika lebih dari seribu qubit akan tersedia bagi kita.
Jika kita berbicara tentang hari ini, perangkat lunak kuantum, yang berfokus pada kekuatan hanya 20 qubit, masih tidak dapat melakukan sesuatu yang unik. Fakta bahwa kami dapat menjalankannya di emulator berarti Anda bahkan tidak memerlukan perangkat keras kuantum. Tetapi apakah program kuantum masih dapat melakukan sesuatu yang berguna? Bisakah kita menulis program kuantum 20 qubit yang memberikan hasil yang berguna bagi pengguna akhir sebenarnya?
Jika kami dapat mencapai hasil yang sangat berguna dengan 20 qubit, efek ini hanya akan berlipat ganda seiring waktu dan lebih banyak daya komputasi. Era tengah akan menjadi era penelitian ke dalam metode komputasi kuantum yang semakin kompleks, termasuk efektif untuk generasi prosedural. Kita akan melanjutkan untuk membuat alat yang mungkin tidak akan terpikirkan oleh kita jika kita tidak memikirkannya dalam istilah kuanta.
Tapi jangan terlalu terburu-buru. Langkah pertama menuju era perluasan utilitas adalah membuktikan bahwa perangkat lunak kuantum 20 qubit pun dapat berguna. Inilah yang akan kami lakukan.
Sekarang saatnya mengklarifikasi beberapa detail.
Generasi prosedural berarti kita perlu menghasilkan sesuatu. Tapi apa?
Generasi medan adalah yang paling jelas, jadi mari kita mulai dengan itu.
Kebisingan Perlin adalah alat yang ada di mana-mana untuk pembuatan medan prosedural. Tetapi ada metode lain yang jauh lebih rumit untuk membuatnya - menggunakan satu set titik acak dengan pemburaman berikutnya. Penerapan hal seperti ini bagi kami tampaknya merupakan tujuan yang lebih dapat dicapai untuk langkah pertama, jadi kami akan menjadikannya sebagai dasar.
Mari kita mulai dengan mengembangkan cara untuk menyandikan peta ketinggian dalam bentuk sirkuit kuantum, yang merupakan elemen fundamental dari perangkat lunak kuantum. Mereka memiliki beberapa kemiripan dengan model sirkuit Boolean untuk komputasi digital. Qubit pada dasarnya adalah bit yang sama yang mengalami perubahan berbeda saat penghitungan dilakukan.
Kami akan bekerja dengan gambar hitam dan putih, di mana kecerahan piksel dapat memiliki nilai dari 0 hingga 1. Dengan cara yang sama, mereka dapat disalahartikan sebagai peta ketinggian. Setelah kita mempelajari cara menyandikan peta ketinggian ini sebagai skema, kita dapat mengelolanya. Pengkodean yang digunakan bertujuan untuk memampatkan poin sebanyak mungkin ke dalam qubit sesedikit mungkin. Metode ini tidak meninggalkan banyak fleksibilitas untuk memberikan kontrol yang nyaman dan fleksibel. Pada saat yang sama, hampir semua perubahan sirkuit akan menyebabkan efek interferensi.
Kami terutama menggunakan operasi yang dapat dilihat sebagai bentuk parsial dari gerbang NOT. TIDAK mengubah nilai dari 0 ke 1 dan sebaliknya untuk bit normal. Dengan bantuan gerbang kuantum, kita dapat membuat parameter elemen ini untuk melakukan operasi yang dapat melakukan setengah dari NOT, atau seperempat, atau bagian pecahan lainnya yang dapat diwakili oleh satu set amplitudo 2 n dari n qubit.
Fungsi di bawah ini mengubah gambar asli menjadi rangkaian kuantum:
def height2circuit(height):
#
L = max(max(height))+1
#
grid = make_grid(L)
#
n = 2*int(np.ceil(np.log(L)/np.log(2)))
#
state = [0]*(2**n)
#
H = 0
for bit string in grid:
(x,y) = grid[bit string]
if (x,y) in height:
h = height[x,y]
state[ int(bit string,2) ] = np.sqrt( h )
H += h
#
for j,amp in enumerate(state):
state[ j ] = amp/np.sqrt(H)
#
qc = QuantumCircuit(n,n)
qc.initialize(state,range(n))
# Qiskit
# qc.initialize( state, qc.qregs[0])
return qc
Kemudian kita perlu melakukan proses sebaliknya - ubah rangkaian kuantum menjadi gambar:
def circuit2height(qc):
#
n = qc.num_qubits
grid = make_grid(int(2**(n/2)))
#
ket = qi.Statevector(qc.data[0][0].params)
qc.data.pop(0)
#
ket = ket.evolve(qc)
#
p = ket.probabilities_dict()
#
max_h = max( p.values() )
#
height = {}
for bit string in p:
if bit string in grid:
height[grid[bit string]] = p[bit string]/max_h
return height
Jika kita menerapkan operasi ini ke semua qubit, kita bisa melihat bagaimana peta ketinggian berubah saat pecahan bertambah. Anda akan mendapatkan sesuatu seperti efek blur. Efek interferensi kemudian akan muncul, menciptakan pola yang tidak dapat dicapai dengan blur sederhana.
Dalam contoh di atas di (a), kita mulai dengan sepasang titik yang tampaknya berubah-ubah. Secara bertahap, mereka mengalami pengaburan, setelah itu efek interferensi ditumpangkan padanya. Ini mengarah pada munculnya pola - dalam kasus kami, seperti papan catur di (f). Hasil khusus ini memiliki koneksi yang jelas ke dua piksel yang kita mulai. Jika Anda mengambil data lain sebagai titik awal, hasilnya juga akan sangat berbeda.
Quantum Blur telah dikembangkan dan diuji pada beberapa game jam. Ini terutama digunakan untuk menghasilkan tekstur dan peta level.
Setelah membuat peta ini, kami menggunakannya untuk analog kuantum dari gangguan frekuensi tinggi Perlin.
Jadi sekarang kita membuat profil utama - misalnya, pulau - dengan cara lain - seperti dalam Β© di contoh kita. Kemudian kita membutuhkan set piksel awal seperti pada (a). Kami mengaburkannya secara kuantum untuk menghasilkan pola seperti (b). Setelah itu kami menerapkannya ke profil utama untuk membuat lanskap akhir.
Anda dapat melihat contoh 2D di sini, serta rendering 3D yang digunakan dalam game tutorial QiskitBlocks IBM. Detail seperti informasi tentang jenis rumput dan penempatan pohon dalam rendering 3D juga telah dikembangkan menggunakan operasi kuantum.
Karena gambar RGB biasanya terdiri dari tiga peta ketinggian yang disejajarkan, kami juga dapat memanipulasi gambar-gambar ini. Dengan cara ini, mudah untuk membuat beberapa gambar aneh menggunakan overlay. Lebih sulit, tetapi lebih efektif - menyandikan sepasang gambar dan menciptakan efek teleportasi di antara keduanya.
Teleportasi kuantum mentransfer informasi antar qubit. Jadi kami mengambil dua register qubit dengan ukuran yang sama dan hanya mengubah statusnya. Mari gunakan operasi ini untuk membuat animasi transisi.
Ide pengkodean serupa juga dapat digunakan untuk bentuk data lainnya. Wootton mencoba menggunakannya dalam musik:
dan level Mario:
Berikut dua contoh lagi yang penting bagi kami. Salah satunya adalah studio game yang menggunakan metode ini untuk pembuatan prosedural di game masa depan. Proyek ini memiliki latar sci-fi, dan metode kuantum menghadirkan rasa sains yang otentik.
Selain itu, seniman Libby Heaney menggunakan beberapa ide ini sebagai titik awal untuk karyanya.
Sifat kuantum komputasi disorot dalam kedua kasus ini: penting bagi pengguna bahwa hasil berasal dari domain kuantum ruang algoritme, dan bukan hanya aljabar linier yang brilian.
Metode yang dijelaskan di sini lebih cocok untuk emulasi daripada untuk perangkat keras kuantum nyata, tetapi ini akan segera berubah. Faktanya, salah satu perangkat kuantum terbesar di IBM juga telah digunakan untuk pembuatan prosedural, meskipun dengan cara yang sama sekali berbeda.
Sementara itu, Anda dapat mencoba sendiri efek quantum blur. Itu ditulis dengan Python , tetapi ada plugin untuk Unity juga . Mungkin mereka akan berguna bagi Anda.
Tautan ke artikel lengkap: di sini .