量子コンピュータな25日間を振り返る

# はじめに
本日がカレンダ最終日の12/25となります！
当初目標とした、**一通り読めば基礎が身につく！(下記)**ですが、達成度は棚上げしたとして、
**量子ゲート、アニーリング**共に幅広にいろいろなテーマを扱うことはできた気がします。

> 量子コンピュータについて**一通り読めば基礎が身につく**カレンダーを目指します。
> 
> * ① 12/01～12/09　：概論や基礎的な内容を整理
> * ② 12/10～12/19　：基礎アルゴリズムを整理
> * ③ 12/20～12/25　：Tips・ネタ系を掲載
> 
> 「新たな情報をご紹介する」というよりは、、
> 「基礎～応用までを体系的に整理」することを目的としている背景で、、
> 
> * 特に①や②の一部で、<b>既存記事（公開済み記事）を活用</b>しつつ
> * 新たに、必要な内容の整理、新規トピックのまとめを行い

本日は、全25日を振り返ってみたいと思います。

# 概論
## 超々概論（12/1）
まずは、初日ですが、コインを使って量子計算のイメージをお伝えしてみました。
**雰囲気として**伝わっていれば、もしくは、**面白そうだな**と興味を持っていただければ、
成功だったのですが、いかがでしたでしょうか。

https://qiita.com/shnchr/items/92490509b2ae998f2f82

## 概論（12/2～12/4）
次に3日間かけて、量子コンピュータのハード、ミドル、プラットフォームを整理しました。
特にハードウェアの動向は日々変わっていくので、変化を捉えるのは大変なのですが、最近話題の冷却原子含めリストアップできたのは良かったかなと考えています。
超電導、シリコン、イオントラップ、冷却原子、光、どのデバイスが来るのかは本当に、神のみぞ知る世界かもしれませんが、次のゲームチェンジャの登場に期待しましょうｗ

https://qiita.com/izey0306/items/e643dd30b3fcf37f0905

https://qiita.com/izey0306/items/e9e6b1a5b7d4ed698956

https://qiita.com/izey0306/items/2472693fac7abf59f415

# 量子ゲート型
## 単一量子ビットの計算（12/5、6）
量子ゲートの計算の基礎を扱いました、行列が出てきたり、色々なゲートが出てきたり大変でしたが、ご理解いただけたでしょうか。
やはり、とっつきにくい分野ですのでご理解頂きやすい様に図等を多用して書いてみたつもりですが、その反面、冗長な記事となってしまった感もありました。

https://qiita.com/shnchr/items/d0702c441cec472096f4

https://qiita.com/shnchr/items/15a42eaf971932230a50

