ToolDingo

Kvantumszámítógép-szimulátor

Írjon egy kis kvantumáramkört JavaScriptben, szimulálja közvetlenül a böngészőjében, majd tekintse meg az áramköri rajzot, a valószínűségeket és az állapotvektort. Vagy írjon le magas szinten egy számítást – például összeadást –, és figyelje meg, hogyan alakul automatikusan valódi, reverzibilis kvantumáramkörré.

Zajmodell

A valódi kvantumszámítógépek nem működnek tökéletesen: a qubitek érzékenyek, és a környezettel való nem kívánt kölcsönhatások – például hő, elektromágneses mezők vagy szomszédos qubitek – miatt koherenciát veszíthetnek. A kapuműveletek és a végső kiolvasás is hibázhat. A szimulátor alapértelmezésben ideális áramkört számol, itt pedig tipikus zajmodelleket kapcsolhat be és közvetlenül megfigyelheti a hatásukat.

Az itt kiválasztott zajmodell az oldal minden szimulációjára, így a magas szintű programokra és a kézzel írt áramkörökre is érvényes.
%
Kapunként és érintett qubitenként, a kiolvasási modellnél pedig mért bitenként értendő. Válassza ki a vizsgálni kívánt forgatókönyv értékét.

Program kódja

Írjon le egy számítást a quantum.add, quantum.subtract, quantum.multiply, quantum.divide vagy quantum.random használatával. A Ctrl+Enter elindítja a szimulációt. A teljes leírást a „Dokumentáció” gombbal nyithatja meg.

Dokumentáció

Írja le a számítást a szerkesztőben; a program automatikusan valódi, reverzibilis kvantumáramkört készít belőle és szimulálja. Legfeljebb 4000 karakter adható meg. Ctrl + Enter Elkezdi a szimulációt.

KépletLeírásHatárértékek
quantum.add({ a, b })Két szám hozzáadásaMaximális eredmény. 4 bit (0–15)
quantum.subtract({ a, b })Kivonása ≥ b, max. 4 bit
quantum.multiply({ a, b })Szorzás0–7 tényezők (3- bitek)
quantum.divide({ a, b })Osztás (hányados + maradék)b ≥ 1; szigorú korlát: bit(a) + bit(b) + bit(a ÷ b) + 1 ≤ 10
quantum.random({ bits })Valódi kvantum véletlenszámbit 1–10

Példa kiválasztása

Áramkör-kód

Legfeljebb 4000 karakter. Elérhető QuantumCircuit-metódusok: x, y, z, h, s, sdg, t, tdg, rx, ry, rz, cnot, cz, ccnot (más néven toffoli), swap, measureAll, run. A Ctrl+Enter elindítja a szimulációt.

Példa kiválasztása

Alapvető: Hogyan működik?

Kvantumszámítógép-rendszer: a vezérlő számítógép több lézersugarat irányít egy optikai asztalon keresztül a vákuumkamrában lévő qubithez.
A klasszikus vezérlő számítógéptől a lézereken és optikai elemeken át a fizikai qubitig.

A programtól a fizikai qubitig

A valódi kvantumszámítógép több egyetlen chipnél. A klasszikus vezérlőelektronika az áramkört pontos impulzusokká alakítja. A bemutatott példában a hűtő-, újrapumpáló-, qubitvezérlő és kiolvasó lézerek egy optikai asztalon formálják ezeket a jeleket, majd árnyékolt vákuumkamrába irányítják őket. Ott módosítják és mérik a qubit állapotát; a mérési eredmény ezután visszakerül a klasszikus számítógéphez.

Qubit és alapállapotok

A klasszikus bit értéke 0 vagy 1. A qubit e két alapállapot szuperpozíciójában is létezhet: |0⟩ és |1⟩. Több qubittel, minden alap állapot egy bitsztring, pl. |10⟩ két qubit esetén, ahol q0 q0 Ebben a szimulátorban mindig a legjelentősebb (bal) bit.

Szuperpozíció

Szuperpozícióban a qubit egyszerre több alapállapot komponensét hordozza. Ezeket komplex amplitúdók írják le; az amplitúdó abszolútérték-négyzete adja annak valószínűségét, hogy méréskor a megfelelő állapotot kapjuk.

A Bloch gömb

A qubit állapota egy gömbön lévő nyílként szemléltethető: az északi pólus jelöli a |0⟩, a déli pólus |1⟩, az egyenlítő minden pontja pedig egyenlő súlyú szuperpozíciót jelent. A fázis határozza meg, merre mutat a nyíl az egyenlítő mentén. A forgatókapuk rx, ry, és rz a nyilat a megfelelő tengely körül forgatják, az S és T fáziskapuk pedig a Z tengely körül. Összefonódott qubitnél a nyíl a gömb közepe felé rövidül: az egyedi qubitnek már nincs önálló tiszta állapota, így az összefonódás szemléletesen láthatóvá válik.

Mérések és ismétlések

