Skip to main content
IBM Quantum Platform

VF2PostLayout

class qiskit.transpiler.passes.VF2PostLayout(*args, **kwargs)

GitHub

Basi: AnalysisPass

Un passaggio per migliorare un Layout esistente dopo la trasposizione di un circuito su un grafo di accoppiamento, come problema di isomorfismo del sottografo, risolto da VF2++.

A differenza del passaggio VF2Layout che è stato progettato per trovare un layout iniziale per un circuito all'inizio della pipeline di transpilazione, questo passaggio di transpiler è stato progettato per cercare di trovare un layout migliore al termine della transpilazione. La fase iniziale di layout del transpiler non ha a disposizione tutte le informazioni che abbiamo dopo la transpilazione. Questo passaggio è progettato per essere accoppiato in una pipeline simile a quella dei passaggi di layout. Questo passaggio elimina tutti i fili inattivi dal circuito, utilizza VF2 per trovare un sottografo nel grafo di accoppiamento su cui il circuito possa funzionare con una migliore fedeltà e quindi aggiorna il layout del circuito per utilizzare i nuovi qubit. L'algoritmo utilizzato in questo passaggio è descritto in arXiv:2209.15512.

Se viene trovata una soluzione, significa che è disponibile un layout di errore inferiore per il circuito. Se viene trovata una soluzione, il layout verrà impostato nel set di proprietà come property_set['post_layout']. Tuttavia, se non viene trovata una soluzione o una soluzione migliore, non viene impostato property_set['post_layout'] . Il motivo dell'arresto è impostato in property_set['VF2PostLayout_stop_reason'] in tutti i casi e sarà uno dei valori enumerati in VF2PostLayoutStopReason che ha i seguenti valori:

  • "solution found": Se è stata trovata una soluzione.
  • "no better solution found": Se il layout iniziale del circuito è la soluzione migliore.
  • "nonexistent solution": Se non è stata trovata alcuna soluzione.
  • ">2q gates in basis": Se VF2PostLayout non può lavorare con la base del circuito.

Per impostazione predefinita, questo passaggio costruisce una mappa di punteggio euristica basata sui tassi di errore nel sito target. Tuttavia, i passaggi di analisi possono essere eseguiti prima di questo passaggio e impostare vf2_avg_error_map nell'insieme di proprietà con un'istanza ErrorMap . Se un valore è NaN viene trattato come un bordo ideale Ad esempio, se una mappa degli errori viene creata come:

from qiskit.transpiler.passes.layout.vf2_utils import ErrorMap

error_map = ErrorMap(3)
error_map.add_error((0, 0), 0.0024)
error_map.add_error((0, 1), 0.01)
error_map.add_error((1, 1), 0.0032)

che rappresenta la mappa degli errori per un obiettivo a 2 qubit, dove il tasso di errore avg 1q è 0.0024 sul qubit 0 e 0.0032 sul qubit 1. Quindi il tasso di errore avg 2q per i gate che operano su (0, 1) è 0.01 e (1, 0) non è supportato dall'obiettivo. Verrà utilizzato per l'attribuzione del punteggio se è impostato come chiave vf2_avg_error_map nell'insieme di proprietà al momento dell'esecuzione di VF2PostLayout viene eseguito.

Inizializzare un'istanza di VF2PostLayout pass

Parametri

  • target (Target) – Una destinazione che rappresenta il dispositivo di backend su cui eseguire VF2PostLayout .
  • seed (int) – Imposta il seme del PRNG. -1 Significa che non c'è rimescolamento dei nodi.
  • call_limit (int) – Il numero di visite di stato da tentare in ogni esecuzione di VF2.
  • time_limit (float) – Il tempo limite totale in secondi per l'esecuzione VF2PostLayout
  • strict_direction (bool) – Se il passaggio è configurato per seguire la direzione rigorosa nel grafico di accoppiamento. Se questo valore è impostato su false, il passaggio tratterà qualsiasi bordo nel grafo di accoppiamento come un bordo debole e il grafo di interazione sarà indiretto. Ai fini della valutazione dei layout, verrà utilizzato il tasso di errore medio per ogni qubit e per il collegamento 2q. Ciò consente di eseguire il passaggio prima della traduzione della base e di lavorare con le operazioni 1q e 2q. Tuttavia, se strict_direction=True il passaggio si aspetta che l'oggetto di input DAGCircuit di input run() sia presente nell'insieme di istruzioni di destinazione.
  • max_trials (int) – Il numero massimo di prove da eseguire VF2 per trovare un layout. Un valore di 0 (il valore predefinito) significa "illimitato".

Aumenti

TypeError - In fase di esecuzione, se target non è fornito.


Attributi

is_analysis_pass

Controlla se il passaggio è un passaggio di analisi.

Se il passo è un AnalysisPass,, significa che il passo può analizzare il DAG e scrivere i risultati di tale analisi nel set di proprietà. Questo tipo di passaggio non consente di modificare il DAG.

is_transformation_pass

Controlla se il passaggio è un passaggio di trasformazione.

Se il passaggio è un TransformationPass,, significa che il passaggio può manipolare il DAG, ma non può modificare il set di proprietà (ma può essere letto).


Metodi

execute

execute(passmanager_ir, state, callback=None)

GitHub

Eseguire l'attività di ottimizzazione per l'IR Qiskit in ingresso.

Parametri

  • passmanager_ir (IR) – Qiskit IR da ottimizzare.
  • state (PassManagerState) – Stato associato all'esecuzione del flusso di lavoro da parte del gestore del passaggio stesso.
  • callback (Callable[[Task, IR_OUT, PropertySet, float, int], None] | None) – Una funzione di callback che viene chiamata ad ogni esecuzione di un'attività di ottimizzazione.

Risultati

Qiskit IR ottimizzato e stato del flusso di lavoro.

Tipo di restituzione

tupla [ IR_OUT, PassManagerState ]

name

name()

GitHub

Nome del passo.

Tipo di restituzione

STR

run

run(dag)

GitHub

eseguire il metodo di layout

update_status

update_status(state, run_state)

GitHub

Aggiornare lo stato del flusso di lavoro.

Parametri

  • state (PassManagerState) – Passare lo stato del gestore da aggiornare.
  • run_state (RunState) – Stato di completamento dell'attività corrente.

Risultati

Stato aggiornato del gestore dei passaggi.

Tipo di restituzione

PassManagerState

Questa pagina è stata utile?
Segnala un bug, un errore di battitura o richiedi contenuti su GitHub.