Vai al contenuto principale

Esecuzione di circuiti quantistici

Guarda il video sui circuiti quantistici e le primitive di Olivia Lanes, oppure apri il video in una finestra separata su YouTube.

Panoramica della lezione​

Questa lezione offrirà una panoramica ad alto livello delle basi per eseguire un calcolo quantistico su scala utility, dall'hardware quantistico utilizzato ai principi da considerare nella progettazione di un circuito quantistico. Idealmente, alla fine di questa lezione saprai:

  1. Cosa sono effettivamente i computer quantistici IBM®. Dovrai conoscere le basi delle caratteristiche hardware per progettare in modo ottimale i tuoi circuiti quantistici ed eseguirli su di esso.

  2. Cos'è Qiskit, cosa sono le primitive e come possiamo usarle per creare ed eseguire circuiti quantistici.

  3. Il flusso di lavoro tipico che seguiamo per eseguire esperimenti su larga scala. Questo include la selezione delle migliori primitive per il tuo caso d'uso, la mappatura di un problema su un circuito quantistico e l'applicazione di mitigazione e soppressione degli errori, che ci permettono di sfruttare al massimo queste macchine.

Hardware – Processori quantistici IBM​

Per capire come fare scelte ottimali nella progettazione di circuiti quantistici su larga scala, dobbiamo sapere qualcosa sull'hardware reale che eseguirà questi circuiti. Parliamo quindi brevemente dei qubit fisici e dei processori quantistici IBM.

I processori quantistici IBM sono costruiti usando qubit transmon superconduttori, che sono circuiti elettrici composti da una giunzione Josephson e un condensatore collegati in parallelo. La giunzione Josephson è un induttore non lineare creato da due strati sovrapposti di metallo superconduttore con una barriera isolante tra di essi. A temperature molto basse, gli elettroni nei superconduttori si accoppiano per formare quello che è noto come coppia di Cooper. Le coppie di Cooper possono spontaneamente attraversare per effetto tunnel la barriera isolante da un lato all'altro della giunzione. Questo comportamento di tunneling dà origine alle proprietà non lineari che creano il nostro qubit.

Linee di trasmissione a microonde sono fabbricate sul chip per inviare segnali a microonde ai qubit. Quando applichiamo impulsi a microonde altamente calibrati — con frequenza, ampiezza, forma e durata specifiche — alle linee, possiamo far eseguire ai qubit operazioni specifiche. Questo costituisce la base dei nostri gate quantistici. Fabrichiamo il chip in modo che i qubit vicini siano collegati in una struttura reticolare specifica chiamata reticolo heavy-hex. Questa connettività — la cosiddetta topologia — dei nostri processori è un fattore importante da considerare nella progettazione di un circuito, come discuteremo più avanti nella lezione.

Le istruzioni per l'impulso a microonde partono dal tuo computer, passano attraverso il cloud e arrivano all'elettronica di controllo a temperatura ambiente, che interpreta quelle istruzioni e genera fisicamente gli impulsi. Dopo che le unità di controllo a temperatura ambiente creano gli impulsi, questi viaggiano attraverso cavi verso un refrigeratore a diluizione e infine al chip quantistico. Il segnale entra nei risonatori, attraversa un wirebond e poi scorre lungo la linea di trasmissione fino ai nostri qubit.

IBM dispone di decine di computer quantistici in tutto il mondo, e di recente abbiamo aggiornato la nostra flotta per avere esclusivamente processori con più di 100 qubit. Alcuni si trovano in un data center quantistico IBM nello stato di New York e sono resi disponibili tramite cloud per l'uso di tutti — e alcuni sono sistemi dedicati, on-premises, che supportano i partner nella IBM Quantum® Network. Puoi accedere a quantum.cloud.ibm.com per vedere quali processori hai a disposizione.

Ogni processore elenca tre metriche di prestazione, di cui abbiamo parlato nella lezione precedente, ma come promemoria, sono: numero di qubit, EPLG e CLOPS.

  • Numero di qubit. Questo è autoesplicativo: è il numero totale di qubit disponibili su un singolo processore quantistico. Per un problema relativamente grande su scala utility, dovrai assicurarti di usare un processore con abbastanza qubit per affrontare il problema. Ma il solo numero di qubit non è l'unica cosa che conta.

  • EPLG, ovvero "errors per layered gate" (errori per gate a strati). È una misura della qualità dei qubit e dei gate quantistici. Misura l'errore medio che ogni gate introduce in un circuito che intrecca qubit vicini in una catena di 100 qubit. Vuoi che questo valore sia il più piccolo possibile.

  • CLOPS, ovvero "circuit layer operations per second" (operazioni su strati di circuito al secondo). Quantifica la velocità del processore. Misura quanti strati di un certo circuito di benchmark chiamato circuito quantum volume una unità di elaborazione quantistica (QPU) può eseguire per unità di tempo. Più alto è il numero, più velocemente possiamo calcolare.

