Qiskit 1.0.0の量子(シミュレータ)プログラミング
Qiskit1.0.0 のリリースによりqiskitモジュールから “IBMQ” “execute” ”Aer”といった旧版でよく使っていた属性が削除されてしまいました。※Qiskit 1.0.0 Release note
それにより、量子プログラミング方法について書籍に記載されているものが通用しなくなったりと(自分的には)大きく変わったと感じています。
例えば、シミュレータの設定(旧版ではAerを利用)やproviderの設定方法(旧版ではIBMQを利用)や回路の実行方法(旧版ではexecuteを利用)です。
そこで今回「Migrate from qiskit_ibm_privider」を参照し、改めて上記属性やオブジェクトの使い方を見直しました。その内容をここに記載致します。
シミュレータを使っていて私が感じた旧版Qiskitと新版Qiskit間の違い。
旧版Qiskit
1 シミュレータを準備する際に、シミュレータオブジェクト(Aer)からバックエンドオブジェクトを得る
2 構築回路の実行時、実行関数(execute)にバックエンドオブジェクトを伝える
新版Qiskitでは
1' qiskit_ibm_providerオブジェクトからシミュレータを指定してproviderオブジェクトを得て、このproviderオブジェクトからバックエンド情報を得る
2' バックエンドオブジェクトを使ってシミュレータを動かす。
コード例
宣言
from qiskit_ibm_provider import IBMProvider
from qiskit import QuantumCircuit, transpile
from qiskit.visualization import plot_histogram
回路形成
circuit = QuantumCircuit(2, 2)
circuit.h(0)
circuit.cx(0, 1)
circuit.measure_all()
circuit.draw('mpl')
実行マシン構築(今回はシミュレータ)
provider = IBMProvider()
backend = provider.get_backend("ibmq_qasm_simulator")
回路実行
transpiled_circuit = transpile(circuit, backend=backend)
job = backend.run(transpiled_circuit)
print(f" > Counts: {job.result().get_counts()}")
plot_histogram(job.result().get_counts())