Q # language: come scrivere codice quantistico in Visual Studio

Il futuro del computer non è il silicio; siamo già ai limiti della legge di Moore in termini di prestazioni che possiamo ottenere dai transistor tradizionali. Stiamo anche lavorando su problemi molto più grandi, specialmente quando si tratta di crittografia e di modellazione matematica; problemi che richiedono giorni di tempo di elaborazione anche sui supercomputer più grandi.

Allora dove andiamo da qui? Microsoft Research, come Google e IBM, ha investito molto nell'informatica quantistica. Gran parte della sua ricerca si è concentrata sulla fisica di base, lavorando con università di tutto il mondo per produrre ambienti efficienti a bassa temperatura e ambienti di calcolo quantistico stabili. Ma la creazione di un qubit - il bit quantistico probabilistico che essenzialmente sostituisce gli 0 e gli 1 di un bit tradizionale - è solo una parte della storia. Ciò che serve è anche un modo per programmare un computer quantistico e interpretare lo stato probabilistico dei qubit.

Costruire computer quantistici

L'architettura di un programma quantistico è relativamente semplice: un programma tradizionale ottiene valori dall'input dell'utente o da altro codice. Quindi passa quei valori a un'applicazione quantistica che imposta i qubit in un processore quantistico, utilizzando uno dei tanti algoritmi quantistici, prima di trasmettere i risultati all'applicazione padre.

È un processo molto simile a quello che ho usato nel mio primo lavoro di programmazione, scrivendo codice di analisi agli elementi finiti Fortran che utilizzava un processore vettoriale collegato a un supercomputer per gestire l'algebra della matrice. Le librerie vettoriali che ho usato per costruire e risolvere i miei modelli elettromagnetici 3D hanno funzionato sia su quell'hardware specializzato che su un coprocessore matematico in una workstation desktop, quindi ho potuto testare il mio codice prima di utilizzare il costoso tempo del supercomputer.

Microsoft ha recentemente rilasciato il suo Quantum Development Kit, costruito attorno al suo nuovo linguaggio Q #. Progettato per utilizzare costrutti familiari per aiutare le applicazioni di programma che interagiscono con i qubit, adotta un approccio simile per lavorare con i coprocessori, fornendo librerie che gestiscono la programmazione e l'interpretazione quantistica effettiva, in modo da poter scrivere codice che trasferisce le operazioni dei qubit a un computer quantistico di Microsoft .

Collegare i mondi dell'informatica classica e quantistica non è facile, quindi non aspettarti che Q # sia come Visual Basic. È più come usare quell'insieme di librerie matematiche Fortran, con lo stesso presupposto di fondo: che tu comprenda la teoria dietro quello che stai facendo.

Un elemento del Quantum Development Kit è un manuale di informatica quantistica, che esplora i problemi relativi all'uso dei simulatori, oltre a fornire un manuale di algebra lineare. Se intendi programmare in Q #, è essenziale comprendere i concetti chiave dell'algebra lineare intorno a vettori e matrici, in particolare gli autovalori e gli autovettori, che sono elementi chiave di molti algoritmi quantistici.

Iniziare con Q #

Il kit di sviluppo viene scaricato come estensione di Visual Studio, quindi puoi utilizzarlo con tutte le versioni dell'ambiente di sviluppo principale di Microsoft, inclusa l'edizione Community gratuita. Il programma di installazione include il linguaggio Q #, un simulatore quantistico locale e librerie che supportano l'incorporamento di moduli Q # nel codice .Net. Una volta installato, puoi connetterti al repository Q # Github di Microsoft per clonare e scaricare codice di esempio e librerie aggiuntive. È un processo veloce; il programma di installazione impiega un paio di minuti per scaricare ed eseguire su un PC di sviluppo ragionevolmente potente. Le librerie sono ospitate su Nuget, quindi puoi aggiornarle rapidamente alle ultime versioni.