L'importanza di ciascuna di queste metriche varia a seconda dell'applicazione specifica, e nelle lezioni future esamineremo esempi reali per vedere come ciascuno di questi fattori può influenzare il risultato di un calcolo.

Software: Qiskit e Qiskit Runtime​

Per trasformare il tuo problema quantistico in istruzioni per un computer quantistico, userai Qiskit, il kit di sviluppo software open-source progettato per il lavoro sui computer quantistici sviluppato da IBM. C'è anche l'Ecosistema Qiskit — una raccolta di tutorial software e funzioni che si basano o estendono le funzionalità principali di Qiskit — e Qiskit Runtime — un servizio di calcolo quantistico e modello di programmazione che consente agli utenti di progettare e ottimizzare i propri carichi di lavoro quantistici e di eseguirli in modo efficiente usando le Primitive di Qiskit Runtime.

Una primitiva è un piccolo blocco costruttivo che puoi usare per progettare un circuito o un job più grande. Le due primitive più importanti per noi sono il Sampler e l'Estimator, di cui parleremo più approfonditamente a breve.

Con la recente uscita di Qiskit v1.0, Qiskit è diventato più performante e stabile che mai. Quindi, per chi sta iniziando adesso, è il momento perfetto! Per chi conosce già Qiskit, sarà necessario scaricare e reinstallare la versione più recente. Per una guida completa all'installazione, visita la guida Install Qiskit.

Circuiti quantistici​

Ora siamo pronti a discutere il fondamento dei programmi quantistici: i circuiti quantistici. Questa sezione servirà solo come ripasso — se non hai familiarità con i circuiti quantistici, ti consigliamo di approfondire l'argomento visitando la lezione Circuiti Quantistici nel corso "Nozioni di base sull'informazione quantistica" prima di continuare.

Un circuito quantistico è una rete di gate quantistici e misurazioni collegate da fili che rappresentano i qubit, come mostrato di seguito. I circuiti quantistici possono essere letti come uno spartito musicale, da sinistra a destra, partendo dal tempo 0 a sinistra. I qubit virtuali — quelli che non sono ancora stati assegnati a un qubit fisico su un processore — sono elencati in ordine crescente dall'alto verso il basso.

I gate sono rappresentati da simboli diversi sui fili dei qubit coinvolti. I gate a qubit singolo — come un gate Hadamard, raffigurato di seguito (il rettangolo con la H) — influenzano solo il qubit sul cui filo sono posizionati. I gate a più qubit — come un gate CNOT, anch'esso mostrato di seguito (il segno più nel cerchio con una linea connessa a q0) — influenzano due o più qubit. Nel gate CNOT raffigurato, lo stato di q1 cambia in base allo stato di q0. Dopo che tutti i gate sono stati eseguiti, possiamo misurare i qubit, indicati dai gate neri con il simbolo di misurazione. I risultati delle misurazioni vengono scritti sui registri classici, il bus "meas" a doppia linea in basso.

Esempio di circuito quantistico semplice

Una caratteristica importante di un circuito è la sua profondità. La profondità di un circuito quantistico è il numero minimo di "strati" di gate quantistici, eseguiti in parallelo, necessari per completare il circuito. I gate quantistici possono essere eseguiti in parallelo (allo stesso tempo) ogni volta che non hanno qubit in comune. Ma se due o più gate agiscono sullo stesso qubit, non possiamo eseguirli in parallelo — devono essere eseguiti in due strati separati, uno dopo l'altro.

C'è un altro modo, meno ovvio, per determinare la profondità di un circuito, giocando a una sorta di gioco. Le regole sono semplici: partendo da qualsiasi filo di qubit a sinistra, devi spostarti verso destra e contare il numero di gate che incontri lungo il percorso. Puoi saltare su un filo vicino solo quando è connesso al tuo filo corrente da un gate a più qubit. L'obiettivo è massimizzare il numero di gate che incontri lungo il percorso. Questo numero massimale corrisponde anche alla profondità del circuito.

