Langkau ke kandungan utama

Ansatz

Tonton Victoria Lipinska menjelaskan apa itu ansatz dan mengapa ia penting dalam konteks variational quantum eigensolver (VQE).

Rujukan​

Artikel-artikel berikut dirujuk dalam video di atas.

Kod ansatz​

Dalam pelajaran sebelum ini, kamu telah mencipta Hamiltonian yang menerangkan tenaga molekul yang diminati, dan memetakannya ke format yang berguna untuk komputer kuantum. VQE menggunakan litar variasi untuk menyediakan keadaan kuantum. Kemudian kita menggunakan keadaan tersebut untuk menentukan nilai jangkaan Hamiltonian (tenaga). Parameter dalam litar variasi diubah sehingga pengiraan menumpu pada nilai jangkaan minimum. Dalam konteks kimia kuantum, ini sepatutnya menjadi tenaga keadaan dasar. Pelajaran ini memberi tumpuan kepada litar variasi, yang juga dipanggil ansatz (perkataan Jerman bermaksud "pendekatan" atau "kaedah"). Dalam pelajaran ini kamu akan belajar

  • set ansaetze pra-bina yang tersedia dalam perpustakaan litar
  • Cara menyatakan atau mengubah ciri-ciri sebuah ansatz
  • Cara membina ansatz sendiri
  • contoh ansaetze yang baik dan buruk

Perpustakaan litar Qiskit mempunyai banyak kategori litar yang boleh digunakan sebagai ansatz. Di sini, kita akan mengehadkan perbincangan kepada litar dua-setempat (litar yang terdiri daripada Gate yang bertindak ke atas paling banyak dua Qubit pada satu masa). Efficient SU2 adalah ansatz yang kerap digunakan.

Litar efficient_su_2 terdiri daripada lapisan operasi Qubit tunggal yang direntangi oleh SU(2) (kumpulan perpaduan khas berdarjah 2, seperti Gate putaran Pauli) dan pembelit CX. Ini adalah corak heuristik yang berguna dalam algoritma kuantum variasi seperti VQE dan litar pengelasan dalam pembelajaran mesin kuantum (QML).

Kita akan mulakan dengan contoh litar efficient_su2 empat-Qubit dengan dua jenis Gate SU(2), katakanlah rx dan y. Kita juga menyatakan skema pembelitan dan bilangan pengulangan. Jika kamu hanya .draw() litar tersebut, kamu akan mendapat perwakilan yang agak abstrak. Gambar rajah litar yang lebih mudah difahami diperoleh dengan menggunakan .decompose().draw(), dan di sini kita akan menggunakan output = "mpl".

# Added by doQumentation β€” required packages for this notebook
!pip install -q qiskit
from qiskit.circuit.library import efficient_su2

SU2_ansatz = efficient_su2(4, su2_gates=["rx", "y"], entanglement="linear", reps=1)
print(SU2_ansatz.draw())
SU2_ansatz.decompose().draw(output="mpl")
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”β”Œβ”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”
q_0: ─ Rx(ΞΈ[0]) β”œβ”€ Y β”œβ”€β”€β– β”€β”€β”€ Rx(ΞΈ[4]) β”œβ”€β”€β”€β”€ Y β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”œβ”€β”€β”€β”€β”Œβ”€β”΄β”€β”β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜β”Œβ”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β” β”Œβ”€β”€β”€β”
q_1: ─ Rx(ΞΈ[1]) β”œβ”€ Y β”œβ”€ X β”œβ”€β”€β”€β”€β”€β– β”€β”€β”€β”€β”€β”€β”€ Rx(ΞΈ[5]) β”œβ”€β”€β”€β”€ Y β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”œβ”€β”€β”€β”€β””β”€β”€β”€β”˜ β”Œβ”€β”΄β”€β” β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜β”Œβ”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”β”Œβ”€β”€β”€β”
q_2: ─ Rx(ΞΈ[2]) β”œβ”€ Y β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€ X β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β– β”€β”€β”€β”€β”€β”€β”€ Rx(ΞΈ[6]) β”œβ”€ Y β”œ
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”œβ”€β”€β”€β”€ β””β”€β”€β”€β”˜ β”Œβ”€β”΄β”€β” β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”œβ”€β”€β”€β”€
q_3: ─ Rx(ΞΈ[3]) β”œβ”€ Y β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ X β”œβ”€β”€β”€β”€β”€ Rx(ΞΈ[7]) β”œβ”€ Y β”œ
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜β””β”€β”€β”€β”˜ β””β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜β””β”€β”€β”€β”˜

