3月23日に
IBMのQiskit,python
量子コンピューターで学ぶ量子プログラミング入門
https://lab-kadokawa77.peatix.com/
行って、学んだことの一部を披露します。
■量子コンピュータのプログラムをつくるために必要な環境
量子コンピューターはIBM Qを使う場合、Qiskit(くいずきっと/きすきっと)
というのを使うみたい。これはpythonからアクセスできる。
したがって、あなこんだ入れて、そこからQiskitをpipしたりして、とってくるかんじ。
ただ、動かすのにAPIキーがいる。このAPIキーを取得するためにIBMに登録する
登録サイト
Join the IBM Q Experience Community
https://quantumexperience.ng.bluemix.net/qx/community
(登録も利用もCommunity版は無料。sign inから入って、初めて登録(sign up)する。
My Account→Advanced→RegenerateでAPI生成)
■量子プログラム
基本的には、量子プログラムは、以下のゲートの組み合わせで作る。
X
Y
Z
H(あだまーる)
CNOT
S
T
プログラムの流れとしては、
・計算の準備
qiskitのインポート(IBMQから)
APIキーを入れる
各種インポート
・回路図を作成する
・1(,2,3・・・必要なだけの)qubitの量子レジスターを生成する
・レジスターに作用する量子回路を生成する
・生成したqubitの[0][1]に上記ゲート(Hとか)をつけていく
→cnotは ex.cx(q[0],q[1])みたいなかんじで2つ指定
・draw(output='mpl')で回路図表示
・観測する場合は、以下のかんじ
1bitの古典レジスターを生成する
計測を含む量子回路を生成する
(QuantumCircuit()、最適化されないためのbarrier())
計測結果を古典ビットにうつす
meas.measure(q,c)
Qiskit の回路オブジェクトは、'+' 演算子で回路の合成ができるので
上記回路と観測部分を+する
描画
・シミュレーターで動かす
IBM Aerのqasm_simulatorを利用する(BasicAer.get_backend)
作った回路を qsam_simulator上で走らせる(execute(qc, backend_sim, shots=繰り返し回数))
jobから結果を取り出し(result_sim = job_sim.result)、
結果を取得して(get_counts)、print
ヒストグラムでも書き出せる
from qiskit.tools.visualization import plot_histogram
plot_histogram(counts)
・実機で動かす:うまくいきそうだったら、実機で確認
IBM Qアカウントを読み込み
IBM Qデバイスの確認(configuration)、一番使っていないのをたしかめる(least_busy)
ジョブ送信(execute)
→statusで状態確認できる。job_monitorすると同期になる(終わりまで待つ)
resultで結果取得
今度気が向いたら環境設定やプログラミングについて書くつもり(どこかのエントリーで)
IBMのQiskit,python
量子コンピューターで学ぶ量子プログラミング入門
https://lab-kadokawa77.peatix.com/
行って、学んだことの一部を披露します。
■量子コンピュータのプログラムをつくるために必要な環境
量子コンピューターはIBM Qを使う場合、Qiskit(くいずきっと/きすきっと)
というのを使うみたい。これはpythonからアクセスできる。
したがって、あなこんだ入れて、そこからQiskitをpipしたりして、とってくるかんじ。
ただ、動かすのにAPIキーがいる。このAPIキーを取得するためにIBMに登録する
登録サイト
Join the IBM Q Experience Community
https://quantumexperience.ng.bluemix.net/qx/community
(登録も利用もCommunity版は無料。sign inから入って、初めて登録(sign up)する。
My Account→Advanced→RegenerateでAPI生成)
■量子プログラム
基本的には、量子プログラムは、以下のゲートの組み合わせで作る。
X
Y
Z
H(あだまーる)
CNOT
S
T
プログラムの流れとしては、
・計算の準備
qiskitのインポート(IBMQから)
APIキーを入れる
各種インポート
・回路図を作成する
・1(,2,3・・・必要なだけの)qubitの量子レジスターを生成する
・レジスターに作用する量子回路を生成する
・生成したqubitの[0][1]に上記ゲート(Hとか)をつけていく
→cnotは ex.cx(q[0],q[1])みたいなかんじで2つ指定
・draw(output='mpl')で回路図表示
・観測する場合は、以下のかんじ
1bitの古典レジスターを生成する
計測を含む量子回路を生成する
(QuantumCircuit()、最適化されないためのbarrier())
計測結果を古典ビットにうつす
meas.measure(q,c)
Qiskit の回路オブジェクトは、'+' 演算子で回路の合成ができるので
上記回路と観測部分を+する
描画
・シミュレーターで動かす
IBM Aerのqasm_simulatorを利用する(BasicAer.get_backend)
作った回路を qsam_simulator上で走らせる(execute(qc, backend_sim, shots=繰り返し回数))
jobから結果を取り出し(result_sim = job_sim.result)、
結果を取得して(get_counts)、print
ヒストグラムでも書き出せる
from qiskit.tools.visualization import plot_histogram
plot_histogram(counts)
・実機で動かす:うまくいきそうだったら、実機で確認
IBM Qアカウントを読み込み
IBM Qデバイスの確認(configuration)、一番使っていないのをたしかめる(least_busy)
ジョブ送信(execute)
→statusで状態確認できる。job_monitorすると同期になる(終わりまで待つ)
resultで結果取得
今度気が向いたら環境設定やプログラミングについて書くつもり(どこかのエントリーで)