量子プログラミング入門 #2 RaspberryPi への QCL インストール&QCL はじめの一歩 2019.5.18 新海 春彦 1.QCL の RaspberryPi へのインストール
(1)ソースをダウンロードして展開
QCL のソースは http ://tp h.tuwi en.ac.at/ ~o em er/q cl .htm l にあります。 (“QCL 言語”などで検索して、上記の URL を選ぶ)
Download
の ・Source Distribution:
qcl-0.6.4
の qcl -0.6. 4 から、右クリックしてファイルを保存します。場所はたとえば Desk to p など。 保存したら、同じく右クリックで解凍します。「qcl-0.6.4」というフォルダーができます。 (2)コンパイルする。足らないライブラリはそのつど補ってコンパイルしなおす。 ・コマンドプロンプトで、cd Desktop ⇒ cd qcl -0.6. 4 など とし て、(1) でできた フ ォル ダ に 移 動 。 ・ mak e と打 っ て コ ンパ イ ル する 。エ ラーが 出 た ら 、 下 記 の 要 領 で足 らな い ライブ ラリを イン ス トール して 、再 度 mak e と打 っ て コ ンパ イ ル 。 マー ク ⇒ 設 定 ⇒ Ad d /Remo ve So ftwar e の 検 索 窓 に エ ラーの 出 た ライ ブラリ の 名 前 を 入 れ て検 索 ⇒見 つ か った ら チ ェッ ク を入 れ て、 Ap pl y 見 つ か らな か った ら 、 頭 に「li b 」をつ け る 。た だ し 先 頭 が 「l」の とき は「l 」の 代 わ りに 「li b 」 例: readl i ne ⇒ li b r eadl i ne lfl ⇒ lib fl
名前の直後に数字、あるいは何もなしでその後に -dev がついたものがあれば大体それ。 見つかった中で、できるだけ新しそうなものにする。
多少違っていても、システムが必要な関連ライブラリを追加してくれるので、大概はうまくいく。 例として、NOOBS 3.0.1 の環境で追加したライブラリは次のとおり。
事 前 に li b pl o t-d ev-2.6-7
read l i ne.h ⇒ li b r eadl i ne-d ev-7.0- 3
ncur ses ⇒ li b ncur se s5-d ev-6. 0+20161126-1 +deb 9u2 lfl ⇒ li bfl -d ev-2.6 .1-1.3
・コンパイルがうまくいったら、mak e ins tal l と打って完成。qcl と打つとqclが起動する。 2.QCL はじめの一歩 (1) 量子ビットの割付 qu r eg 名 [個数] : 個数分だけ 量子ビットを割り当てる 例 qcl > qur eg q[ 2] : qという変数に2個、量子ビットを割り当てる。なお最初のビットは q[0] (2) 量子ビットの内容を見る dump 量子ビット名 例 qcl > dum p q[ 1] 結 果 : SPE C T RUM q[ 1] : <1> 見 方 : q[ 1] つ まり q の <1> 番 目 の 量 子 ビ ッ トは 1 |0> 0 とな る確 率 が 1 (3) 量 子 ビ ッ トの 「重 ね 合 わ せ」 (ア ダ マール 変 換 H adam ar d) H( 量 子 ビ ッ ト名 ) 「重ね合わせ」は量子ビットの基本の 1 つです。 0 であ り 1であ る 状 態 を作 り 出 しま す。 例 qcl > H(q ) qcl > dump q[ 1] ・・・結 果 を見 る た めに (2)と 同 じ dum p を とっ てみ る 結 果 : SPE C T RUM q[ 1] : <1> 見 方 : q[ 1] つ まり q の <1> 番 目 の 量 子 ビ ッ トは 0.5 |0> , 0.5 |1> 0 とな る確 率 が 0.5 、 1 とな る確 率 が 0.5 ⇒ 裏 面 へ 続 く
(4) 量子ビットの測定 mea s ur e 量子ビット名 ( , 結果を格納する変数) 「測定」も量子ビットの基本です。量子ビットは測定するまでは0か1か分かりませんが、 一度測定すると、結果は0か1のいずれかに固定され、その後は変化しません。 (5) 量子ビットのリセット res et 量子ビットを最初の状態に戻します。これは dump と同様、コンピュータ上でのみ可能な命令です。 (物理状態では、測定した量子ビットは元に戻りませんし、測定以外の方法では内容を確認できません。) ※ QCL は、ひとつの同じプログラムのなかで古典的(量子プログラミング以前の)コードと量子プログラミングの コードを組み合わせることが可能なことを特徴としています。上で説明した量子プログラミング以外のコードに ついては、C 言語とほぼ同じです。 3. 0 であり1である状態を確かめる量子プログラミング 0 であり1である状態を確かめる QCL プログラミング (kas aneawas e ) 実行結果の例 (表示内容は一部省略) 0 と1がおよそ半々になる。 ※インタープリターの為{と }が同じ行内にないと認識できないようで、実際には次のように改行を除去して入力。 ○ 量子プログラミング部分の量子回路 上記プログラミングのうち、量子プログラミング部分を量子回路で表すと 次のようになります。 :アダマールゲート :測定 ※次回 量子プログラミング入門 #3 量子もつれ(エンタングルメント)と量子テレポーテーション (予定) qur e g q[ 1 ] ; // 量 子 ビ ッ トを1個 割 り当 て る int a; // 測 定 結 果 保 存 場 所 int l; // ル ープ の カウ ン ト int m ; // 0の カウ ン ト場 所 int n; // 1の カウ ン ト場 所 m = 0;n = 0; // カウ ン トの 初 期 化 fo r l = 1 to 1000 0 // 1 万 回 試 行 { res et ; H( q ); // 重 ね 合 わ せ me as u r e q[ 0],a // q[ 0 ]を測 定 if a==0 { m = m + 1; } // 0 をカ ウン ト el s e { n = n + 1; } // 1 をカ ウン ト } pr int "0 = ",m ,", 1 = ",n ;// 結 果 の 印 刷 qur eg q[ 1];
int a;in t l;i nt m;i nt n; m = 0; n = 0;
fo r l = 1 to 10 000{re set;H (q );meas ur e q[ 0],a;i f a== 0{m =m +1;}el se{n=n +1;}} pr i nt "0 = ", m ,", 1 = ",n ; $ qcl kas aneawas e : 0 = 5038 , 1 = 4962 $ qcl kas aneawas e : 0 = 5009 , 1 = 4991 $ qcl kas aneawas e : 0 = 4960 , 1 = 5040 $ qcl kas aneawas e : 0 = 5010 , 1 = 4990 $ qcl kas aneawas e : 0 = 4970 , 1 = 5030 $ qcl kas aneawas e : 0 = 4944 , 1 = 50 56 :