measureAll() egyszerre méri az összes qubitet, majd lezárja az áramkört. Mivel egyetlen mérés csak egy véletlenszerű eredményt ad, az áramkört a gyakorlatban többször futtatjuk, például run({ shots }), így a valószínűségi eloszlás hisztogramként jelenik meg. A pontos valószínűségek közvetlenül az állapotvektorból is kiszámíthatók, a futtatások véletlenszerűségétől függetlenül.

Hadamardi kapu

A Hadamard kapu h(q) egy meghatározott állapotú qubitet (|0⟩ vagy |1⟩) egyenlő súlyú szuperpozícióba alakít: |0⟩ és |1⟩ – mindkettő körülbelül 50%-os valószínűségű.

Fáziskapuk: S és T

A kapuk. s(q) és t(q) önmagában nem változtatja meg egyetlen qubit mérési valószínűségét; csak a |1⟩ amplitúdó fázisát forgatja el – az S 90°-kal, a T 45°-kal. Hatásuk szuperpozícióval együtt válik láthatóvá: két Hadamard-kapu között a fázis dönti el, hogyan erősítik vagy oltják ki egymást az amplitúdók. Az inverz változatok sdg(q) és tdg(q) pontosan az ellenkező irányba forgatnak, így visszavonják az S és T hatását. Két T kapu egy S kapunak, két S kapu pedig egy Z kapunak felel meg.

CNOT és feltételes összefonódás

CNOT kapu cnot(control, target) pontosan akkor fordítja meg a célqubitet, ha a vezérlő qubit ebben az állapotban van: |1⟩. Ha a vezérlő előzőleg szuperpozícióban volt, a művelet összefonódást hozhat létre: a két qubit ezután már nem írható le egymástól függetlenül, ahogy a Bell-állapot példája mutatja. Meghatározott vezérlőállapotnál a CNOT csupán feltételes bitfordítás, összefonódás nélkül. Nem minden CNOT hoz létre automatikusan összefonódást.

CZ: az CNOT szimmetrikus relatív értéke

CZ kapu cz(a, b) az amplitúdó jelét pontosan akkor fordítja, amikor mindkét kvadráns |1⟩. A CNOT kapuval ellentétben itt nincs vezérlő- és célqubit: a kapu mindkét qubitre azonos módon hat, ezért az ábrán két összekötött pontként jelenik meg. A CZ és a CNOT egymásba alakítható: a CNOT olyan CZ, amelynek célqubitje a művelet előtt és után egy Hadamard-kapun halad át. A CZ számos algoritmus, például a Grover-keresés alapvető építőeleme.

GHZ állapot: összefonódás, mint egy trió

A Greenberger, Horne és Zeilinger nevét viselő GHZ-állapot három qubitre terjeszti ki a Bell-állapot elvét: egy Hadamard- és két CNOT-kapu mindhármat összefonja, így a mérés csak ezt adhatja: |000⟩ vagy |111⟩ – vegyes bitláncot soha. Egyik qubitnek sincs már önálló állapota; az információ kizárólag a közös korrelációban rejlik.

Deutsch algoritmus: a legkisebb kvantum előny

A Deutsch-algoritmus egyetlen orákulumkiértékeléssel válaszol arra a kérdésre, amelyhez klasszikusan két kiértékelés kell: a függvény állandó vagy kiegyensúlyozott? A bemenet szuperpozícióban halad át az orákulumon, majd az interferencia egyértelműen a bemeneti qubitbe kódolja a választ. A mögöttes fázis-visszahatás számos kvantumalgoritmus alapelve.

Grover keresés: amplitúdó felerősítése

A Grover-keresés a klasszikus módszernél lényegesen kevesebb lekérdezéssel talál meg egy megjelölt elemet egy rendezetlen halmazban. Az orákulum fázisfordítással – itt CZ kapuval – jelöli a keresett állapotot, a diffúziós operátor pedig a többi rovására felerősíti annak amplitúdóját. Két qubitnél egyetlen iteráció elég ahhoz, hogy a találat 100%-os valószínűséggel mérhető legyen.

Reverzibilis összeadás: a quantum.add() programtól az áramkörig

A fenti programkód szerkesztő fordít quantum.add({ a, b }) az X, CNOT és CCNOT (Toffoli) kapukból olyan áramkört készít, amely teljesen reverzibilis módon valósítja meg a klasszikus összeadást: minden kapu pontosan visszafordítható, mert nem vész el információ. A CCNOT kapu (ccnot(c1, c2, target)) csak akkor fordítja meg a célqubitet, ha mindkét vezérlő qubit |1⟩ állapotú. Ez elegendő építőelem ahhoz, hogy bármely klasszikus áramkört, köztük a teljes összeadót is reverzibilisen felépítsük. Az A és B bemenetet X kapuk határozott alapállapotként inicializálják, szuperpozíció nélkül. Az egész áramkör ezért meghatározott állapotokon halad át, így a végső mérés 100%-os valószínűséggel pontosan egy, klasszikusan helyes összeget ad. Emiatt quantum.add() a kvantumszimuláció ellenére determinisztikus eredményt kapunk, nem pedig több, 100%-nál kisebb valószínűségű lehetséges állapotot.

Kivonás: az összeadó visszafelé

