Přeskočit na hlavní obsah

Mapování

Podívej se na video o mapování od Olivie Lanes, nebo ho otevři v samostatném okně na YouTube.

Úvod

V této lekci se zaměříme na první a často nejnáročnější krok při definování kvantového programu: mapování problému tak, aby mohl běžet na kvantovém počítači. Tento krok popisuje, jak uživatel začíná s výpočetním problémem a překládá ho do podoby, kterou lze na kvantovém počítači vyřešit.

V lekcích 2 a 3 tohoto kurzu jsme zmínili, že fáze mapování je první ze čtyř celkových kroků v rámci Qiskit patterns. Z těchto lekcí si možná pamatuješ, že cílem mapování je přeložit nebo přepsat výpočetní problém do podoby cenové funkce nebo střední hodnoty, kterou můžeme vyhodnotit pomocí kvantového počítače.

V lekci 3 jsme probrali jeden konkrétní příklad s Max-Cut – výpočetně náročným, ale velmi běžným problémem v kombinatorické optimalizaci. V tom příkladu jsme prošli několika kroky, jak přeložit původní grafový problém do podoby řešitelné na kvantovém počítači. Transformovali jsme problém nalezení maximálního počtu řezů v grafu do cenové funkce, přepsali jsme tuto cenovou funkci jako Hamiltonián a poté jsme připravili zkušební kvantový stav, jehož základní stav odpovídal maximálnímu řezu. Nakonec jsme sestavili kvantový Circuit reprezentující zkušební kvantový stav a přidali jsme specifické Gate, které umožňují stavu vyvíjet se v čase. Tato posloupnost kroků byla celá součástí mapování. Přestože přesné kroky byly jedinečné pro problém Max-Cut, stejný obecný postup lze aplikovat na mnoho dalších aplikací, jako je kvantová chemie a kvantové simulace.

Mapování může být obtížné. Neexistuje jednotná strategie pro každý problém, takže to může být odstrašující. V této lekci se podíváme na některá obecná hlediska mapování a poté se ponoříme do několika reprezentativních příkladů, abychom ukázali různé způsoby, jak problém namapovat na kvantový počítač.

Obecné aspekty

Přestože přesná strategie, kterou použiješ k namapování problému na kvantový počítač, závisí na daném problému, obecně splňují několik hlavních věcí.

Zaprvé si možná budeš muset problém zjednodušit, aby byl proveditelný. To není specifické pro kvantové výpočty – všechny vědecké disciplíny používají zjednodušené modely ke studiu jevů, které je zajímají, přičemž ignorují nepodstatné detaily. Ve fyzice existuje slavné rčení, které tento princip dotahuje do extrémů: „předpokládej sférickou krávu." Systém je často příliš těžké popsat přesně tak, jak vypadá, ale místo toho můžeme udělat rozumná zjednodušení, která mohou stále vést k užitečným řešením. Příklady, jak toho dosáhnout v kvantových výpočtech, zahrnují omezení velikosti nebo hloubky Circuit volbou hardwarově efektivního ansatzu, zkrácení složitých časových evolucí nebo zanedbání členů Hamiltoniánu, které přispívají k finální energii kvantového stavu jen minimálně.

Zadruhé mapování zahrnuje zapsání problému takovým způsobem, aby mu kvantový počítač rozuměl. Často to znamená položit si tyto tři otázky:

  1. Co budou naše Qubit reprezentovat v našem modelu?
  2. Je náš problém spojitý? Protože kvantové počítače jsou digitální, pokud je problém spojitý, budeme muset najít způsob, jak ho diskretizovat.
  3. A konečně, odpovídá topologie problému topologii hardwaru? Pokud ne, možná budeme muset použít některé triky, aby to fungovalo.

Pojďme se věnovat první otázce, která je jádrem mnoha obtíží s porozuměním mapování: Co může Qubit reprezentovat?

Qubit lze použít k reprezentaci mnoha věcí. První, a možná nejjednodušší, je uzel v grafu. Grafy se používají k zobrazení konektivity v mnoha různých typech matematických problémů a uzly jsou základním prvkem reprezentujícím bod nebo entitu v síti. V závislosti na tom, co celá síť představuje, to může být město, osoba nebo feromagnet v mřížce.

Qubit lze také použít k reprezentaci bosonů a fermionů, i když zde upozorňuji, že jeden Qubit se přesně nerovná jednomu bosonu nebo jednomu fermionu – je to o něco složitější, jak si dále probereme v lekci.

