Qiskit-Transpile mit verschiedenen Basis-Gates

Oct 09 2020

Ich möchte die Qiskit-Transpile-Funktion verwenden, um eine beliebige einheitliche Matrix / Quantenschaltung in eine spezielle Art von Basisgattern zu zerlegen. ( from qiskit.compiler import transpile)

Aber für mich scheinen die einzigen akzeptierten Basis-Gates 'u1', 'u2', 'u3' und 'cx' zu sein. Gibt es eine Möglichkeit, zum Beispiel 'rx', 'ry' und 'cx' als Basisgatter anstelle von 'u1', 'u2', 'u3' und 'cx' zu verwenden?

Der folgende Fehler

Ausnahme ist aufgetreten: QiskitError "Die Schaltung kann nicht auf die angegebene Basis ['id', 'ry', 'rx', 'cx'] abgewickelt werden. Keine Regel zum Erweitern der Anweisung h."

Zum Beispiel wird aus dem Code erhalten:

from qiskit.quantum_info import Operator
from qiskit.compiler import transpile
import matplotlib.pyplot as plt
from qiskit.compiler.transpile import CouplingMap

coupling_string = [[0, 1], [0,2], [1,2]]

CM = CouplingMap(coupling_string)

qc = QuantumCircuit(3)

qc.h(0)
qc.h(1)
qc.h(2)

result = transpile(qc, coupling_map=CM, basis_gates=['id', 'ry', 'rx', 'cx'], optimization_level=1, seed_transpiler=1) 
result.draw(output='mpl')
plt.show()

Antworten

1 MatthewTreinish Oct 08 2020 at 23:05

Welche Version von Qiskit verwenden Sie? Die Unterstützung für eine willkürliche Basisübersetzung wurde kürzlich in Qiskit 0.20.0 / Qiskit-Terra 0.15.0 hinzugefügt. 1 Wenn Sie eine ältere Version von Qiskit ausführen, schlägt der Transpiler wie folgt fehl, da der Abroller nicht wusste, wie er diesen Basissatz verwenden soll. Bei Verwendung der neuesten Qiskit-Version wird jedoch ein Schaltungsbild wie folgt ausgegeben:

Es ist erwähnenswert, dass die Transpilation nicht großartig ist, da der 1-Qubit-Optimierungsdurchlauf noch keine beliebigen Basissätze versteht und immer noch nur für u1, u2, u3 funktioniert, weshalb diese Ausgabe so groß ist. Es liegt noch Arbeit an, um dies zu behebenhttps://github.com/Qiskit/qiskit-terra/pull/3658

1 https://qiskit.org/documentation/release_notes.html#qiskit-0-20-0