Qiskit-Transpile mit verschiedenen Basis-Gates
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
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