Teď se dostáváme k příkladům, které jsou o něco složitější. U těchto modelů už nedává smysl mluvit v pojmech jednotlivých Qubit, místo toho potřebujeme jejich skupiny, aby tvořily něco fyzikálního. Například skupina Qubit, zde znázorněná na těžké šestiúhelníkové topologii, může být použita k reprezentaci geometrických poloh aminokyselin; polymerních řetězců. Dalším příkladem je simulace rozptylu hadronů v modelech fyziky vysokých energií, což lze provést simulací časové evoluce hadronového vlnového balíku. V tomto případě lze registr Qubit použít ke kódování různých stavů kvantového pole; vakuového stavu tohoto pole nebo vlnového balíku šířícího se na tomto vakuu.

Ale v tuto chvíli jsme hovořili dostatečně abstraktně o výzvě před námi. Pojďme se podrobněji podívat na tyto příklady.

Příklady mapování

Max-Cut

Začněme prvním příkladem. Jedním z nejpřímočařejších problémů mapování je ten, který jsme již do hloubky probírali: příklad Max-Cut. V tom problému bylo mapování pro nás poměrně snadné, protože jeden Qubit byl ekvivalentní jednomu uzlu v našem grafu.

Vzpomeň si, že k namapování problému Max-Cut jsme vyjádřili cenovou funkci jako Hamiltonián pomocí formulace QUBO. Cenová funkce Hamiltoniánu je funkce, která kóduje optimální řešení problému do základního stavu Hamiltoniánu. K sestavení cenového Hamiltoniánu jsme použili třídu SparsePauliOp v Qiskitu k určení konektivity našeho grafu a fáze mapování na kvantové operátory byla hotova. A kvantový Circuit byl jednoduše ansatz QAOA. Pro osvěžení paměti se podívej na lekci Utility-scale QAOA, kde to vše procházíme podrobněji.

V té lekci, dokonce i v příkladu se 100 Qubit v utility-scale měřítku, konektivita grafu již odpovídala topologii našeho supravodivého hardwaru. Takže jsme se nemuseli zabývat tím, jak zacházet s různými topologiemi. Ale to není vždy případ. Kdybychom měli složitější nebo hustěji propojený graf, než jsou příklady, které jsme dosud zdůraznili, museli bychom implementovat sérii SWAP Gate, abychom upravili efektivní konektivitu hardwaru. To je řešeno ve druhém kroku Qiskit patterns, transpilaci, ale mělo by se to mít na paměti již ve fázi mapování.

Skládání bílkovin

Teď se podíváme na příklad modelovaný v článku nazvaném „Resource-efficient quantum algorithm for protein folding", jehož autory jsou IBM® a spolupracovníci z University of New South Wales.

Trocha biochemického základu: Bílkoviny jsou makromolekuly složené z dlouhých řetězců aminokyselin. Tyto řetězce se skládají do složitých struktur, které plní celou řadu biologických funkcí. Určení prostorové struktury bílkoviny a pochopení vztahu mezi strukturou a funkcí patří dnes k nejtěžším problémům biochemie. Bílkoviny se skládají do funkčních struktur díky vzájemným interakcím aminokyselin. Jak se struktura kroutí a skládá, aminokyseliny, které jsou v řetězci daleko od sebe, se mohou ocitnout těsně vedle sebe a silně spolu interagovat.

Aby bylo možné tento jev modelovat na kvantovém počítači, potřebujeme Hamiltonián popisující všechny tyto interakce mezi aminokyselinami. Výslednou strukturu pak můžeme předpovědět nalezením stavu, který minimalizuje energii našeho Hamiltoniánu. Tady se zaměříme na to, jak lze řetězce aminokyselin modelovat na kvantovém počítači a jak získat vzdálenosti mezi aminokyselinami potřebné k výpočtu interakčních energií. Tím shromáždíme všechny nezbytné příspěvky k Hamiltoniánu, který je pak možné simulovat na kvantovém počítači.

V reálných bílkovinách mohou aminokyseliny zaujímat plynulé kontinuum poloh. My ale použijeme zjednodušení a omezíme je pomocí mřížkového modelu, kde každá aminokyselina obsazuje bod na mřížce. Autoři použili čtyřstěnnou (tetraedrální) mřížku. Rychlá poznámka: tady kódujeme směr hran, ne samotné uzly jako v případě Max-Cut. Každý Qubit představuje jeden možný krok podél čtyřstěnné mřížky. Sousední místa jsou označena jako A nebo B kvůli jejich různé orientaci v mřížce.

