Compilazione quantistica approssimata con reti tensoriali (AQC-Tensor)
L'addon Qiskit per la compilazione quantistica approssimata con reti tensoriali (AQC-Tensor) consente agli utenti di compilare la porzione iniziale di un circuito in un'approssimazione quasi equivalente di quel circuito, ma con un numero di livelli molto inferiore. Questo risultato viene ottenuto tramite reti tensoriali, usando il metodo descritto in [1]. Il suo utilizzo principale riguarda i circuiti che simulano l'evoluzione temporale, ma può essere applicato a qualsiasi classe di circuiti che abbia accesso a:
- Un ottimo stato intermedio, detto "stato target", raggiungibile tramite simulazione con reti tensoriali; e,
- Un buon circuito che prepara un'approssimazione dello stato target, ma con un numero inferiore di livelli quando compilato sul dispositivo hardware target.
La tecnica genera un circuito ansatz basato su un circuito target più grande che l'utente vuole eseguire su una QPU. Questo avviene simulando prima una porzione del circuito target tramite metodi basati su reti tensoriali, ottenendo una descrizione accurata di uno stato intermedio che il circuito ansatz andrà ad approssimare. Una volta trovato questo stato intermedio, viene utilizzato come funzione di costo per ottimizzare i parametri del circuito ansatz. Al termine dell'ottimizzazione, la parte rimanente del circuito target viene aggiunta all'ansatz e poi eseguita su hardware quantistico.
Installare il pacchetto AQC-Tensor​
Esistono due modi per installare il pacchetto AQC-Tensor: tramite PyPI oppure compilando dal sorgente. Si consiglia di installare questi pacchetti in un ambiente virtuale per garantire la separazione tra le dipendenze dei pacchetti.
Installare da PyPI​
Il modo più semplice per installare il pacchetto AQC-Tensor è tramite PyPI. Per usare il pacchetto, devi anche installare almeno un backend per reti tensoriali. Il seguente snippet di codice installerà l'addon, insieme a quimb (per il supporto alle reti tensoriali) e jax (per la differenziazione automatica). Se sei interessato, dai un'occhiata al pacchetto su GitHub.
pip install 'qiskit-addon-aqc-tensor[quimb-jax]'
Installare dal sorgente​
Clicca qui per leggere come installare questo pacchetto manualmente.
Se desideri contribuire a questo pacchetto o vuoi installarlo manualmente, clona prima il repository:
git clone git clone git@github.com:Qiskit/qiskit-addon-aqc-tensor.git
e installa il pacchetto tramite pip. Se intendi eseguire i tutorial presenti nel repository del pacchetto, installa anche le dipendenze per i notebook. Se prevedi di sviluppare nel repository, potresti voler installare anche le dipendenze dev.
pip install tox jupyterlab -e '.[notebook-dependencies,dev]'
Fondamenti teorici​
La procedura AQC-Tensor è descritta in dettaglio in [1]. Questa sezione fornisce una panoramica della tecnica.

In generale, AQC-Tensor richiede tre elementi in input:
- Una descrizione dello stato target sotto forma di rete tensoriale. Può essere generata simulando un circuito su un simulatore a rete tensoriale, oppure in un altro modo (ad esempio, eseguendo l'evoluzione temporale su uno stato a prodotto di matrici usando il principio variazionale dipendente dal tempo).
- Un circuito ansatz parametrizzato. Idealmente uno che contenga una connettività efficiente per l'hardware, in modo da avere una profondità ragionevole sull'hardware target.
- Parametri iniziali da inserire nel circuito ansatz, in modo che lo stato risultante sia già una buona approssimazione dello stato target. (In linea di principio questo non è necessario per AQC, ma aiuta a fornire all'ottimizzatore un punto di partenza sensato.)
La tecnica consiste quindi nell'ottimizzare iterativamente i parametri del circuito ansatz, in modo che lo stato che genera sia il più vicino possibile allo stato target.
Generazione dell'ansatz​
Per generare (2) e (3) dall'elenco precedente, il pacchetto qiskit-addon-aqc dispone di una funzione, generated_ansatz_from_circuit(), che prende in input un circuito e restituisce un ansatz parametrizzato e un insieme iniziale di parametri. I parametri restituiti dalla funzione sono tali che, inseriti nell'ansatz, generano uno stato esattamente equivalente al circuito in input, a meno di una fase globale.
L'ansatz generato da questa funzione utilizza 9 parametri per ogni blocco a due qubit ed è basato sulla decomposizione KAK, che parametrizza qualsiasi gate a due qubit in termini di tre parametri, a meno di rotazioni a singolo qubit. Le rotazioni a singolo qubit vengono poi decomposte come , ognuna delle quali ha tre parametri. Questo fa sì che il circuito ansatz contenga 3 parametri per ogni blocco a due qubit del circuito originale, più 3 parametri per una rotazione a singolo qubit in uscita su ciascuno dei due qubit (per un totale di 9 parametri). Dopo l'aggiunta di questi blocchi, l'ansatz viene completato aggiungendo un livello di rotazioni a singolo qubit a ogni qubit attivo all'inizio del circuito.
Simulazione con reti tensoriali​
Per ottenere la descrizione dello stato target desiderato, questo addon utilizza uno stato a prodotto di matrici (la forma più semplice di rete tensoriale) e supporta i seguenti simulatori a rete tensoriale:
- Il simulatore MPS presente in Qiskit Aer
- Il simulatore eager
CircuitMPSdi Quimb - Il simulatore lazy
Circuitdi Quimb
Il parametro più importante di una rete tensoriale è la sua dimensione di bond massima, . Questo parametro limita quanta entanglement può essere rappresentata con una rete tensoriale, e quindi fino a quale profondità un dato circuito può essere simulato fedelmente.
Dato un circuito con qubit, uno stato a prodotto di matrici necessita al massimo di una dimensione di bond pari a per simulare esattamente il circuito fino a qualsiasi profondità . Questo è fuori portata per i circuiti a scala di utilità generali che agiscono su 100 o più qubit. Per questo motivo, se stai cercando di sperimentare con questo addon su un problema giocattolo con pochi qubit, è importante assicurarsi che . In questo modo, quando ridimensioni il problema a un circuito più grande, lo stato target rimane simulabile classicamente.
Passi successivi​
- Leggi la pagina su come iniziare con AQC-Tensor
- Leggi il tutorial sull'uso di AQC per migliorare l'evoluzione temporale di Trotter.
Riferimenti​
[1] Robertson, Niall F., et al. "Approximate Quantum Compiling for Quantum Simulation: A Tensor Network based approach" arXiv preprint arXiv:2301.08609 (2023).