Quantum datamaskinsimulering
Skriv en liten mengde i JavaScript, simuler den direkte i nettleseren, og se kredsdiagram, sannsynligheter og tilstandsvektor. Eller beskriv en beregning på et høyt nivå (f. eks. et tillegg) og se den automatisk om til et mengderom som kan reverseres.
Støymodell
Virkelige kvantedatamaskiner beregner ikke perfekt: qubits er svært følsomme og mister en del av informasjonen (deksel) gjennom enhver uønsket interaksjon med miljøet – varme, magnetiske felt, nabo- qubiter. Gateoperasjoner er aldri perfekt presis, og selv den endelige utløsningen kan gå galt. Denne simulatoren beregner som standard. Her kan du gjøre det mulig å bruke typiske feilmodeller og observere effektene direkte i resultatene.
Beskriv en beregning med kvant. add, kvant. subtract, kvant. multiply, kvant. divide eller kvantum. random. Ctrl+Enter starter simuleringen. Full dokumentasjon med « Dokumentasjon » - knappen.
Denne koden ble automatisk laget fra programkoden over og simulert direkte. Du kan redigere den manuelt her og kjøre den igjen.
Den genererte kretsen ble redigert manuelt. Registeret i diagrammet er derfor skjult. Kjøreprogrammet over på nytt vil overskrive disse endringene.
Høyeste antall 4000 tegn. Tilgjengelige QuantumCircuit- metoder: x, y, z, h, s, sdg, t, tdg, rx, ry, rz, cnot, cz, ccnot (alias: toffoli), skift, målAll, kjør. Ctrl+Enter starter simuleringen.
Kretsdiagram
Stegvisningen viser sannsynligheter og tilstandsvektorer akkurat etter den valgte porten. Resultatene nedenfor gjelder alltid for hele kretsen.
OpenQASM 2.0
OpenQASM 2.0 er det vanligste utvekslingsformatet for kvantekretser og leses av Qiskit, blant annet. Merk på bitrekkefølge: Denne simulatoren leser q0 som den mest signifikante (venstre) biten, mens Qiskit leser q[0] som den minste signifikante – målte bitstrengene vises derfor speilet der.
Sannsynligheter
Sannsynligheten for å måle hver mulig bitstreng, beregnet nøyaktig fra tilstandsvektoren. Leseretning: q0 er den venstre (mest signifikante) biten.
Blochsfære
Tilstanden for hver enkelt qubit som en pil i Bloch- kulen: nordpolen = |0⟩, sørpolen = |1⟩, ekvator = like veid overposisjon. Hvis pilen er tydelig kortere enn kuleradiusen, har qubiten ingen ren tilstand – den er i tillegg til andre qubiter. En kort pil kan også komme fra støy: med en aktiv lydmodell mister qubit- enheten og pilen krymper innover. Støyende kuler er en tilnærming her – Bloch- vektoren er gjennomsnittet over støysporene. Med stegvisningen over, går pilene gjennom porter (bare lydfrie).
Utdata fra skytespillet
Hvor ofte hver bit tekst faktisk skjedde i de simulerte målingene, med flere mulige resultater, sspatter tallene tilfeldig rundt nøyaktig sannsynlighet.
Tilstandsvektor
De komplekse amplitudene bak sannsynlighetene: den kvadratiske størrelsen på en amplitude (real² + imaginære²) gir sannsynligheten for at den er i stand til å bli fylt.
| Tilstand | Virkelig del | Imaginær del |
|---|
Grunnleggende: Hvordan virker det?
Fra program til fysisk qubit
En virkelig kvante kalkulator er mer enn en chip. Klassisk kontrollelektronik omgjør kretsen til nøyaktige pulser. I eksempelet vises, kjøles, pumpes, qubits og utlesningslasere danner disse signalene på en optisk tabell og styrer dem inn i et vakuumkammer som er skylt. Der endrer de og måler qubit- tilstanden, måleresultatet da returneres til den klassiske kalkulatoren.
& Basestatus for Qubit
En klassisk bit er enten 0 eller 1. En qubit kan dessuten finnes i en overposisjon av de to basisstatene |0⟩ og |1⟩Med flere qubiter blir alle basisstater skrevet som en bit tekst, f.eks. |10⟩ for 2 qubits – der q0 i denne simuleringen er alltid den mest signifikante (venstre) bit.
Superposisjon
En qubit i overposisjon samtidig transporterer deler av flere basisstater. Disse komponentene beskrives som komplekse amplituder, den kvadratiske størrelsen av en amplitude gir sannsynligheten for å oppnå den tilsvarende tilstanden i en måling.
Blochsfæren
En enkelt qubits tilstand kan visualiseres som en pil i en kule: den nordlige polen representerer |0⟩, sørpolen |1⟩, og alle punktene på ekvatoren er likevektede overposisjoner – fasen bestemmer retningen langs den der pilen punktene. Rotasjonsportene rx, ry, og rz Roter pilen rundt den tilsvarende aksene, faseporter som S og T roterer den rundt Z- aksene. Med innsmeltede qubiter krymper pilen mot midten av kulen: den enkelte qubit- dem ikke lenger har en ren tilstand – så innsugingen blir bokstavelig talt synlig.
Måle- og skytespill
measureAll() måler alle qubiter på en gang og slutter kredsen. Ettersom en enkelt måling bare gir et tilfeldig resultat, blir kredsen konseptvis målt "skudd" ganger med run({ shots })Så sannsynlighetsfordelingen vises som et histogram. De nøyaktige sannsynlighetene beregnes også direkte fra tilstandsvektoren, uavhengig av tilfeldigheten av skytespillene.
Hadamard- port
Hadamard- porten h(q) tar en qubit fra en bestemt tilstand (|0⟩ eller |1⟩) i en likevekts overstilling av |0⟩ og |1⟩ – så om 50% / 50% når målt.
Faseporter: S og T
Portene s(q) og t(q) endrer ikke målemulighetene for en enkelt mengde, de roterer bare fasen av |1⟩ amplitude – S ved 90°, T ved 45°. De viser bare deres virkning i kombinasjon med overposisjon: mellom to Hadamard-porter, fasen bestemmer hvordan amplituder kombineres eller annulleres (interferens). Doggervariantene sdg(q) og tdg(q) Roter nøyaktig motsatt vei, og angre S og T. Regelen er: to T gjør en S, to S gjør en Z.
CNOT- og betinget innsetting
CNOT-porten cnot(control, target) glider mål qubit nøyaktig når kontroll qubit er i tilstand |1⟩Dersom kontrollkb-et er i overposisjon før, kan dette skape endepunkt – de to kbbitene kan ikke lenger beskrives uavhengig av hverandre, som i eksempelet på signalet om bell-tilstanden. Hvis kontroll-qubiten er i en bestemt basistilstand i stedet, utfører CNOT bare en vilkårlig bitsving uten innsetting. Derfor oppretter ikke hver CNOT automatisk ende.
CZ: den symmetriske slektningen til CNOT
CZ- porten cz(a, b) Snur om amplituden når begge kvadratene er |1⟩I motsetning til CNOT, er det ingen kontroll og ingen mål qubit – porten virker identisk på begge qubiter, som er hvorfor den tegnes som to sammenknyttede prikker i diagrammet. CZ og CNOT kan konverteres til hverandre: en CNOT er en CNOT hvis mål qubit passeres gjennom en Hadamard-port før og etter. CZ er en sentral bygningsblokk for mange algoritmer, som Grover-søk.
GHZ-stat: innkapsling som trio
GHZ-staten (oppkalt etter Greenberger, Horne og Soulinger) utvider Bel-staten til tre qubiter: en Hadamard-port pluss to CNOT-entangler alle tre slik at målingen bare gir |000⟩ eller |111⟩ – aldri blandet bit-strenger. Ingen qubit har en egen tilstand, informasjonen ligger utelukkende i den delte korrelasjonen.
Tysk algoritme: den minste kvantefordelen
Den tyske algoritmen svarer, med en enkelt vurdering av en ukjent eller et aks, et spørsmål som en klassisk kalkulator trenger to vurderinger: Er funksjonen konstant eller balansert? Trikset er å sende inn inputet gjennom eller klappen i superposisjon – takket være interferensen, svaret etterpå kodes entydig i inngangs qubit. Princippet bak det (fase kickback) er i kjernen av nesten alle kvantealgoritmer.
Grover- søk: forsterker amplituder
Grover- søk finner en markert oppføring i et usortert sett med betydelig færre forespørsler enn den som er nødvendig. En elleracle markerer den oppgitte tilstanden med en fase- glide (here via en CZ- port), da diffusionsoperatøren øker den markerte ambisjonen på kostnaden til alle andre. Med 2 qubits er en enkelt iterasjon nok til å måle treffet med 100% sannsynlighet.
Tilføyelse som kan reverseres: fra kvant. add() til en krets
Redigering av kode over, oversatt quantum.add({ a, b }) I en krets av X, CNOT og CCNOT-porter (Toffoli) som reproduserer klassisk tillegg på en ren reversibel måte: Hver port kan unnlates nøyaktig, fordi ingen informasjon blir kastet. En CCNOT-port (ccnot(c1, c2, target)) slipper mål qubit bare når begge kontrollpunktene er |1⟩ – som er tilstrekkelig som en byggeblokk til å bygge om en klassisk kreds, herunder en full tilhenger med bærer. Inndataene A og B er først initialisert som faste basisstater (ingen overposisjon) ved hjelp av X- porter. Fordi hele kretsen derfor bare passerer gjennom definitive tilstander i stedet for overposisjoner, gir målingen ved slutten nøyaktig ett resultat med 100% sannsynlighet – den klassiske korrekte summen. Det er derfor quantum.add() produserer et deterministisk resultat, til tross for mengdesimuleringen, i stedet for flere mulige stater med sannsynlighet under 100%.
Subtraksjon: tilsetting i omvendt form
Fordi hver port i en mengde krets er nøyaktig uvendbar, kan hele tilføyerkretsen utføres bakover – og tillegget blir en subtraksjon: quantum.subtract({ a, b }) bruker nøyaktig portene til tilføyeren i omvendt rekkefølge og beregner dermed en - b. Dette er ikke en gimmick, men det grunnleggende prinsippet om reversibel beregning: ingen datasteg ødelegger informasjon, hver steg kan angres. I denne versjonen kreves en ≥ b slik at det ikke skjer noe negativt resultat.
Multiplikasjon: kvant. multiply ()
Multiplikasjon her kommer fra nøyaktig samme reversible byggeklosser som tillegg: etter skolebokmetoden, legges faktor a flere ganger i skiftende posisjoner – som passer med de sette bitene av faktor b. Hver del av tillegget er samme reversible tilsettingsmiddel til rippevogner; transportstrømmene inn i neste produktbit hver gang. Fordi resultatregisteret vokser med produktet, er faktorene begrenset til 3 bit (0–7) her – bare de som gjør faktor, produkt og bærer qubit sammen i denne simulatorens 10 qubits.
Divisjon: quantum.divide()
Divisjon bruker også bare reversible bygningsblokker: quantum.divide({ a, b }) utfører lang oppdeling basert på skiftede, reversible fradrag fra divisoren fra gjenværende register, resultatet er kvotienten og resten (a = quotient · b + remainderFordi utbytte, divisor, kvotient og en lånekvote skal alle være i samsvar med 10-verdiene, og den del av en slik virksomhet som er mest begrenset: bits(a) + bits(b) + bits(a÷b) + 1 ≤ 10 skal holdes, og divisoren b må være ≥ 1 (ingen divisjon med null). Hvis en innsats ikke passer budsjettet, så melder redigereren den i stedet for å beregne.
Sann tilfeldighet: kvant. random ()
Klassiske datamaskiner kan ikke lage sann tilfeldighet – deres « tilfeldige tall» kommer fra deterministiske algoritmer (pseudorandomitet). En kvantedatamaskin kan: quantum.random({ bits }) setter hver bit inn i en 50/50 overposisjon ved hjelp av en Hadamard-port, og bare målemåten bestemmer hvilken verdi som blir utledet. På ekte kvantemaskin er dette fysisk sann tilfeldighet; denne simulatoren etterligner den med pseudo- tilfeldighet i nettleseren.
Simulator mot ekte kvante- maskinvare
Denne simuleringen beregner tilstanden nøyaktig ved bruk av klassisk flytende punkt aritmetikk i nettleseren – dette virker bare fordi svært små kretser med opp til 10 qubits blir betraktet her. Virkelige kvante datamaskiner bruker fysiske qubiter, er feil- prone (deksjon, støy), og deres fordel viser bare med mye større kretser som ikke lenger kan simuleres klassisk i praksis. Dette verktøyet er et læringsverktøy, ikke en virkelig kvanteprosess.