Simulator kvantnega računalnika
Napišite majhno kvantno vezje v JavaScriptu, ga simulirajte neposredno v brskalniku ter si oglejte diagram, verjetnosti in vektor stanja. Lahko tudi opišete izračun na višji ravni, na primer seštevanje, in opazujete, kako se samodejno pretvori v pravo reverzibilno kvantno vezje.
Model šuma
Pravi kvantni računalniki ne računajo popolno: kubiti so izredno občutljivi in ob vsaki neželeni interakciji z okoljem – toploto, elektromagnetnimi polji ali sosednjimi kubiti – izgubijo del informacije (dekoherenca). Tudi kvantna vrata niso nikoli povsem natančna, napaka pa se lahko pojavi še pri končnem odčitavanju. Simulator privzeto računa idealno; tukaj lahko vključite značilne modele napak in njihov vpliv neposredno opazujete v rezultatih.
Opišite izračun s funkcijami quantum.add, quantum.subtract, quantum.multiply, quantum.divide ali quantum.random. Ctrl+Enter zažene simulacijo. Celotna dokumentacija je na voljo prek gumba »Dokumentacija«.
Ta koda je bila samodejno ustvarjena iz zgornje programske kode in neposredno simulirana. Tukaj jo lahko ročno uredite in znova zaženete.
Ustvarjeno vezje je bilo ročno spremenjeno. Zato je združevanje registrov v diagramu skrito; ponovni zagon zgornje programske kode bo te spremembe prepisal.
Največ 4000 znakov. Razpoložljive metode QuantumCircuit: x, y, z, h, s, sdg, t, tdg, rx, ry, rz, cnot, cz, ccnot (drugo ime: toffoli), swap, measureAll in run. Ctrl+Enter zažene simulacijo.
Diagram vezja
Prikaz korakov kaže verjetnosti in vektor stanja neposredno po izbranih vratih. Spodnji rezultati meritev se vedno nanašajo na celotno vezje.
Format OpenQASM 2.0
OpenQASM 2.0 je razširjen format za izmenjavo kvantnih vezij, ki ga med drugim bere Qiskit. Opomba o vrstnem redu bitov: ta simulator bere q0 kot najpomembnejši levi bit, Qiskit pa q[0] kot najmanj pomemben bit, zato so izmerjeni bitni nizi tam videti zrcaljeni.
Verjetnosti
Verjetnost meritve vsakega možnega bitnega niza, natančno izračunana iz vektorja stanja. Smer branja: q0 je levi, najpomembnejši bit.
Blochove sfere
Stanje vsakega posameznega kubita je prikazano kot puščica v Blochovi sferi: severni pol pomeni |0⟩, južni pol |1⟩, ekvator pa enakomerno uteženo superpozicijo. Če je puščica očitno krajša od polmera sfere, kubit nima lastnega čistega stanja – prepleten je z drugimi kubiti. Kratka puščica je lahko tudi posledica šuma: pri vključenem modelu šuma kubit izgublja koherenco in puščica se krči proti središču. Prikaz sfer s šumom je približek, saj se Blochov vektor povpreči po trajektorijah šuma. V zgornjem prikazu korakov se puščice premikajo od vrat do vrat, vendar samo brez šuma.
Rezultati meritev
Kolikokrat se je posamezni bitni niz dejansko pojavil v simuliranih meritvah. Pri več možnih rezultatih števila naključno odstopajo okoli natančnih verjetnosti.
Vektor stanja
Kompleksne amplitude v ozadju verjetnosti: kvadrat absolutne vrednosti amplitude (realni² + imaginarni²) poda verjetnost pripadajočega stanja.
| Stanje | Realni del | Imaginarni del |
|---|
Osnove: kako deluje?
Od programa do fizičnega kubita
Pravi kvantni računalnik je več kot čip. Klasična krmilna elektronika pretvori vezje v natančne impulze. V prikazanem primeru laserji za hlajenje, ponovno črpanje, krmiljenje kubita in odčitavanje oblikujejo signale na optični mizi ter jih usmerjajo v zaščiteno vakuumsko komoro. Tam spreminjajo in merijo stanje kubita; rezultat meritve se nato vrne v klasični računalnik.
Kubit in bazna stanja
Klasični bit ima vrednost 0 ali 1. Kubit je lahko tudi v superpoziciji dveh baznih stanj |0⟩ in |1⟩. Pri več kubitih vsa bazna stanja zapišemo kot bitni niz, na primer |10⟩ za 2 kubita – pri čemer je q0 v tem simulatorju vedno najpomembnejši levi bit.
Superpozicija
Kubit v superpoziciji hkrati vsebuje komponente več baznih stanj. Opisujejo jih kompleksne amplitude; kvadrat absolutne vrednosti amplitude poda verjetnost, da pri meritvi dobimo pripadajoče stanje.
Blochova sfera
Stanje posameznega kubita lahko prikažemo kot puščico v sferi: severni pol predstavlja |0⟩, južni pol pa |1⟩, vse točke na ekvatorju pa so enakomerno utežene superpozicije – faza določa smer puščice vzdolž ekvatorja. Rotacijska vrata rx, ryin rz vrtijo puščico okoli pripadajoče osi, fazna vrata, kot sta S in T, pa okoli osi Z. Pri prepletenih kubitih se puščica skrči proti središču sfere: posamezni kubit takrat nima več lastnega čistega stanja. Kvantna prepletenost tako postane neposredno vidna.
Meritev in ponovitve
measureAll() izmeri vse kubite hkrati in konča vezje. Ker posamezna meritev poda le en naključni rezultat, se vezje navidezno izmeri tolikokrat, kolikor določa run({ shots }), da se porazdelitev verjetnosti prikaže kot histogram. Natančne verjetnosti se dodatno izračunajo neposredno iz vektorja stanja, neodvisno od naključnosti ponovitev.
Hadamardova vrata
Hadamardova vrata h(q) pretvorijo kubit iz določenega stanja (|0⟩ ali |1⟩) v enakomerno uteženo superpozicijo stanj |0⟩ in |1⟩ – zato pri meritvi dobimo približno 50 % / 50 %.
Fazna vrata: S in T
Vrata s(q) in t(q) ne spremenijo verjetnosti meritve posameznega kubita, temveč zavrtijo le fazo |1⟩ amplitude – S za 90°, T pa za 45°. Učinek postane viden šele v kombinaciji s superpozicijo: med dvema Hadamardovima vratoma faza določa, kako se amplitude seštevajo ali izničujejo (interferenca). Različice z oznako dagger sdg(q) in tdg(q) se zavrtijo v natančno nasprotno smer in razveljavijo S oziroma T. Pravilo je: dve vrati T tvorita S, dve vrati S pa Z.
CNOT in nastanek prepletenosti
Vrata CNOT cnot(control, target) obrnejo ciljni kubit natanko takrat, ko je krmilni kubit v stanju |1⟩. Če je krmilni kubit pred tem v superpoziciji, lahko nastane kvantna prepletenost: kubitov potem ni več mogoče opisati neodvisno, kot v primeru Bellovega stanja. Če je krmilni kubit v določenem baznem stanju, vrata CNOT izvedejo le pogojni obrat bita brez prepletenosti. Vsaka uporaba vrat CNOT torej ne ustvari samodejno prepletenosti.
CZ: simetrični sorodnik vrat CNOT
Vrata CZ cz(a, b) obrnejo predznak amplitude natanko takrat, ko sta oba kubita v stanju |1⟩. Za razliko od vrat CNOT tu ni ločenega krmilnega in ciljnega kubita – vrata delujejo enako na oba, zato so v diagramu prikazana kot dve povezani piki. CZ in CNOT lahko pretvorimo druga v drugo: CNOT je CZ, pri katerem ciljni kubit pred vrati in za njimi preide skozi Hadamardova vrata. CZ je osrednji gradnik številnih algoritmov, na primer Groverjevega iskanja.
Stanje GHZ: prepletenost treh kubitov
Stanje GHZ, poimenovano po Greenbergerju, Hornu in Zeilingerju, razširi načelo Bellovega stanja na tri kubite. Ena Hadamardova vrata in dvoja vrata CNOT prepletejo vse tri kubite, zato meritev da samo |000⟩ ali |111⟩ – nikoli mešanih bitnih nizov. Noben kubit nima več lastnega stanja; informacija obstaja izključno v skupni korelaciji.
Deutschov algoritem: najmanjša kvantna prednost
Deutschov algoritem z enim ovrednotenjem neznanega oraklja odgovori na vprašanje, za katero klasični računalnik potrebuje dve ovrednotenji: ali je funkcija konstantna ali uravnotežena? Vhod pošljemo skozi orakelj v superpoziciji; zaradi interference je odgovor nato nedvoumno zapisan v vhodnem kubitu. Načelo v ozadju, povratni vpliv faze, je jedro skoraj vseh kvantnih algoritmov.
Groverjevo iskanje: ojačevanje amplitud
Groverjevo iskanje najde označeni element v nerazvrščeni množici z bistveno manj poizvedbami kot klasični postopek. Orakelj iskano stanje označi z obratom faze, tukaj prek vrat CZ, difuzijski operator pa nato poveča označeno amplitudo na račun vseh drugih. Pri dveh kubitih zadošča ena iteracija, da zadetek izmerimo s 100-odstotno verjetnostjo.
Reverzibilno seštevanje: od quantum.add() do vezja
Zgornji urejevalnik programske kode pretvori quantum.add({ a, b }) v vezje iz vrat X, CNOT in CCNOT (Toffoli), ki klasično seštevanje poustvari povsem reverzibilno: vsaka vrata je mogoče natančno razveljaviti, ker se nobena informacija ne zavrže. Vrata CCNOT (ccnot(c1, c2, target)) obrnejo ciljni kubit le, ko sta oba krmilna kubita |1⟩ – to zadošča kot gradnik za reverzibilno sestavo poljubnega klasičnega vezja, vključno s polnim seštevalnikom s prenosom. Vhoda A in B se najprej z vrati X nastavita v določeni bazni stanji brez superpozicije. Ker celotno vezje zato prehaja le skozi določena stanja, meritev na koncu poda natanko en rezultat s 100-odstotno verjetnostjo – klasično pravilen seštevek. Zato quantum.add() kljub kvantni simulaciji poda determinističen rezultat namesto več možnih stanj z verjetnostmi pod 100 %.
Odštevanje: seštevanje v obratni smeri
Ker so vsa vrata kvantnega vezja natančno obrnljiva, lahko celotno vezje seštevalnika izvedemo nazaj – seštevanje pa postane odštevanje: quantum.subtract({ a, b }) uporabi natanko vrata seštevalnika v obratnem vrstnem redu in tako izračuna a − b. To ni trik, temveč temeljno načelo reverzibilnega računanja: noben korak ne uniči informacije in vsakega je mogoče razveljaviti. Ta različica zahteva a ≥ b, da rezultat ni negativen.
Množenje: quantum.multiply()
Množenje uporablja iste reverzibilne gradnike kot seštevanje: po šolskem postopku se faktor a večkrat prišteje na zamaknjenih položajih, skladno z nastavljenimi biti faktorja b. Vsako delno seštevanje je isti reverzibilni seštevalnik s prenosom. Ker register rezultata raste s produktom, sta faktorja omejena na 3 bite (0–7); le tako se faktorja, produkt in kubit prenosa prilegajo desetim kubitom simulatorja.
Deljenje: quantum.divide()
Tudi deljenje uporablja le reverzibilne gradnike: quantum.divide({ a, b }) izvede dolgo deljenje z zamaknjenimi, reverzibilnimi odštevanji delitelja od registra ostanka; rezultat sta količnik in ostanek (a = quotient · b + remainder). Ker morajo biti deljenec, delitelj, količnik in kubit izposoje skupaj zajeti v 10 kubitih, je deljenje najbolj omejena operacija: bits(a) + bits(b) + bits(a÷b) + 1 ≤ 10 mora veljati, delitelj pa b mora biti ≥ 1, saj deljenje z nič ni dovoljeno. Če se vnos ne prilega omejitvi, urejevalnik prikaže napako in izračuna ne izvede.
Prava naključnost: quantum.random()
Klasični računalniki ne morejo ustvariti prave naključnosti – njihova »naključna števila« izvirajo iz determinističnih algoritmov oziroma psevdonaključnosti. Kvantni računalnik pa jo lahko: quantum.random({ bits }) vsak bit s Hadamardovimi vrati postavi v superpozicijo 50/50; šele meritev nato na temeljno nepredvidljiv način določi dobljeno vrednost. Na pravi kvantni strojni opremi je to fizično prava naključnost, simulator pa jo posnema s psevdonaključnostjo brskalnika.
Simulator in prava kvantna strojna oprema
Simulator v brskalniku natančno izračuna stanje s klasično aritmetiko s plavajočo vejico. To deluje le zato, ker obravnava zelo majhna vezja z največ 10 kubiti. Pravi kvantni računalniki uporabljajo fizične kubite, so dovzetni za napake, njihova prednost pa se pokaže šele pri precej večjih vezjih, ki jih v praksi ni več mogoče klasično simulirati. To je učno orodje, ne pravi kvantni procesor.