Esempio di circuito a nove strati

Poiché i gate quantistici richiedono tempo per essere implementati, la profondità di un circuito corrisponde approssimativamente alla quantità di tempo necessaria a un computer quantistico per eseguire il circuito. Alcune macchine sono più adatte a circuiti con grande profondità rispetto ad altre, a causa dei tempi di decoerenza dei qubit sul processore. Quindi, dobbiamo conoscere la profondità di un circuito per sapere se può essere eseguito su un determinato dispositivo.

Progettare un circuito quantistico: i pattern Qiskit​

Come si fa a progettare ed eseguire un circuito quantistico? Il modo più semplice per capire un tipico flusso di lavoro nel calcolo quantistico è attraverso i pattern Qiskit. I pattern Qiskit sono un framework concettuale che consente agli utenti di eseguire carichi di lavoro quantistici implementando determinati passaggi con strumenti modulari. Questo consente alle attività di calcolo quantistico di essere eseguite da una potente infrastruttura di calcolo eterogenea (CPU/GPU/QPU). I passaggi possono essere eseguiti come servizio e possono incorporare la gestione delle risorse, consentendo la composizione senza soluzione di continuità di nuove funzionalità man mano che vengono sviluppate.

Ecco i passaggi principali, che gli utenti Qiskit esperti riconosceranno facilmente.

  1. Map (Mappatura). Questo passaggio formalizza come prendiamo un problema generale che ci interessa e come capire come mapparlo su un computer quantistico sotto forma di circuito quantistico.

  2. Optimize (Ottimizzazione). In questo passaggio usiamo il Transpiler di Qiskit per instradare e disporre il circuito sull'hardware fisico di qubit reale. Questo include la traduzione dei singoli gate quantistici in sequenze di operazioni che vengono eseguite sull'hardware, nonché un'ottimizzazione della disposizione dei gate.

  3. Execute (Esecuzione). Le primitive di Qiskit Runtime forniscono l'interfaccia con l'hardware IBM Quantum che consente ai circuiti transpilati di essere eseguiti. Questo passaggio include anche l'uso di tecniche di soppressione e mitigazione degli errori, che possono essere in gran parte astratte dall'utente.

  4. Post-process (Post-elaborazione). In questo passaggio i dati provenienti dal processore quantistico vengono elaborati, fornendo all'utente risultati utili sul problema originale. Fondamentalmente, questo comprende qualsiasi ulteriore analisi dei dati acquisiti.

Map​

Il passaggio Map pone essenzialmente la domanda: "Come traduco il mio problema in un circuito quantistico che possa essere eseguito ragionevolmente sull'hardware quantistico?" Non c'è dubbio: la mappatura è un problema difficile e un'area di ricerca attiva. Non esiste un metodo infallibile che garantisca il successo, ma ci sono linee guida consigliate ed esempi di problemi che sappiamo già come mappare.

La prima linea guida è lasciare che i computer classici facciano tutto il lavoro in cui sono migliori. I compiti facili per i computer classici probabilmente non beneficeranno di un computer quantistico. I computer quantistici sono per problemi che sono classicamente difficili. Naturalmente, se questa è la prima volta che usi Qiskit o un computer quantistico, non preoccuparti di trovare un problema computazionalmente complesso. Scomponilo in problemi più piccoli e maneggevoli che puoi imparare ad affrontare prima di puntare direttamente a un progetto su scala utility.

Successivamente, traduci i risultati del tuo problema che vuoi misurare o comprendere in un valore di aspettazione o in una funzione di costo. Una funzione di costo è una funzione specifica del problema che definisce l'obiettivo del problema come qualcosa da minimizzare o massimizzare. Può essere usata per vedere quanto bene uno stato di prova o una soluzione si comporta rispetto a quell'obiettivo. Questa nozione può essere applicata a varie applicazioni in chimica, machine learning, finanza, ottimizzazione e così via — non importa necessariamente da quale disciplina ti stai approcciando al problema.

Tieni anche presente che l'hardware che utilizzerai ha una topologia specifica, come abbiamo discusso nella sezione hardware. Alcuni qubit sono connessi e altri no — dovrai mappare il tuo problema su un circuito che rispetti la topologia heavy-hex dei processori quantistici IBM.

