Help us understand the problem. What is going on with this article?

QISKit 手引き

More than 1 year has passed since last update.

ちょっとIBM Qを触ってみたので、QISKitについてまとめておきます。

2017年11月時点の記事であり、最新の内容ではありません。

導入

  • IBM Qについて

  • QISKit

    • IBM Researchと研究者によって与えられている、IBM Qにジョブ投げするためのKit
    • Githubにチュートリアル用のJupyter, Python SDK, Swift SDK, JavaScript SDK, Python API, またユーザガイドやopenqasmのガイド等が存在
    • なぜか公式が英語と日本語に対応しており、Python SDKではマニュアルを読めば簡単に実装可能
      • また公式の開発速度が結構な速度なので、公式の解説が最も頼りになります
      • 日本語対応は終了している模様です(2019年追記)
    • 量子コンピュータで1+1を計算する[実装編]: Python SDKの実装例の記事

QISKitにでてきたOpenQASMとは何か, APIとSDKの違いは何かについては以下では記述します。

OpenQASM

  • OpenQASM: 量子アセンブリ言語(quantum assembly language (QASM))
  • OpenQASMは量子回路を記述するための言語です
  • IBM QのComposer画面から、OpenQASMを用いて回路設計が可能です
    • 手順: "Switch to Qasm Editor"をクリックすると、 スクリーンショット 2017-11-26 18.54.27.png QASMで回路を設計できるようになります スクリーンショット 2017-11-26 18.54.50.png
  • QISKitのSDK, APIは内部でOpenQASMを記述しています
  • Cross et al. (2017) Open Quantum Assembly Languageで詳細が記述されています

SDK

例えば1+1のシミュレータ計算は下記のように計算できますが、

from qiskit import QuantumProgram
import json

def read_api():
    f_api = open("../api_token.json", "r")
    api_dic = json.load(f_api)
    QX_TOKEN = api_dic["api"]
    QX_URL = "https://quantumexperience.ng.bluemix.net/api"
    return(QX_TOKEN, QX_URL)

class Q_Circuit():
    _Name = "summation"
    _Num_qr = 4
    _Num_cr = 4

def summation():
    qp = QuantumProgram()
    token, url = read_api()
    qp.set_api(token, url)

    #Qbitの設定
    qr = qp.create_quantum_register("qr", Q_Circuit._Num_qr)
    cr = qp.create_classical_register("cr", Q_Circuit._Num_cr)
    qc = qp.create_circuit(Q_Circuit._Name, [qr], [cr])

    #回路部分       
    qc.h(qr[0])
    qc.h(qr[1])
    qc.ccx(qr[0], qr[1], qr[2])
    qc.cx(qr[0], qr[3])
    qc.cx(qr[1], qr[3])

    qc.measure(qr, cr)
    print(qp.get_qasm(Q_Circuit._Name))     #QASMコードの取得
    result = qp.execute([Q_Circuit._Name], shots=1024)      #計算の実行
    print(result.get_data(Q_Circuit._Name))

if __name__ == '__main__':
    summation()

print(qp.get_qasm(Q_Circuit._Name)) で取得できるように、またqiskitの中身( _quantumcircuit.py, _quantumregister.py )を見ればわかるように、内部ではOPENQASMが使われています。
(executeはデフォルトがbackend="local_qasm_simulator")

API

APIはより直接的に、OpenQASMそのものを記述してIBM Qに送ります(参考コード)。
1+1の場合、先程のOPENQASMを利用して、シミュレータで、

from IBMQuantumExperience import IBMQuantumExperience
import json

def read_api():
    f_api = open("../api_token.json", "r")
    api_dic = json.load(f_api)
    QX_TOKEN = api_dic["api"]
    QX_URL = "https://quantumexperience.ng.bluemix.net/api"
    return(QX_TOKEN, QX_URL)

def Qasm_Code():
    qasm = """//OPENQASM 2.0
OPENQASM 2.0;
include "qelib1.inc";
qreg q[4];
creg c[4];
h q[0];
h q[1];
ccx q[0],q[1],q[2];
cx q[0],q[3];
cx q[1],q[3];
measure q[3] -> c[0];
measure q[2] -> c[1];
measure q[1] -> c[2];
measure q[0] -> c[3];
"""
    return(qasm)

def main():
    token, url = read_api()
    IBMQ = IBMQuantumExperience(token)
    qasm = Qasm_Code()
    result = IBMQ.run_experiment(qasm, shots= 1024,name='api_test', timeout=60)
    print(result.values() )

if __name__ == '__main__':
    main()

とすることで計算を実行できます。(run_experimentのデフォルトがbackend='simulator',
IBMQuantumExperience.py)
ibmqx4に計算を投げる場合はrun_experimentをbackend="ibmqx4"と指定します。
(上記の回路設計ではibmqx4では計算が走らないので、適宜qasmを変える必要があります)

API経由で投げた計算は、IBM QのComposerページのQuantum Scoresに結果が溜まってしまうのが注意点です。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした