Seperti yang diminta dalam komentar, berikut adalah contoh yang berhasil. Badan utama berurusan dengan meminimalkan untuk masalah tertentu. Di bagian bawah mengikuti diskusi singkat tentang kendala kemudian diskusi singkat tentang kasus umum.f( x )
Mari kita selesaikan masalah Cut Maximum Cut sejak ini
- Merupakan contoh yang relatif lurus ke depan
- Sulit secara klasik
- Merupakan contoh yang relatif umum dalam literatur (mis. Https://journals.aps.org/prl/abstract/10.1103/PhysRevLett.90.067903 )
- Memiliki koneksi yang jelas ke Hamiltonian fisik (Ising spin-glasses)
Untuk memahami masalahnya, kita mulai dengan grafik simpul yang tidak diarahkan , di mana setiap simpul memiliki bobot dan setiap sisi yang menghubungkan dan memiliki bobot . Kami kemudian memotong grafik menjadi dua bagian. Potongannya tidak harus lurus tetapi tidak harus berpotongan sendiri dan tidak dapat memotong ujung dua kali. Lalu kami menghitung " pembayaran " untuk potongan kami. Pembayarannya adalah jumlah dari bobot tepi yang kami potong, ditambah jumlah bobot dari simpul di satu sisi potongan. n{ V}vsaya∈ Vwsaya≥ 0vsayavjwsaya j≥ 0P 1P1
Sumber
Dalam gambar ini, pembayaran akan menjadi, untuk tepi ditambah untuk simpul (dengan asumsi jumlah di dalam setiap titik adalah beratnya) . Masalah optimasi adalah untuk memaksimalkan untuk grafik yang diberikan . 1 + 4 + 3 + 3 + 2 = 135 + 6 + 1 = 12→ P= 25P 2P2
Untuk menulis ini secara matematis, kita dapat berpikir dalam bentuk bit string. Kami mendefinisikan dipotong dengan string mana tidak dihitung dalam jumlah dan adalah dihitung dalam jumlah. Untuk membuat matematika sedikit lebih bersih, jika grafik tidak sepenuhnya terhubung, buat grafik menjadi sepenuhnya terhubung dan atur untuk setiap pasangan yang tidak terhubung .s ∈ { 0 , 1 }nsi=0→vi s i = 1 → v i w i j = 0 v i , v jsi=1→vi wij=0vi,vj
Sebagai contoh, melihat gambar di atas lagi, mari kita menafsirkan angka-angka di dalam simpul menjadi indeks simpul bukan bobot seperti yang kita asumsikan di atas. Kemudian potongan yang ditarik sesuai dengan . ada di sisi "baik" dari potongan dan dihitung, sementara berada di sisi "buruk" dari potongan dan tidak dihitung .s=100011s1=s5=s6=1→v1,v5,v6s2=s3=s4=0
Ini kemudian memungkinkan kita untuk menulisP( s ) = ∑sayassayawsaya+ ∑saya , jssaya( 1 - dtkj) wsaya j
Istilah pertama hanya menghitung bobot semua simpul pada sisi "baik" dari potongan. Istilah kedua menghitung berat tepi jika simpul yang disambungkan berada pada sisi yang berlawanan dari potongan. Perhatikan ini tidak menghitung ganda karena hanya menghitung tepi ketika dan tidak ketika .ssaya= 1 , dtkj= 0ssaya= 0 , dtkj= 1
Jadi sekarang masalah optimasi kami adalah menemukan string yang memaksimalkan . Idenya di sini adalah untuk menganggap sebagai ukuran energi suatu sistem dan sebagai keadaan sistem. Ini berarti kita bisa menghubungkan dengan Hamiltonian kita. Ada sedikit halus di sini bahwa kami mencoba untuk memaksimalkan tetapi kami biasanya berbicara tentang menemukan keadaan dasar seorang Hamilton. Ini bukan masalah tapi saya ingin menunjukkannya - kita bisa melihat keadaan tereksitasi energi tertinggi (keadaan anti-tanah jika Anda mau) atau menggunakan sebagai fungsi energi kita kemudian bekerja dengan keadaan dasar seperti biasa. Kerja Mari kita dengan tertinggi bersemangat negara dan memaksimalkan .sP( s )P( s )sP( s )P( s )- P( s )P
Kami ingin membuat Hamiltonian sehingga kondisi energi tertinggi adalah sehingga maksimal. Pada dasarnya kami ingin mengubah , fungsi energi, menjadi , operator energi. Kami melakukan ini dengan memperhatikan bahwa untuk kami memiliki| s0⟩P( s0)P( s )H | s ⟩ ∈ { | 0 ⟩ , | 1 ⟩ } I - ZH^| s⟩∈{ | 0⟩, | 1⟩}saya- Z2|s⟩=s|s⟩→ define s^i=I−Zi2
Di mana adalah Pauli bertindak atas qubit . Sekarang kita dapatkan Hamiltonian kita dengan mengganti dengan (dan 1 dengan ) diZiZiss I Ps^IP
H= ∑sayas^sayawsaya+ ∑saya , js^saya(I−s^j)wi,j=∑iI−Zi2wi+∑i,jI−Zi2(I−I−Zj2)wi,j
Ini dapat dibersihkan dengan memperluas dan melihat∑i,j(Zi−Zj)=0→
H=∑iwi2(I−Zi)+∑i,jwij4(I−ZiZj)=∑iwi2(I−Zi)+∑i<jwij2(I−ZiZj)
Kita dapat membersihkan ini lebih jauh dengan mengalikannya dengan 2 dan menghapus pergeseran energi yang konstan (hapus istilah ). Hamiltonian baru dengan status eigen yang sama dengan nilai eigen yang diskalakan dan digeser (jelas energi maksimum tidak terpengaruh oleh transformasi ini)I
H=−∑iwiZi−∑i<jwijZiZj
Jika Anda seorang ahli fisika benda terkondensasi Anda mungkin akan mengenali Hamiltonian ini sebagai gelas spin Ising. Tidak benar-benar relevan dengan masalah, tetapi saya pikir itu keren.
Jadi sekarang kita memiliki Hamiltonian yang (anti-) kondisi dasar mengkodekan bit string yang memaksimalkan dan menyelesaikan masalah.s0P(s)
Hal terakhir yang kita butuhkan adalah Hamiltonian awal , yang kita perlahan-lahan (secara adiabatis) berubah menjadi Hamiltonian terakhir kita sehingga kita dapat mendefinisikan Hamiltonian penuhH0HHT(t)=(1−f(t))H0+f(t)H:f(0)=0,f(tf)=1
Sebagai titik awal sering digunakan untuk kesederhanaan. Minimum ditentukan oleh akurasi yang diinginkan dan gap spektral . Kesenjangan spektral adalah perbedaan energi minimum, di atas semua , antara keadaan tanah (anti-) dan keadaan energi berikutnya. Analisis kesenjangan sangat non-sepele (lihat https://arxiv.org/abs/quant-ph/0509162 ) dan menentukan kompleksitas / efisiensi algoritma. Algoritma dengan 0 gap tidak dijamin berfungsi sama sekali.f(t)∝ttf3 t3t
Jadi kami ingin sedemikian rupaH0
- Kita dapat dengan mudah menemukan dan menyiapkan keadaan dasar (anti)
- Kesenjangan spektral tidak kecil dalam ukuran masalahH
Untuk masalah ini, Hamiltonian awal yang baik adalah karena keadaan energinya paling tinggi mudah ditemukan, ini . Mudah untuk dipersiapkan, cukup terapkan ke . Saya tidak punya waktu untuk masuk ke dalam analisis kesenjangan spektral tetapi Hamiltonian ini tidak mungkin ideal dalam hal itu (lihat https://arxiv.org/abs/1701.05584 ).H0=∑iXi|+⟩⊗nH⊗n|0⟩⊗n
Dengan pilihan dan mengambil kita selesai. Hamiltonian kami adalahH0f(t)=t/tf
H(t)=(1−f(t))∑iXi−f(t)[∑iwiZi+∑i<jwijZiZj]
Mulai dalam keadaan , berevolusi sesuai dengan Hamiltonian di atas untuk waktu (memilih sesuai , sekali lagi, umumnya sangat non-sepele ) kemudian mengukur dalam dasar komputasi harus mengembalikan (dengan probabilitas tinggi) string yang memaksimalkan .|ψ0⟩=H⊗n|0⟩⊗ntftfs=s0P(s)
1 Ini ambigu karena secara simetri kedua pihak akan melakukannya. Kita dapat membuatnya dengan ketat, misalnya, membuat potongan diarahkan lalu mengambil simpul ke kiri potongan ketika berjalan di sepanjang arah potongan.
2 Saya telah mengatakan di komentar kami meminimalkan fungsi biaya, jika Anda suka ini lebih baik, ambil saja biaya pembayaran dan meminimalkan biaya.=−
3 Saya menyapu beberapa perincian tentang apa arti "lambat" di bawah permadani tetapi dapat dikaitkan dengan skala energi dari masalah (yaitu mengalikan dengan konstanta akan mengubah kecepatan).H
Kendala
Katakanlah kita ingin memodifikasi masalah di atas untuk mensyaratkan bahwa tepat simpul berada di sisi "baik" dari potongan kita. Secara matematis ini adalah . Untuk menegakkan ini, kami menambahkan hukuman ke Hamiltonian kami untuk solusi yang melanggar batasan ini. Jadi kami menambahkan istilah seperti memilih cukup besar untuk memastikan negara yang melanggar batasan ini tidak bisa menjadi keadaan energi tertinggi.5∑isi−5=0Hc=−α(∑is^i−5I)2α
Katakanlah sebaliknya kita ingin mensyaratkan bahwa tidak ada lebih dari simpul pada sisi "baik" dari potongan kita. Sepertinya ini agak sulit dilakukan. Dalam https://arxiv.org/abs/1702.06248 mereka menyatakan bahwa mendekati kendala ketidaksetaraan untuk memesan memerlukan spin kopling yang akan membutuhkan lebih banyak overhead untuk memecahnya menjadi kopling 2-qubit yang sering diperlukan pada arsitektur yang diberikan. Intinya strategi adalah untuk memperkirakan fungsi langkah menggunakan5k O ( N 2 k ) k k thkO(N2k) kkthmemesan polinomial. Ini sepertinya cara yang buruk untuk melakukannya - tetapi saya tidak bisa memikirkan cara yang lebih baik. Ini datang dari Troyer pada tahun 2017 sehingga relatif tidak mungkin, meskipun tentu mungkin, bahwa cara yang lebih baik saat ini diketahui.
Kasus umum
Pertanyaannya menanyakan tentang metode umum untuk penyandian masalah optimasi ke Hamiltonian. Secara khusus kami ingin meminimalkan dengan serangkaian kendala. Pada bagian di atas saya membahas menambahkan kendala ke Hamilton. Jadi untuk sepenuhnya umum , apakah ada cara untuk menyandikannya menjadi Hamiltonian? Metode umum untuk ini dalam literatur adalah mengasumsikan kita memiliki akses ke oracle kuantum efisien yang mengimplementasikan . Kita dapat menganggap ini sebagai operasi kotak hitam (yaitu oracle kuantum) sedemikian rupa sehingga . Maka kita dapat membangun Hamiltonian kita sebagai
f(x)f(x)f(x)f^(x)f^(x)|x⟩=f(x)|x⟩H=∑xf^(x)|x⟩⟨x|
Tentu saja ini hanya mendorong bagian yang sulit untuk menemukan / membangun . Faktanya, argumen penghitungan sederhana menunjukkan bahwa hampir semua (dalam arti matematika) oracle quantum secara eksponensial tidak efisien untuk diimplementasikan (lihat http://www.ar-tiste.com/imp-oracles/imps2.pdf ). Jadi, sementara ini adalah penyandian umum masalah optimasi ke Hamiltonian - itu tidak terlalu praktis. Tampaknya menjadi kasus bahwa jika Anda ingin menyandikan masalah optimisasi Anda menjadi Hamiltonian dengan cara yang bermanfaat - Anda perlu memanfaatkan beberapa struktur . Pemahaman saya adalah bahwa secara spesifik bagaimana melakukan ini dan bagaimana melakukan ini dengan yang terbaikf^(x)f(x) cara tidak sepenuhnya dipahami dan merupakan subjek penelitian aktif.