Per ora, la cosa più importante da tenere a mente è che questa fase richiede pratica. Devi avere una buona comprensione non solo del tuo problema, ma anche delle capacità dell'hardware — e nelle lezioni future esamineremo esempi e casi d'uso specifici per vedere come bilanciare tutte queste considerazioni.

Optimize​

Successivamente, dovremo scegliere un processore quantistico che abbia abbastanza qubit di qualità sufficientemente alta da poter eseguire il nostro circuito quantistico. Prendi queste decisioni guidato dalle tre metriche di cui abbiamo discusso nella sezione hardware: numero di qubit, EPLG e CLOPS.

Poi ottimizziamo il nostro circuito per l'hardware selezionato. Per prima cosa, dobbiamo disporre e instradare il nostro circuito in modo efficiente. Layout si riferisce alla mappatura dei qubit virtuali nel circuito sui qubit fisici del processore. Routing si riferisce alla modifica del circuito in modo che la connettività tra i qubit virtuali nel circuito corrisponda alla connettività dei qubit fisici sul processore. Ci sono un paio di cose da tenere a mente durante la fase di layout e routing.

  1. Non tutti i qubit sono connessi. Alcuni sono molto lontani l'uno dall'altro sul chip, e dobbiamo ridurre o eliminare le interazioni a lunga distanza dove possibile. Potresti applicare una sequenza di gate SWAP tra qubit vicini per spostare le informazioni dei qubit, ma i gate SWAP sono costosi e soggetti a errori, quindi potrebbero esserci modi migliori per farlo. Cerca di evitare troppi gate SWAP costosi.

  2. Layout e routing sono processi iterativi. Puoi farlo a mano, ma esiste anche uno strumento Qiskit chiamato mapomatic, che può fare raccomandazioni per un layout di qubit fisici basato su tassi di errore approssimativi. Il Transpiler (di cui parleremo a breve) può anche fare un suggerimento informato.

Successivamente, possiamo comporre sequenze di gate a qubit singolo che agiscono sullo stesso qubit in gate singoli — e a volte possiamo anche eliminare gate o combinazioni di gate non necessari. Ad esempio, alcune combinazioni di gate possono essere ridotte a combinazioni più semplici — e in effetti, a volte una combinazione di gate può equivalere all'operazione identità, quindi possiamo semplicemente eliminarli. Puoi farlo automaticamente usando il Transpiler di Qiskit — ma puoi anche farlo manualmente gate per gate se vuoi avere più controllo.

Una volta migliorati il layout del circuito, il routing e il numero di gate — sia a mano che usando il Transpiler — di solito vogliamo visualizzare il nostro circuito per assicurarci che la temporizzazione di tutti i gate abbia senso. C'è un argomento che puoi impostare nel Transpiler per visualizzare la timeline del tuo circuito e assicurarti che tutto sia allineato come ti aspetteresti.

Qiskit Transpiler​

Come menzionato in precedenza, il Qiskit Transpiler può essere usato per aiutare nelle prime fasi del flusso di lavoro dei pattern. Approfondiamo ora le sue capacità in modo più dettagliato. Può riscrivere un circuito in input in modo che corrisponda alla topologia di un dispositivo quantistico specifico e ottimizzare il circuito per l'esecuzione e la resilienza al rumore. Riscrive anche un dato circuito nei gate base del processore quantistico specifico che hai selezionato da usare.

Qiskit ha quattro pipeline di transpilazione integrate corrispondenti a diversi livelli di ottimizzazione, e a meno che tu non abbia già familiarità con l'ottimizzazione dei circuiti quantistici, ti consigliamo di usarne una. Per impostazione predefinita, il processo di transpilazione include questi sei passaggi:

  1. Inizializzazione. Questa fase esegue tutti i passaggi iniziali richiesti prima di iniziare a incorporare il circuito nel backend. Di solito comporta lo srotolamento di istruzioni personalizzate e la conversione del circuito in soli gate a uno e due qubit.

  2. Layout. Questa fase mappa i qubit virtuali nel circuito sui qubit fisici di un backend. Vedi Layout Stage per maggiori dettagli.

  3. Routing. Questa fase viene eseguita dopo che è stato applicato un layout e inietta gate (come gate SWAP) nel circuito originale per renderlo compatibile con la connettività del backend. Vedi Routing Stage per maggiori dettagli.

  4. Traduzione. Questa fase traduce i gate nel circuito nell'insieme base del backend target. Vedi Translation Stage per maggiori dettagli.

  5. Ottimizzazione. Questa fase esegue ripetutamente il ciclo di ottimizzazione principale fino a quando non viene raggiunta una condizione (come il raggiungimento di una certa profondità target). Abbiamo quattro livelli di ottimizzazione diversi tra cui scegliere, descritti di seguito.

  6. Scheduling. Questa fase è per tutti i passaggi di scheduling consapevoli dell'hardware. Ad alto livello, lo scheduling può essere pensato come l'inserimento di ritardi nel circuito per tenere conto del tempo di inattività dei qubit tra l'esecuzione delle istruzioni.

