ToolDingo

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.

Velja za vsako simulacijo na tej strani – za izvajanje programa na visoki ravni in za ročno napisana vezja.
%
Uporabi se na posamezna vrata in vključeni kubit oziroma na posamezni odčitani bit pri modelu odčitavanja. Izberite vrednost za scenarij, ki ga želite raziskati.

Programska koda

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«.

Dokumentacija

V urejevalniku opišite izračun – iz njega se samodejno ustvari in simulira pravo kvantno vezje. Največ 4000 znakov. Ctrl+Enter zažene simulacijo.

IzrazOpisOmejitve
quantum.add({ a, b })Seštevanje dveh številRezultat največ 4 bite (0–15)
quantum.subtract({ a, b })Odštevanjea ≥ b, največ 4 bite
quantum.multiply({ a, b })MnoženjeFaktorja 0–7 (3 biti)
quantum.divide({ a, b })Deljenje (količnik + ostanek)b ≥ 1; zelo omejeno: biti(a)+biti(b)+biti(a÷b)+1 ≤ 10
quantum.random({ bits })Pravo kvantno naključno število1–10 bitov

Izberite primer

Koda vezja

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.

Izberite primer

Osnove: kako deluje?

Shematska postavitev kvantnega računalnika: krmilni računalnik usmerja več laserskih žarkov čez optično mizo do kubita v vakuumski komori.
Od klasičnega krmilnega računalnika prek laserjev in optike do fizičnega kubita.

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.

Pogosta vprašanja

Ali je to pravi kvantni računalnik?
Ne. To je klasični simulator vektorja stanja, ki v brskalniku natančno izračuna matematiko majhnega kvantnega vezja z največ 10 kubiti. Prava kvantna strojna oprema uporablja fizične kubite in deluje bistveno drugače.
Kateri kubit je q0 v bitnem nizu, kot je »10«?
q0 je vedno najpomembnejši levi bit. Pri dveh kubitih x(0) zato ustvari stanje |10⟩, ne |01⟩.
Kaj pomenijo »shots«?
To je število ponovljenih simuliranih meritev od 1 do 10.000. Vsaka ponovitev naključno izbere rezultat po natančni porazdelitvi verjetnosti vektorja stanja. Natančne verjetnosti niso odvisne od naključja in so prikazane ločeno.
Zakaj nekateri primeri prikažejo napako?
Dovoljena sta natanko eno vezje in en klic run() za measureAll(). Neveljavni indeksi kubitov, vrata po measureAll(), neveljavni koti ali število ponovitev ter sintaktične napake se zavrnejo z razumljivim sporočilom.
Kaj naredijo Hadamardova, X in CNOT vrata?
Vrata X zamenjajo stanji |0⟩ in |1⟩. Hadamardova vrata bazno stanje pretvorijo v enakomerno uteženo superpozicijo. Vrata CNOT obrnejo ciljni kubit samo, kadar je krmilni kubit v stanju |1⟩. V kombinaciji s superpozicijo lahko ustvarijo kvantno prepletenost.
Kako nastane kvantna prepletenost?
Primer najprej uporabi Hadamardova vrata na prvem kubitu, nato CNOT na drugem. Kubitov ni več mogoče opisati neodvisno, meritev pa poda korelirane rezultate, kot sta |00⟩ in |11⟩.