Řetězec bílkoviny je reprezentován jako série otáček nebo směrů na této mřížce. Každý otočení mezi aminokyselinami může mít jeden ze čtyř směrů odpovídajících hranám čtyřstěnu. Tyto čtyři možné otočky jsou zakódovány do čtyř Qubitů ve stavech 0001, 0010, 0100 nebo 1000.

Řetězec aminokyselin na čtyřstěnné mřížce

Podívejme se na příklad z obrázku výše. Umístíme první aminokyselinu do bodu označeného „B" zakroužkovaného červeně na naší čtyřstěnné mřížce. Směr od první k druhé aminokyselině je libovolný, protože celý systém lze vždy otočit tak, aby tato hrana ukazovala libovolným směrem. Druhou aminokyselinu tedy můžeme umístit pod první do bodu označeného „A". Není to tak snadno vidět, ale i cesta od druhé ke třetí je libovolná. Všechny tři volby by vedly k tomu, že máme dvě hrany svírající úhel přibližně 109,5 stupně. Výběr druhé hrany jednoduše určuje orientaci naší bílkoviny v prostoru. Bez újmy na obecnosti proto můžeme zvolit první dvě otočení jako 0001 a 0010.

S těmito zjednodušeními je konfigurace řetězce aminokyselin dána tímto výrazem:

(0001)(0010)(q9q10q11q12)(q4N3q4N2q4N1q4N)(0001)(0010)(q_9 q_{10} q_{11} q_{12}) \cdots (q_{4N-3} q_{4N-2} q_{4N-1} q_{4N})

Zatím jsme namapovali hrany čtyřstěnu na Qubity a náš kvantový Circuit bude ansatz. Teď musíme zvážit, jak zakódovat energii problému do Hamiltoniánu tak, aby jeho základní stav odpovídal optimálnímu způsobu skládání.

Pro každou danou konfiguraci bude existovat přidružená energie vyplývající z interakcí mezi aminokyselinami. Tyto interakce jsou nejsilnější, když jsou dvě aminokyseliny blízko sebe. Je zřejmé, že aminokyseliny sousedící v páteři řetězce spolu budou vždy interagovat. Protože se ale bílkovina může kroutit a skládat, mohou spolu interagovat i jiné páry aminokyselin. Aminokyseliny 10 a 20 mohou být například po složení bílkoviny na sousedních místech. Proto potřebujeme vzorec, který pomocí informací zakódovaných v konfiguračních Qubitech popíše vzdálenost dd mezi aminokyselinami ii a jj. Tak budeme moci na základě jejich vzájemné vzdálenosti určit, jak silně spolu interagují.

Nejdřív zavedeme funkci fa(i)f_a(i), která udává, zda je hrana aa použita pro otočení u aminokyseliny ii. Zde aa může nabývat libovolného ze čtyř možných směrů. Na základě konfigurace, se kterou jsme začali výše, můžeme tyto funkce zapsat takto:

f0(i)=q4i3f1(i)=q4i2f2(i)=q4i1f3(i)=q4i\begin{aligned} f_0(i) &= q_{4i-3} \\ f_1(i) &= q_{4i-2} \\ f_2(i) &= q_{4i-1} \\ f_3(i) &= q_{4i} \end{aligned}

Pak můžeme definovat rozdíl v počtu otočení označených aa na mřížkách A a B od indexu ii po index jj jako Δn\Delta n:

Δna(i,j)=k=ij(1)kfa(k)\begin{aligned} \Delta n_a(i,j) &= \sum\limits_{k=i}^{j}{(-1)^k f_a(k)} \end{aligned}

Proč to děláme? Ukázalo se, že otočení aa z místa A mřížky na místo B je přesně vyrušeno otočením aa z místa B na místo A. Abychom tedy zjistili vzdálenost aminokyseliny na místě ii od aminokyseliny na místě jj, stačí nám najít rozdíl mezi kroky podél hran aa z míst A a B. Protože se místa A a B v páteři bílkoviny nutně střídají, zachycuje to výraz (1)k(−1)^k. Stejný argument platí pro všechny čtyři typy hran. Celková vzdálenost mezi aminokyselinami v krocích čtyřstěnné mřížky se proto dá vypočítat tímto výrazem:

d(i,j)=aΔna(i,j)2=(Δn0(i,j))2+(Δn1(i,j))2+(Δn2(i,j))2+(Δn3(i,j))2\begin{aligned} d(i,j) &= \sum\limits_{a}{||\Delta n_a(i,j)||^2} \\ &= (\Delta n_0(i,j))^2 + (\Delta n_1(i,j))^2 + (\Delta n_2(i,j))^2 + (\Delta n_3(i,j))^2 \end{aligned}

Jak ale z tohoto dlouhého výrazu pro celkovou vzdálenost mezi aminokyselinami dostaneme Hamiltonián? Nejdřív můžeme převést vzdálenost v mřížkových krocích na euklidovský prostor pomocí jednoduché geometrie:

d(i,j)=0rij=0d(i,j)=1rij=1d(i,j)=2rij=2231.63d(i,j)=3rij=1131.91d(i,j)=4rij=432.31d(i,j)=5rij=1932.52\begin{aligned} d(i,j) &= 0 \rightarrow r_{ij} = 0 \\ d(i,j) &= 1 \rightarrow r_{ij} = 1 \\ d(i,j) &= 2 \rightarrow r_{ij} = 2\sqrt\frac{2}{3} \approx 1.63 \\ d(i,j) &= 3 \rightarrow r_{ij} = \sqrt\frac{11}{3} \approx 1.91 \\ d(i,j) &= 4 \rightarrow r_{ij} = \frac{4}{\sqrt{3}} \approx 2.31 \\ d(i,j) &= 5 \rightarrow r_{ij} = \sqrt\frac{19}{3} \approx 2.52 \end{aligned}

Tyto vzdálenosti se pak použijí při výpočtu energie konfigurace bílkoviny. Podle našich potřeb můžeme stanovit mezní vzdálenost, pod níž se dvojice považuje za interagující, nebo použít něco složitějšího.

Nemusí to být na první pohled zřejmé, ale tímto krokem jsme ve skutečnosti dokončili fázi mapování. Stavy Qubitů udávají „otočení" bílkoviny na každém místě mřížky a soubor těchto otočení určuje vzdálenost mezi libovolným párem aminokyselin. Páry různých druhů aminokyselin mají různé interakce – některé přitažlivé, jiné odpudivé. Pokud konfiguraci a vzdálenosti používáš jen k určení toho, zda jsou známé interakce aminokyselin „zapnuté" nebo „vypnuté", jejich síly jsou již vypočteny a lze je jednoduše vyhledat v tabulce, jako je tato:

Vazebné energie aminokyselin

Stručně řečeno, v tomto příkladu slouží Qubity k označení kroků na cestě podél mřížky, které dohromady tvoří řetězec aminokyselin. Simulací jejich ohýbání a skládání snad dosáhneme lepších výsledků v lékařském výzkumu. Přeskočili jsme výpočet několika členů tohoto Hamiltoniánu, protože jsou velmi specifické pro tento konkrétní problém, zatímco definování směrů na mřížce lze použít obecněji. Jakmile máš obecný Hamiltonián, vždy ho budeš chtít převést do Pauliho operátorů, které jsou pro kvantový počítač přirozené. O tom budeme mluvit jako další.

Jordanova-Wignerova transformace

Pojďme se teď podívat, jak přeložit systém subatomárních částic do Pauliho operátorů.

Subatomární částice se dělí do dvou kategorií – bozony a fermiony. Bozony, jako jsou fotony nebo Higgsův boson, se řídí určitým souborem statistických pravidel. Fermiony, jako jsou elektrony nebo neutrina, se řídí jiným souborem. Klíčový rozdíl spočívá v tom, že bozony mohou obsazovat stejný stav – počet bozonů v základním nebo libovolném excitovaném stavu není ničím omezen. Fermiony jsou naopak „sobecké" – každá z nich vyžaduje vlastní kvantový stav.

Bozony mají také celočíselný spin, zatímco fermiony mají poločíselný spin, jako je spin-1/2 elektronu nebo exotičtější částice se spinem 3/2. Abychom mohli popsat systém částic, potřebujeme popis jejich energie. Zaměřme se na fermiony. Můžeme začít Hamiltonovánem zapsaným pomocí toho, čemu říkáme c-operátory. Jedná se o matematické objekty, které odpovídají vytvoření nebo zničení fermionu v určitém stavu systému. Zapisují se jako fif_i^\dagger a fjf_j, kde fif_i^\dagger je operátor vytvářející fermion ve stavu ii a fjf_j je operátor ničící fermion ve stavu jj.

