Rularea circuitelor cuantice
Urmărește videoclipul despre circuite cuantice și primitive prezentat de Olivia Lanes sau deschide videoclipul într-o fereastră separată pe YouTube.
Prezentarea lecției
Această lecție va fi o privire de ansamblu asupra elementelor de bază ale rulării unui calcul cuantic la scară utilitară, de la hardware-ul cuantic utilizat până la principiile de luat în considerare atunci când proiectezi un circuit cuantic. Ideal, la sfârșitul acestei lecții, vei ști:
-
Ce sunt, de fapt, calculatoarele cuantice IBM®. Va trebui să cunoști elementele de bază ale caracteristicilor hardware pentru a proiecta în mod optim circuitele tale cuantice să ruleze pe ele.
-
Ce este Qiskit, ce sunt primitivele și cum le putem folosi pentru a crea și executa circuite cuantice.
-
Fluxul de lucru tipic pe care îl urmăm pentru a rula experimente la scară. Acesta include selectarea celor mai bune primitive pentru cazul tău de utilizare, maparea unei probleme la un circuit cuantic și aplicarea atenuării și suprimării erorilor, care ne permit să extragem cât mai multă putere din aceste mașini.
Hardware – procesoare cuantice IBM
Pentru a înțelege cum putem face alegeri optime în proiectarea circuitelor cuantice la scară largă, trebuie să știm câte ceva despre hardware-ul efectiv care va rula aceste circuite. Deci, să discutăm pe scurt despre qubiți fizici și procesoarele cuantice IBM.
Procesoarele cuantice IBM sunt construite folosind qubiți transmon superconductori, care sunt circuite electrice compuse dintr-o joncțiune Josephson și un condensator conectate în paralel. Joncțiunea Josephson este un inductor neliniar creat din două straturi suprapuse de metal superconductor cu o barieră izolatoare între ele. La temperaturi foarte scăzute, electronii din superconductori se împerechează pentru a forma ceea ce este cunoscut sub numele de pereche Cooper. Perechile Cooper pot tunela spontan prin bariera izolatoare dintr-o parte a joncțiunii în cealaltă. Acest comportament de tunelare dă naștere proprietăților neliniare care creează qubiții noștri.
Liniile de transmisie cu microunde sunt fabricate pe cip pentru a livra semnale de microunde qubiților. Când aplicăm impulsuri de microunde bine calibrate — cu frecvență, amplitudine, formă și durată specifice — pe linii, putem face qubiții să efectueze anumite operații. Aceasta formează baza porților noastre cuantice. Fabricăm cipul astfel încât qubiții vecini să fie conectați într-o structură de rețea specifică numită rețea heavy-hex. Această conectivitate — așa-numita topologie — a procesoarelor noastre este un factor important de luat în considerare atunci când proiectezi un circuit, după cum vom discuta mai târziu în lecție.
Instrucțiunile pentru impulsul de microunde merg de la calculatorul tău, prin cloud, și ajung la electronica de control de la temperatura camerei, care interpretează acele instrucțiuni și generează fizic impulsurile. După ce cutiile de control de la temperatura camerei creează impulsurile, acestea călătoresc prin cabluri într-un frigider cu diluție și, în cele din urmă, ajung la cipul cuantic. Semnalul intră în rezonatoare, trece printr-un wirebond și apoi curge pe linia de transmisie până la qubiții noștri.
IBM are zeci de calculatoare cuantice în întreaga lume și am actualizat recent flota noastră pentru a avea exclusiv procesoare mai mari de 100 de qubiți. Unele dintre ele se află într-un centru de date cuantice IBM din nordul statului New York și sunt puse la dispoziție prin cloud pentru uz public — iar altele sunt sisteme dedicate, on-premises, care susțin partenerii din IBM Quantum® Network. Te poți conecta la quantum.cloud.ibm.com pentru a vedea la ce procesoare ai acces.
Fiecare procesor listează trei metrici de performanță, pe care le-am discutat în lecția anterioară, dar ca un memento, acestea sunt: numărul de qubiți, EPLG și CLOPS.
-
Numărul de qubiți. Acesta se explică de la sine: este numărul total de qubiți disponibili pentru utilizare pe un singur procesor cuantic. Pentru o problemă relativ mare, la scară utilitară, va trebui să te asiguri că folosești un procesor cu suficienți qubiți pentru a putea aborda problema. Dar numărul de qubiți singur nu este singurul lucru care contează.
-
EPLG, sau „erori per poartă stratificată" (errors per layered gate). Aceasta este o măsură a calității qubiților și porților cuantice. Măsoară eroarea medie pe care o introduce fiecare poartă într-un circuit care entanglează qubiții vecini într-un lanț de 100 de qubiți. Vrei ca aceasta să fie cât mai mică posibil.
-
CLOPS, sau „operații de strat de circuit pe secundă" (circuit layer operations per second). Aceasta cuantifică viteza procesorului. Măsoară câte straturi dintr-un anumit circuit de benchmarking numit circuit quantum volume poate executa o unitate de procesare cuantică (QPU) per unitate de timp. Cu cât numărul este mai mare, cu atât putem calcula mai rapid.
Importanța fiecăreia dintre aceste metrici variază în funcție de aplicația specifică, iar în lecțiile viitoare vom examina exemple reale pentru a vedea cum fiecare dintre acești factori poate afecta rezultatul unui calcul.
Software: Qiskit și Qiskit Runtime
Pentru a transforma problema ta cuantică în instrucțiuni pentru un calculator cuantic, vei folosi Qiskit, kitul de dezvoltare software open-source conceput pentru lucrul pe calculatoare cuantice, dezvoltat de IBM. Există și Qiskit Ecosystem — o colecție de tutoriale software și funcții care se construiesc pe sau extind funcționalitățile de bază ale Qiskit — și Qiskit Runtime — un serviciu de calcul cuantic și model de programare care permite utilizatorilor să proiecteze și să optimizeze sarcinile lor de lucru cuantice și să le execute eficient folosind Qiskit Runtime Primitives.
O primitivă este un bloc de construcție mic pe care îl poți folosi pentru a proiecta un circuit sau un job mai mare. Cele două primitive care sunt cele mai importante pentru noi sunt sampler și estimator, despre care vom discuta mai în detaliu în curând.
Odată cu lansarea recentă a Qiskit v1.0, Qiskit a devenit mai performant și mai stabil ca niciodată. Deci, pentru cei care abia încep, ați venit la momentul potrivit! Pentru cei care sunt deja familiarizați cu Qiskit, va trebui să descărcați și să reinstalați cea mai nouă versiune. Pentru un ghid complet de instalare, vizitați ghidul Instalare Qiskit.
Circuite Cuantice
Acum suntem pregătiți să discutăm despre fundația programelor cuantice: circuitele cuantice. Această secțiune va servi doar ca un memento — dacă nu ești familiarizat cu circuitele cuantice, îți recomandăm să înveți despre ele mai în profunzime vizitând lecția Circuite Cuantice din cursul „Bazele informației cuantice" înainte de a continua.
Un circuit cuantic este o rețea de porți cuantice și măsurători legate prin fire care reprezintă qubiți, după cum se arată mai jos. Circuitele cuantice pot fi citite ca o partitură muzicală, de la stânga la dreapta, începând de la momentul 0 pe stânga. Qubiții virtuali — cei care nu au fost încă atribuiți unui qubit fizic pe un procesor — sunt listați în ordine crescătoare de sus în jos.
Porțile sunt reprezentate prin simboluri diferite pe firele qubitului (qubiților) implicat(ți). Porțile cu un singur qubit — cum ar fi o poartă Hadamard, reprezentată mai jos (caseta cu H) — afectează doar qubit-ul pe al cărui fir este plasată. Porțile cu mai mulți qubiți — cum ar fi o poartă CNOT, de asemenea prezentată mai jos (semnul plus în cerc cu o linie conectată la q0) — afectează doi sau mai mulți qubiți. În poarta CNOT reprezentată, starea lui q1 se schimbă în funcție de starea lui q0. După ce toate porțile sunt efectuate, putem măsura qubiții, indicat prin porțile negre cu simbolul de măsurare. Rezultatele măsurătorilor sunt scrise în registrele clasice, magistrala „meas" cu linii duble de mai jos.
O caracteristică importantă a unui circuit este adâncimea sa. Adâncimea unui circuit cuantic este numărul minim de „straturi" de porți cuantice, executate în paralel, necesare pentru a finaliza circuitul. Porțile cuantice pot fi executate în paralel (în același timp) ori de câte ori nu au qubiți comuni. Dar dacă două sau mai multe porți acționează pe același qubit, nu le putem efectua în paralel — ele trebuie efectuate în două straturi separate, unul după celălalt.
Există o altă modalitate, mai puțin evidentă, de a determina adâncimea unui circuit, jucând un fel de joc. Regulile sunt simple: pornind de la orice fir de qubit din stânga, trebuie să mergi spre dreapta și să numeri numărul de porți pe care le întâlnești în drum. Poți sări pe un fir vecin doar atunci când acesta este conectat la firul tău actual printr-o poartă cu mai mulți qubiți. Scopul este să maximizezi numărul de porți pe care le întâlnești pe parcursul traseului tău. Acest număr maxim este, de asemenea, adâncimea circuitului.