Ci sono quattro livelli di ottimizzazione che vanno da 0 a 3, dove livelli di ottimizzazione più alti richiedono più tempo e sforzo computazionale ma possono produrre un circuito migliore. Il livello di ottimizzazione 0 è pensato per esperimenti di caratterizzazione del dispositivo e, come tale, mappa solo il circuito in input ai vincoli del backend target, senza eseguire alcuna ottimizzazione. Il livello di ottimizzazione 3 dedica il massimo sforzo per ottimizzare il circuito. Tuttavia, poiché molte delle tecniche di ottimizzazione nel Transpiler sono basate su euristiche, dedicare più sforzo computazionale non sempre si traduce in un miglioramento della qualità del circuito in output. Se vuoi approfondire ulteriormente, consulta la documentazione del Transpiler nella documentazione di Qiskit.

Soppressione degli errori​

Il primo passo per ridurre gli errori in un circuito è ottimizzare il layout, il routing e minimizzare il numero di gate, cosa che abbiamo già fatto, usando il Transpiler o da soli. Parliamo ora di alcuni metodi più sofisticati di soppressione degli errori.

La soppressione degli errori si riferisce a una classe di tecniche che trasformano un circuito durante la compilazione per minimizzare gli errori. È distinta dalla mitigazione degli errori, di cui parleremo più avanti nella sezione "Execute" qui sotto. Le due forme più comuni di soppressione degli errori che usiamo sono il dynamical decoupling e il Pauli twirling:

  1. Il dynamical decoupling viene usato per annullare efficacemente parte del rumore ambientale introdotto quando un qubit rimane inattivo. Applicando una serie di gate in momenti specifici, puoi far sì che il rumore che si accumula in una parte del periodo di inattività annulli approssimativamente il rumore nell'altra parte.
  2. Il Pauli twirling è un modo per inserire gate casuali non per annullare il rumore, come nel dynamical decoupling, ma per semplificarlo. Inserendo gate casuali, si impedisce agli effetti di errori diversi di accumularsi così rapidamente, e si rende il rumore più facile da caratterizzare, poiché ora ha una natura stocastica. Questo metodo costituisce anche la base di una potente tecnica di mitigazione degli errori, di cui parleremo di seguito.

Execute​

Ora siamo pronti per eseguire il programma quantistico. Le primitive di Qiskit Runtime forniscono un'interfaccia con l'hardware IBM Quantum, e astraggono anche la soppressione e la mitigazione degli errori dall'utente. Ci sono due primitive tra cui scegliere: il Sampler e l'Estimator.

Il Sampler di Qiskit Runtime esegue il circuito più volte su un dispositivo quantistico, effettuando misurazioni a ogni esecuzione, e ricostruisce la distribuzione di probabilità dalle stringhe di bit recuperate. Più esecuzioni (o shot) vengono effettuate, più accurati saranno i risultati, ma questo richiede più tempo e risorse quantistiche. Nello specifico, calcola la probabilità di ottenere ogni possibile stato della base standard misurando lo stato preparato dal circuito.

L'Estimator di Qiskit Runtime usa un processo algebrico complesso per stimare il valore di aspettazione su un dispositivo quantistico reale, scomponendo l'osservabile in una combinazione di altri osservabili con autobasi note.

Il passaggio Execute è anche quando possiamo selezionare la strategia di mitigazione degli errori. La mitigazione degli errori si riferisce a tecniche che consentono agli utenti di ridurre gli errori del circuito modellando il rumore del dispositivo presente al momento dell'esecuzione. In genere, ciò comporta un overhead di pre-elaborazione quantistica relativo all'addestramento del modello e un overhead di post-elaborazione classica per mitigare gli errori nei risultati grezzi usando il modello generato. In cambio di questo overhead, siamo in grado di ottenere risultati molto più accurati.