Con un computer quantistico funzionante ancora a pochi anni di distanza, il Quantum Development Kit è limitato a lavorare con computer quantistici simulati. I sistemi di ricerca di Microsoft devono ancora produrre un qubit topologico funzionante, ma i risultati sono stati promettenti. Quindi, fino a quando non saranno pubblicati i risultati e Azure non avrà i suoi coprocessori quantistici, sarai limitato a sperimentare simulatori locali e ospitati nel cloud. Poiché sono limitati all'utilizzo delle tecniche di programmazione tradizionali, non gestiranno l'intera gamma di complesse operazioni matematiche promesse dal calcolo quantistico. Ma danno un'idea di cosa può fare un piccolo numero di qubit.

Gran parte del lavoro che devi fare per costruire un programma quantistico consiste nella costruzione di un computer quantistico a partire dalle trasformazioni dei qubit. Il linguaggio Q # gestisce il processo per te, perché include espressioni per molte strutture di gate quantistiche, nonché algoritmi quantistici comuni. Il linguaggio stesso risulterà familiare agli sviluppatori .Net, con una struttura che è da qualche parte tra C # e F #.

Nozioni di base sulla programmazione quantistica

Troverai la maggior parte dei programmi Q # relativamente semplici, perché quello che stai facendo è impostare array di qubit e applicare loro trasformazioni matematiche. Sebbene il problema sottostante sia complesso (o almeno richieda molto tempo di calcolo utilizzando le risorse di calcolo tradizionali), ti affidi al computer quantistico per gestire il lavoro per te e i suoi algoritmi quantistici significano che puoi usare un piccolo numero di qubit connessi per risolvere il tuo problema.

Una cosa importante da notare è che alcuni linguaggi quantistici, come quello utilizzato da DWave nei suoi computer quantistici, sono progettati per funzionare con il quantum annealing, non il modello di gate utilizzato nell'hardware quantistico di Microsoft.

Dove il linguaggio Q # differisce dal familiare è nel suo supporto per gli algoritmi quantistici. Questo inizia con i tipi: Q # è un linguaggio fortemente tipizzato, che aggiunge nuovi tipi che rappresentano qubit e gruppi di qubit. Un'altra differenza fondamentale è tra le operazioni e le funzioni Q #. Le operazioni contengono operazioni quantistiche, mentre le funzioni sono puramente per il codice classico, sebbene possano lavorare con i risultati di un'operazione quantistica.

Algoritmi e librerie quantistiche

Q # include anche tipi di operazioni specifici che funzionano con algoritmi quantistici, inclusi quelli che calcolano i risultati aggiunti di una matrice di qubit e altri che aiutano a costruire circuiti qubit, attivati ​​solo se i qubit di controllo sono impostati correttamente.

È importante ricordare che dove Q # usa Zero e Uno nei risultati come variabili per gestire i qubit, non sono la stessa cosa dei binari 0 e 1. Invece sono rappresentazioni degli autovalori dei vettori memorizzati nei qubit.

Utilizzi le librerie standard Q # per creare e costruire le tue applicazioni quantistiche. Questi includono una serie di primitive quantistiche che definiscono le porte che stai costruendo dai tuoi qubit, oltre ad applicare operatori quantistici e misurare i risultati. Le biblioteche sono divise in due parti: il preludio per la configurazione del computer quantistico e il canone per il funzionamento della macchina. È importante comprendere le differenze tra queste due parti delle librerie, perché devono essere tenute separate nel codice. L'utilizzo degli operatori canonici esegue la macchina quantistica, con operatori che gestiscono algoritmi quantistici specifici; per esempio, applicando una trasformata quantistica di Fourier o trovando divisori comuni di due numeri.

Q # non è una lingua per principianti. Sebbene semplifichi alcune operazioni quantistiche, dipende dalla conoscenza di come funziona un computer quantistico, oltre che dalla comprensione delle basi del calcolo quantistico. Se hai lavorato con l'algebra lineare e le probabilità, avrai un vantaggio, ma vale comunque la pena dedicare del tempo prima ai tutorial e agli esempi di Microsoft.