Mivel a kvantumáramkör minden kapuja pontosan visszafordítható, a teljes összeadóáramkör hátrafelé is végrehajtható, és az összeadás kivonássá válik: quantum.subtract({ a, b }) pontosan az összeadó kapuit használja fordított sorrendben, és így a -b-t számítja ki. Ez nem egy trükk, hanem a visszafordítható számítás alapelve: egyetlen számítási lépés sem semmisíti meg az információt, minden lépést vissza lehet csinálni. Ebben a verzióban egy ≥ b szükséges, hogy ne legyen negatív eredmény.

Szorzás: quantum.multiply()

A szorzás ugyanazokat a reverzibilis építőelemeket használja, mint az összeadás. Az írásbeli módszert követve az a tényezőt a b tényező beállított bitjeinek megfelelő eltolt helyeken adja hozzá. Minden részösszeg ugyanazt a reverzibilis, átvitelterjesztő összeadót használja. Mivel a szorzat az eredményregiszterben növekszik, a tényezők itt legfeljebb 3 bitesek (0–7), így a tényező-, szorzat- és átviteli qubitek együtt beleférnek a szimulátor 10 qubites keretébe.

Osztás: quantum.divide()

Az osztás is kizárólag reverzibilis építőelemeket használ: quantum.divide({ a, b }) eltolt, reverzibilis kivonásokból felépített hosszú osztást hajt végre az osztóval a maradékregiszteren; az eredmény a hányados és a maradék (a = quotient · b + remainder). Mivel az osztaléknak, az osztónak, a hányadosnak és és egy kölcsönzési qubitnek együtt kell elférnie 10 qubitben, az osztás a legszigorúbban korlátozott művelet: bits(a) + bits(b) + bits(a÷b) + 1 ≤ 10 értéket kell tartania, az osztó b értékének legalább 1-nek kell lennie, mert nullával nem lehet osztani. Ha egy bemenet túllépi a kubitkeretet, a szerkesztő egyértelmű hibát jelez a számítás elindítása helyett.

Igaz véletlenszerűség: quantum.random ()

A klasszikus számítógépek általában determinisztikus algoritmusokból állítanak elő álvéletlen számokat. A quantum.random() ehelyett kvantumos elvet szemléltet: quantum.random({ bits }) minden bitet Hadamard-kapu helyez 50–50%-os szuperpozícióba, és csak a mérés dönti el alapvetően kiszámíthatatlanul, melyik érték jelenik meg. Valódi kvantumhardveren ez fizikai véletlenszerűség; a böngészős szimulátor ezt álvéletlen mintavétellel utánozza.

Szimulátor vs. valódi kvantum hardver

A szimulátor klasszikus lebegőpontos aritmetikával, a böngészőben számítja ki pontosan az állapotvektort. Ez csak azért lehetséges, mert itt legfeljebb 10 qubites, nagyon kis áramkörök futnak. A valódi kvantumszámítógépek fizikai qubiteket használnak, hibáknak és zajnak vannak kitéve, és előnyük olyan nagyobb áramköröknél jelentkezhet, amelyeket a gyakorlatban már nem lehet klasszikusan szimulálni. Ez tanulási eszköz, nem valódi kvantumprocesszor.

Gyakori kérdések

Ez valódi kvantumszámítógép?
Nem. Ez egy klasszikus állapotvektor-szimulátor, amely a böngészőben, lebegőpontos aritmetikával számítja ki kis, legfeljebb 10 qubites kvantumáramkörök matematikáját. A valódi kvantumhardver fizikai qubiteket használ, és alapvetően másképp működik.
Hol szerepel q0 egy olyan bitláncban, mint a „10”?
A q0 mindig a legnagyobb helyiértékű, bal oldali bit. Két qubit esetén az x(0) ezért a |10⟩ állapotot hozza létre, nem a |01⟩ állapotot.
Mit jelent az, hogy "lövés"?
A futtatások a szimulált ismételt mérések számát jelentik (1–10 000). Minden futtatás véletlenszerűen választ eredményt az állapotvektor pontos valószínűségi eloszlása alapján. A pontos valószínűségek nem függnek a véletlen mintavételtől, ezért külön is megjelennek.
Miért mutat néhány példa hibaüzenetet?
A támogatott hatókör pontosan egy áramkört és a measureAll() után pontosan egy run() hívást enged. Az érvénytelen qubitindexet, a mérés után hozzáadott kaput, az érvénytelen szöget vagy mérési számot és a szintaktikai hibát a program érthető hibaüzenettel elutasítja.
Mit csinál a Hadamard, X és CNOT kapu?
Az X felcseréli a |0⟩ és |1⟩ állapotot. A Hadamard egy alapállapotot egyenlő súlyú szuperpozícióvá alakít. A CNOT csak akkor fordítja meg a célqubitet, ha a vezérlő |1⟩ állapotú; szuperpozícióval együtt összefonódást hozhat létre.
Hogyan jön létre az összefonódás?
Az egyik példa Hadamard-kaput alkalmaz az első qubitre, majd CNOT-kaput. Ezután a két qubit már nem írható le egymástól függetlenül, a mérési eredmények pedig korrelálnak, például csak |00⟩ vagy |11⟩ jelenik meg.