Ci sono molteplici tecniche che possiamo implementare per la mitigazione degli errori. Ne discuteremo tre, in ordine crescente di resilienza agli errori, ma anche, di conseguenza, in ordine crescente di costo computazionale. Tieni presente, tuttavia, che questa è un'area di ricerca attiva — quindi continueremo probabilmente a inventarne di nuove e a migliorare quelle vecchie.

Al livello di resilienza 0, il Transpiler non fa nulla al tuo circuito.

Al livello 1, introduce un metodo chiamato Twirled Readout Error eXtinction (T-REX). T-REX usa il Pauli twirling, come discusso nella sezione sulla soppressione degli errori. Come accennato, inserire gate casuali nel circuito può far sembrare stocastico anche un rumore molto complicato e difficile da modellare, e molto più facile da tenere in conto o sottrarre in post-elaborazione.

Al livello di resilienza 2, viene aggiunta la Zero Noise Extrapolation (ZNE). Questa è una tecnica popolare con cui abbiamo avuto molto successo di recente. L'idea alla base di ZNE potrebbe essere un po' sorprendente — in realtà aggiungiamo rumore sopra quello già presente! Ma questo ci consente di estrapolare nella direzione inversa, per prevedere come sarebbero i risultati se ci fosse sempre meno rumore.

L'aggiunta di rumore può essere realizzata in diversi modi. Ad esempio, possiamo allungare i gate per renderli più lunghi e quindi più soggetti a errori, oppure eseguire più gate che alla fine risultano nell'operazione identità, così il circuito non cambia funzionalmente ma campioniamo deliberatamente più rumore. Devi farlo però per ogni circuito e per ogni valore di aspettazione che vuoi tenere traccia — quindi puoi capire come possa risultare computazionalmente costoso.

Un tipo specifico di ZNE è chiamato Probabilistic Error Amplification (PEA). Una volta appreso un modello di rumore per un gate, PEA funziona campionando gli errori da quel modello di rumore e instandoli deliberatamente nel circuito. Questo non è ancora disponibile in Qiskit, ma lo sarà più avanti quest'anno.

L'ultima forma di mitigazione degli errori di cui parleremo è la Probabilistic Error Cancellation (PEC). Invece di essere al 3° livello di resilienza, PEC è una capacità speciale che devi attivare manualmente in Qiskit, perché le risorse computazionali richieste non scalano bene rispetto alle altre tecniche di mitigazione degli errori. Inizi imparando a conoscere il rumore che influenza il tuo circuito — esegui circuiti di apprendimento del rumore o di caratterizzazione del rumore per ogni strato unico di gate a due qubit nel tuo circuito. Questi risultati ti consentono di descrivere il rumore in termini di operatori di Pauli. Una volta noti questi termini di rumore, puoi modificare i tuoi circuiti in modo che abbiano effettivamente i gate di Pauli opposti integrati per annullare questi canali di rumore. In un certo senso, il processo è simile al modo in cui funzionano le cuffie con cancellazione del rumore. Tuttavia, questo modo di annullare il rumore è molto costoso, con un tempo di esecuzione che cresce rapidamente in modo esponenziale in funzione del numero di gate, quindi potrebbe non essere la scelta migliore per un circuito molto grande.

Post-process​

La fase di post-elaborazione è dove visualizziamo e analizziamo l'output del nostro circuito quantistico. Ci sono diversi strumenti Qiskit disponibili per farlo, come i moduli di visualizzazione e quantum-info. Non li tratteremo qui, ma vedremo questi moduli in azione mentre ci immergiamo in alcuni esempi di applicazioni nelle lezioni future.

Conclusione​

Speriamo che questa lezione ti abbia offerto un tour rapido delle principali considerazioni e del flusso di lavoro che utilizziamo quando vogliamo eseguire un calcolo quantistico su scala utility. Era ricca di informazioni, e molte di esse non assimilerai finché non vedi alcuni esempi concreti in cui questi concetti teorici vengono messi in pratica. Quindi, questo è ciò che costituirà il resto del corso. Dopotutto, questo corso non si chiama Quantum Computing in Practice per niente!

La prossima volta, esamineremo un esempio specifico di come usare il flusso di lavoro dei pattern Qiskit per progettare ed eseguire un circuito quantistico che risolve il classico problema della teoria dei grafi chiamato MaxCut.