ウィリアムのいたずらの、まちあるき、たべあるきーPART2

gooブログ「ウィリアムのいたずらの、まちあるき、たべあるき」がお引越ししてきました

結局量子コンピューターの計算方法を書くには、どうすればいい?を聞いてきた

どうも、4月に入ってから「聞いてきた!」シリーズを書いていないみたいなので、
一気にまとめ書き

基礎から応用やトレンドまで学ぶ量子コンピューティングセミナー#2
https://liberal-arts-for-tech.connpass.com/event/123267/

の内容メモメモ、

で、表題の件を言うと、

1.まずどうやって量子を計算していくかの回路図をHとかXとかYとか使って書く
2.それをプログラミングに落とす。
  そのプログラミングの内容は、したのメモに出てくる
   1.量子ビットを用意して、初期化する
   2.計算を記述する(ユニタリ行れるで)
   3.計算する(ユニタリ行列を量子ビットに作用させるという)
   4.測定する→確率的に答えが求まる
3.そのプログラムをシミュレーターで動かす。または量子コンピューターで動かす。




https://github.com/kyamaz/openql-notes/tree/master/docs/20190409
に今日の資料は入ってるよ!

・自己紹介
 OpenQLやってる。

・今日のゴール
 量子計算の手順を身に着ける
 量子アルゴリズム
  Groverのアルゴリズム
  量子テレポーテーション
 Shorのアルゴリズムは努力目標

・量子コンピューター
 量子的なものを扱う(定義は決まっていない)
 量子状態がつくれればいい→ハードウェアはいろいろ

・2方式
 アニーリング方式、ゲート方式
 アニーリング:組み合わせ最適化しかできない
 ゲート:理論上、なんでもできる

・手元でプログラム書いて、実行できる
 →シミュレーションもできる

・量子コンピューター:アセンブリを強いられる

・SymPy(しむぱい):量子コンピューター関係ない
 MathmaticaのPyThon版
 数学的な式変形に適している
 →量子コンピューターの計算機能も入ってる

・ケット、ユニタリ、ゲート回路図をくみ上げていく


量子計算は、複素行列の演算として扱えます。
1.量子ビットを用意して、初期化する
2.計算を記述する(ユニタリ行れるで)
3.計算する(ユニタリ行列を量子ビットに作用させるという)
4.測定する→確率的に答えが求まる

量子ビット:縦ベクトルになる 確率を表している
Hとかは行列に落とせる

qappl:ようす
H(0)とかH(1)は、どのキュービットにいるかを示す
X=Not
CNot コントロールが1のとき反転する
toffoli(とほり)ゲート

SymPyは順番が逆(数学的には正しい)
 メジャーオール:すべての測定(確率)を求めてしまう
 ワンショット:1個づつ出てくる

representsで行列展開する(それまでは代数)


・意味のある計算:Grover
 1つの状態をみつけだす
アルゴリズム
 一様な重ね合わせをつくる(Hを全部に書ける)
 あたりになった状態を、マイナスにする
 拡散変換をする(平均値まわりの反転)
 サブルーチン

かさねあわせ→あだまーる
マーキング→CCZ

やった内容のまとめ
https://qiita.com/openql/items/e5b98bcd13fb4f0b6d59