Mga Instance at Extension
Tatalakayin ng kabanatang ito ang ilang quantum variational algorithm, kasama ang mga sumusunod:
- Variational Quantum Eigensolver (VQE)
- Subspace Search VQE (SSVQE)
- Variational Quantum Deflation (VQD)
- Quantum Sampling Regression (QSR)
Sa pamamagitan ng mga algorithm na ito, matututunan natin ang ilang ideya sa disenyo na maaaring isama sa mga custom variational algorithm, tulad ng mga timbang (weights), mga parusa (penalties), over-sampling, at under-sampling. Hinihikayat namin kayo na mag-eksperimento sa mga konseptong ito at ibahagi ang inyong mga natuklasan sa komunidad.
Naaangkop ang Qiskit patterns framework sa lahat ng mga algorithm na ito — ngunit tahasang bibanggit lang natin ang mga hakbang sa unang halimbawa.
Variational Quantum Eigensolver (VQE)
Ang VQE ay isa sa mga pinaka-ginagamit na variational quantum algorithm, na nagtatakda ng template para sa ibang mga algorithm na maaaring itayo dito.
Hakbang 1: I-map ang mga klasikal na input sa quantum na problema
Teoretikal na layout
Simple ang layout ng VQE:
- I-prepare ang reference operators na
- Magsisimula tayo mula sa estado at pupunta sa reference state na
- I-apply ang variational form na para lumikha ng ansatz na
- Pupunta tayo mula sa estado patungo sa
- Mag-bootstrap sa kung mayroon kang katulad na problema (karaniwang nahahanap sa pamamagitan ng klasikal na simulation o sampling)
- Bawat optimizer ay mag-bo-bootstrap nang iba-iba, na magreresulta sa isang paunang hanay ng mga parameter vector na (halimbawa, mula sa isang paunang punto ).
- Suriin ang cost function na para sa lahat ng inihanda na estado sa isang quantum computer.
- Gumamit ng klasikal na optimizer para pumili ng susunod na hanay ng mga parameter na .
- Ulitin ang proseso hanggang maabot ang convergence.
Ito ay isang simpleng klasikal na optimization loop kung saan sinusuri natin ang cost function. Maaaring mangailangan ang ilang optimizer ng maraming evaluasyon para kalkulahin ang gradient, tukuyin ang susunod na iterasyon, o tasahin ang convergence.
Narito ang halimbawa para sa sumusunod na observable:
Implementasyon
# 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()
Maaari nating gamitin ang cost function na ito para kalkulahin ang pinakamainam na mga parameter.
# 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
Hakbang 2: I-optimize ang problema para sa quantum execution
Pipili tayo ng least-busy na backend, at ia-import ang mga kinakailangang component mula sa 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')>
I-transpile natin ang Circuit gamit ang preset pass manager na may optimization level 3, at ia-apply natin ang kaukulang layout sa 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)
Hakbang 3: I-execute gamit ang Qiskit Runtime primitives
Handa na tayong patakbuhin ang ating kalkulasyon sa IBM Quantum® hardware. Dahil napaka-iteratibo ng pag-minimize ng cost function, magsisimula tayo ng Runtime session. Sa ganitong paraan, isang beses lang tayong maghihintay sa pila. Kapag nagsimula nang tumakbo ang job, bawat iterasyon na may mga update sa mga parameter ay tatakbo agad.
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)
Hakbang 4: Post-process, ibalik ang resulta sa klasikal na format
Makikita natin na matagumpay na natapos ang minimization routine, ibig sabihin naabot natin ang default na toleransya ng COBYLA klasikal na optimizer. Kung kailangan ng mas tumpak na resulta, maaari tayong magtakda ng mas maliit na toleransya. Maaari ngang kailanganin ito, dahil ilang porsyentong kaibahan ang resulta kumpara sa resulta na nakuha ng simulator sa itaas.
Ang halaga ng x na nakuha ay ang pinakamainam na hula sa kasalukuyan para sa mga parameter na nagpapaliit ng cost function. Kung nagtatasa para makakuha ng mas mataas na katumpakan, ang mga halagang iyon ay dapat gamitin kapalit ng x0 na unang ginamit (isang vector ng mga isa).
Sa huli, dapat nating tandaan na 96 beses na sinuri ang function sa proseso ng optimization. Maaaring mag-iba ito mula sa bilang ng mga optimization step, dahil ang ilang optimizer ay nangangailangan ng maraming evaluasyon ng function sa isang hakbang, tulad ng kapag tinatantiya ang gradient.
Subspace Search VQE (SSVQE)
Ang SSVQE ay isang variant ng VQE na nagpapahintulot sa pagkuha ng unang eigenvalue ng isang observable na na may mga eigenvalue na , kung saan . Nang walang pagkawala ng pangkalahatan, ipinapalagay natin na . Nagpapakilala ang SSVQE ng bagong ideya sa pamamagitan ng pagdaragdag ng mga timbang upang matulungang bigyang-priyoridad ang pag-optimize para sa term na may pinakamalaking timbang.
Para maipatupad ang algorithm na ito, kailangan natin ng na magkaparehong ortogonal na reference state na , ibig sabihin para sa . Ang mga estadong ito ay maaaring itayo gamit ang mga Pauli operator. Ang cost function ng algorithm na ito ay:
kung saan ang ay isang arbitraryong positibong numero na kung ay , at ang ay ang variational form na tinukoy ng gumagamit.
Ang SSVQE algorithm ay nakasalalay sa katotohanang ang mga eigenstate na naaayon sa iba't ibang eigenvalue ay magkaparehong ortogonal. Partikular, ang inner product ng at ay maaaring ipahayag bilang:
Ang unang pagkakapantay-pantay ay totoo dahil ang ay isang quantum operator at samakatuwid ay unitary. Ang huling pagkakapantay-pantay ay totoo dahil sa ortogonalidad ng mga reference state na . Ang katotohanang napapanatili ang ortogonalidad sa pamamagitan ng mga unitary transformation ay malalim na nauugnay sa prinsipyo ng pangangalaga ng impormasyon, gaya ng ipinapahayag sa quantum information science. Sa pananaw na ito, ang mga non-unitary transformation ay kumakatawan sa mga proseso kung saan ang impormasyon ay nawawala o naiiniksyon.
Tinutulungan ng mga timbang na matiyak na lahat ng estado ay mga eigenstate. Kung sapat na magkaiba ang mga timbang, ang term na may pinakamalaking timbang (ibig sabihin, ) ay mabibigyan ng priyoridad sa panahon ng optimization kaysa sa iba. Bilang resulta, ang resultang estado ay magiging eigenstate na naaayon sa . Dahil ang ay magkaparehong ortogonal, ang natitirang mga estado ay magiging ortogonal dito at, samakatuwid, nakapaloob sa subspace na naaayon sa mga eigenvalue na .
Sa paglalapat ng parehong argumento sa natitirang mga term, ang susunod na priyoridad ay ang term na may timbang , kaya ang ay magiging eigenstate na naaayon sa , at ang ibang mga term ay mananatili sa eigenspace ng .
Sa pamamagitan ng inductive reasoning, natutukoy natin na ang ay magiging isang tinatayang eigenstate ng para sa
Teoretikal na layout
Ang SSVQE ay maaaring ibuod tulad ng sumusunod:
- Maghanda ng ilang reference state sa pamamagitan ng pag-apply ng unitary U_R sa k iba't ibang computational basis state
- Ang algorithm na ito ay nangangailangan ng paggamit ng magkaparehong ortogonal na reference state na , tulad na para sa .
- I-apply ang variational form na sa bawat reference state, na nagbubunga sa sumusunod na ansatz na .
- Mag-bootstrap sa kung mayroon kang katulad na problema (karaniwang nahahanap sa pamamagitan ng klasikal na simulation o sampling).
- Suriin ang cost function na para sa lahat ng inihanda na estado sa isang quantum computer.
- Maaari itong hatiin sa pagkalkula ng expectation value para sa isang observable na at pagpaparami ng resultang iyon sa .
- Pagkatapos, ibinabalik ng cost function ang kabuuan ng lahat ng weighted expectation value.
- Gumamit ng klasikal na optimizer para tukuyin ang susunod na hanay ng mga parameter na .
- Ulitin ang mga hakbang sa itaas hanggang maabot ang convergence.
Muling itatayo mo ang cost function ng SSVQE sa assessment, ngunit mayroon kaming sumusunod na snippet para gabayan ang iyong solusyon:
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)
Ang VQD ay isang iteratibong pamamaraan na nagpapalawak ng VQE para makuha ang unang eigenvalue ng isang observable na na may mga eigenvalue na , kung saan , sa halip na ang una lamang. Para sa natitirang bahagi ng seksyong ito, ipapalagay natin, nang walang pagkawala ng pangkalahatan, na . Nagpapakilala ang VQD ng konsepto ng penalty cost para gabayan ang proseso ng optimization.
Nagpapakilala ang VQD ng isang penalty term, na tinutukoy bilang , para balansehin ang kontribusyon ng bawat overlap term sa cost. Ang penalty term na ito ay nagsisilbing parusa sa proseso ng optimization kung hindi nakamit ang ortogonalidad. Ipinapataw natin ang hadlang na ito dahil ang mga eigenstate ng isang observable, o isang Hermitian operator, na naaayon sa iba't ibang eigenvalue ay palaging magkaparehong ortogonal, o maaaring gawing ganoon sa kaso ng degeneracy o mga paulit-ulit na eigenvalue. Kaya, sa pamamagitan ng pagpapatupad ng ortogonalidad sa eigenstate na naaayon sa , epektibo tayong nag-o-optimize sa subspace na naaayon sa natitirang mga eigenvalue na . Dito, ang ay ang pinakamababang eigenvalue mula sa natitirang mga eigenvalue at, samakatuwid, ang pinakamainam na solusyon ng bagong problema ay maaaring makuha gamit ang variational theorem.
Ang pangkalahatang ideya sa likod ng VQD ay ang paggamit ng VQE gaya ng dati para makuha ang pinakamababang eigenvalue na kasama ang kaukulang (tinatayang) eigenstate na para sa ilang pinakamainam na parameter vector na . Pagkatapos, para makuha ang susunod na eigenvalue na , sa halip na i-minimize ang cost function na , ino-optimize natin ang:
Ang positibong halaga ng ay dapat na mas malaki kaysa .
Nagpapakilala ito ng bagong cost function na maaaring tingnan bilang isang constrained problem, kung saan ini-minimize natin ang alinsunod sa hadlang na ang estado ay dapat na ortogonal sa dating nakuhang , na ang ay gumaganap bilang penalty term kung hindi natutupad ang hadlang.
Bilang kahalili, ang bagong problemang ito ay maaaring interpretahin bilang pagpapatakbo ng VQE sa bagong observable:
Ipagpalagay na ang solusyon sa bagong problema ay , ang inaasahang halaga ng (hindi ) ay dapat na .
Para makuha ang ikatlong eigenvalue na , ang cost function na ia-optimize ay:
kung saan ang ay isang positibong constant na sapat na malaki para ipatupad ang ortogonalidad ng solution state sa parehong at . Pinaparusahan nito ang mga estado sa search space na hindi nakakatugon sa kinakailangang ito, na epektibong pinipigilan ang search space. Kaya naman, ang pinakamainam na solusyon ng bagong problema ay dapat na ang eigenstate na naaayon sa .
Tulad ng nakaraang kaso, ang bagong problemang ito ay maaari ring interpretahin bilang VQE na may observable:
Kung ang solusyon sa bagong problemang ito ay , ang inaasahang halaga ng (hindi ) ay dapat na .
Sa katulad na paraan, para makuha ang -th eigenvalue na , ii-minimize mo ang cost function:
Tandaan na tinukoy natin ang upang . Ang problemang ito ay katumbas ng pag-minimize ng ngunit may hadlang na ang estado ay dapat na ortogonal sa , na epektibong nagpipigil ng search space sa subspace na naaayon sa mga eigenvalue na .
Ang problemang ito ay katumbas ng VQE na may observable:
Gaya ng makikita mo mula sa proseso, para makuha ang -th eigenvalue, kailangan mo ang (tinatayang) mga eigenstate ng nakaraang eigenvalue, kaya kailangang patakbuhin ang VQE ng beses. Samakatuwid, ang cost function ng VQD ay ang sumusunod:
Teoretikal na layout
Ang layout ng VQD ay maaaring ibuod tulad ng sumusunod:
- Maghanda ng reference operator na
- I-apply ang variational form na sa reference state, na lumilikha ng mga sumusunod na ansatze na
- Mag-bootstrap sa kung mayroon kang katulad na problema (karaniwang nahahanap sa pamamagitan ng klasikal na simulation o sampling).
- Suriin ang cost function na , na kinabibilangan ng pagkalkula ng excited state at isang array ng mga na tumutukoy sa overlap penalty para sa bawat overlap term.
- Kalkulahin ang expectation value para sa isang observable na para sa bawat
- Kalkulahin ang penalty na .
- Ang cost function ay dapat na ibalik ang kabuuan ng dalawang term na ito
- Gumamit ng klasikal na optimizer para pumili ng susunod na hanay ng mga parameter na .
- Ulitin ang prosesong ito hanggang maabot ang convergence.
Implementasyon
Para sa implementasyong ito, gagawa tayo ng function para sa isang overlap penalty. Gagamitin ang penalty na ito sa cost function sa bawat iterasyon. Ang prosesong ito ay uulitin para sa bawat excited state.
from qiskit.circuit.library import TwoLocal
ansatz = TwoLocal(2, rotation_blocks=["ry", "rz"], entanglement_blocks="cz", reps=1)
ansatz.decompose().draw("mpl")
Una, mag-se-set up tayo ng function na nagkalkula ng state fidelity — isang porsyento ng overlap sa pagitan ng dalawang estado na gagamitin natin bilang penalty para sa 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)
Oras na para isulat ang cost function ng VQD. Gaya ng dati nang kinalkula natin ang ground state lamang, tutukuyin natin ang pinakamababang energy state gamit ang Estimator primitive. Gayunpaman, gaya ng inilarawan sa itaas, magdadagdag na tayo ng penalty term para matiyak ang ortogonalidad ng mga higher-energy state. Ibig sabihin, para sa bawat bagong excited state, idinaragdag ang isang penalty para sa anumang overlap sa pagitan ng kasalukuyang variational state at ng mga lower-energy eigenstate na nahanap na.
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
Dapat pansinin na ang cost function sa itaas ay tumutukoy sa function na calculate_overlaps, na lumilikha ng bagong quantum circuit. Kung gusto nating patakbuhin sa tunay na hardware, ang bagong circuit na iyon ay kailangang i-transpile rin, sana sa pinakamainam na paraan, para patakbuhin sa backend na ating pipiliin. Tandaan na ang transpilation ay hindi pa nakabuilt-in sa mga function na calculate_overlaps o cost_func_vqd. Huwag mag-atubiling subukan na baguhin ang code mismo para isama ang karagdagang (at conditional) transpilation na ito — ngunit gagawin din ito para sa iyo sa susunod na aralin.
Sa araling ito, patatakbuhin natin ang VQD algorithm gamit ang Statevector Sampler at Statevector Estimator:
from qiskit.primitives import StatevectorEstimator as Estimator
sampler = Sampler()
estimator = Estimator()
Magpapakilala tayo ng isang observable na ie-estimate. Sa susunod na aralin, magdadagdag tayo ng ilang pisikal na konteksto dito, tulad ng excited state ng isang molekula. Maaaring makatulong na isiping ang observable na ito bilang Hamiltonian ng isang sistema na maaaring magkaroon ng mga excited state, kahit na ang observable na ito ay hindi pinili para tumugma sa anumang partikular na molekula o atom.
from qiskit.quantum_info import SparsePauliOp
observable = SparsePauliOp.from_list([("II", 2), ("XX", -2), ("YY", 3), ("ZZ", -3)])
Dito, itinatakda natin ang kabuuang bilang ng mga estado na gustong kalkulahin (ground state at excited state, k), at ang mga parusa (betas) para sa overlap sa pagitan ng mga statevector na dapat na ortogonal. Ang mga kahihinatnan ng pagpili ng masyadong mataas o masyadong mababang betas ay matutuklasan nang kaunti sa susunod na aralin. Sa ngayon, gagamit lang tayo ng mga ibinigay sa ibaba. Magsisimula tayo sa paggamit ng lahat ng zero bilang ating mga parameter. Sa iyong sariling mga kalkulasyon, maaaring gusto mong gumamit ng mas matalinong panimulang parameter batay sa iyong kaalaman sa sistema o sa mga nakaraang kalkulasyon.
k = 3
betas = [33, 33, 33]
x0 = np.zeros(8)
Maaari na tayong patakbuhin ang kalkulasyon:
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
Ang mga halagang nakuha namin mula sa cost function ay humigit-kumulang -6.00, 4.02, at 5.61. Ang mahalagang bagay tungkol sa mga resultang ito ay ang pagtaas ng mga function value. Kung nakakuha tayo ng unang excited state na mas mababa sa enerhiya kaysa sa ating paunang, unconstrained na kalkulasyon ng ground state, ito ay magpapahiwatig ng isang pagkakamali sa ating code.
Ang mga halaga ng x ay ang mga parameter na nagbunga ng statevector na naaayon sa bawat isa sa mga cost (enerhiya) na ito.
Sa huli, dapat nating tandaan na ang lahat ng tatlong minimization ay nagconverge sa loob ng default na toleransya ng klasikal na optimizer (dito COBYLA). Nangangailangan ang mga ito ng 131, 110, at 90 na evaluasyon ng function, ayon sa pagkakasunod.
Quantum Sampling Regression (QSR)
Isa sa mga pangunahing isyu sa VQE ay ang maraming tawag sa isang quantum computer na kinakailangan para makuha ang mga parameter para sa bawat hakbang, halimbawa, , , at iba pa. Lalo itong nagiging problema kapag ang access sa mga quantum device ay nasa pila. Habang maaaring gamitin ang Session para pagsamahin ang maraming iteratibong tawag, ang isang alternatibong pamamaraan ay ang paggamit ng sampling. Sa pamamagitan ng paggamit ng mas maraming klasikal na mapagkukunan, maaari nating makumpleto ang buong proseso ng optimization sa isang tawag lamang. Dito pumapasok ang Quantum Sampling Regression. Dahil ang access sa mga quantum computer ay isang mababang-alok/mataas-demand na kalakal, natutuklasan namin na ang trade-off na ito ay parehong posible at maginhawa para sa maraming kasalukuyang pag-aaral. Ang pamamaraang ito ay gumagamit ng lahat ng magagamit na klasikal na kakayahan habang nino-capture pa rin ang marami sa mga panloob na mekanismo at likas na katangian ng mga quantum computation na hindi lumalabas sa simulation.
Ang ideya sa likod ng QSR ay ang cost function na ay maaaring ipahayag bilang isang Fourier series sa sumusunod na paraan:
Depende sa periodicity at bandwidth ng orihinal na function, ang set na ay maaaring finite o infinite. Para sa layunin ng talakayan na ito, ipapalagay natin na ito ay infinite. Ang susunod na hakbang ay ang pag-sample ng cost function na nang maraming beses para makuha ang mga Fourier coefficient na . Partikular, dahil mayroon kaming na hindi kilala, kakailanganing i-sample ang cost function nang beses.
Kung mag-sample tayo ng cost function para sa na halaga ng parameter na , maaari tayong makakuha ng sumusunod na sistema:
na isusulat natin bilang
Sa practice, ang sistemang ito ay kadalasang hindi consistent dahil ang mga halaga ng cost function na ay hindi eksaktong tumpak. Samakatuwid, kadalasang magandang ideya na i-normalize ang mga ito sa pamamagitan ng pagpaparami ng sa kaliwa, na nagbubunga ng:
Ang bagong sistemang ito ay palaging consistent, at ang solusyon nito ay isang least-squares na solusyon sa orihinal na problema. Kung mayroon tayong na parameter sa halip na isa lamang, at ang bawat parameter na ay may sariling para sa , ang kabuuang bilang ng mga kinakailangang sample ay:
kung saan ang . Higit pa rito, ang pag-aayos ng bilang isang tuneable parameter (sa halip na i-infer ito) ay nagbubukas ng mga bagong posibilidad, tulad ng:
- Over-sampling para mapabuti ang katumpakan.
- Under-sampling para palakasin ang performance sa pamamagitan ng pagbabawas ng runtime overhead o pag-aalis ng mga local minima.
Teoretikal na layout
Ang layout ng QSR ay maaaring ibuod tulad ng sumusunod:
- Maghanda ng reference operators na .
- Pupunta tayo mula sa estado patungo sa reference state na
- I-apply ang variational form na para lumikha ng ansatz na .
- Tukuyin ang bandwidth na nauugnay sa bawat parameter sa ansatz. Sapat ang isang upper bound.
- Mag-bootstrap sa kung mayroon kang katulad na problema (karaniwang nahahanap sa pamamagitan ng klasikal na simulation o sampling).
- I-sample ang cost function na nang hindi bababa sa beses.
- Magpasya kung mag-over-sample o mag-under-sample para balansehin ang bilis kumpara sa katumpakan sa pamamagitan ng pag-aayos ng .
- Kalkulahin ang mga Fourier coefficient mula sa mga sample (ibig sabihin, lutasin ang normalized na linear system ng mga equation).
- Lutasin ang pandaigdigang minimum ng resultang regression function sa isang klasikal na makina.
Buod
Sa araling ito, natuto ka tungkol sa maraming variational instance na magagamit:
- Pangkalahatang layout
- Pagpapakilala ng mga timbang at parusa para ayusin ang cost function
- Pagtuklas ng under-sampling kumpara sa over-sampling para i-trade-off ang bilis kumpara sa katumpakan
Ang mga ideyang ito ay maaaring iangkop para makabuo ng custom variational algorithm na angkop sa iyong problema. Hinihikayat namin kayo na ibahagi ang inyong mga resulta sa komunidad. Tutuklasin ng susunod na aralin kung paano gamitin ang variational algorithm para malutas ng isang application.