Instansi dan ekstensi
Bab ini akan membahas beberapa algoritma variasional kuantum, termasuk
- Variational Quantum Eigensolver (VQE)
- Subspace Search VQE (SSVQE)
- Variational Quantum Deflation (VQD)
- Quantum Sampling Regression (QSR)
Dengan menggunakan algoritma-algoritma ini, kita akan mempelajari beberapa ide desain yang bisa dimasukkan ke dalam algoritma variasional kustom, seperti bobot, penalti, over-sampling, dan under-sampling. Kami mendorongmu untuk bereksperimen dengan konsep-konsep ini dan berbagi temuanmu dengan komunitas.
Framework pola Qiskit berlaku untuk semua algoritma ini — tapi kita hanya akan secara eksplisit menyebut langkah-langkahnya di contoh pertama saja.
Variational Quantum Eigensolver (VQE)
VQE adalah salah satu algoritma kuantum variasional yang paling banyak digunakan, memberikan template bagi algoritma lain untuk dikembangkan.
Langkah 1: Memetakan input klasik ke masalah kuantum
Tata letak teoritis
Tata letak VQE sangat sederhana:
- Siapkan operator referensi
- Kita mulai dari state dan menuju ke reference state
- Terapkan variational form untuk membuat ansatz
- Kita berpindah dari state ke
- Bootstrap di jika kita punya masalah serupa (biasanya ditemukan melalui simulasi atau sampling klasik)
- Setiap optimizer akan di-bootstrap secara berbeda, menghasilkan set awal vektor parameter (misalnya, dari titik awal ).
- Evaluasi fungsi biaya untuk semua state yang disiapkan di komputer kuantum.
- Gunakan optimizer klasik untuk memilih set parameter berikutnya .
- Ulangi proses sampai konvergensi tercapai.
Ini adalah loop optimisasi klasik sederhana di mana kita mengevaluasi fungsi biaya. Beberapa optimizer mungkin membutuhkan beberapa evaluasi untuk menghitung gradien, menentukan iterasi berikutnya, atau menilai konvergensi.
Berikut contoh untuk observable berikut:
Implementasi
# Added by doQumentation — required packages for this notebook
!pip install -q numpy qiskit qiskit-ibm-runtime scipy
from qiskit import QuantumCircuit
from qiskit.quantum_info import SparsePauliOp
from qiskit.circuit.library import TwoLocal
import numpy as np
theta_list = (2 * np.pi * np.random.rand(1, 8)).tolist()
observable = SparsePauliOp.from_list([("II", 2), ("XX", -2), ("YY", 3), ("ZZ", -3)])
reference_circuit = QuantumCircuit(2)
reference_circuit.x(0)
variational_form = TwoLocal(
2,
rotation_blocks=["rz", "ry"],
entanglement_blocks="cx",
entanglement="linear",
reps=1,
)
ansatz = reference_circuit.compose(variational_form)
ansatz.decompose().draw("mpl")
def cost_func_vqe(parameters, ansatz, hamiltonian, estimator):
"""Return estimate of energy from estimator
Parameters:
params (ndarray): Array of ansatz parameters
ansatz (QuantumCircuit): Parameterized ansatz circuit
hamiltonian (SparsePauliOp): Operator representation of Hamiltonian
estimator (Estimator): Estimator primitive instance
Returns:
float: Energy estimate
"""
estimator_job = estimator.run([(ansatz, hamiltonian, [parameters])])
estimator_result = estimator_job.result()[0]
cost = estimator_result.data.evs[0]
return cost
from qiskit.primitives import StatevectorEstimator
estimator = StatevectorEstimator()
Kita bisa menggunakan fungsi biaya ini untuk menghitung parameter optimal
# SciPy minimizer routine
from scipy.optimize import minimize
x0 = np.ones(8)
result = minimize(
cost_func_vqe, x0, args=(ansatz, observable, estimator), method="COBYLA"
)
result
message: Optimization terminated successfully.
success: True
status: 1
fun: -5.999999982445723
x: [ 1.741e+00 9.606e-01 1.571e+00 2.115e-05 1.899e+00
1.243e+00 6.063e-01 6.063e-01]
nfev: 136
maxcv: 0.0
Langkah 2: Optimalkan masalah untuk eksekusi kuantum
Kita akan memilih Backend yang paling tidak sibuk, dan mengimpor komponen yang diperlukan dari qiskit_ibm_runtime.
from qiskit_ibm_runtime import SamplerV2 as Sampler
from qiskit_ibm_runtime import EstimatorV2 as Estimator
from qiskit_ibm_runtime import Session, EstimatorOptions
from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
print(backend)
<IBMBackend('ibm_brisbane')>
Kita akan men-transpile Circuit menggunakan preset pass manager dengan level optimisasi 3, dan kita akan menerapkan layout yang sesuai ke observable.
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
pm = generate_preset_pass_manager(backend=backend, optimization_level=3)
isa_ansatz = pm.run(ansatz)
isa_observable = observable.apply_layout(layout=isa_ansatz.layout)
Langkah 3: Eksekusi menggunakan Qiskit Runtime primitives
Kita sekarang siap menjalankan perhitungan di hardware IBM Quantum®. Karena minimisasi fungsi biaya bersifat sangat iteratif, kita akan memulai Runtime Session. Dengan cara ini, kita hanya perlu mengantri satu kali. Setelah job mulai berjalan, setiap iterasi dengan pembaruan parameter akan langsung berjalan.
x0 = np.ones(8)
estimator_options = EstimatorOptions(resilience_level=1, default_shots=10_000)
with Session(backend=backend) as session:
estimator = Estimator(mode=session, options=estimator_options)
result = minimize(
cost_func_vqe,
x0,
args=(isa_ansatz, isa_observable, estimator),
method="COBYLA",
options={"maxiter": 200, "disp": True},
)
session.close()
print(result)
Langkah 4: Post-process, kembalikan hasil dalam format klasik
Kita bisa melihat bahwa rutinitas minimisasi berhasil dihentikan, artinya kita mencapai toleransi default dari optimizer klasik COBYLA. Jika kita membutuhkan hasil yang lebih presisi, kita bisa menentukan toleransi yang lebih kecil. Ini memang mungkin diperlukan, karena hasilnya beberapa persen lebih jauh dibandingkan hasil yang diperoleh simulator di atas.
Nilai x yang diperoleh adalah tebakan terbaik saat ini untuk parameter yang meminimalkan fungsi biaya. Jika melakukan iterasi untuk mendapatkan presisi yang lebih tinggi, nilai-nilai tersebut harus digunakan sebagai pengganti x0 yang awalnya digunakan (vektor berisi angka satu).
Terakhir, kita catat bahwa fungsi dievaluasi sebanyak 96 kali dalam proses optimisasi. Jumlah ini bisa berbeda dari jumlah langkah optimisasi, karena beberapa optimizer membutuhkan beberapa evaluasi fungsi dalam satu langkah, misalnya saat memperkirakan gradien.
Subspace Search VQE (SSVQE)
SSVQE adalah varian dari VQE yang memungkinkan mendapatkan eigenvalue pertama dari observable dengan eigenvalue , di mana . Tanpa kehilangan generalitas, kita asumsikan bahwa . SSVQE memperkenalkan ide baru dengan menambahkan bobot untuk membantu memprioritaskan optimisasi untuk suku dengan bobot terbesar.
Untuk mengimplementasikan algoritma ini, kita membutuhkan reference state yang saling ortogonal , artinya untuk . State-state ini bisa dikonstruksi menggunakan operator Pauli. Fungsi biaya dari algoritma ini kemudian adalah:
di mana adalah bilangan positif sembarang sedemikian sehingga jika maka , dan adalah variational form yang didefinisikan pengguna.
Algoritma SSVQE bergantung pada fakta bahwa eigenstate yang bersesuaian dengan eigenvalue yang berbeda saling ortogonal. Secara spesifik, hasil kali dalam dari dan bisa diekspresikan sebagai:
Kesamaan pertama berlaku karena adalah operator kuantum dan karenanya bersifat uniter. Kesamaan terakhir berlaku karena ortogonalitas reference state . Fakta bahwa ortogonalitas dipertahankan melalui transformasi uniter berkaitan erat dengan prinsip konservasi informasi, sebagaimana dinyatakan dalam ilmu informasi kuantum. Dalam sudut pandang ini, transformasi non-uniter merepresentasikan proses di mana informasi hilang atau disuntikkan.
Bobot membantu memastikan bahwa semua state adalah eigenstate. Jika bobot-bobot cukup berbeda, suku dengan bobot terbesar (yaitu, ) akan diprioritaskan selama optimisasi dibanding yang lain. Akibatnya, state yang dihasilkan akan menjadi eigenstate yang bersesuaian dengan . Karena saling ortogonal, state-state yang tersisa akan ortogonal terhadapnya dan, oleh karena itu, terkandung dalam subspace yang bersesuaian dengan eigenvalue .
Menerapkan argumen yang sama untuk sisa suku, prioritas berikutnya adalah suku dengan bobot , sehingga akan menjadi eigenstate yang bersesuaian dengan , dan suku lainnya akan terkandung dalam eigenspace dari .
Dengan penalaran induktif, kita menyimpulkan bahwa akan menjadi eigenstate perkiraan dari untuk
Tata letak teoritis
SSVQE dapat dirangkum sebagai berikut:
- Siapkan beberapa reference state dengan menerapkan uniter U_R ke k state basis komputasi yang berbeda
- Algoritma ini membutuhkan penggunaan reference state yang saling ortogonal , sedemikian sehingga untuk .
- Terapkan variational form ke setiap reference state, menghasilkan ansatz berikut .
- Bootstrap di jika masalah serupa tersedia (biasanya ditemukan melalui simulasi atau sampling klasik).
- Evaluasi fungsi biaya untuk semua state yang disiapkan di komputer kuantum.
- Ini bisa dipisahkan menjadi menghitung nilai ekspektasi untuk observable dan mengalikan hasilnya dengan .
- Setelah itu, fungsi biaya mengembalikan jumlah semua nilai ekspektasi berbobot.
- Gunakan optimizer klasik untuk menentukan set parameter berikutnya .
- Ulangi langkah-langkah di atas sampai konvergensi tercapai.
Kamu akan merekonstruksi fungsi biaya SSVQE dalam penilaian, tapi kita punya cuplikan berikut untuk memotivasi solusimu:
import numpy as np
def cost_func_ssvqe(
params, initialized_anastz_list, weights, ansatz, hamiltonian, estimator
):
# """Return estimate of energy from estimator
# Parameters:
# params (ndarray): Array of ansatz parameters
# initialized_anastz_list (list QuantumCircuit): Array of initialised ansatz with reference
# weights (list): List of weights
# ansatz (QuantumCircuit): Parameterized ansatz circuit
# hamiltonian (SparsePauliOp): Operator representation of Hamiltonian
# estimator (Estimator): Estimator primitive instance
# Returns:
# float: Weighted energy estimate
# """
energies = []
# Define SSVQE
weighted_energy_sum = np.dot(energies, weights)
return weighted_energy_sum
Variational Quantum Deflation (VQD)
VQD adalah metode iteratif yang memperluas VQE untuk mendapatkan nilai eigen pertama dari suatu observable dengan nilai eigen , di mana , bukan hanya yang pertama. Untuk sisa bagian ini, kita akan mengasumsikan, tanpa mengurangi keumuman, bahwa . VQD memperkenalkan konsep biaya penalti untuk memandu proses optimasi.
VQD memperkenalkan istilah penalti, dilambangkan sebagai , untuk menyeimbangkan kontribusi setiap istilah overlap terhadap biaya. Istilah penalti ini berfungsi untuk menghukum proses optimasi jika ortogonalitas tidak tercapai. Kita memberlakukan batasan ini karena eigenstate dari suatu observable, atau operator Hermitian, yang bersesuaian dengan nilai eigen yang berbeda selalu saling ortogonal, atau dapat dibuat demikian dalam kasus degenerasi atau nilai eigen yang berulang. Dengan demikian, dengan menegakkan ortogonalitas terhadap eigenstate yang bersesuaian dengan , kita secara efektif mengoptimalkan atas subruang yang bersesuaian dengan sisa nilai eigen . Di sini, adalah nilai eigen terendah dari sisa nilai eigen dan, oleh karena itu, solusi optimal dari masalah baru dapat diperoleh menggunakan teorema variasional.
Ide umum di balik VQD adalah menggunakan VQE seperti biasa untuk mendapatkan nilai eigen terendah beserta eigenstate (perkiraan) yang bersesuaian untuk vektor parameter optimal . Kemudian, untuk mendapatkan nilai eigen berikutnya , alih-alih meminimalkan fungsi biaya , kita mengoptimalkan:
Nilai positif idealnya harus lebih besar dari .
Ini memperkenalkan fungsi biaya baru yang dapat dipandang sebagai masalah terkendala, di mana kita meminimalkan dengan syarat bahwa state harus ortogonal terhadap yang telah diperoleh sebelumnya, dengan bertindak sebagai istilah penalti jika syarat tidak terpenuhi.
Sebagai alternatif, masalah baru ini dapat diinterpretasikan sebagai menjalankan VQE pada observable baru:
Dengan asumsi bahwa solusi untuk masalah baru adalah , nilai ekspektasi dari (bukan ) seharusnya . Untuk mendapatkan nilai eigen ketiga , fungsi biaya yang perlu dioptimalkan adalah:
di mana adalah konstanta positif yang cukup besar untuk menegakkan ortogonalitas state solusi terhadap dan . Ini menghukum state dalam ruang pencarian yang tidak memenuhi persyaratan ini, sehingga secara efektif membatasi ruang pencarian. Dengan demikian, solusi optimal dari masalah baru seharusnya adalah eigenstate yang bersesuaian dengan .
Seperti kasus sebelumnya, masalah baru ini juga dapat diinterpretasikan sebagai VQE dengan observable:
Jika solusi untuk masalah baru ini adalah , nilai ekspektasi dari (bukan ) seharusnya . Secara analog, untuk mendapatkan nilai eigen ke- yaitu , kamu perlu meminimalkan fungsi biaya:
Ingat bahwa kita mendefinisikan sedemikian sehingga . Masalah ini setara dengan meminimalkan tetapi dengan syarat bahwa state harus ortogonal terhadap , sehingga membatasi ruang pencarian ke subruang yang bersesuaian dengan nilai eigen .
Masalah ini setara dengan VQE dengan observable:
Seperti yang bisa kamu lihat dari prosesnya, untuk mendapatkan nilai eigen ke-, kamu membutuhkan eigenstate (perkiraan) dari nilai eigen sebelumnya, sehingga kamu perlu menjalankan VQE sebanyak kali. Oleh karena itu, fungsi biaya VQD adalah sebagai berikut:
Tata letak teoritis
Tata letak VQD dapat dirangkum sebagai berikut:
- Siapkan operator referensi
- Terapkan variational form pada state referensi, membuat ansatz berikut
- Bootstrap pada jika kita punya masalah serupa (biasanya ditemukan via simulasi atau sampling klasik).
- Evaluasi fungsi biaya , yang melibatkan komputasi excited state dan array yang mendefinisikan penalti overlap untuk setiap istilah overlap.
- Hitung nilai ekspektasi untuk observable untuk setiap
- Hitung penalti .
- Fungsi biaya kemudian harus mengembalikan jumlah dari kedua istilah ini
- Gunakan pengoptimal klasik untuk memilih set parameter berikutnya .
- Ulangi proses ini hingga konvergensi tercapai.
Implementasi
Untuk implementasi ini, kita akan membuat fungsi untuk penalti overlap. Penalti ini akan digunakan dalam fungsi biaya di setiap iterasi. Proses ini akan diulang untuk setiap excited state
from qiskit.circuit.library import TwoLocal
ansatz = TwoLocal(2, rotation_blocks=["ry", "rz"], entanglement_blocks="cz", reps=1)
ansatz.decompose().draw("mpl")
Pertama, kita akan menyiapkan fungsi yang menghitung fidelitas state -- persentase overlap antara dua state yang akan kita gunakan sebagai penalti untuk VQD:
import numpy as np
def calculate_overlaps(ansatz, prev_circuits, parameters, sampler):
def create_fidelity_circuit(circuit_1, circuit_2):
"""
Constructs the list of fidelity circuits to be evaluated.
These circuits represent the state overlap between pairs of input circuits,
and their construction depends on the fidelity method implementations.
"""
if len(circuit_1.clbits) > 0:
circuit_1.remove_final_measurements()
if len(circuit_2.clbits) > 0:
circuit_2.remove_final_measurements()
circuit = circuit_1.compose(circuit_2.inverse())
circuit.measure_all()
return circuit
overlaps = []
for prev_circuit in prev_circuits:
fidelity_circuit = create_fidelity_circuit(ansatz, prev_circuit)
sampler_job = sampler.run([(fidelity_circuit, parameters)])
meas_data = sampler_job.result()[0].data.meas
counts_0 = meas_data.get_int_counts().get(0, 0)
shots = meas_data.num_shots
overlap = counts_0 / shots
overlaps.append(overlap)
return np.array(overlaps)
Saatnya menulis fungsi biaya VQD. Seperti sebelumnya ketika kita hanya menghitung ground state, kita akan menentukan state energi terendah menggunakan primitif Estimator. Namun, seperti yang dijelaskan di atas, kita sekarang akan menambahkan istilah penalti untuk memastikan ortogonalitas state berenergi lebih tinggi. Artinya, untuk setiap excited state baru, penalti ditambahkan untuk setiap overlap antara state variasional saat ini dan eigenstate berenergi lebih rendah yang sudah ditemukan.
def cost_func_vqd(
parameters, ansatz, prev_states, step, betas, estimator, sampler, hamiltonian
):
estimator_job = estimator.run([(ansatz, hamiltonian, [parameters])])
total_cost = 0
if step > 1:
overlaps = calculate_overlaps(ansatz, prev_states, parameters, sampler)
total_cost = np.sum(
[np.real(betas[state] * overlap) for state, overlap in enumerate(overlaps)]
)
estimator_result = estimator_job.result()[0]
value = estimator_result.data.evs[0] + total_cost
return value
Perhatikan terutama bahwa fungsi biaya di atas merujuk ke fungsi calculate_overlaps, yang sebenarnya membuat Circuit quantum baru. Jika kita ingin menjalankan pada hardware nyata, Circuit baru tersebut juga harus ditranspilasi, sebaiknya dengan cara yang optimal, untuk dijalankan pada Backend yang kita pilih. Perhatikan bahwa transpilasi telah dibangun ke dalam fungsi calculate_overlaps atau cost_func_vqd. Silakan coba modifikasi kode sendiri untuk membangun transpilasi tambahan (dan kondisional) ini — tapi ini juga akan dilakukan untukmu di pelajaran berikutnya.
Dalam pelajaran ini, kita akan menjalankan algoritma VQD menggunakan Statevector Sampler dan Statevector Estimator:
from qiskit.primitives import StatevectorEstimator as Estimator
sampler = Sampler()
estimator = Estimator()
Kita akan memperkenalkan observable yang akan diestimasi. Di pelajaran berikutnya kita akan menambahkan beberapa konteks fisik pada ini, seperti excited state dari suatu molekul. Mungkin membantu untuk memikirkan observable ini sebagai Hamiltonian dari sistem yang dapat memiliki excited state, meskipun observable ini tidak dipilih untuk cocok dengan molekul atau atom tertentu.
from qiskit.quantum_info import SparsePauliOp
observable = SparsePauliOp.from_list([("II", 2), ("XX", -2), ("YY", 3), ("ZZ", -3)])
Di sini, kita menetapkan jumlah total state yang ingin kita hitung (ground state dan excited state, k), dan penalti (betas) untuk overlap antara statevector yang seharusnya ortogonal. Konsekuensi dari memilih betas terlalu tinggi atau terlalu rendah akan dieksplorasi sedikit di pelajaran berikutnya. Untuk sekarang, kita akan menggunakan yang disediakan di bawah. Kita akan mulai dengan menggunakan semua nol sebagai parameter kita. Dalam perhitunganmu sendiri, kamu mungkin ingin menggunakan parameter awal yang lebih cerdas berdasarkan pengetahuanmu tentang sistem atau berdasarkan perhitungan sebelumnya.
k = 3
betas = [33, 33, 33]
x0 = np.zeros(8)
Kita sekarang dapat menjalankan perhitungan:
from scipy.optimize import minimize
prev_states = []
prev_opt_parameters = []
eigenvalues = []
for step in range(1, k + 1):
if step > 1:
prev_states.append(ansatz.assign_parameters(prev_opt_parameters))
result = minimize(
cost_func_vqd,
x0,
args=(ansatz, prev_states, step, betas, estimator, sampler, observable),
method="COBYLA",
options={
"maxiter": 200,
},
)
print(result)
prev_opt_parameters = result.x
eigenvalues.append(result.fun)
message: Optimization terminated successfully.
success: True
status: 1
fun: -5.999999979545955
x: [-5.150e-01 -5.452e-02 -1.571e+00 -2.853e-05 2.671e-01
-2.672e-01 -8.509e-01 -8.510e-01]
nfev: 131
maxcv: 0.0
message: Optimization terminated successfully.
success: True
status: 1
fun: 4.024550284767612
x: [-3.745e-01 1.041e+00 8.637e-01 1.202e+00 -8.847e-02
1.181e-02 7.611e-01 -3.006e-01]
nfev: 110
maxcv: 0.0
message: Optimization terminated successfully.
success: True
status: 1
fun: 5.608925562838559
x: [-2.670e-01 1.280e+00 1.070e+00 -8.031e-01 -1.524e-01
-6.956e-02 7.018e-01 1.514e+00]
nfev: 90
maxcv: 0.0
Nilai yang kita peroleh dari fungsi biaya adalah sekitar -6.00, 4.02, dan 5.61. Hal penting tentang hasil ini adalah bahwa nilai fungsinya meningkat. Jika kita mendapatkan excited state pertama yang energinya lebih rendah dari perhitungan awal ground state tanpa kendala, itu akan menunjukkan adanya kesalahan di suatu tempat dalam kode kita.
Nilai x adalah parameter yang menghasilkan statevector yang bersesuaian dengan masing-masing biaya (energi) ini.
Terakhir, kita mencatat bahwa ketiga minimisasi berkonvergensi dalam toleransi default pengoptimal klasik (di sini COBYLA). Masing-masing memerlukan 131, 110, dan 90 evaluasi fungsi.
Quantum Sampling Regression (QSR)
Salah satu masalah utama dengan VQE adalah banyaknya panggilan ke komputer kuantum yang diperlukan untuk mendapatkan parameter di setiap langkah, misalnya, , , dan seterusnya. Ini sangat bermasalah ketika akses ke perangkat kuantum harus mengantri. Meskipun Session dapat digunakan untuk mengelompokkan beberapa panggilan iteratif, pendekatan alternatif adalah menggunakan sampling. Dengan memanfaatkan lebih banyak sumber daya klasik, kita dapat menyelesaikan seluruh proses optimasi dalam satu panggilan. Di sinilah Quantum Sampling Regression berperan. Karena akses ke komputer kuantum masih merupakan komoditas rendah penawaran/tinggi permintaan, kita menemukan trade-off ini menjadi mungkin dan nyaman untuk banyak studi saat ini. Pendekatan ini memanfaatkan semua kemampuan klasik yang tersedia sambil tetap menangkap banyak cara kerja internal dan sifat intrinsik komputasi kuantum yang tidak muncul dalam simulasi.
Ide di balik QSR adalah bahwa fungsi biaya dapat dinyatakan sebagai deret Fourier dengan cara berikut:
Tergantung pada periodisitas dan bandwidth fungsi asli, himpunan bisa terbatas atau tak terbatas. Untuk keperluan diskusi ini, kita akan mengasumsikan ia tak terbatas. Langkah berikutnya adalah mensampel fungsi biaya beberapa kali untuk mendapatkan koefisien Fourier . Secara khusus, karena kita memiliki unknown, kita perlu mensampel fungsi biaya sebanyak kali.
Jika kita kemudian mensampel fungsi biaya untuk nilai parameter yaitu , kita dapat memperoleh sistem berikut:
yang akan kita tulis ulang sebagai
Dalam praktiknya, sistem ini umumnya tidak konsisten karena nilai fungsi biaya tidak tepat. Oleh karena itu, biasanya ide yang baik untuk menormalisasinya dengan mengalikannya dengan di sebelah kiri, yang menghasilkan:
Sistem baru ini selalu konsisten, dan solusinya adalah solusi least-squares dari masalah asli. Jika kita memiliki parameter alih-alih hanya satu, dan setiap parameter memiliki -nya sendiri untuk , maka jumlah total sampel yang diperlukan adalah:
di mana . Selain itu, menyesuaikan sebagai parameter yang bisa diatur (alih-alih menyimpulkannya) membuka kemungkinan baru, seperti:
- Over-sampling untuk meningkatkan akurasi.
- Under-sampling untuk meningkatkan performa dengan mengurangi overhead runtime atau menghilangkan local minima.
Tata letak teoritis
Tata letak QSR dapat dirangkum sebagai berikut:
- Siapkan operator referensi .
- Kita akan pergi dari state ke state referensi
- Terapkan variational form untuk membuat ansatz .
- Tentukan bandwidth yang terkait dengan setiap parameter dalam ansatz. Batas atas sudah cukup.
- Bootstrap pada jika kita punya masalah serupa (biasanya ditemukan dengan simulasi atau sampling klasik).
- Sampel fungsi biaya