Output of the previous code cell

Gate SU(2) muncul di awal dan akhir mengikut susunan dan elemen seperti yang dinyatakan dalam su2_gates = [...]. Skema pembelitan linear bermaksud Gate CX melangkah melalui Qubit bernombor, membelit 0 & 1, kemudian 1 & 2, dan seterusnya, sepanjang garis pepenjuru dalam litar. Seperti yang kamu jangkakan, menetapkan reps = 2 hanya menambah satu lapisan pembelitan dan satu lapisan akhir SU(2). Menetapkan reps = n bersamaan dengan n lapisan pembelitan, dengan lapisan SU(2) di antara mereka dan di setiap hujung.

SU2_ansatz2 = efficient_su2(
4, su2_gates=["rx", "y", "z"], entanglement="linear", reps=2
)
SU2_ansatz2.decompose().draw(output="mpl")

Output of the previous code cell

Terdapat beberapa skema pembelitan lain. Dua yang patut diperhatikan ialah circular dan full. Pembelitan bulat adalah sama dengan pembelitan linear, tetapi dengan tambahan Gate CX yang membelit Qubit pertama dan terakhir. Skema pembelitan penuh merangkumi Gate CX antara setiap pasangan Qubit. Perhatikan bahawa untuk litar N-Qubit, ini ialah N(Nβˆ’1)/2N(N-1)/2 Gate CXCX, dan boleh menjadi mahal dari segi pengiraan.

SU2_ansatz3 = efficient_su2(
4, su2_gates=["rx", "y", "z"], entanglement="circular", reps=1
)
SU2_ansatz3.decompose().draw(output="mpl")

Output of the previous code cell

SU2_ansatz4 = efficient_su2(4, su2_gates=["rx", "y", "z"], entanglement="full", reps=1)
SU2_ansatz4.decompose().draw(output="mpl")

Output of the previous code cell

Kamu boleh memantau kedalaman litar dengan menggunakan .depth(), atau kadang-kadang .decompose().depth().

print(SU2_ansatz4.decompose().depth())
11

Generalisasi kepada efficient_su2 ialah litar dua-setempat, yang itu sendiri merupakan kes khas bagi litar n-setempat. Litar dua-setempat juga mengandungi blok SU(2) (atau blok putaran) dan blok pembelitan. Di sini, kita bebas untuk menyatakan jenis Gate pembelitan yang ingin digunakan, contohnya Gate CRX. Dalam contoh ini, semua Gate menerima parameter, tetapi itu tidak semestinya. Seseorang boleh menggunakan Gate putaran Y dan Gate pembelitan CX, sebagai contoh.

from qiskit.circuit.library import n_local

rotation_blocks = ["ry"]
entanglement_blocks = ["crx"]
two_ansatz = n_local(
4, rotation_blocks, entanglement_blocks, "linear", insert_barriers=True, reps=2
)
two_ansatz.decompose().draw(output="mpl")

Output of the previous code cell

Ansatz terakhir yang akan kita bincangkan ialah reka bentuk Pauli-dua. Litar ini mengandungi putaran awal RY(pi/4)RY(pi/4), dan lapisan putaran mengandungi putaran Pauli Qubit tunggal, di mana paksi dipilih secara seragam rawak antara X, Y, atau Z. Lapisan pembelitan terdiri daripada Gate CZ berpasangan dengan kedalaman keseluruhan dua. Perhatikan perbezaan dalam kedalaman pembelitan (dan keseluruhan litar) antara pauli_two_design ini dan, sebagai contoh, efficient_su2.

from qiskit.circuit.library import pauli_two_design

PtwoD_ansatz = pauli_two_design(5, reps=1, seed=10599, insert_barriers=True)
PtwoD_ansatz.decompose().draw(output="mpl")

Output of the previous code cell

Litar variasi pra-bina ini merupakan heuristik yang berguna, baik dari segi mencapai tahap pembelitan yang dikehendaki mahupun dalam mengehadkan kedalaman litar. Tetapi tiada sebarang keajaiban tentangnya. Kamu bebas untuk membuat litar variasi sendiri. Malah, ia mungkin menguntungkan dalam kes di mana kamu mengetahui sesuatu tentang pembelitan keadaan sasaran sistem kamu.