Pamatuj ale, že kvantové počítače obvykle pracují v Qubit bázi se specifickými pravidly pro reprezentaci fermionových systémů; inherentně nepracují v jazyce fermionových operátorů. Abychom tento rozdíl překlenuli, musíme toto fermionové vyjádření zobrazit na Pauliho operátory, které přirozeně odpovídají kvantovým Gate.

Existuje několik takových transformací pro fermiony. Běžnou volbou je Jordanova-Wignerova transformace. Bravyi-Kitaevovo a paritní zobrazení jsou novějšími fermionovými kódováními. Bozónové operátory lze transformovat pomocí Holstein-Primakoffovy transformace nebo přímým zobrazením Fockových stavů do podbáze dostupných bozónových módů, případně jinými způsoby. Aktivně se zkoumají i další kódování. Prozatím se zaměříme pouze na Jordanovu-Wignerovu transformaci.

Jordanova-Wignerova transformace spočívá v zobrazení jednoho fermionu na mnoho Qubitů. Proč nemůžeme jednoduše přiřadit každému elektronu jeden Qubit? Souvisí to s rozlišitelností identických fermionů. Qubity jsou rozlišitelné, ale elektrony nejsou. Například jednotlivé Qubity na libovolném zařízení lze snadno označit a identifikovat. Nerozlišitelnost elektronů nám však neumožňuje je vůbec označovat. Proto musíme operátory označovat podle obsazených orbitalů, jako jsou 1s, 2p, 2p atd., nikoli podle konkrétních elektronů. Každý Qubit tak přibližně plní roli orbitalu v molekule, který je buď obsazený, nebo neobsazený. Způsob, jakým to provést, je ale o něco složitější. Jordanovo-Wignerovo zobrazení sleduje antisymetrii a zajišťuje správnou statistiku celkového fermionového systému. Jordanovo-Wignerovo zobrazení vyjadřuje fermionové operátory pomocí Pauliho operátorů prostřednictvím těchto vztahů:

fj=(k<j(Zk))(Xj+iYj2)fj=(k<j(Zk))(XjiYj2)\begin{aligned} f_j^\dagger &= \Bigl( \prod\limits_{k \lt j}{(-Z_k)} \Bigr)\Bigl( \frac{X_j + i Y_j}{2} \Bigr) \\ f_j &= \Bigl( \prod\limits_{k \lt j}{(-Z_k)} \Bigr)\Bigl( \frac{X_j - i Y_j}{2} \Bigr) \end{aligned}

Jordanovo-Wignerovo zobrazení je konceptuálně jednoduché díky korespondenci jedna ku jedné mezi orbitaly a Qubity. Existují i jiná zobrazení, která dosahují podobného cíle, včetně paritního zobrazení. Výpočet parity stavu vyžaduje zohlednění více Qubitů. V paritním zobrazení (a některých dalších) interpretace, kdy jeden Qubit odpovídá jednomu orbitalu, neplatí. Pojďme si projít jednoduchý příklad. Předpokládejme, že chceme vypočítat jednoQubitovou interakci f0f0f_0^\dagger f_0. Začneme dosazením definic operátorů vytváření a ničení.

f0f0=(k<0(Zk)2)(X0+iY02)(X0iY02)=14(X02+iY0X0X0Y0+Y02)=14(2Ii[X0,Y0])\begin{aligned} f_0^\dagger f_0 &= \biggl( \prod_{k < 0} (-Z_k)^2 \biggr) \biggl( \frac{X_0 + i Y_0}{2} \biggr) \biggl( \frac{X_0 - i Y_0}{2} \biggr) \\ &= \frac{1}{4} (X_0^2 + i Y_0 X_0 - X_0 Y_0 + Y_0^2) \\ &= \frac{1}{4} (2 I - i[X_0,Y_0]) \end{aligned}

Komutátor [X0,Y0]=2iZ0[X_0, Y_0] = 2i Z_0. Výsledný výraz tedy má tvar:

f0f0=12(I+Z0)\begin{aligned} f_0^\dagger f_0 = \frac{1}{2}(I+Z_0) \end{aligned}

Úspěšně jsme tedy přepsali fermionový výraz pomocí Pauliho operátorů, které náš kvantový počítač dokáže zpracovat. Pojďme si rychle ukázat, jak bychom implementovali Jordanovo-Wignerovo zobrazení v Qiskitu. Je důležité rozumět tomu, jak tyto typy transformací fungují, ale bylo by nepraktické provádět je pokaždé ručně – zejména u velkých systémů. Naštěstí nám to Qiskit usnadňuje pomocí funkce SparsePauliOp.

