Simulátor kvantového počítača
Napíšte malý kvantový obvod v JavaScripte, simulujte ho priamo v prehliadači a zobrazte si schému obvodu, pravdepodobnosti aj stavový vektor. Alebo opíšte výpočet na vyššej úrovni (napríklad sčítanie) a sledujte, ako sa automaticky zmení na skutočný reverzibilný kvantový obvod.
Model šumu
Skutočné kvantové počítače nepočítajú dokonale: qubity sú mimoriadne citlivé a pri každej nechcenej interakcii s okolím – teplom, elektromagnetickými poľami či susednými qubitmi – strácajú časť informácie (dekoherencia). Ani operácie hradiel nie sú nikdy úplne presné a zlyhať môže aj záverečné odčítanie. Simulátor predvolene počíta ideálne; tu môžete zapnúť typické modely chýb a priamo sledovať ich vplyv na výsledky.
Opíšte výpočet pomocou quantum.add, quantum.subtract, quantum.multiply, quantum.divide alebo quantum.random. Simuláciu spustíte klávesmi Ctrl+Enter. Úplnú dokumentáciu otvoríte tlačidlom „Dokumentácia“.
Tento kód sa automaticky vygeneroval z kódu programu vyššie a priamo sa odsimuloval. Tu ho môžete ručne upraviť a znovu spustiť.
Vygenerovaný obvod bol ručne upravený. Zoskupenie registrov v schéme je preto skryté; opätovné spustenie kódu programu vyššie tieto zmeny prepíše.
Najviac 4 000 znakov. Dostupné metódy QuantumCircuit: x, y, z, h, s, sdg, t, tdg, rx, ry, rz, cnot, cz, ccnot (alias: toffoli), swap, measureAll, run. Simuláciu spustíte klávesmi Ctrl+Enter.
Schéma obvodu
Krokové zobrazenie ukazuje pravdepodobnosti a stavový vektor presne po vybranom hradle. Výsledky opakovaných meraní nižšie sa vždy vzťahujú na celý obvod.
OpenQASM 2.0
OpenQASM 2.0 je široko používaný výmenný formát kvantových obvodov, ktorý dokáže čítať napríklad Qiskit. Poznámka k poradiu bitov: tento simulátor číta q0 ako najvýznamnejší bit vľavo, kým Qiskit číta q[0] ako najmenej významný bit; namerané bitové reťazce sa preto v Qiskite zobrazia zrkadlovo.
Pravdepodobnosti
Pravdepodobnosť zmerania každého možného bitového reťazca, presne vypočítaná zo stavového vektora. Smer čítania: q0 je najvýznamnejší bit vľavo.
Blochove sféry
Stav každého jednotlivého qubitu ako šípka v Blochovej sfére: severný pól = |0⟩, južný pól = |1⟩ a rovník = superpozícia s rovnakými váhami. Ak je šípka zreteľne kratšia než polomer sféry, qubit nemá vlastný čistý stav – je previazaný s inými qubitmi. Kratšiu šípku môže spôsobiť aj šum: pri aktívnom modeli šumu qubit stráca koherenciu a šípka sa skracuje smerom do stredu. Zašumené sféry sú tu iba aproximáciou, pretože Blochov vektor sa priemeruje cez trajektórie šumu. V krokovom zobrazení vyššie sa šípky pohybujú po jednotlivých hradlách (iba bez šumu).
Výsledky opakovaných meraní
Koľkokrát sa jednotlivé bitové reťazce skutočne objavili v simulovaných meraniach. Pri viacerých možných výsledkoch hodnoty náhodne kolíšu okolo presných pravdepodobností.
Stavový vektor
Komplexné amplitúdy, z ktorých vychádzajú pravdepodobnosti: druhá mocnina absolútnej hodnoty amplitúdy (reálna² + imaginárna²) udáva pravdepodobnosť príslušného stavu.
| Stav | Reálna časť | Imaginárna časť |
|---|
Základy: ako to funguje?
Od programu k fyzickému qubitu
Skutočný kvantový počítač je viac než čip. Klasická riadiaca elektronika prevádza obvod na presné impulzy. V zobrazenom príklade chladiaci, repumpovací, qubitový a odčítací laser tvarujú tieto signály na optickom stole a smerujú ich do tienenej vákuovej komory. Tam menia a merajú stav qubitu; výsledok merania sa potom vráti do klasického počítača.
Qubit a bázové stavy
Klasický bit má hodnotu 0 alebo 1. Qubit môže navyše existovať v superpozícii dvoch bázových stavov |0⟩ a |1⟩. Pri viacerých qubitoch sa všetky bázové stavy zapisujú ako bitový reťazec, napríklad |10⟩ pre 2 qubity, pričom q0 je v tomto simulátore vždy najvýznamnejší bit vľavo.
Superpozícia
Qubit v superpozícii súčasne obsahuje zložky viacerých bázových stavov. Tieto zložky opisujú komplexné amplitúdy; druhá mocnina absolútnej hodnoty amplitúdy udáva pravdepodobnosť získania príslušného stavu pri meraní.
Blochova sféra
Stav jedného qubitu možno znázorniť ako šípku vo sfére: severný pól predstavuje |0⟩, južný pól |1⟩a všetky body na rovníku sú superpozície s rovnakými váhami – fáza určuje smer pozdĺž rovníka, ktorým šípka ukazuje. Rotačné hradlá rx, rya rz otáčajú šípku okolo príslušnej osi, zatiaľ čo fázové hradlá S a T ju otáčajú okolo osi Z. Pri previazaných qubitoch sa šípka skracuje smerom k stredu sféry: jednotlivý qubit už nemá vlastný čistý stav, takže previazanosť sa stáva doslova viditeľnou.
Meranie a opakovania
measureAll() zmeria všetky qubity naraz a ukončí obvod. Keďže jedno meranie poskytne iba jeden náhodný výsledok, obvod sa pomocou run({ shots })koncepčne meria niekoľkokrát („shots“), aby sa rozdelenie pravdepodobnosti zobrazilo ako histogram. Presné pravdepodobnosti sa navyše počítajú priamo zo stavového vektora nezávisle od náhodnosti jednotlivých meraní.
Hadamardovo hradlo
Hadamardovo hradlo h(q) uvedie qubit z jednoznačného stavu (|0⟩ alebo |1⟩) do superpozície stavov |0⟩ a |1⟩ s rovnakými váhami, teda pri meraní približne 50 % / 50 %.
Fázové hradlá: S a T
Hradlá s(q) a t(q) nemenia pravdepodobnosti merania jedného qubitu; otáčajú iba fázu |1⟩ amplitúdy – S o 90°, T o 45°. Ich účinok sa prejaví až v kombinácii so superpozíciou: medzi dvoma Hadamardovými hradlami fáza určuje, ako sa amplitúdy spoja alebo navzájom vyrušia (interferencia). Dagger varianty sdg(q) a tdg(q) otáčajú presne opačným smerom a rušia účinok S a T. Platí: dve hradlá T vytvoria S a dve hradlá S vytvoria Z.
CNOT a podmienená previazanosť
Hradlo CNOT cnot(control, target) preklopí cieľový qubit presne vtedy, keď je riadiaci qubit v stave |1⟩. Ak je riadiaci qubit predtým v superpozícii, môže tak vzniknúť previazanosť – dva qubity už potom nemožno opisovať nezávisle, ako v príklade Bellovho stavu. Ak je však riadiaci qubit v jednoznačnom bázovom stave, CNOT vykoná iba podmienené preklopenie bitu bez previazanosti. Nie každé CNOT teda automaticky vytvorí previazanosť.
CZ: symetrický príbuzný hradla CNOT
Hradlo CZ cz(a, b) obráti znamienko amplitúdy presne vtedy, keď sú oba qubity v stave |1⟩. Na rozdiel od CNOT nemá riadiaci ani cieľový qubit – na oba qubity pôsobí rovnako, preto sa v schéme znázorňuje ako dve spojené bodky. CZ a CNOT možno navzájom previesť: CNOT je CZ, ktorého cieľový qubit prejde pred hradlom aj po ňom cez Hadamardovo hradlo. CZ je základným stavebným prvkom mnohých algoritmov, napríklad Groverovho vyhľadávania.
Stav GHZ: previazanosť trojice
Stav GHZ, pomenovaný podľa Greenbergera, Horna a Zeilingera, rozširuje princíp Bellovho stavu na tri qubity: jedno Hadamardovo hradlo a dve hradlá CNOT previažu všetky tri qubity tak, že meranie poskytne iba |000⟩ alebo |111⟩ – nikdy nie zmiešané bitové reťazce. Žiadny qubit už nemá vlastný stav; informácia spočíva výlučne v spoločnej korelácii.
Deutschov algoritmus: najmenšia kvantová výhoda
Deutschov algoritmus jediným vyhodnotením neznámeho orákula odpovie na otázku, na ktorú klasický počítač potrebuje dve vyhodnotenia: je funkcia konštantná alebo vyvážená? Trik spočíva v odoslaní vstupu cez orákulum v superpozícii – vďaka interferencii je potom odpoveď jednoznačne zakódovaná vo vstupnom qubite. Tento princíp, nazývaný spätný prenos fázy, tvorí jadro takmer všetkých kvantových algoritmov.
Groverovo vyhľadávanie: zosilňovanie amplitúd
Groverovo vyhľadávanie nájde označenú položku v nezoradenej množine s podstatne menším počtom dotazov než klasický postup. Orákulum označí hľadaný stav preklopením fázy (tu hradlom CZ) a difúzny operátor potom zosilní označenú amplitúdu na úkor ostatných. Pri 2 qubitoch stačí jediná iterácia, aby sa hľadaný výsledok zmeral so 100 % pravdepodobnosťou.
Reverzibilné sčítanie: od quantum.add() k obvodu
Editor kódu programu preloží quantum.add({ a, b }) na obvod hradiel X, CNOT a CCNOT (Toffoliho), ktorý vykoná klasické sčítanie čisto reverzibilne: každé hradlo možno presne zvrátiť, pretože sa nestratí žiadna informácia. Hradlo CCNOT (ccnot(c1, c2, target)) preklopí cieľový qubit iba vtedy, keď sú oba riadiace qubity v stave |1⟩ – to postačuje ako stavebný prvok na reverzibilné zostavenie ľubovoľného klasického obvodu vrátane úplnej sčítačky s prenosom. Vstupy A a B sa najprv pomocou hradiel X inicializujú ako jednoznačné bázové stavy (bez superpozície). Keďže celý obvod preto prechádza iba jednoznačnými stavmi, nie superpozíciami, záverečné meranie poskytne presne jeden výsledok so 100 % pravdepodobnosťou – klasicky správny súčet. Preto quantum.add() napriek kvantovej simulácii poskytne deterministický výsledok namiesto viacerých možných stavov s pravdepodobnosťou pod 100 %.
Odčítanie: sčítanie v opačnom smere
Keďže každé hradlo kvantového obvodu je presne invertovateľné, celý sčítací obvod možno vykonať odzadu – a sčítanie sa zmení na odčítanie: quantum.subtract({ a, b }) použije presne tie isté hradlá sčítačky v opačnom poradí a vypočíta a − b. Nejde o trik, ale o základný princíp reverzibilných výpočtov: žiadny krok výpočtu nezničí informáciu a každý krok možno zvrátiť. Táto verzia vyžaduje a ≥ b, aby nevznikol záporný výsledok.
Násobenie: quantum.multiply()
Násobenie tu vzniká z rovnakých reverzibilných stavebných prvkov ako sčítanie: podľa školského postupu sa činiteľ a opakovane sčíta na posunutých pozíciách zodpovedajúcich nastaveným bitom činiteľa b. Každé čiastkové sčítanie používa tú istú reverzibilnú sčítačku s postupným prenosom; prenos zakaždým pokračuje do nasledujúceho bitu súčinu. Keďže výsledkový register rastie so súčinom, činitele sú tu obmedzené na 3 bity (0–7). Iba vtedy sa činiteľ, súčin a qubit prenosu spolu zmestia do 10 qubitov simulátora.
Delenie: quantum.divide()
Aj delenie používa iba reverzibilné stavebné prvky: quantum.divide({ a, b }) vykoná dlhé delenie zostavené z posunutých reverzibilných odčítaní deliteľa od registra zvyšku; výsledkom je podiel a zvyšok (a = quotient · b + remainder). Keďže sa delenec, deliteľ, podiel a qubit výpožičky musia spolu zmestiť do 10 qubitov, delenie je najviac obmedzenou operáciou: bits(a) + bits(b) + bits(a÷b) + 1 ≤ 10 musí platiť a deliteľ b musí byť ≥ 1 (delenie nulou nie je možné). Ak sa vstup nezmestí do limitu, editor to oznámi namiesto vykonania výpočtu.
Skutočná náhodnosť: quantum.random()
Klasické počítače nedokážu vytvárať skutočnú náhodnosť – ich „náhodné čísla“ pochádzajú z deterministických algoritmov (pseudonáhodnosť). Kvantový počítač to dokáže: quantum.random({ bits }) uvedie každý bit pomocou Hadamardovho hradla do superpozície 50/50 a až meranie zásadne nepredvídateľne rozhodne, aká hodnota vznikne. Na skutočnom kvantovom hardvéri ide o fyzikálne skutočnú náhodnosť; tento simulátor ju napodobňuje pseudonáhodnosťou vášho prehliadača.
Simulátor a skutočný kvantový hardvér
Tento simulátor presne počíta stav pomocou klasickej aritmetiky s pohyblivou rádovou čiarkou vo vašom prehliadači. Funguje to iba preto, že sa tu používajú výlučne veľmi malé obvody s najviac 10 qubitmi. Skutočné kvantové počítače používajú fyzické qubity, podliehajú chybám (dekoherencii a šumu) a ich výhoda sa prejaví až pri oveľa väčších obvodoch, ktoré už v praxi nemožno simulovať klasicky. Tento nástroj slúži na učenie, nie je to skutočný kvantový procesor.