【数式なしの量子コンピュータ】　新視点セルオートマトンとグローバー　1回目　はじめに

初投稿の今回は、投稿の背景と目的及び今後の連載記事の予告だけのなので文章ばかりである。具体的な中味は次回以降の投稿となる。ただ、ほんのちょっとだけ以下に[Blueqat](https://blueqat.readthedocs.io/ja/latest/) のコードを記載しよう。
``` c.cx[1+i, i]```
たったこれだけではあるがルール102と称するフラクタル文様が出現する[セルオートマトン](https://ja.wikipedia.org/wiki/%E3%82%BB%E3%83%AB%E3%83%BB%E3%82%AA%E3%83%BC%E3%83%88%E3%83%9E%E3%83%88%E3%83%B3)の完全なアルゴリズムとなっている。尚、このプログラムを含む今後の記事中にある全プログラムはGithubに公開している。

https://github.com/gigagulin/q-cams
#1-1. はじめに
ことのはじめは一年前のGWの東名高速。海老名南JCT－伊勢原JCT間の新東名開通で渋滞緩和が期待されていたのだが現実は大渋滞。今年の東名はガラガラのようで感染学の権威がワイドショーに引っ張りだこだが、去年は渋滞学の権威が出演し渋滞予測のハズレ原因を解説していた。その権威というのは西成活裕東大教授。興味が沸いたのでアマゾンの著者名で検索したら出るわ出るわ先生の本。その中の一冊「クルマの渋滞 アリの行列 -渋滞学が教える『混雑』の真相」を購入した。そこに紹介されていたのが、渋滞シミュレーションに用いる本題の **セルオートマトン**。

同じ頃、自分のビール関連のホームページにビール醸造に必要な[計算のアプリ](https://www.gigagulin.com/nbeercalc.html)をJavaScriptで作成していて、本屋でJavaScriptの本を立ち読みすることがあったのだが、同じ本棚の中で「いちばんやさしい量子コンピューターの教本」湊雄一郎氏著が目立っていた。で、即購入。本の中にBlueqatと言うゲート型の量子コンピュータプラグラム開発用キットが紹介されていた。量子コンピュータと言う言葉は知っていたが、今や自分のパソコンに開発キット（量子コンピュータの動作シミュレーターと本物活用）をインストールし、**量子コンピュータのプログラミング**ができるとは。

上記二者が融合し、量子コンピュータ、つまりBlueqatで、渋滞、つまりセルオートマトンを作ることとした。その結果、渋滞以外の一般的なセルオートマトンを含め色々なことを知り、その過程で種々の工夫や新たな発見があり、それで作成したプログラムとモジュールをq-camsと勝手に称しGithubにコミットしてみた。そんな訳で全くの門外漢かつ素人なれど、今まで見る一方だったQiitaに投稿してみようと思った。

<details><summary>細かなこと</summary>ただこの一年間、最も時間を費やしてしまったことは、量子ビットの初期化、つまり、0であろうと1であろうと、無条件に0に戻すことであった。これはユニタリー変換ではないので量子計算では不可能。が、グローバーアルゴリズムで全て0のベクトルを増幅すれば？　あるいは波束の収束（観測）を利用してユニタリーから逸脱して何とかゼロにできないものか等？結局未だにできていない。</details>
<details><summary>BlueqatとQiskitの差</summary>量子コンピュータのプログラミング開発キット（SDK）はBlueqatだけではない。著名なものとしてQiskit(Qunatum Information Software Kit)がある。IBMの量子コンピュータ用プログラミングツールであって国産ではない。他方、Blueqatは国産である。我が国の産業発展を思うとBlueqatを応援したくなるのだが、重要な差はそこではない。Qiskitには、上述の「細かなこと」で述べた初期化、リセットのゲートがある。さらに古典レジストの数値を条件とした制御ゲートifが存在する。とても便利な気がするが、量子ゲートと呼ぶには何か引っ掛かるものがある。</details>
#1-2. ナンセンス
実のところ、渋滞シミュレーションやセルオートマトンでの計算、あるいはその活用に関しては、古典コンピュータの方がはるかに効率的で柔軟かつ膨大な桁のソリューションを提供でき強力である。現状、量子ビット数が限られる上にエラーコレクションが確立されていない量子コンピュータで考えることはナンセンスである。

また、量子コンピュータ、セルオートマトンの二語でググってみると現在ほどの環境がない過去の一時、画像処理とのからみで研究がなされていたようだが今は見かけない。今も存在し発展しているかもしれないが簡単な検索では見当たらない。曲がりなりにも本物の量子コンピュータが存在する今のトレンドは、量子化学計算を除くと、現実性を考慮した[NISQでの最適化（QAOA)](https://qiita.com/ksj555/items/11a833a6e33c93e315d9)と機械学習への適用が中心のように見える。本記事で量子コンピュータと言えばゲート型を意図しているが、我が国の場合、ゲート型より量子アニーリング型中心で開発が進められていると言う。要するにこの記事はトレンドからはナンセンスなほどに逸脱している。

さらにまた、Qiitaを含め検索して出てくる量子コンピュータのコンテンツの多くが、著名な量子アルゴリズムを少ない量子ビットで数式展開している量子コンピュータ入門のサイエンスが多い。実装を意図したコンテンツの場合でも、数量子ビットのものが多く、量子回路の図が記載されるのが常のようだが、回路図が描けるのも量子ビットが少ない場合に限られる。**本連載記事では極力、数式や回路図を用いない**。

以上のように本連載はナンセンスに満ちている。従い、記事の実有益性はないかもしれない。それでも我が国の情報系などのエンジニアやサイエンティストの入門者から専門家に至るまでを対象と考えて、何かをインスパイアしたり、逆にされたりできればと思う。
#1-3. ゴール
詳しくは次回以降にゆずるとして、セルオートマトンにはセル(箱あるいは場所）の並びがあり、セルには、1（車がそのセル((道路の場所))を占拠している）状態、あるいは0（車がそのセル((道路の場所))にいない）状態がある。その1と0があるルールに従って移っていく。移ることを遷移と表現するが、移る前後で時間が（1ステップ）分経過したと考える。この時間経過とともに1と0は遷移を繰り返して全体としての1と0の並びの様相は変化していく。この時間経過での変化を**時間発展**と称する。

さて、量子コンピューターで何をしたかったのか？ビットをセルに見立てた時、量子ビットと古典ビットの最大の相違は？古典ビットは1あるいは0の状態しかないが、量子ビットは1と0の重ねあわせができ、**1でも0でもない状態**を作れる。あるいは有りでも無しでもない、あるいはYESでもNOでもない、あるいはTRUEでもFALSEでもない、そんな状態を表現できる。例えば60%はTRUEだが40%FALSEはのように。ある車の前方の車の存在確率が80%で、さらにその前の車の存在確率は35%だったとしたら。そんな魔訶不思議な場合の時間発展はどのようになっていくのだろうか？渋滞は緩和されるのか？渋滞とは異なるが、物理では非平衡だった状態が平衡に達することを緩和と言い、それに要する時間を緩和時間と言うが、では、初期が非平衡だった場合その**緩和時間**は？　そんなことを量子コンピュータで見てみる。ここがゴールだった。

<details><summary>ここじゃないゴール1＝**グローバーアルゴリズム**の時間発展</summary>よくあるグローバーアルゴリズムの説明では0をアダマールゲートに通した量子ビット列を初期状態としている。実はそれ以外の例を見たことがない。確率振幅が $1/\sqrt{2}$ つまり確率が1/2の平衡状態にあるビット列が初期状態である。 $1/\sqrt{2}$ の代わりに様々な確率振幅ででたらめに並んでいる非平衡状態が初期状態だった時に、何度も増幅を繰り返す。増幅の繰り返しを時間発展と捉えたら。そんなことを量子コンピュータで見てみる。</details>
<details><summary>ここじゃないゴール2＝ソリトンセルオートマトンと**if文的構造**</summary>今までのセルオートマトンはECA (Elementaly Cellular Automata)と言われるものであった。詳しくは次回以降。それに対してもう少し複雑なものにFCA（Filter Cellular Automata）と称するものがあり、それにソリトンセルオートマトン、別名、箱玉系と言われるものがある。これをif文のような制御構造のない量子コンピュータのコードで記述することはECAに比べてかなり難点が多い。マルチ制御NOT(トフォリゲート以上)を用いてif文的構造を作りこんでみた。これ自身がゴールなぐらい腐心した。またECAに比べて遥かに量子コストを消費してしまいとてもナンセンスなものとなった。なんとか作成したので、これも確率で与えられた初期状態からの時間発展を調べてみる。
#1-4. 目次（予告）

**1回目　はじめに**
1-1. はじめに
1-2. ナンセンス
1-3. ゴール
1-4. 目次

今後、週末、休日に以下の内容のものを投稿予定。変更の場合には都度、修正。リンクは投稿後。

[**2回目　1,0ではない重ね合わせでの初期状態**](https://qiita.com/gigagulin/items/634744f9038cd843f8ce)
2-1. q-camの構造とモジュール
2-2. 1,0ではない確率的初期状態　（ry または rx または u3 ゲートで作る）
2-3.  Blueqatの状態ベクトル表示からのベクトルと確率の抽出
2-4.  Blueqatのベクトルと観測
2-5.  サマリー


[**3回目　簡単に作成できるマルチ制御ゲート**](https://qiita.com/gigagulin/items/5ff61d2c45c15b6ea12f)
3-1. グレイコード
3-2. マルチ制御ゲートの作り方
3-3. サマリー

[**4回目　セルオートマトンの量子アルゴリズム**](https://qiita.com/gigagulin/items/70f018fafd8e43f26b9f)
4-1. ウルフラムコード
4-2. 周期的境界条件
4-3. ルール102,　ルール60, ルール90
4-4. ルール30, ルール110
4-5. 1, 0 の重ね合わせ初期状態からの時間発展
4-6. サマリー

[**５回目　ルール184（渋滞系）の量子アルゴリズムと時間発展**](https://qiita.com/gigagulin/items/f88325109293085c7899)
5-1. ルール184（渋滞系）の量子アルゴリズム　(交通流量計算付き）
5-2. 時間発展させると（セル数が偶数か奇数で異なる結果）
5-3. 緩和時間
5-4. サマリー

[**６回目　ソリトンセルオートマトン（箱玉系）**](https://qiita.com/gigagulin/items/3da910422d02304e5073)
6-1. 箱玉系のいくつかのルールの表現
6-2. 量子アルゴリズム
6-3. 確率初期状態からの時間発展
6-4. サマリー

[**７回目　グローバーアルゴリズム一考 by blueqat**](https://qiita.com/gigagulin/items/e56cdb233105794fee81)
7-1. 目的
7-2. 方法
7-3. 不均一な確率的初期状態からのグローバーの挙動
7-4. サマリー

[**８回目　量子位相推定をグローバーやセルオートマトンに適用してみた**](https://qiita.com/gigagulin/items/4ea49a1109a456c9351a)
8-1. はじめに
8-2. QPEのCAやGAへの適用
8-3. 実装
8-4. 検証
8-5. CAへのQPE適用の結果
8-6. GAへのQPE適用の果て
8-7. おわりに