Postup na vysoké úrovni je následující:

  1. Pomocí funkce from_list třídy SparsePauliOp vytvoř operátor identity odpovídající velikosti parametrického prostoru, který chceš zobrazit.
  2. Podle definice operátorů vytváření a ničení uvedených výše použij funkci from_list třídy SparsePauliOp k definování Pauliho operátorů XX, YY, ZZ. Tím zobrazíš fermionové operátory vytváření a ničení na spinové operátory Qubitů a zakóduješ obsazení fermionových stavů do výpočetní báze Qubitů.
  3. Vygeneruj požadovaný Hamiltonián v Pauliho bázi aplikací výše uvedených operátorů na orbitaly zájmu. To obvykle odpovídá vytvoření matice identity reprezentující jádrové (neinteragující) orbitaly a následné aplikaci operátorů vytváření a ničení na aktivní prostor s váhami odpovídajícími specifikům daného problému.

Teď, když plně rozumíme schématu Jordanova-Wignerova zobrazení, podívejme se na složitější příklad. Možná si vzpomeneš na článek s názvem „Scalable Circuits for Preparing Ground States on Digital Quantum Computers: The Schwinger Model Vacuum on 100 Qubits" z předchozí lekce. Článkem se nebudeme podrobně zabývat znovu – zaměříme se jen na Jordanovo-Wignerovo zobrazení, které slouží k vyjádření Hamiltoniánu mřížkových uzlů s LL uzly pro Schwingerův model v nepřítomnosti elektrického pole.

Zde je mnohem těžší přesně určit, co v tomto modelu jeden Qubit představuje, protože teprve celá kolekce Qubitů dohromady tvoří něco fyzikálního – v tomto případě vlnový paket. Místo toho si Qubity zhruba představ jako diskretizované kousky prostoru. Zde LL je objem mřížky, v níž každý prvek (základní buňka) tvoří dva Qubity. Fermionové operátory, které jsme viděli na předchozím snímku, popisují amplitudu vlnové funkce na konkrétním uzlu. Náš Hamiltonián tedy obsahuje tyto fermionové operátory vytváření a ničení. Proto používáme Jordanovu-Wignerovu transformaci k zobrazení těchto operátorů na Pauliho operátory.

H=Hm+Hkin+Hel=m2j=02L1[(1)jZj+I]+12j=02L2(σj+σj+1+h.c.)+g22j=02L2(kjQk)2\begin{aligned} \cal{H} &= \cal{H}_m + \cal{H}_{kin} + \cal{H}_{el} \\ &= \frac{m}{2} \sum\limits_{j=0}^{2L-1} [(-1)^j Z_j + I] + \frac{1}{2} \sum\limits_{j=0}^{2L-2}(\sigma_j^+\sigma_{j+1}^- + h.c.) + \frac{g^2}{2} \sum\limits_{j=0}^{2L-2} \Bigl( \sum\limits_{k \le j} Q_k\Bigr)^2 \end{aligned}

kde σ+\sigma_+ je Pauliho operátor X+iYX + iY a σ\sigma_{-} je XiY.X - iY. Jakmile máme Hamiltonián zapsaný v tomto formátu, nejtěžší část fáze zobrazení je za námi a Hamiltonián lze nyní snadno zapsat do Circuit pomocí Pauliho operátorů.

Závěr

Probrali jsme čtyři příklady toho, jak se konkrétní techniky zobrazení v poslední době používají v oblasti kvantového výpočtu, od nejjednodušších až po aplikaci Jordanovy-Wignerovy transformace na hadronovou dynamiku. Velká část tohoto materiálu je velmi technická a pokud ses s ní ještě nesetkal/a, může působit velmi zastrašujícím dojmem. Čím více času ale věnuješ procvičování, tím snazší to bude – právě proto se tento kurz jmenuje Quantum Computing in Practice. Nejde o něco, co by si člověk mohl hned od začátku jednoduše vzít a rovnou s tím běžet – vyžaduje to studium, přemýšlení a pravděpodobně i chvíle frustrace. Přesto tě vybízím, abys tu nepohodu přijal/a a skutečně zkoumal/a otázky, které vyvstanou, až budeš pokračovat dál. Je to jediný způsob, jak se to naučit.