Farklı temel kapıları ile Qiskit transpile
Qiskit transpile fonksiyonunu rastgele bir üniter matris / kuantum devresini özel bir tür temel kapılara ayırmak için kullanmak istiyorum. ( from qiskit.compiler import transpile)
Ama benim için kabul edilen tek temel kapılar 'u1', 'u2', 'u3' ve 'cx' gibi görünüyor. Örneğin "u1", "u2", "u3" ve "cx" yerine temel kapılar olarak "rx", "ry" ve "cx" kullanmanın bir yolu var mı?
Aşağıdaki hata
İstisna oluştu: QiskitError "Devrenin kaydı verilen temele göre ['id', 'ry', 'rx', 'cx'] açılamıyor. H komutunu genişletecek kural yok.
örneğin şu koddan elde edilir:
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()
Yanıtlar
Qiskit'in hangi sürümünü çalıştırıyorsunuz? Qiskit 0.20.0 / Qiskit-Terra 0.15.0 sürümüne çok yakın zamanda keyfi temelde çeviri desteği eklendi. 1 Qiskit'in daha eski bir sürümünü çalıştırıyorsanız, aktarıcı bu şekilde başarısız olacaktır çünkü silici bu temel kümeyi nasıl kullanacağını bilmiyordu. Bununla birlikte, en son Qiskit sürümünü kullanırken, aşağıdaki gibi bir devre görüntüsü çıkaracaktır:
Transpilasyonun harika olmadığını belirtmekte fayda var çünkü 1 kübit optimizasyon geçişi henüz keyfi temel kümeleri anlamıyor ve hala sadece u1, u2, u3 için çalışıyor, bu yüzden bu çıktı çok büyük. Bunu düzeltmek için bekleyen işler varhttps://github.com/Qiskit/qiskit-terra/pull/3658
1 https://qiskit.org/documentation/release_notes.html#qiskit-0-20-0