Deoarece porțile cuantice necesită timp pentru a fi implementate, adâncimea unui circuit corespunde aproximativ cu timpul necesar unui calculator cuantic pentru a executa circuitul. Unele mașini sunt mai potrivite pentru circuite cu adâncime mare decât altele, datorită timpilor de decoerență ai qubiților de pe procesor. Deci, trebuie să cunoaștem adâncimea unui circuit pentru a ști dacă poate fi rulat pe un anumit dispozitiv.
Proiectarea unui circuit cuantic: Qiskit patterns
Deci, cum procedăm pentru a proiecta și a rula un circuit cuantic? Cel mai simplu mod de a înțelege un flux de lucru tipic în calculul cuantic este prin intermediul Qiskit patterns. Qiskit patterns reprezintă un cadru conceptual care le permite utilizatorilor să ruleze sarcini de calcul cuantic implementând anumiți pași cu instrumente modulare. Astfel, sarcinile de calcul cuantic pot fi executate de o infrastructură de calcul eterogenă și puternică (CPU/GPU/QPU). Pașii pot fi efectuați ca serviciu și pot include gestionarea resurselor, permițând compozabilitatea fără dificultăți a noilor capabilități pe măsură ce acestea sunt dezvoltate.
Iată pașii principali, pe care utilizatorii experimentați de Qiskit îi vor recunoaște cu siguranță.
-
Map. Acest pas formalizează modul în care luăm o problemă generală care ne interesează și determinăm cum să o mapăm pe un calculator cuantic sub forma unui circuit cuantic.
-
Optimize. În acest pas folosim transpilerul Qiskit pentru a trasa și a poziționa circuitul pe un hardware fizic cu qubiți reali. Aceasta include traducerea porților cuantice individuale în secvențe de operații executate pe hardware, precum și optimizarea poziționării porților.
-
Execute. Primitivele Qiskit Runtime oferă interfața cu hardware-ul IBM Quantum care permite rularea circuitelor transpilate. Acest pas include și utilizarea tehnicilor de suprimare și atenuare a erorilor, care pot fi în mare parte abstractizate față de utilizator.
-
Post-process. În acest pas, datele provenite de la procesorul cuantic sunt prelucrate, furnizând utilizatorului rezultate utile cu privire la problema inițială. Practic, acesta cuprinde orice analiză suplimentară a datelor obținute.
Map
Pasul Map pune în esență întrebarea: „Cum traduc problema mea într-un circuit cuantic care poate fi rulat în mod rezonabil pe hardware cuantic?" Nu există nicio îndoială: maparea este o problemă dificilă și un domeniu activ de cercetare. Nu există o metodă infailibilă care să garanteze succesul, dar există ghiduri recomandate și exemple de probleme pe care știm deja cum să le mapăm.
Primul ghid este să lași calculatoarele clasice să facă orice muncă la care sunt mai bune. Sarcinile ușoare pentru calculatoarele clasice probabil nu vor beneficia de pe urma unui calculator cuantic. Calculatoarele cuantice sunt pentru problemele care sunt dificile clasic. Desigur, dacă este prima ta dată când folosești Qiskit sau un calculator cuantic, nu te îngrijora să găsești o problemă complex din punct de vedere computațional. Descompune-o în probleme mai mici, mai accesibile, pe care poți învăța să le abordezi înainte de a trece direct la un proiect la scară utilă.
Apoi, translatează rezultatele problemei tale pe care vrei să le măsori sau să le înțelegi într-o valoare de așteptare sau o funcție de cost. O funcție de cost este o funcție specifică problemei care definește obiectivul problemei ca ceva ce trebuie minimizat sau maximizat. Poate fi folosită pentru a vedea cât de bine performează o stare de test sau o soluție față de acel obiectiv. Această noțiune poate fi aplicată diverselor aplicații în chimie, machine learning, finanțe, optimizare și altele — nu contează neapărat din ce domeniu abordezi problema.
Ține minte și că hardware-ul pe care îl vei utiliza are o topologie specifică, așa cum am discutat în secțiunea despre hardware. Unii qubiți sunt conectați, alții nu — va trebui să mapezi problema ta pe un circuit care respectă topologia heavy-hex a procesoarelor IBM Quantum.
Deocamdată, cel mai important lucru de reținut este că această etapă necesită practică. Trebuie să ai o bună înțelegere nu doar a problemei tale, ci și a capacităților hardware-ului — și vom parcurge exemple și cazuri de utilizare specifice în lecțiile viitoare pentru a vedea cum să echilibrezi toate aceste considerente.
Optimize
În continuare, va trebui să alegem un procesor cuantic care are suficienți qubiți de o calitate suficient de ridicată pentru a putea rula circuitul nostru cuantic. Ia aceste decizii ghidat de cele trei metrici discutate în secțiunea despre hardware: numărul de qubiți, EPLG și CLOPS.
Apoi optimizăm circuitul pentru hardware-ul selectat. Mai întâi, trebuie să pozționăm și să trasăm circuitul nostru eficient. Poziționarea (layout) se referă la maparea qubiților virtuali din circuit pe qubiții fizici ai procesorului. Trasarea (routing) se referă la ajustarea circuitului astfel încât conectivitatea dintre qubiții virtuali din circuit să corespundă conectivității qubiților fizici ai procesorului. Există câteva lucruri de reținut în etapa de poziționare și trasare.
-
Nu toți qubiții sunt conectați. Unii sunt foarte departe unii de alții pe cip, și trebuie să reducem sau să eliminăm interacțiunile pe distanțe lungi oriunde este posibil. Ai putea aplica o secvență de porți SWAP între qubiții vecini pentru a muta informațiile qubiților, dar porțile SWAP sunt costisitoare și predispuse la erori, deci pot exista metode mai bune de a face acest lucru. Încearcă să eviți prea multe porți SWAP costisitoare.
-
Poziționarea și trasarea sunt procese iterative. Le poți face manual, dar există și un instrument Qiskit numit
mapomatic, care poate face recomandări pentru o poziționare fizică a qubiților pe baza ratelor de eroare aproximative. Transpilerul (pe care îl vom discuta în scurt timp) poate face de asemenea o sugestie informată.
Apoi, putem compune secvențe de porți cu un singur qubit care acționează pe același qubit în porți unice — și uneori putem și elimina porți sau combinații de porți inutile. De exemplu, unele combinații de porți pot fi reduse la combinații mai simple — și, de fapt, uneori o combinație de porți poate fi echivalentă cu operația identitate, deci le putem pur și simplu elimina. Poți face acest lucru automat folosind transpilerul Qiskit — dar poți și să o faci manual, poartă cu poartă, dacă dorești mai mult control.
Odată ce am îmbunătățit poziționarea circuitului, trasarea și numărul de porți — fie manual, fie folosind transpilerul — de obicei dorim să vizualizăm circuitul nostru pentru a ne asigura că sincronizarea tuturor porților are sens. Există un argument pe care îl poți marca în transpiler pentru a vizualiza cronologia circuitului tău și pentru a te asigura că totul este aliniat așa cum te-ai aștepta.
Qiskit Transpiler
Așa cum s-a menționat anterior, Qiskit Transpiler poate fi folosit pentru a ajuta în etapele timpurii ale fluxului de lucru patterns. Acum să explorăm capacitățile sale mai în detaliu. Poate rescrie un circuit de intrare dat astfel încât să corespundă topologiei unui dispozitiv cuantic specific și să optimizeze circuitul pentru execuție și reziliență față de zgomot. De asemenea, rescrie un circuit dat în porțile de bază ale procesorului cuantic specific pe care ai ales să îl folosești.
Qiskit are patru pipeline-uri de transpilare integrate, corespunzând diferitelor niveluri de optimizare, și dacă nu ești deja familiarizat cu optimizarea circuitelor cuantice, îți recomandăm să folosești unul dintre ele. În mod implicit, procesul de transpilare include acești șase pași:
-
Inițializare. Această etapă rulează orice treceri inițiale necesare înainte de a începe încorporarea circuitului pe backend. De obicei, aceasta implică desfășurarea instrucțiunilor personalizate și convertirea circuitului la porți cu unul și doi qubiți.
-
Poziționare (Layout). Această etapă mapează qubiții virtuali din circuit pe qubiții fizici ai unui backend. Consultă Layout Stage pentru mai multe detalii.
-
Trasare (Routing). Această etapă rulează după ce a fost aplicată o poziționare și injectează porți (precum porțile swap) în circuitul original pentru a-l face compatibil cu conectivitatea backend-ului. Consultă Routing Stage pentru mai multe detalii.
-
Traducere (Translation). Această etapă translatează porțile din circuit în setul de bază al backend-ului țintă. Consultă Translation Stage pentru mai multe detalii.
-
Optimizare. Această etapă rulează în mod repetat bucla principală de optimizare până când este atinsă o condiție (cum ar fi atingerea unei anumite adâncimi țintă). Avem patru niveluri de optimizare diferite din care să alegem, descrise mai jos.
-
Planificare (Scheduling). Această etapă este destinată oricăror treceri de planificare conștiente de hardware. La un nivel înalt, planificarea poate fi privită ca inserarea de întârzieri în circuit pentru a contabiliza timpul de inactivitate al qubiților între execuția instrucțiunilor.
Există patru niveluri de optimizare cuprinse între 0 și 3, unde nivelurile mai înalte de optimizare necesită mai mult timp și efort computațional, dar pot produce un circuit mai bun. Nivelul de optimizare 0 este destinat experimentelor de caracterizare a dispozitivelor și, ca atare, mapează doar circuitul de intrare la constrângerile backend-ului țintă, fără a efectua nicio optimizare. Nivelul de optimizare 3 depune cel mai mare efort pentru a optimiza circuitul. Cu toate acestea, deoarece multe dintre tehnicile de optimizare din transpiler sunt bazate pe euristici, cheltuirea unui efort computațional mai mare nu duce întotdeauna la o îmbunătățire a calității circuitului de ieșire. Dacă ești interesat de mai multe detalii, consultă documentația transpilerului din documentația Qiskit.
Error suppression
Primul pas în reducerea erorilor dintr-un circuit este optimizarea poziționării, trasării și minimizarea numărului de porți, pe care le-am realizat deja, fie folosind transpilerul, fie pe cont propriu. Acum să discutăm despre metode mai sofisticate de suprimare a erorilor.
Suprimarea erorilor se referă la o clasă de tehnici care transformă un circuit în timpul compilării pentru a minimiza erorile. Este distinctă de atenuarea erorilor, pe care o vom discuta mai târziu în secțiunea „Execute" de mai jos. Cele mai comune două forme de suprimare a erorilor pe care le folosim sunt decuplarea dinamică și răsucirea Pauli:
- Decuplarea dinamică este folosită pentru a anula efectiv o parte din zgomotul de mediu introdus atunci când un qubit stă inactiv. Prin aplicarea unei serii de porți la momente specifice, poți face ca zgomotul care se acumulează într-o parte a perioadei de inactivitate să anuleze aproximativ zgomotul din cealaltă parte.
- Răsucirea Pauli este o modalitate de a insera porți aleatorii nu pentru a anula zgomotul, ca în decuplarea dinamică, ci pentru a simplifica zgomotul. Prin inserarea de porți aleatorii, se împiedică efectele diferitelor erori să se acumuleze la fel de rapid și face zgomotul mai ușor de caracterizat, deoarece acesta capătă acum o natură stocastică. Această metodă stă și la baza unei tehnici puternice de atenuare a erorilor, pe care o vom discuta mai jos.
Execută
Acum suntem gata să executăm programul cuantic. Primitivele Qiskit Runtime oferă o interfață cu hardware-ul IBM Quantum și, totodată, abstractizează suprimarea și atenuarea erorilor față de utilizator. Există două primitive din care poți alege: Sampler și Estimator.
Sampler-ul din Qiskit Runtime rulează circuitul de mai multe ori pe un dispozitiv cuantic, efectuând măsurători la fiecare rulare și reconstruind distribuția de probabilitate din șirurile de biți recuperate. Cu cât efectuează mai multe rulări (sau shots), cu atât rezultatele vor fi mai precise, dar acest lucru necesită mai mult timp și resurse cuantice. Mai exact, calculează probabilitatea de a obține fiecare stare posibilă din baza standard, măsurând starea pregătită de circuit.
Estimator-ul din Qiskit Runtime folosește un proces algebric complex pentru a estima valoarea de așteptare pe un dispozitiv cuantic real, descompunând observabilul într-o combinație de alți observabili cu eigenbaze cunoscute.
Pasul de execuție este și momentul în care putem selecta strategia de atenuare a erorilor. Atenuarea erorilor se referă la tehnici care permit utilizatorilor să reducă erorile de circuit prin modelarea zgomotului dispozitivului prezent la momentul execuției. De obicei, acest lucru produce un overhead de preprocesare cuantică legat de antrenarea modelului și un overhead de postprocesare clasică pentru a atenua erorile din rezultatele brute folosind modelul generat. În schimbul acestui overhead, reușim să obținem rezultate mult mai precise.
Există mai multe tehnici pe care le putem implementa pentru atenuarea erorilor. Vom discuta trei, în ordinea crescătoare a rezilienței la erori, dar și, implicit, în ordinea crescătoare a costului computațional. Fii totuși conștient că acesta este un domeniu activ de cercetare — deci vom continua probabil să inventăm tehnici noi și să le îmbunătățim pe cele existente.
La nivelul de reziliență 0, transpiler-ul nu face nimic cu circuitul tău.
La nivelul 1, introduce o metodă numită Twirled Readout Error eXtinction (T-REX). T-REX folosește Pauli twirling, după cum s-a discutat în secțiunea despre suprimarea erorilor. Așa cum s-a menționat, inserarea de gate-uri aleatorii în circuit poate face ca zgomotul chiar foarte complicat și greu de modelat să pară stocastic, mult mai ușor de contabilizat sau eliminat prin postprocesare.
La nivelul de reziliență 2, se adaugă Zero Noise Extrapolation (ZNE). Aceasta este o tehnică populară cu care am avut mult succes recent. Ideea din spatele ZNE poate fi oarecum surprinzătoare — de fapt adăugăm zgomot peste ceea ce există deja! Dar asta ne permite să extrapolăm în direcție inversă, pentru a prezice cum ar arăta rezultatele dacă ar exista din ce în ce mai puțin zgomot.
Adăugarea de zgomot se poate realiza în câteva moduri diferite. De exemplu, putem întinde gate-urile pentru a le face mai lungi și, astfel, mai predispuse la erori, sau putem rula mai multe gate-uri care rezultă în final într-o operație identitate, astfel încât circuitul nu se modifică funcțional, dar eșantionăm intenționat mai mult zgomot. Totuși, trebuie să faci asta pentru fiecare circuit și pentru fiecare valoare de așteptare pe care vrei să o urmărești — deci poți vedea cum poate deveni costisitor computațional.
Un tip specific de ZNE se numește Probabilistic Error Amplification (PEA). Odată ce am învățat un model de zgomot pentru un gate, PEA funcționează prin eșantionarea erorilor din acel model de zgomot și injectarea lor deliberat ă în circuit. Aceasta nu este disponibilă în Qiskit momentan, dar va fi disponibilă mai târziu în acest an.
Ultima formă de atenuare a erorilor pe care o vom discuta este Probabilistic Error Cancellation (PEC). În loc să fie la nivelul 3 de reziliență, PEC este o capabilitate specială pe care trebuie să o activezi manual în Qiskit, deoarece resursele computaționale necesare nu se scalează foarte bine comparativ cu celelalte tehnici de atenuare a erorilor. Începi prin a afla despre zgomotul care îți afectează circuitul — rulezi circuite de învățare a zgomotului sau de caracterizare a zgomotului pentru fiecare strat unic de gate-uri cu doi qubiți din circuitul tău. Aceste rezultate îți permit să descrii zgomotul în termeni de operatori Pauli. Odată ce cunoști acești termeni de zgomot, poți modifica circuitele astfel încât să aibă efectiv gate-urile Pauli opuse integrate pentru a anula aceste canale de zgomot. Într-un fel, procesul este similar cu modul în care funcționează căștile cu anulare a zgomotului. Cu toate acestea, această modalitate de anulare a zgomotului este foarte costisitoare, cu un timp de rulare care crește rapid și exponențial în funcție de numărul de gate-uri, deci s-ar putea să nu fie cea mai bună alegere pentru un circuit foarte mare.
Postprocesează
Etapa de postprocesare este cea în care vizualizăm și analizăm ieșirea circuitului nostru cuantic. Există o serie de instrumente Qiskit disponibile pentru a face asta, cum ar fi modulele de vizualizare și quantum-info. Nu le vom acoperi aici, dar vom vedea aceste module în acțiune pe măsură ce ne adâncim în câteva exemple de aplicații în lecțiile viitoare.
Concluzie
Sperăm că această lecție ți-a oferit un tur rapid al principalelor considerații și al fluxului de lucru pe care îl folosim atunci când vrem să rulăm o computație cuantică la scară de utilitate. A fost plină de informații, și mare parte din ele nu vor fi asimilate până nu vom vedea câteva exemple concrete în care aceste concepte teoretice sunt puse în practică. Deci, asta este ceea ce reprezintă restul cursului. La urma urmei, acest curs nu se numește Quantum Computing in Practice degeaba!
Data viitoare, vom analiza un exemplu specific de cum se folosește fluxul de lucru al pattern-urilor Qiskit pentru a proiecta și rula un circuit cuantic care rezolvă problema clasică din teoria grafurilor numită MaxCut.