Kvanttitietokonesimulaattori
Kirjoita pieni kvanttipiiri JavaScriptiin, simuloi se suoraan selaimeesi ja katso piirtokaavio, todennäköisyydet ja tilavektori. Tai kuvaile laskentaa korkealla tasolla (esim. lisäys) ja katso, kun se muuttuu automaattisesti todelliseksi käännettäväksi kvanttipiiriksi.
Melumalli
Todelliset kvanttitietokoneet eivät laske täydellisesti: kvanttitietokoneet ovat äärimmäisen herkkiä ja menettävät osan tiedoistaan (epäyhtenäisyydestä) jokaisen ei-toivotun vuorovaikutuksen kautta ympäristönsä kanssa – lämmön, sähkömagneettiset kentät, naapurin kvantti. Portin toimintakaan ei ole koskaan täysin tarkkaa, ja jopa lopullinen lukema voi mennä pieleen. Simulaattori laskee mieluiten oletuksena; tässä voit ottaa käyttöön tyypilliset virhemallit ja tarkkailla niiden vaikutusta suoraan tuloksiin.
Kuvaile laskentaa kvantti.add:n, kvantti.add:n, kvantti.add:n, kvantti.add:n, kvantti.add:n, kvantti.add:n, kvantti.add:n, kvantti.difful:n tai kvantti.random:n kanssa. Ctrl+Enter aloittaa simulaation. Täysi dokumentointi.Documentation. -nappiin.
Tämä koodi syntyi automaattisesti yllä olevasta ohjelmakoodista ja simuloitiin suoraan. Voit muokata sitä täällä manuaalisesti ja ajaa sen uudelleen.
Luotu piiri muokattiin manuaalisesti. Kuvan rekisteriryhmä on siksi piilotettu; ohjelmakoodin käyttäminen edellä korvaa nämä muutokset.
Enintään 4000 merkkiä. Saatavilla olevat QuantumCircuit -menetelmät: x, y, z, h, s, sdg, t, tdg, rx, ry, rz, cnot, cz, ccnot (alias: toffoli), swap, miteAll, run. Ctrl+Enter aloittaa simulaation.
Piirikaavio
Askelnäkymä näyttää todennäköisyydet ja tilavektorin täsmälleen valitun portin jälkeen. Alla olevat tulokset koskevat aina koko piiriä.
OpenQASM 2.0
OpenQASM 2.0 on laajalti käytetty Quantum-piireissä käytettävä vaihtoformaatti, ja sitä Qiskit muun muassa lukee. Huomaa bittijärjestys: simulaattorissa lukee Q0, joka on merkittävin (vasemmalla) kappale, kun taas Qiskit lukee Q[0], sillä vähiten mitattuja bittijousia näkyy sen vuoksi siellä.
Todennäköisyys
Mahdollisuudet mitata jokainen mahdollinen bittijousi tasan tilavektorilta. Lukusuunta: q0 on vasen (merkittävin) kappale.
Blokkipallot
Kunkin yksittäisen kubitin tila nuolena Blochin pallossa: pohjoinen pylväs = |0⟩, etelänapa = |1⟩, equator = yhtä suuri superpositio. Jos nuoli on selvästi lyhyempi kuin pallon säde, kubiitti ei ole omaa puhdasta tilaansa – se on sotkeutunut muihin kubeihin. Lyhyt nuoli voi tulla myös melusta: aktiivisella melumallilla qubiitti menettää johdonmukaisuutensa ja nuoli kutistuu sisäänpäin. Melualueet ovat tässä lähellä – Bloch vektori on keskiarvona ääniratojen yläpuolella. Edellä olevassa asteella nuolet liikkuvat portin kautta (vain meluton).
Laukauksia
Kuinka usein kukin kappale on todellisuudessa tapahtunut simuloiduissa mittauksissa. Useilla mahdollisilla tuloksilla luvut jakautuvat sattumanvaraisesti tarkkojen todennäköisyyksien ympärille.
Valtiollinen veturi
Todennäköisyysten takana olevat monimutkaiset amplitudit: amplitudin neliömäinen suuruus (todelliset ² + kuvitteellinen ²) antavat mahdollisuuden tilan jatkumiseen.
| Valtio | Oikea osa | Imaginaarinen osa |
|---|
Perusasiat: Miten se toimii?
Ohjelmasta fyysiseen qubiittiin
Todellinen kvanttitietokone on enemmän kuin siru. Klassinen ohjauselektroniikka muuntaa piirin tarkkoiksi pulssiksi. Esimerkissä näkyy, että jäähdytys, repliikki, kqubit ja lukemalaser muokkaavat näitä signaaleja optiselle pöydälle ja ohjaavat ne suojattuun tyhjiökammioon. Siellä ne muuttuvat ja mittaavat kvanttitilan; mittaustulos palaa klassiselle tietokoneelle.
Qubit & bound - statukset
Klassinen bitti on joko 0 tai 1. Kvaliitti voi lisäksi olla olemassa kahden perustilan superpositiossa. |0⟩ sekä |1⟩. Useilla kvubilla kaikki perusteet kirjoitetaan hieman jousena, esim. |10⟩ 2-qubitien osalta – missä q0 tässä simulaattorissa on aina se merkittävin (vasemmalla) biisi.
Superpositio
Supra-asennossa oleva qubiitti kantaa samanaikaisesti useiden perustilojen osia. Näitä komponentteja kuvataan monimutkaisiksi amplitudeiksi; amplitudin neliömäinen suuruus antaa mahdollisuuden saada vastaava tila mittauksessa.
Blochin pallo
Yhden qubitin tila voidaan visualisoida nuoleksi pallossa: pohjoisnapa edustaa |0⟩Etelänapa |1⟩, ja kaikki päiväntasaajan pisteet ovat yhtä painotettuja superasentoja – vaihe määrittää suunnan, jossa nuoli osoittaa. Kiertoportit rx, ry, ja rz Käännä nuoli kulloisenkin akselin ympäri, vaiheportit, kuten S ja T, pyörittävät sitä Z-akselin ympäri. Kiimaisten qubiittien myötä nuoli kutistuu kohti pallon keskustaa: yksittäisellä qubit thenilla ei ole enää omaa puhdasta tilaa – niin kietoutuminen tulee kirjaimellisesti näkyviin.
Mittaus ja laukaukset
measureAll() Mittaa kaikki qubitit kerralla ja lopettaa piirin. Koska yksi mittaus tuottaa vain yhden satunnaisen tuloksen, piirin käsitteellisesti mitataan "shots" kertaa run({ shots }), jotta todennäköisyysjakauma näkyy histogrammina. Tarkat todennäköisyydet ovat lisäksi suoraan valtiovektorista riippumatta laukausten satunnaisuudesta.
Hadamardin portti
Hadamardin portti h(q) "...on qubiittia tietystä tilasta" (|0⟩ tai |1⟩) yhtä painotettuun |0⟩ sekä |1⟩ – siis 50%/50%, kun se mitataan.
Vaiheportit: S ja T
Portit s(q) sekä t(q) Älä muuta yhden qubitin mittaustodennäköisyyttä; ne kiertävät vain |1⟩ amplitudi – S 90°, T 45°. Ne osoittavat vaikutuksensa vain yhdistettynä superpositioon: kahden Hadamardin portin välissä vaihe päättää, kuinka amplitudit yhdistyvät tai peruuntuvat (häiriö). Tikarivarianttien vahvuinen amplitudi on yksi ja toinen. sdg(q) sekä tdg(q) Käännä täsmälleen vastakkaista tietä ja kumoa S ja T. Sääntö on: kaksi T:tä tekee S:n, kaksi S:ää Z:n.
CNOT ja ehdollinen kietoutuminen
CNOT-portti cnot(control, target) Kääntää kohdequbitin tasan, kun ohjausqubit on tilassa |1⟩Jos kontrollikbitti on superasentona etukäteen, se voi aiheuttaa kietoutumisen – kahta kbitiä ei voi enää kuvata toisistaan riippumatta, kuten Bellin osavaltiossa esimerkissä. Jos kontrolliqubiti on sen sijaan tietyssä perustilassa, CNOT suorittaa vain ehdollisen kääntöliikkeen ilman kietoutumista. Joten jokainen CNOT ei automaattisesti luo sotkeutumista.
CZ: CNOT:n symmetrinen sukulainen
Tšekin portti cz(a, b) Kääntää amplitudin merkin täsmälleen, kun molemmat qubitit ovat |1⟩Toisin kuin CNOT, ei ole mitään kontrollia eikä maalikvaaria – portti toimii molemmilla kvabiteilla samalla tavalla, minkä vuoksi se piirretään kahteen toisiinsa liitettyyn pisteeseen. CZ ja CNOT voidaan muuntaa toisikseen: CNOT on CZ, jonka kohdekvabitti kulkee Hadamardin portin läpi ennen ja jälkeen. CZ on monien algoritmeja, kuten Grover-hakua, kuvaava rakennuspalikka.
GHZ-tila: kolmikko sotkeutuu
GHZ-valtio (Named jälkeen Greenberger, Horne ja Zeilinger) laajentaa Bell State -periaatteen kolmeen kwittiin: yksi Hadamardin portti ja kaksi CNOT-järjestelmää sotkevat kaikki kolme niin, että mittaus tuottaa vain tuottoa |000⟩ tai |111⟩ – Ei koskaan sekoittanut bittikieltä. Yhdelläkään qubitilla ei ole enää omaa tilaa, vaan tieto perustuu vain yhteiseen korrelointiin.
Deutsch-algoritmi: pienin kvanttietu
Deutsch-algoritmi vastaa yhdellä ainoalla arvioinnilla tuntemattomasta oraakkelista, johon klassinen tietokone tarvitsee kaksi arviota: onko toiminto vakio vai tasapainoinen? Temppuna on lähettää syöte superasentoon oraakkelin läpi – häiriön ansiosta vastaus on yksiselitteisesti koodattu sisääntulon qubiittiin. Sen taustalla oleva periaate (vaihepotku) on lähes kaikkien kvanttialgoritmien ytimessä.
Grover-haku: vahvistavia amplitudeja
Grover-haku löytää tunnistetun merkinnän valikoimattomaan joukkoon, jossa on huomattavasti vähemmän kyselyitä kuin klassisesti vaaditaan. Oraakkeli merkitsee etsityn tilan vaihekäännöksellä (tässä CZ-portin kautta), ja diffuusiooperaattori vahvistaa merkittyä amplitudia kaikkien muiden kustannuksella. 2 qubitien avulla yksi iterointi riittää mittaamaan osuman 100%-todennäköisyydellä.
Palautuva lisäys: kvantti.add() piiristä
Yllä oleva ohjelmakoodimuokkain kääntää quantum.add({ a, b }) Klassista lisäystä puhtaasti kääntäväksi kierrokseksi toistavien X-, CNOT- ja CCNOT-porttien (Toffoli) piiriin: jokainen portti voidaan tehdä täsmälleen tyhjäksi, koska mitään tietoa ei jätetä pois.ccnot(c1, c2, target)) Kääntää kohdequbitin vain, jos molemmat ohjausqubitit ovat |1⟩ – se riittää rakennuspalkaksi minkä tahansa klassisen piirin rekonstruoimiseen palautuvasti, mukaan lukien täysi lisäosa kantavuudella. A- ja B-tulot alustetaan ensin konkreettisiksi perusmerkeiksi (ei superpositiota) käyttäen X-portteja. Koska koko piiri kulkee siis vain konvergenssien sijaan täsmällisten tilanteiden läpi, mittaus tuo lopulta täsmälleen yhden tuloksen 100%-todennäköisyydellä – klassisesti oikea summa. Siksi quantum.add() Tuottaa determinististä tulosta kvanttisimulaatiosta huolimatta, eikä useita mahdollisia tiloja, joiden todennäköisyys on alle 100%.
Subtraction: lisäys kääntöpuolella
Koska jokainen kvanttipiirin portti on täysin muuttumaton, täydellinen lisäpiiri voidaan suorittaa takaperin – ja lisäyksestä tulee vähennys: quantum.subtract({ a, b }) Käytät täsmälleen lisäosan portteja käänteisessä järjestyksessä ja lasket siten − b. Tämä ei ole kikka vaan käänteisen laskutavan perusperiaate: mikään laskentavaihe ei tuhoa tietoa, jokainen askel voidaan peruuttaa. Tässä versiossa vaaditaan ≥ b, jotta ei tapahdu negatiivista tulosta.
Kertominen: kvantti.kerrannais()
Tässä tulee esiin täysin samoja korvaavia rakennuspalikoita kuin lisänä: koulukirjan menetelmän mukaisesti tekijä a lisätään useaan kertaan siirrettyihin asemiin – tekijän b settien kanssa samaan aikaan. Jokainen osittainen lisäys on sama, joka on palautuva repliikkikantoaine; kanto virtaa seuraavaan tuotteeseen joka kerta. Koska tulosrekisteri kasvaa tuotteen mukana, tekijät rajoittuvat 3 bittien (0–7) tässä – vain n do tekijä, tuote ja kuljettaa qubit yhdessä mahtuvat tämän simulaattorin 10 qubitit.
Jakolasku: quantum.divide()
Jaottelussa käytetään myös vain korjattavia rakennusosia: quantum.divide({ a, b }) Suorittaa pitkän jaon, joka perustuu siirtyviin, korvaaviin divistorin vähennysten vähennyksiin muusta rekisteristä; tuloksena on quo-int sekä Loppuosa (a = quotient · b + remainder) Koska osinko, jakaja, Quocint sekä Lainanottoqubitin täytyy sopia 10 qubitiin, jako on voimakkaimmin rajoitettu operaatio: bits(a) + bits(b) + bits(a÷b) + 1 ≤ 10 täytyy pitää kiinni, ja jakaja b Täytyy olla ≥ 1 (ei jakoa nollalla). Jos syöttö ei sovi budjettiin, editori ilmoittaa sen tietojenkäsittelyn sijaan.
Todellinen sattumanvaraisuus: kvanttime.random()
Klassiset tietokoneet eivät pysty luomaan todellista sattumanvaraisuutta – niiden "satunnaisluvut" tulevat deterministisistä algoritmeista (pseudo-satunnaisuus). Kvanttitietokone voi: quantum.random({ bits }) Laskee jokaisen palan 50/50-superasetteluun Hadamardin portin avulla, ja vain mittaus päättää – lähtökohtaisesti arvaamattomasti – mikä arvo tulee esiin. Todellisesta kvanttilaitteistosta tämä on fyysisesti todellista sattumanvaraisuutta; tämä simulaattori jäljittelee sitä selaimesi näennäisen sattumanvaraisuuden avulla.
Simulaattori vs. todellinen kvanttilaitteisto
Tämä simulaattori laskee tilan täsmälleen klassisella kelluntapistearitmeettiikalla selaimessasi – tämä toimii vain siksi, että tässä tarkastellaan vain hyvin pieniä piirejä, joissa on jopa 10 qubitit. Todelliset kvanttitietokoneet käyttävät fyysisiä qubitioita, ovat virhealttiita (dekoheerinen, melu), ja niiden etuna on vain paljon suurempia piirejä, joita ei enää voida simuloida klassisesti. Tämä työkalu on oppimistyökalu, ei todellinen kvanttiprosessori.