量子 "Hello World"が必要なように聞こえます。これの最も簡単な量子バージョンは、テキストのバイナリエンコードバージョンHello World
をキュービットのレジスタに書き込むことです。ただし、これには約100キュビットが必要で、コード長の上限よりも長くなります。
それでは、短いテキストを書きましょう。書きましょう;)
。長さ16のビット文字列が必要です。具体的には、ASCIIエンコーディングを使用します
;) = 00111011 00101001
QISKitを使用して、次のコードを使用してこれを行います。
from qiskit import QuantumProgram
import Qconfig
qp = QuantumProgram()
qp.set_api(Qconfig.APItoken, Qconfig.config["url"]) # set the APIToken and API url
# set up registers and program
qr = qp.create_quantum_register('qr', 16)
cr = qp.create_classical_register('cr', 16)
qc = qp.create_circuit('smiley_writer', [qr], [cr])
# rightmost eight (qu)bits have ')' = 00101001
qc.x(qr[0])
qc.x(qr[3])
qc.x(qr[5])
# second eight (qu)bits have 00111011
# these differ only on the rightmost two bits
qc.x(qr[9])
qc.x(qr[8])
qc.x(qr[11])
qc.x(qr[12])
qc.x(qr[13])
# measure
for j in range(16):
qc.measure(qr[j], cr[j])
# run and get results
results = qp.execute(["smiley_writer"], backend='ibmqx5', shots=1024)
stats = results.get_counts("smiley_writer")
もちろん、これはそれほど量的ではありません。したがって、代わりに2つの異なる絵文字を重ね合わせることができます。最も簡単な例は、;)を8)で重ね合わせることです。これらのビット文字列は、量子ビット8と9でのみ異なるためです。
;) = 00111011 00101001
8) = 00111000 00101001
だからあなたは単に行を置き換えることができます
qc.x(qr[9])
qc.x(qr[8])
上から
qc.h(qr[9]) # create superposition on 9
qc.cx(qr[9],qr[8]) # spread it to 8 with a cnot
アダマールの重ね合わせを作成0
して1
、そしてCNOTはの重ね合わせにそれを作る00
と11
2つの量子ビットに。これは、;)
およびで唯一必要な重ね合わせです8)
。
これの実際の実装を見たい場合は、QISKitチュートリアル(完全な開示:私が作成したもの)にあります。