Začínáme s Qiskitem ve třídě
Pro tento modul Qiskit ve třídě musí mít studenti funkční prostředí Python s nainstalovanými těmito balíčky:
qiskitv2.1.0 nebo novějšíqiskit-ibm-runtimev0.40.1 nebo novějšíqiskit-aerv0.17.0 nebo novějšíqiskit.visualizationnumpypylatexenc
Postup instalace a nastavení výše uvedených balíčků najdeš v průvodci Instalace Qiskitu. Aby studenti mohli spouštět úlohy na skutečných kvantových počítačích, musí si vytvořit účet u IBM Quantum® podle kroků popsaných v průvodci Nastavení účtu IBM Cloud®.
Tento modul byl otestován a využil 2 sekundy času QPU na procesoru Heron v2. Jde pouze o odhad. Skutečné využití se může lišit.
# Added by doQumentation — required packages for this notebook
!pip install -q qiskit qiskit-aer qiskit-ibm-runtime
# Uncomment and modify this line as needed to install dependencies
#!pip install 'qiskit>=2.1.0' 'qiskit-ibm-runtime>=0.40.1' 'qiskit-aer>=0.17.0' 'numpy' 'pylatexenc'
Úvod
V modulech Qiskit ve třídě budeš mít příležitost použít kvantový počítač k prozkoumání různých konceptů v oborech blízkých kvantovému počítání, jako jsou kvantová mechanika, informatika, chemie a další. Tento modul slouží jako předpoklad pro všechny ostatní — uvádí základy kvantového počítání a způsob, jak používat Qiskit ke spouštění kvantových obvodů.
Nejprve ti stručně představíme, jak funguje klasický počítač, a pak ukážeme, jak jsou tyto koncepty přizpůsobeny paradigmatu kvantového počítání. Nakonec ti ukážeme, jak tyto koncepty propojit a sestavit a spustit svůj první kvantový obvod.
Klasické počítače
Pravděpodobně znáš základy fungování klasických počítačů, ale zde zdůrazníme několik klíčových vlastností, abychom je pak mohli srovnat s kvantovými počítači.
Základní jednotky informace: bity
Klasické počítače zpracovávají klasické informace a základní jednotkou klasické informace je bit. Jeden bit dokáže uložit odpověď na jednu otázku ano/ne. Dva binární stavy bitu obvykle označujeme jako „0" a „1".
Přehled binárních čísel
Kombinováním bitů umožňuješ uložit více informací. Chceš-li například uložit číslo od 0 do 15, lze to udělat se čtyřmi bity takto:
| 0 = 0000 | 4 = 0100 | 8 = 1000 | 12 = 1100 |
| 1 = 0001 | 5 = 0101 | 9 = 1001 | 13 = 1101 |
| 2 = 0010 | 6 = 0110 | 10 = 1010 | 14 = 1110 |
| 3 = 0011 | 7 = 0111 | 11 = 1011 | 15 = 1111 |
Obecně platí, že při převodu binárního čísla o bitech na běžné číslo o základu 10 násobíš nejméně významný (nejpravější) bit hodnotou , další bit vlevo hodnotou , pak a tak dále, až dosáhneš nejvýznamnějšího (nejlevějšího) bitu, který násobíš hodnotou .
To znamená, že bitů může být v jednom z různých možných stavů.
Ověř si porozumění
Přečti si otázku/otázky níže, zamysli se nad odpovědí a pak klikni na trojúhelník, abys odhalil řešení.
Kolik bitů bys potřeboval k reprezentaci čísla 86? Zapiš bitový řetězec, který toto číslo kóduje v binární soustavě.
Odpověď:
Pamatuj, že bitů ti umožňuje reprezentovat čísla až , takže šest bitů by nás dostalo až na . To nestačí. Přidáme ještě jeden bit, abychom se dostali na . Nyní rozložme 86 na mocniny 2:
Základní operace: hradla
Počítač musí být schopen s bity něco dělat, aby mohl, no, počítat. Binární hradla jsou operace tvořící základní stavební kameny všech složitějších algoritmů a kódů.
Hradlo pro jeden bit:
NOT
Máš-li jen jeden bit, existuje jediný způsob, jak jeho stav transformovat: překlopit stav z 0 na 1 nebo z 1 na 0. Tuto operaci nazýváme hradlo „NOT". Účinek tohoto hradla — a dalších hradel, která probereme níže — lze znázornit takzvanou „tabulkou pravdivosti" se sloupci pro vstupní a výstupní stavy qubitů. Tabulka pravdivosti hradla NOT je:
| Vstup | Výstup |
|---|---|
| 0 | 1 |
| 1 | 0 |
Hradla pro více bitů:
AND
AND je dvoubitové hradlo, které přijme dva vstupní bity a vydá jeden výstupní bit. Výstup je 1, pokud jsou oba vstupní bity 1, jinak 0:
| Vstup | Výstup |
|---|---|
| 00 | 0 |
| 01 | 0 |
| 10 | 0 |
| 11 | 1 |
OR
OR je další dvoubitové hradlo s jedním výstupním bitem. Výstup je 1, pokud je alespoň jeden z bitů roven 1:
| Vstup | Výstup |
|---|---|
| 00 | 0 |
| 01 | 1 |
| 10 | 1 |
| 11 | 1 |
XOR
XOR je zkratka pro „exclusive OR" (výlučné OR) a funguje jako hradlo OR, ale výstup je 1, pouze pokud je právě jeden ze vstupních bitů roven 1. Výstup je 0, pokud jsou oba 1 nebo oba 0:
| Vstup | Výstup |
|---|---|
| 00 | 0 |
| 01 | 1 |
| 10 | 1 |
| 11 | 0 |
Měření:
Při výuce klasického počítání se procesu čtení stavu bitů obvykle nevěnuje příliš pozornosti. Je to proto, že z konceptuálního hlediska není příliš složitý. Bity lze měřit kdykoli před, během nebo po výpočtu, aniž by to ovlivnilo výsledek. V kvantovém počítání to tak není, jak si probereme níže.
Obvody:
Kombinováním výše uvedených hradel lze provádět libovolné operace na počítači. Vezměme si jednoduchý příklad: pomocí hradla AND a XOR lze sestavit obvod polovičního sčítačky, který vypočítá součet dvou bitů. Je znázorněn v diagramu logického obvodu, kde dráty představují bity a hradla operující na bitech jsou zobrazeny jako symboly na příslušných drátech:
Oba bity jsou tedy zkopírovány a přivedeny jak do hradla AND, tak do hradla XOR. Výsledek hradla XOR je „součtový bit" (S), který zůstává na místě jedniček binárního čísla, a výsledek hradla AND je „přenosový bit" (C), což je hodnota dalšího nejvýznamnějšího číslice binárního čísla. Tabulka pravdivosti:
| Součet () | Přenos () | ||
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 1 | 1 | 0 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | 0 | 1 |
Ověř si porozumění
Přečti si otázku/otázky níže, zamysli se nad odpovědí a pak klikni na trojúhelník, abys odhalil řešení.
Ověř, že výše uvedená tabulka pravdivosti dává správný výsledek pro obvod sčítačky. To znamená, pro každou ze čtyř kombinací A a B ověř, že .
Odpověď:
Kvantové počítače
Bity qubity
Stejně jako jsou bity základními jednotkami klasické informace, kvantové bity neboli „qubity" jsou základními jednotkami kvantové informace. Podobně jako klasický bit může být stav qubitu 0 nebo 1, což obvykle označujeme jako a . Na rozdíl od klasického bitu však může být kvantový bit zároveň v superpozici stavů a . Obecně může být qubit v libovolném stavu tvaru:
kde a jsou komplexní amplitudy splňující .
Kvantová fáze
Protože a jsou komplexní, lze každou z nich zapsat jako , kde se nazývá fáze. Pokud celý stav vynásobíme stejným faktorem globální fáze, fyzikálně se nic nezmění — tato situace se nazývá globální fáze a nemá žádné pozorovatelné důsledky.
Z tohoto důvodu je zvykem „vytknout" , čímž dostaneme:
kde je relativní fáze kvantového stavu, která má pozorovatelné důsledky.
Tato fáze hraje v kvantovém počítání velmi důležitou roli a její různé důsledky prozkoumáš v navazujících modulech Qiskit ve třídě.
Více qubitů
Zatímco stav více bitů lze jednoduše vyjádřit jako řetězec 0 a 1, stav více qubitů je o něco složitější kvůli principům superpozice a provázání.
Připomeň si, že bitů může být v jednom z možných stavů od binárního čísla 000...000 do 111...111. Ale teď, díky principu superpozice, může být qubitů v superpozici všech těchto stavů najednou!
Lze to vyjádřit jako
kde, stejně jako v klasickém případě, stav odpovídá stavu, ve kterém je každý qubit ve správné kombinaci 0 a 1, aby dal binární číslo . Tyto stavy jsou označovány jako „výpočetní bázové stavy" kvantového systému. Tříqubitový stav například lze zapsat jako superpozici jeho osmi výpočetních bázových stavů:
Každý qubit v systému je označen indexem až . Konvence je číst stavy qubitů zprava doleva, takže stav qubitu je zcela vpravo a stav qubitu zcela vlevo. Toto se nazývá „little-endian" notace a ze začátku se může zdát neintuitivní, protože jsme zvyklí číst zleva doprava.
Ověř si porozumění
Přečti si otázku/otázky níže, zamysli se nad odpovědí a pak klikni na trojúhelník, abys odhalil řešení.
Na první pohled se může zdát neintuitivní řadit qubity zprava doleva jako v little-endian notaci, ale ve skutečnosti je to velmi logické! Vysvětli proč. (Vzpomeň si na naši diskuzi výše o převodu binárních čísel na čísla o základu 10.)
Odpověď:
Pokud řadíme qubity zprava doleva, takže qubit 0 je zcela vpravo a qubit N-1 zcela vlevo, je logické přiřadit qubit k nejméně významnému bitu, který se násobí hodnotou , a qubit k nejvýznamnějšímu bitu, který se násobí hodnotou .
Provázání
Jak jsme zmínili dříve, další klíčovou vlastností qubitů je, že mohou být navzájem provázány. Vezměme příklad dvouqubitového stavu, kde a :
Stav qubitu 0 tak může být nebo se stejnou pravděpodobností, stejně jako stav qubitu 1. Tyto pravděpodobnosti ale již nejsou na sobě nezávislé. Pokud zjistíme, že stav qubitu 0 je , víme, že qubit 1 bude také ve stavu . To platí bez ohledu na vzdálenost mezi nimi, a proto se akt měření provázaného stavu někdy označuje jako „strašidelné působení na dálku".
Provázání může mít i jiné podoby. Například stav
vždy produkuje opačné výsledky: pokud je jeden qubit naměřen ve stavu , druhý bude zaručeně nalezen ve stavu .
Ověř si porozumění
Přečti si otázku/otázky níže, zamysli se nad odpovědí a pak klikni na trojúhelník, abys odhalil řešení.
Je stav provázaný? Proč ano nebo proč ne?
Odpověď:
Provázaný není. I když jsou výsledky při měření obou qubitů vždy stejné, je to jen proto, že každý qubit je vždy fixován ve stavu . Výsledek měření jednoho qubitu ve skutečnosti nezávisí na druhém — oba jsou prostě vždy .
Obecně platí, že pokud lze stav každého qubitu popsat samostatně a pak je takto vynásobit:
Pak se jedná o „produktový stav" a není provázaný.
Vektorová notace
Pro zobrazení transformace kvantového stavu při různých operacích je často užitečné používat vektory a matice. V tomto znázornění budou naše kvantové stavy vektory a naše kvantová hradla (probíraná v další části) budou matice, které tyto vektory transformují.
Pro jeden qubit jsou vektorové formy stavů zvoleny takto: Tímto způsobem lze libovolný stav zapsat jako
Pro obecný -qubitový stav potřebujeme vektor dimenze , s bázovými stavy uspořádanými tak, jak bys očekával, ve vzestupné binární hodnotě:
S touto vektorovou notací na paměti můžeme představit potřebná kvantová hradla, jejich účinky na kvantové stavy a jejich maticové formy.
Ověř si porozumění
Přečti si otázku/otázky níže, zamysli se nad odpovědí a pak klikni na trojúhelník, abys odhalil řešení.
Pro dvouqubitový systém existují čtyři výpočetní bázové stavy. Zapiš každý z nich jak v braketové, tak ve vektorové notaci.
Odpověď:
Hradla kvantová hradla
Stejně jako klasická hradla NOT, AND, OR a XOR lze kombinovat a sestavovat libovolné klasické obvody, hrají kvantová hradla v kvantovém počítání stejnou roli. Protože qubity mají další kvantově mechanické vlastnosti, jsou kvantová hradla odpovídajícím způsobem bohatší. I když jejich působení na bázové stavy a lze stále popsat tabulkou pravdivosti, tato neposkytuje úplný obraz. Pro kvantová hradla je přirozenější používat maticovou reprezentaci, protože působí také na superpozice bázových stavů.
Níže představíme nejběžnější kvantová hradla a způsob, jakým transformují qubity, se kterými interagují. Kde je to relevantní, propojíme je s klasickými hradly, která znáš.
Jednoqubitová hradla
Hradlo : Toto je kvantový ekvivalent operace NOT. Jeho pravdivostní tabulka vypadá úplně stejně jako klasické hradlo NOT:
| Vstup | Výstup |
|---|---|
A maticová reprezentace:
V Qiskitu vytvoření obvodu s hradlem vypadá takto:
from qiskit import QuantumCircuit
qc = QuantumCircuit(1)
qc.x(0)
qc.draw("mpl")
V tomto velmi jednoduchém diagramu obvodu je qubit reprezentován drátem – černou vodorovnou čárou – a hradlo se zobrazuje jako obdélník na tomto drátu.
Hadamardovo hradlo: Vytváří stav superpozice. Pravdivostní tabulka:
| Vstup | Výstup |
|---|---|
Maticová reprezentace:
Obvod s Hadamardovým hradlem se vytvoří takto:
from qiskit import QuantumCircuit
qc = QuantumCircuit(1)
qc.h(0)
qc.draw("mpl")
Hradlo : Přidává fázový posun ke stavu :
| Vstup | Výstup |
|---|---|
V Qiskitu vytvoření obvodu s hradlem vypadá takto:
qc = QuantumCircuit(1)
qc.z(0)
qc.draw("mpl")
Hradlo : Přidává fázový posun ke stavu :
| Vstup | Výstup |
|---|---|
V Qiskitu vytvoření obvodu s hradlem vypadá takto:
qc = QuantumCircuit(1)
qc.t(0)
qc.draw("mpl")
Vícequbitová hradla
Dvouqubitová hradla mohou připomínat klasická dvoubitová hradla, ale s jednou důležitou výhradou: všechna kvantová hradla musí být reverzibilní. V pojmech lineární algebry to znamená, že jsou reprezentována unitárními maticemi. Dva vstupní qubity se tedy vždy zobrazí na dva výstupní qubity a operaci lze v zásadě vrátit zpět. To je v kontrastu s klasickými hradly, jako je AND nebo OR, která ztrácejí informace a jsou ireverzibilní – ze zadaného výstupu nemůžeš jednoznačně určit vstup.
Hradlo CNOT (Controlled-NOT): Dva vstupní qubity se nazývají „řídicí" (control) a „cílový" (target) qubit. Řídicí qubit zůstává nezměněn, ale jeho stav určuje, co se stane s cílovým qubitem. Pokud je řídicí qubit ve stavu , aplikuje se na cílový hradlo ; pokud je stav řídicího qubitu , žádná změna se neprovede. V níže uvedeném zápisu předpokládejme, že qubit (krajní pravý qubit) je řídicí a qubit (krajní levý qubit) je cílový. Níže je použit zápis
| Vstup | Výstup |
|---|---|
Matice reprezentující tuto operaci je tedy:
qc = QuantumCircuit(2)
qc.cx(0, 1)
qc.draw("mpl")
Toto je první diagram obvodu, který vidíme se dvěma qubity, reprezentovanými dvěma dráty. Hradlo CNOT je implementováno mezi oběma qubity, přičemž je řídicí a je cílový.
Otestuj své porozumění
Přečti si níže uvedené otázky, zamysli se nad odpovědí a pak klikni na trojúhelník, abys odhalil/a řešení.
Většina hradel má v Qiskitu stejnou maticovou formu jako všude jinde. Hradlo CNOT však působí na dva qubity, a najednou se stává problémem konvence pořadí qubitů. Texty, které řadí qubity , ukážou odlišnou maticovou formu svých hradel CNOT. Ověř explicitním maticovým násobením, že výše uvedená matice CNOT má správný účinek na stav
Odpověď:
Hradlo SWAP: Toto hradlo prohodí stavy dvou qubitů. Pravdivostní tabulka:
| Vstup | Výstup |
|---|---|
Matice reprezentující tuto operaci je tedy:
qc = QuantumCircuit(2)
qc.swap(0, 1)
qc.draw("mpl")
Hradlo SWAP lze ve skutečnosti sestavit ze tří hradel CNOT. Abychom viděli jak, můžeme hradlo decompose() v Qiskitu:
qc = QuantumCircuit(2)
qc.swap(0, 1)
qc.decompose().draw("mpl")
Zde poprvé vidíme, jak jsou v diagramu obvodu zobrazena různá hradla. Čteme ho zleva doprava, takže první se aplikuje krajní levé hradlo.
Otestuj své porozumění
Přečti si níže uvedené otázky, zamysli se nad odpovědí a pak klikni na trojúhelník, abys odhalil/a řešení.
Ověř, že výše uvedená kombinace hradel CNOT tvoří dohromady hradlo SWAP. Můžeš k tomu použít maticové násobení nebo jakoukoli jinou metodu.
Odpověď:
S maticovým násobením:
Pomocí pravdivostní tabulky lze sledovat, jak se stavy mění s každým hradlem CNOT. V posledním sloupci by stavy měly odpovídat sloupci „výstup" pravdivostní tabulky hradla SWAP:
| Vstup | CNOT(A,B) | CNOT(B,A) | CNOT(A,B) |
|---|---|---|---|
Hradlo Toffoli (neboli „controlled-controlled-NOT" (CCNOT)): Jde o tříqubitové hradlo. Název „controlled-controlled-NOT" ti možná napoví, jak funguje: jsou tu dva řídicí qubity a jeden cílový qubit, přičemž stav cílového qubitu se překlopí pouze tehdy, jsou-li oba řídicí qubity ve stavu . Zachováváme konvenci pořadí, kterou jsme použili u hradla CNOT:
Pravdivostní tabulka je tedy:
| Vstup | Výstup |
|---|---|
A matice reprezentující tuto operaci je:
qc = QuantumCircuit(3)
qc.ccx(0, 1, 2)
qc.draw("mpl")
Hradlo Toffoli lze také rozložit na hradla CNOT spolu s dalšími hradly. Je to však výrazně složitější než rozklad hradla SWAP, takže ho necháme jako volitelné cvičení na konci modulu k prozkoumání a ověření.
Měření
Měření hrají v kvantových výpočtech zvláštní roli – takovou, která nemá analogii v klasických výpočtech. Zatímco v klasických výpočtech můžeš zkontrolovat své bity v libovolném okamžiku algoritmu, v kvantových výpočtech musíš být velmi opatrný/á s tím, kdy se podíváš na své qubity, protože měření způsobí kolaps jejich stavu a zničí superpozici, která qubitům dává jejich výpočetní složitost.
Konkrétně platí, že u -qubitového kvantového stavu měření způsobí kolaps stavu do jedné ze základních funkcí s pravděpodobností rovnou .
Tento destruktivní účinek měření však není vždy překážkou. Ve skutečnosti je to klíčový zdroj v určitých algoritmech a protokolech, jako je kvantová teleportace a kvantová distribuce klíčů.
V Qiskitu je výsledek měření odeslán do klasického registru, kde je uložen jako klasický bit. Vytvoření obvodu s měřením vypadá takto:
qc = QuantumCircuit(
1, 1
) # the second number is the number of classical bits in the circuit
qc.measure(0, 0)
qc.draw("mpl")
Obvody
Teď, když víme, jak fungují qubity, hradla a měření, pojďme vytvořit a spustit vlastní kvantový obvod! K tomu tě musíme seznámit s užitečným pracovním postupem zvaným Qiskit patterns.
Framework Qiskit patterns
Framework Qiskit patterns je obecný postup pro přístup k problémům a jejich řešení pomocí kvantového počítače. Skládá se ze čtyř kroků:
- Mapování našeho problému na kvantové obvody a operátory
- Optimalizace obvodu pro cílový hardware
- Spuštění na cílovém hardware
- Postprocesing výsledků
Pro ilustraci těchto kroků implementujeme kvantovou verzi výše popsaného obvodu polovičního sčítače.
1. Mapování
Klasický obvod sčítače používá hradla XOR a AND pro výpočet bitů součtu a přenosu. Tato hradla můžeme přizpůsobit kvantovému kontextu a vytvořit tak kvantový poloviční sčítač. Nejprve si připomeňme, že kvantová hradla jsou reverzibilní, takže nemůžeme jednoduše přepsat vstupy. Místo toho zavedeme dva pomocné qubity inicializované na pro uložení výstupů součtu a přenosu. Náš úplný kvantový stav se tedy bude skládat z qubitů a a qubitů součtu a přenosu, které označíme a :
Nyní potřebujeme kvantová hradla, která splní to, co hradla XOR a AND v klasickém obvodu.
Součet:
Pro XOR aplikujeme dvě hradla CNOT, každé s řídicími qubity a a cílovým qubitem pro oba. Pokud jsou a různé, jedno z hradel CNOT překlopí do stavu . Pokud jsou i oba ve stavu , nic se se nestane a zůstane ve stavu . Pokud jsou i oba ve stavu , stav se překlopí dvakrát a vrátí zpět do stavu .
Přenos:
Pro bit přenosu potřebujeme něco, co funguje jako klasické hradlo AND.
Otestuj své porozumění
Přečti si níže uvedené otázky, zamysli se nad odpovědí a pak klikni na trojúhelník, abys odhalil/a řešení.
Projdi si znovu hradla, která jsme probrali, a zkus odhadnout, které kvantové hradlo použijeme místo klasického hradla AND:
Odpověď:
Je to hradlo Toffoli! Pamatuj, hradlo Toffoli neboli controlled-controlled-NOT překlopí cílový stav tehdy a jen tehdy, jsou-li řídicí qubit 0 i řídicí qubit 1 oba ve stavu . Pokud tedy cílový qubit začíná ve stavu , má stejnou funkci jako hradlo AND.
Nyní tedy máme všechny ingredience potřebné k sestavení kvantového obvodu:
# qubits: a, b, sum, carry
qc = QuantumCircuit(4)
# Choose values for A and B:
a = 0
b = 0
# Prepare A and B qubits according to selected values:
if a:
qc.x(0)
if b:
qc.x(1)
# XOR (sum) into qubit 2
qc.cx(0, 2)
qc.cx(1, 2)
# AND (carry) into qubit 3
qc.ccx(0, 1, 3) # a AND b
# measure
qc.measure_all()
qc.draw("mpl")
Výše je diagram obvodu kvantového polovičního sčítače. Jak bylo zmíněno dříve, dráty reprezentují qubity až seřazené shora dolů a registr klasických bitů je spodní dvojlinkový drát. Při čtení zleva doprava pak vidíme, jak jsou hradla aplikována na každý qubit podle toho, kde se na příslušných drátech zobrazují obdélníky. Na konci jsou zobrazena měření. Měření způsobí kolaps stavů qubitů do určitých hodnot nebo a výsledky jsou odeslány do klasického registru.
Jedna jemnost: přestože se diagram obvodu kreslí zleva doprava, při zápisu odpovídajícího maticového výrazu ho musíme číst zprava doleva. Je to proto, že při maticovém násobení operátor nejblíže vektoru stavu působí jako první. Výše uvedený obvod (bez měření) by se tedy zapsal jako:
2. Optimalizace:
Dále musíme obvod optimalizovat pro spuštění na kvantovém hardwaru. Tato optimalizace se provádí pomocí transpileru, který přeloží abstraktní obvod zobrazený výše do instrukcí, kterým kvantový počítač rozumí. Přiřadí logické qubity výše ke skutečným fyzickým qubitům na procesoru a přepíše hradla pomocí vlastní nativní sady hradel, které byly optimalizovány pro spuštění na kvantovém počítači. Nakonec transpiler implementuje také tzv. „potlačení a zmírnění chyb", aby minimalizoval vliv chyb na výsledek. Pro náš velmi jednoduchý obvod to není tak podstatné, ale pokud budeš ve svém kvantovém dobrodružství pokračovat a spouštět složitější obvody, brzy pochopíš hodnotu potlačení a zmírnění chyb. Pokud se o tom chceš dozvědět více, podívej se na kurz Olivie Laneové Quantum Computing in Practice.
Nejprve načteme balíčky potřebné ke komunikaci s kvantovými počítači IBM® a vybereme backend, na kterém poběžíme. Můžeme buď zvolit nejméně vytížený backend, nebo vybrat konkrétní backend, jehož vlastnosti známe.
Níže je kód pro uložení přihlašovacích údajů při prvním použití. Po uložení do svého prostředí tyto informace z notebooku určitě smaž, aby nebyly tvé přihlašovací údaje náhodně sdíleny při sdílení notebooku. Další pokyny najdeš v článcích Set up your IBM Cloud account a Initialize the service in an untrusted environment.
# Load the Qiskit Runtime service
from qiskit_ibm_runtime import QiskitRuntimeService
# Load the Qiskit Runtime service
# Syntax for first saving your token. Delete these lines after saving your credentials.
# QiskitRuntimeService.save_account(channel='ibm_quantum_platform',
# instance = '<YOUR_IBM_INSTANCE_CRN>', token='<YOUR-API_KEY>', overwrite=True, set_as_default=True)
# service = QiskitRuntimeService(channel='ibm_quantum_platform')
# Load saved credentials
service = QiskitRuntimeService()
# Use the least busy backend, or uncomment the loading of a specific backend like "ibm_brisbane".
backend = service.least_busy(operational=True, simulator=False, min_num_qubits=127)
# backend = service.backend("ibm_brisbane")
print(backend.name)
ibm_fez
Nyní použijeme transpiler k optimalizaci obvodu. Úroveň optimalizace můžeme zvolit od 0 (žádná optimalizace) do 3 (nejvyšší optimalizace). Chceš-li zjistit, co každá úroveň obnáší, navštiv průvodce Set transpiler optimization level. Výsledný obvod bude vypadat výrazně jinak než logický obvod, který jsme vytvořili v kroku mapování.
# Transpile the circuit and optimize for running on the quantum computer selected
# Step 2: Transpile
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
target = backend.target
pm = generate_preset_pass_manager(target=target, optimization_level=3)
qc_isa = pm.run(qc)
qc_isa.draw("mpl")
„Sampler" je primitiv navržený k vzorkování možných stavů vznikajících z kvantového obvodu a ke sběru statistik o tom, jaké stavy mohou být naměřeny a s jakou pravděpodobností. Zde importujeme Qiskit Runtime Sampler:
# Load the Runtime primitive and session
from qiskit_ibm_runtime import SamplerV2 as Sampler
sampler = Sampler(mode=backend)
Pokud jsi vyčerpal/a svůj přidělený čas na skutečných kvantových počítačích nebo nemáš připojení k internetu, možná budeš chtít použít simulátor. K tomu spusť níže uvedenou buňku a odkomentuj příslušný řádek v kroku „Execute".
# Load the backend sampler
from qiskit.primitives import BackendSamplerV2
# Load the Aer simulator and generate a noise model based on the currently-selected backend.
from qiskit_aer import AerSimulator
from qiskit_aer.noise import NoiseModel
noise_model = NoiseModel.from_backend(backend)
# Define a simulator using Aer, and use it in Sampler.
backend_sim = AerSimulator(noise_model=noise_model)
sampler_sim = BackendSamplerV2(backend=backend_sim)
# Alternatively, load a fake backend with generic properties and define a simulator.
# backend_gen = GenericBackendV2(num_qubits=18)
# sampler_gen = BackendSamplerV2(backend=backend_gen)
3. Spuštění
Po přípravě obvodu ho nyní můžeme spustit na kvantovém počítači!
job = sampler.run([qc_isa], shots=100)
# job = sampler_sim.run([qc_isa]) # uncomment if you want to run on a simulator
res = job.result()
counts = res[0].data.meas.get_counts()
4. Následné zpracování
Teď jsme připraveni zobrazit výsledky! Zobrazíme histogram 100 vzorků obvodu.
from qiskit.visualization import plot_histogram
print("counts = ", counts)
plot_histogram(counts)
counts = {'0000': 90, '0100': 4, '1100': 3, '0010': 3}
Výše uvedený histogram zobrazuje výsledky měření všech čtyř qubitů na konci obvodu. Ideální kvantový počítač s nulovým šumem by pokaždé naměřil qubity se stejnými hodnotami, ale ve skutečnosti šum způsobí, že některé běhy produkují chyby.
Ověř své porozumění
Přečti si otázku (otázky) níže, přemýšlej o své odpovědi a pak klikni na trojúhelník pro zobrazení řešení.
Použij bitový řetězec s nejvyšším počtem výskytů jako hodnoty , , a a ověř, že kvantový sčítací obvod fungoval.
Odpověď:
Musíme ověřit, že . Pamatuj, že pořadí bitových řetězců odpovídá notaci little-endian, takže se čte jako CSBA.
Z histogramu výše vidíme, že dominantní je bitový řetězec 0000.
Vrať se a změň hodnoty a na a a projdi znovu kroky Qiskit patterns pro opětovné spuštění obvodu. Ověř, že sčítací obvod znovu fungoval.
Odpověď:
Měl/a bys získat histogram s dominantním bitovým řetězcem 1011:
Jednou z přidaných vlastností kvantového polovičního sčítačky oproti klasickému polovičnímu sčítači je, že může pracovat s kvantovými vstupy. To znamená, že může „sčítat" qubity a , i když jsou v superpozičních stavech. V sekci Výzvy níže budeš požádán/a, abys qubity připravil/a v superpozicích a zjistil/a, co se stane!
Závěr
Tento modul byl navržen tak, aby ti poskytl pevný základní přehled o základních principech kvantového výpočetnictví srovnáním s klasickým výpočetnictvím. Podívali jsme se na klasický poloviční sčítač a ukázali jsme ti, jak přizpůsobit obvod pro spuštění s qubity na kvantovém počítači. Teď jsi připraven/a prozkoumávat ostatní moduly Qiskit ve třídě!
Klíčové pojmy:
- Na rozdíl od klasických bitů, které mohou nabývat pouze hodnot 0 a 1, mohou být qubity také ve stavech superpozice obou hodnot 0 a 1.
- Více qubitů může být v superpozici nad klasicky přípustnými bitovými řetězci nazývanými výpočetní bázové stavy.
- Více qubitů může být provázáno (entanglováno) tak, že stav jednoho závisí na stavu druhého.
- Konvence Qiskit používá notaci little-endian, která umísťuje nejméně významný qubit, , na úplně pravou pozici a nejvýznamnější qubit, , na úplně levou pozici.
- Kvantová hradla jsou reverzibilní operace reprezentované unitárními maticemi, které působí na vektory kvantových stavů. V tomto zápisu matice nejbližší vektoru (která je nejvíce vpravo) působí jako první.
- Měření zhroutí kvantový superpozicový stav do jednoho z jeho klasicky přípustných stavů, přičemž pravděpodobnost odpovídá druhé mocnině amplitudy příslušného výpočetního bázového stavu v superpozici.
- Kvantové obvody jsou často reprezentovány pomocí diagramů kvantových obvodů, kde jsou qubity zobrazeny jako horizontální dráty a kvantová hradla se na těchto drátech objevují zleva doprava.
- Pro spuštění kvantového obvodu používáme čtyři kroky v pracovním postupu Qiskit patterns: Map (mapování), Optimize (optimalizace), Execute (spuštění), Post-process (následné zpracování).
Otázky
Otázky pravda/nepravda
-
Jeden bit v klasickém počítači může obsahovat pouze hodnotu 0 nebo 1.
-
Entanglování znamená, že stav jednoho qubitu je nezávislý na stavu druhého.
-
Kvantová hradla jsou obecně nevratné operace.
-
Konvence Qiskit umísťuje nejméně významný qubit, , na úplně levou pozici.
-
Měření kvantového stavu při opakování vždy dává úplně stejný výsledek.
-
Hadamardovo hradlo vytváří superpozici v jednom qubitu.
-
Kvantové obvody mohou obsahovat operace měření, které zhroutí superpozicový stav do jednoho z klasicky přípustných stavů.
-
Počet možných klasických stavů pro bitů je .
-
Pravděpodobnosti výsledků kvantových měření jsou dány druhými mocninami amplitud klasicky měřitelných bázových stavů.
Otázky s krátkou odpovědí
-
Jaké jsou hlavní rozdíly mezi bitem a qubitem?
-
Co se stane s kvantovým stavem při jeho měření?
-
Proč v Qiskit používáme notaci little-endian?
-
Jaké jsou čtyři kroky v pracovním postupu Qiskit patterns?
Výzvy:
-
V modulu jsme použili sčítač pouze pro sčítání klasicky přípustných stavů pro a . Ale můžeme také připravit a v superpozicích! Uprav kód tak, aby byl každý qubit připraven v rovnoměrné superpozici 0 a 1, pak spusť nový obvod a získej nový histogram. Co vidíš? Vysvětli, co se děje.
-
Rozklad Toffoliho hradla. Pomocí
decompose()ukaž, jak je Toffoliho hradlo rozloženo na jednoqubitová a dvouqubitová hradla, a pak tuto konstrukci ověř maticovým násobením. Měj na paměti, že ačkoli se diagramy obvodů čtou zleva doprava, matice se na kvantové stavy aplikují zprava doleva!