Untuk membuat ansatz sendiri, kamu hanya membina litar kuantum dengan sebahagian Gate yang merupakan fungsi elemen vektor parameter ("theta" dalam contoh tiga-Qubit di bawah).

from qiskit import QuantumCircuit
from qiskit.circuit import ParameterVector

n = 3

theta = ParameterVector("ΞΈ", length=n)
qc = QuantumCircuit(n)
qc.h(0)
qc.h(2)
for i in range(n - 1):
qc.cx(i, i + 1)
qc.cz(0, n - 1)
qc.barrier()
for i in range(n):
qc.ry(theta[i], i)
qc.barrier()
qc.cz(0, n - 1)
for i in reversed(range(n - 1)):
qc.cx(i, i + 1)
qc.h(0)
qc.h(1)
own_ansatz = qc
print(own_ansatz.depth())
qc.draw("mpl")
9

Output of the previous code cell

Secara umumnya, memilih ansatz terbaik adalah satu seni; ansatz terbaik ialah apa sahaja ansatz yang membantu kamu mencapai sasaran dalam bilangan langkah pengoptimuman yang paling sedikit. Lebih mudah untuk mengenal pasti ansaetze yang berkemungkinan buruk. Contohnya, kedalaman litar yang lebih tinggi cenderung mengakibatkan pengumpulan ralat. Pengurangan ralat boleh membantu dalam hal ini, tetapi adalah amalan yang baik untuk mengekalkan kedalaman litar serendah yang munasabah. Namun jangan abaikan pembelitan yang diperlukan. Kamu mungkin mempunyai keadaan sasaran yang memerlukan skema pembelitan penuh. Dua contoh ditunjukkan di bawah yang berkemungkinan menjadi pilihan buruk atas sebab yang cukup jelas. Memilih ansatz yang baik akan dibincangkan semula dalam bahagian-bahagian kemudian dalam konteks ujian penumpuan.

Litar pertama ini berkemungkinan menjadi pilihan yang buruk kerana Qubit terakhir tidak dibelit dengan yang lain sama sekali. Memang tiada tindakan bermakna secara pengiraan pada Qubit terakhir. Dalam semua kemungkinan, Qubit terakhir sama ada perlu dibelit dengan yang lain atau dikeluarkan daripada pengiraan.

n = 4

theta = ParameterVector("ΞΈ", length=n)
qc = QuantumCircuit(n)
qc.h(0)
qc.h(2)
for i in range(n - 2):
qc.cx(i, i + 1)
qc.cz(0, n - 2)
qc.barrier()
for i in range(n):
qc.ry(theta[i], i)
qc.barrier()
qc.cz(0, n - 2)
for i in reversed(range(n - 2)):
qc.cx(i, i + 1)
qc.h(0)
qc.h(1)
own_ansatz2 = qc
print(own_ansatz2.depth())
qc.draw("mpl")
9

Output of the previous code cell

Litar terakhir ini berkemungkinan pilihan yang buruk, kerana kedalaman Gate sangat tinggi, dan mengulang lapisan pembelitan empat kali tidak mungkin menghasilkan padanan yang jauh lebih baik dengan keadaan sasaran berbanding dua atau tiga pengulangan.

su2_ansatz_long = efficient_su2(
4, su2_gates=["rx", "y", "z"], entanglement="linear", reps=4
)
print(su2_ansatz_long.decompose().depth())
su2_ansatz_long.decompose().draw(output="mpl")
24

Output of the previous code cell

Litar-litar ini tidak "lengkap" dalam erti kata bahawa masih terdapat parameter yang tidak diketahui dan berubah-ubah yang perlu dimasukkan ke dalam banyak Gate. Parameter tersebut dipilih dengan membuat tekaan berturut-turut, dan mengemas kini parameter untuk menurunkan nilai jangkaan fungsi kos (dalam konteks kimia, biasanya tenaga keadaan dasar). Dalam satu, atau bahkan beberapa dimensi, ini adalah mudah. Tetapi litar di atas mempunyai 20 parameter variasi, bermakna mencari keadaan sasaran dengan tenaga minimum bermaksud mencari dalam ruang keadaan 20 dimensi (satu lagi sebab untuk tidak menyertakan Gate litar yang tidak perlu). Di sinilah algoritma pengoptimuman klasik memainkan peranannya, dan itulah subjek pelajaran seterusnya.

Source: IBM Quantum docs β€” updated 9 Feb 2026
English version on doQumentation β€” updated 7 Mei 2026
This translation based on the English version of approx. 26 Mac 2026