Skip to main content
IBM Quantum Platform

VF2PostLayout

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

GitHub

Bases : AnalysisPass

Une passe pour améliorer une présentation existante après transposition d'un circuit sur un graphe de couplage, en tant que problème d'isomorphisme de sous-graphes, résolu par VF2++.

Contrairement à la passe de VF2Layout qui est conçu pour trouver un schéma initial pour un circuit au début du processus de transpilation, ce processus est conçu pour essayer de trouver un meilleur schéma une fois la transpilation terminée. La phase initiale de mise en page du transpileur ne dispose pas d'autant d'informations qu'après la transpilation. Ce laissez-passer est conçu pour être jumelé dans une filière similaire à celle des laissez-passer de mise en page. Cette étape consiste à retirer tous les fils inutilisés du circuit, à utiliser VF2 pour trouver un sous-graphe dans le graphe de couplage sur lequel le circuit peut fonctionner avec une meilleure fidélité, puis à mettre à jour le schéma du circuit pour utiliser les nouveaux qubits. L'algorithme utilisé dans cette passe est décrit dans le document suivant arXiv:2209.15512.

Si une solution est trouvée, cela signifie qu'il existe un schéma d'erreur inférieur pour le circuit. Si une solution est trouvée, la disposition sera définie dans l'ensemble de propriétés comme property_set['post_layout']. Toutefois, si aucune solution ou aucune meilleure solution n'est trouvée, aucune property_set['post_layout'] n'est définie. Le motif d'arrêt est défini à l'adresse property_set['VF2PostLayout_stop_reason'] dans tous les cas et sera l'une des valeurs énumérées à l'adresse VF2PostLayoutStopReason , qui a les valeurs suivantes :

  • "solution found": Si une solution a été trouvée.
  • "no better solution found": Si la disposition initiale du circuit est la meilleure solution.
  • "nonexistent solution": Si aucune solution n'a été trouvée.
  • ">2q gates in basis": Si VF2PostLayout ne peut pas travailler avec la base du circuit.

Par défaut, cette passe construit une carte de notation heuristique basée sur les taux d'erreur dans le site target. Toutefois, des analyses peuvent être effectuées avant ce passage et définir vf2_avg_error_map dans l'ensemble de propriétés avec une instance ErrorMap . Si une valeur est NaN , elle est traitée comme un bord idéal :

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)

qui représente la carte des erreurs pour une cible à 2 qubits, où le taux d'erreur moyen de 1q est de 0.0024 sur le qubit 0 et de 0.0032 sur le qubit 1. Le taux d'erreur moyen de 2q pour les portes qui opèrent sur (0, 1) est alors de 0.01 et (1, 0) n'est pas pris en charge par la cible. Elle sera utilisée pour la notation si elle est définie comme la clé vf2_avg_error_map dans l'ensemble des propriétés lors de l'exécution de VF2PostLayout est exécuté.

Initialisation d'une instance de passe VF2PostLayout

Paramètres

  • target (Target) – Une cible représentant l'appareil dorsal sur lequel VF2PostLayout doit être exécuté.
  • seed (int) – Définit la graine du PRNG. -1 Cela signifie qu'il n'y a pas de mélange de nœuds.
  • call_limit (int) – Le nombre de visites d'état à tenter dans chaque exécution de VF2.
  • time_limit (float) – Le temps total d'exécution en secondes VF2PostLayout
  • strict_direction (bool) – Si la passe est configurée pour suivre la direction stricte dans le graphique de couplage. Si cette valeur est fixée à false, le pass traitera toute arête du graphe de couplage comme une arête faible et le graphe d'interaction sera non orienté. Aux fins de l'évaluation des schémas, le taux d'erreur moyen pour chaque qubit et chaque lien 2q sera utilisé. Cela permet d'exécuter la passe avant la traduction de la base et de travailler avec toutes les opérations 1q et 2q. Cependant, si strict_direction=True la passe s'attend à ce que l'objet d'entrée DAGCircuit soit run() soit dans le jeu d'instructions cible.
  • max_trials (int) – Le nombre maximum d'essais à effectuer VF2 pour trouver une disposition. Une valeur de 0 (valeur par défaut) signifie "illimité".

Augmentations

TypeError - Au moment de l'exécution, si target n'est pas fourni.


Attributs

is_analysis_pass

Vérifier si la passe est une passe d'analyse.

Si le passe est un AnalysisPass,, cela signifie qu'il peut analyser le DAG et écrire les résultats de cette analyse dans l'ensemble de propriétés. Les modifications sur le DAG ne sont pas autorisées par ce type de passe.

is_transformation_pass

Vérifier si le laissez-passer est un laissez-passer de transformation.

Si la passe est une TransformationPass,, cela signifie qu'elle peut manipuler le DAG, mais qu'elle ne peut pas modifier l'ensemble des propriétés (mais qu'elle peut les lire).


Méthodes

execute

execute(passmanager_ir, state, callback=None)

GitHub

Exécuter la tâche d'optimisation pour l'entrée Qiskit IR.

Paramètres

  • passmanager_ir (IR) – IR Qiskit à optimiser.
  • state (PassManagerState) – État associé à l'exécution du flux de travail par le gestionnaire de passe lui-même.
  • callback (Callable[[Task, IR_OUT, PropertySet, float, int], None] | None) – Une fonction de rappel qui est appelée à chaque exécution d'une tâche d'optimisation.

Retours

Qiskit IR optimisé et état du flux de travail.

Type de retour

tuple [ IR_OUT, PassManagerState ]

name

name()

GitHub

Nom du laissez-passer.

Type de retour

str

run

run(dag)

GitHub

exécuter la méthode de mise en page

update_status

update_status(state, run_state)

GitHub

Mettre à jour le statut du flux de travail.

Paramètres

  • state (PassManagerState) – Transmettre l'état du gestionnaire à mettre à jour.
  • run_state (RunState) – Statut d'achèvement de la tâche en cours.

Retours

Mise à jour de l'état du gestionnaire de passe.

Type de retour

PassManagerState

Cette page a-t-elle été utile ?
Signaler un bogue, une coquille ou proposer du contenu sur GitHub.