## 多量子ビットの計算（12/7～12/9）
単一量子ビットの操作の次は、複数量子ビットの計算です。
$CNOT$ゲートを導入したのですが、やはり、$H+CNOT$が揃ったということで、ゲート演算の面白みを感じることができる量子テレポーテーションと、超高密度符号化実験を題材に、複数ビット計算をご理解いただけるよう準備してみました。
数式だけが並ぶときついので、マウス操作でゲートを構成できる[Quirk](https://algassert.com/quirk#circuit={%22cols%22:[]})を多用し、記事を書いてみましたが、いかがだったでしょうか？

https://qiita.com/shnchr/items/841e8ec7e7b6b39c572c

https://qiita.com/shnchr/items/cbbaacf9e6f5f248c0d8

そして、多量子ビットの計算でなんと言っても外せないのが、位相キックバックです。
このあとのQPE含め、基礎アルゴリズムがこの位相キックバックを用いるため、$CNOT$の制御ビットにどのように、位相がキックバックされるのかを説明してみました。ここでうまくご理解いただければ、このあとのQFT、QPE等にもうまく繋がったかなと考えています。

https://qiita.com/shnchr/items/ae194ba81cd07f2277f6

## Long-termアルゴリズム（12/10～12/13）
理想的な量子コンピュータでは、こんな演算ができる！のLong-termアルゴリズムに触れました。
なんと言っても、まずはQFTとQPEからです。
Long-termアルゴリズムの基本ルーチンですので、ご理解いただければ嬉しいです。

https://qiita.com/izey0306/items/2a63e8c6224a2b640ccd

次に、ドイチェ／ドイチェ・ジョザ／サイモンのアルゴリズムを説明しました。
一見、退屈なアルゴリズムですが、歴史を知ると不思議と、とても興味深く感じます。
それは、***David Deutsch***の論文に対する***Richard Jozsa***の反応からも垣間見ることができます。

> ***"It was a funny paper, as it includes brilliant ideas and lots of mistakes"***
>　　　　　　　　　　　　　　　　　　　　　　　　　       ***--- Richard Jozsa***

量子計算理論の胎動を感じ、**歴史が動き始めたその瞬間**が学べるのが、このアルゴリズムではないでしょうか。こんな褒め言葉、ぜひ頂いてみたいものですｗｗ
詳細は、**「慶応大学 量子コンピュータ授業 #8量子コンピュータの歴史」**[^1] をご確認ください。
とても、面白く、価値ある授業ですので、一度、ご確認いただければと。

[^1]: https://youtu.be/wBilQWKd1yU?t=3673

https://qiita.com/nukipei/items/a651da3d03f2efd04eb3

そして、量子オラクルを使ってGroverのアルゴリズムに触れました。
Groverを学ぶと、**「神様、最初から答え知っている疑惑」**にぶちあたるのですが、その点にも触れ、$CtrlZ$を用いた最も単純なオラクルで構成する2-bit Grover Serachから発展させ、
Oracle work bitを用い3-bitのGroverと、GroverOperatorの適用回数についても少し考察しました。
もう少し複雑なオラクルの設計については、いつか、また別枠でまとめたいと思います。

https://qiita.com/shnchr/items/4160d2d066873824e35e

最後に、Long-termアルゴリズムの締めくくりとして、Shorのアルゴリズムにふれました。
量子コンピュータが暗号解読につかえるかも？とよく言われますが、その理由は、位数推定問題における求解の優位性にあります。その点を冪剰余の導入から説明させていただきました。

https://qiita.com/tarutaru000/items/bc299d14609d4470b04e

## NISQアルゴリズム（12/14～12/16）
次に、***NISQ(Noisy Intermediate-Scale Quantum)*** アルゴリズムです。
古典／量子ハイブリットアルゴリズムで、***VQE,QAOA,QCL***についてまとめさせて頂きました。
まずは、こちらで、IBM Quantum ChallengeでのVQEの応用例を整理させていただきました。

https://qiita.com/tarutaru000/items/4912ad901c9ef2c92973

次に、QAOAの回路を丁寧に構成し、説明させていただきました。
イジングハミルトニアンを如何に構成するかを１量子ビット→２量子ビットと徐々に議論を広げていきました。

https://qiita.com/doiken_/items/2ff46bde7f107f23de6a

最後にQCLです。論文や教科書通りに回路を構成すると、（こちらの考慮漏れか？）うまく学習が進まず、試行錯誤の中で、Z回転ゲートを入れたら、そこそこフィッティング出来たあたりはとてもおもしろかったです。

https://qiita.com/doiken_/items/1d66fe4d10805532d6a5

## FTQCに向けて（12/17,18）
***FTQC(Fault Tolerant Quantum Computing)***に向けては、如何に量子系の誤りを訂正し、信頼できる計算を手に入れるか？ですが、本カレンダの中では２つの誤り訂正を扱いました。
１つ目は、Shorの符号です。
ただ、なぜ量子系の誤り訂正が難しのか？をご理解いただく為に、Nielsen & Chuang[^2]が指摘する誤り訂正の困難性について冒頭で触れ、Shorの符号の説明に入っていきました。
ビットフリップ／フェーズフリップ共に訂正するためには9ビット必要である。という衝撃的な事実を知ると共に、連続的な量子エラーも、パウリゲートに分解可能な背景で、測定によりエラーが離散化するという量子誤り訂正の面白い特性にも触れました。

[^2]: [Nielsen & Chuang,Quantum Computation and Quantum Information, p.427](https://www.cambridge.org/core/books/quantum-computation-and-quantum-information/01E10196D0A682A6AEFFEA52D53BE9AE)↩

https://qiita.com/shnchr/items/a958bcc52898824693bf

そして、Shorの符号で課題となる、量子ビット増大時の物理状態（符号語）の複雑性に触れ、スタビライザという演算子を用いて物理状態（符号語）を表現するスタビライザ符号について触れました。
説明には、パウリ群、スタビライザ群、スタビライザ群の生成元とスタビライザー状態、検査演算子、シンドローム測定、様々な概念が出てきてしまい、なかなか、理解するのが厳しいのですが、順を追って説明したつもりです。
が、そもそも筆者の理解が足りていない疑惑が濃厚ですので、なにかあればコメントいただければと。

https://qiita.com/shnchr/items/ec30fb2533d3cf6eec57

# アニーリング（12/19～21）
そして、終盤では、量子アニーリングについて議論をすすめていきました。
まずは、アニーリングにて求解するためには、QUBO問題への帰着と定式化が必要ですので、その方法についてまとめさせていただきました。
比較的簡単な定式化を題材に議論をすすめさせて頂きましたが、ご理解いただけたでしょうか？

https://qiita.com/nukipei/items/66ec2119bc0f80e9f117

次に、実際にD-Waveで求解してみると、ここでも様々な工夫が必要となります。
PyQUBOの利用に始まり、Chain breakとchain strengthの調整、サンプリング回数の調整等、実際に実機を使うにあたって必要な考慮点を整理させて頂きました。

https://qiita.com/izey0306/items/64174c291ae2292dec20

https://qiita.com/izey0306/items/83cc3b67abba79007a95

# 最後にTips系（12/22～24）

最後に応用例として、Fixstars Amplifyを用いて日経225のポートフォリオ最適化を行いました。
ポートフォリオ最適化のコードは、AmplifyのDemoサイトにあるので、日経225のデータロード部分を中心に説明しています。

https://qiita.com/mtakada00/items/45947343b1d77a71b72b

次に、実際に巡回経路問題と解いてみる。というお題で、こちらは、Fixstars Amplifyを用いて進めさせていただきました。皆さんの身近なところにも最適化問題はひっそり潜んでいるはずですので、是非、そういった身近なテーマで試していただければと思います。

https://qiita.com/nukipei/items/aad014afdb024a72b639

最後の締めくくりとして、
IBM Quantum Challenge Fall 2021の難問だった[Challenge 4](https://github.com/qiskit-community/ibm-quantum-challenge-fall-2021/blob/main/content/challenge-4/challenge-4.ipynb) の「電池による収益の最適化を断熱量子計算で解く」を、コンテスト後に公開されていた [LukasBotschさんのソースコード](https://github.com/lbotsch/ibm-quantum-challenge-fall-2021/blob/main/solutions-by-participants/challenge-4/4C_LukasBotsch.ipynb)を参考にしながら読み解くという記事でした。QFT加算器や制約・罰則の与え方あたりがとても勉強になりました。

https://qiita.com/doiken_/items/23326dd6d743b24df93e



# まとめ
25日間の締めくくりとして、全記事をざーっとまとめてみました。
正直、研究者・専門家にレビュー頂いている訳ではないので、間違いも多いかもしれません。

ただ、量子コンピューティングや並列計算の可能性を感じる、産業界の数人のエンジニアとして、
その可能性や魅力を一般の方に、より分かりやすくお伝えし、何らかかの形で、
量子コンピューティングの堅実かつ健全な成長に、少しでもお役立ちできれば嬉しく思います。

我々の記事は、多くの***mistakes***を含むと思いますが、***brilliant***と思えるような議論を
何か一つでも、見つけて頂けたのならば、嬉しく思います。

最後に、Richard Jozsaの言葉を引用し終えたいと思います。
25日間ありがとうございました！（メリー・クリスマス　＆　良いお年を）

***"It was a funny paper, as it includes brilliant ideas and lots of mistakes"***
　　　　　　　　　　　　　　　　　　　　　　　　　      　　　　     ***--- Richard Jozsa***