2024年12月1日日曜日

40分で量子コンピューティングに親しむ(Quantum Computing in 40 minutes)

こんなチュートリアルを作ってみました。日本語pdf版で14ページです。
(ご希望の方にはお送りします。)

[題名]
40分で量子コンピューティングに親しむ

[ねらい]
 量子力学や量子コンピュータに馴染みのない方々(学生、技術者)に、この分野を学ぶきっかけとしていただくことを目指し、短い説明を試みました。一定の技術内容は含めましたが、叙述の一貫性や精密さよりも親しみやすさを第一としました。量子コンピュータの高速性の仕組みに気をかけながらも、従来の”計算”(computation)と対比した場合の斬新さと不思議さに迫ることに主眼を置いています。
 もう一つの特徴として、自作のモバイル量子回路シミュレータを動かし、その結果の図も取り入れて具体性を持たせました。さらに、量子コンピュータは(難しい技術課題を抱えながらも)そこまできていることを感じていただくため、IBM Quantumコンピュータ実機での「量子もつれ」の実行例も含めました。

[目次]
🔸概 要
🔸量子ビット/量子ゲート/測定 (qubit, quantum gates, measurement)
🔸重ね合わせ(superposition)をどのように使うのか
🔸重ね合わせの応用(1) Grover の探索アルゴリズム(振幅増幅法)
🔸重ね合わせの応用(2) 偽コイン発見パズル(量子天秤)
🔸量子もつれ(entanglement) - その1 (Bell回路)
🔸量子もつれ(entanglement) - その2 (Tiny Mermin-Peres Magic)
🔸量子コンピュータの実機は利用できるのか? Yes, You Can !
🔸量子コンピュータの現状と今後
🔸補足事項

(このチュートリアルに含まれる幾つかの図を以下に示します。)
------------------------------------------------------

I made this article. It's 14 pages long (Japanese PDF version). (Please contact me if you need it.)

[Title]
Get familiar with quantum computing in 40 minutes

[Objective]
A short explanation has been provided for students and engineers who are not familiar with quantum mechanics and quantum computers, with the aim of offering an opportunity to learn about this field. Although a certain amount of technical content has been included, familiarity has been prioritized over consistency and precision of description. Emphasis has been placed on the mechanism behind the high speed of quantum computers, highlighting their novelty and mystery compared to conventional "computation." Another feature is the inclusion of diagrams generated by running a mobile quantum circuit simulator, making the explanation more concrete. Additionally, an example of "quantum entanglement" executed on a real IBM Quantum computer has been provided to illustrate how far quantum computers have progressed, despite the technical challenges they continue to face.

[Table of Contents]
🔸Overview
🔸Quantum bits and quantum gates
🔸How to use superposition
🔸Applications of superposition (1) Grover's search algorithm (amplitude amplification method)
🔸Applications of superposition (2) Fake coin detection puzzle (quantum balance)
🔸Quantum entanglement - Part 1 (Bell circuit)
🔸Quantum entanglement - Part 2 (Tiny Mermin-Peres Magic Game)
🔸Can we use a real quantum computer? Yes, You Can!
🔸Current status and future of quantum computers
🔸Additional information

------------------------------------------------------

The end of the year is approaching. I am preparing next year's calendar. Mt. Fuji often appears as a picture on the calendar. Mt. Fuji is of course beautiful, but I love this mountain more than Mt. Fuji.

2024年11月20日水曜日

Using MicroBlocks with a Quantum Circuit Simulator

In the previous article, I used MicroBlocks to control the slider of the MIT App Inventor app from a micro:bit device. This time, I tried to display the results of my quantum circuit simulator on the micro:bit. Yet another use case for the micro:bit!

In quantum computing, one of the simplest and most important circuits is the Bell circuit, because it generates strong quantum entanglement. For example, for the Bell circuit in Fig.1, if the states of the two quantum bits are |0> and |1>, the output (measurement result) will be 00 and 11 with a 50% probability, respectively. And the results 01 or 10 will never appear. In other words, if the measurement result of one quantum bit is 0, the other will always be 0. On the other hand, if one is 1, the other will always be 1. I would like to try to display such a situation on the micro:bit.

My mobile circuit simulator has 12 types of quantum circuits using 2 to 6 qubits built in as examples. This time, I selected the Bell circuit from among them, as shown in Figure 2. The measurement results for that were displayed on the micro:bit, as shown in Figure 1. Of course, you need to first connect this simulator and the micro:bit with BLE. Each time the go button is pressed, the display on the micro:bit changed according to the probability obtained in ④.

[Design Considerations]

Since this circuit deals with two quantum bits, it is natural to use two micro:bits to display the output. However, when using MicroBlocks, it was found that the following two methods are either not possible or difficult to achieve.

  • Connect multiple micro:bits via BLE from the app.
  • Connect the app and micro:bit with BLE and use the radio from that micro:bit to communicate with another micro:bit.
Therefore, this time I decided to display the measurement results of two quantum bits on a single micro:bit.

Correction
I will correct the second paragraph above. A separate instance of both the MicroBlocks and the Bluetooth LE extension for each connection allows multiple micro:bits to be used from the app. I would like to thank David Kim, Peter Mathijssen, and John Maloney for letting me know this.

[Additional information]

The above example focuses on two qubits, but I have also created a version shown below that can display the measurement results for up to five qubits.

2024年11月16日土曜日

Using MicroBlocks with a Quantum Bit Simulator

Recently, I read an article titled "Using MicroBlocks with MIT App Inventor" [1]. It looked very interesting, so I applied it to the quantum bit simulator I am creating. Specifically, I controlled two sliders to change the state of quantum bit on the Bloch sphere with a single MicroBlocks device. I was able to experience a fun feeling of operation that was different from software sliders!

The outline is summarized in two figures, Fig. 1 and Fig. 2, below. If you would like to know more about this quantum bit simulator, please refer to the document [4]. 


In addition, the following three documents [1][2][3] were very helpful. I would like to express my gratitude.

References

[1] Using MicroBlocks with MIT App Inventor (by App Inventor Foundation)
https://microblocks.fun/blog/2024-11-08-appinventor-intro/

[2] MicroBlocks BLE Extension (by Peter)
https://community.appinventor.mit.edu/t/microblocks-ble-extension/129412

[3] Tools Extension (by Taifun)
https://puravidaapps.com/tools.php



2024年11月11日月曜日

How to run quantum circuits on the development platform Qiskit

[Abstract] IBM Qiskit is used as a typical development environment for quantum computing. Its version is frequently updated, and some parts are soon deprecated, which can be confusing. The description of quantum gates and quantum circuits remains almost the same, but there are frequent changes in simulations and execution methods on actual machines. Here, I would like to note three typical execution methods at the present time (2024-11-10).

🔴Example: Quantum computation part of Shor's prime factorization algorithm

Here, we will focus only on running the order finding quantum circuit, which is the main part of Shor's algorithm. Fig.1 shows the prime factorization of the very small integer 15 (15 = 3 × 5) for demonstration purposes. We will not explain the relationship between the entire Shor algorithm and the quantum circuit in Fig.1 this time, so if necessary, please refer to the following past articles.

🔴[1] Simulation with Qiskit Sampler (run on local PC)

Qiskit Sampler is the most common simulator for running a quantum circuit (name: qc) like the one in Fig.1 (including measuring the lower three qubits). The main points of its use are as follows. The results of this simulation (measurement results of 1,000 shots) are shown in Fig.2.

# Running the Simulation
from qiskit_aer.primitives import Sampler
sampler = Sampler()
result = sampler.run(qc, shots=1000).result()

# Extraction and visualization of measurement results
quasi_dists = result.quasi_dists
binary_quasi_dist = quasi_dists[0].binary_probabilities()
counts_dict = quasi_dists[0].binary_probabilities()
counts = Counts(counts_dict)
plot_histogram(counts)


🔴[2] Simulation incorporating a noise model of the actual machine (run on a local PC)

In the above, the simulation results (Fig.2) show that the counts corresponding to the four bases are approximately 25% each, and the counts of the other bases are zero as expected because there is no noise. In addition to using a normal sampler like this, it is also possible to perform simulations that reflect the noise generated by the actual quantum computer.

Fig. 3 shows the result of incorporating a noise model generated by a real machine (127-qubits) named ibm_sherbrooke into AerSimulator and running it. Indeed, the effects of noise that did not occur in Fig. 2 are apparent. This may be useful for preliminary examination before running on a real machine.

# important imports
from qiskit_aer import AerSimulator
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
from qiskit_ibm_runtime import QiskitRuntimeService, SamplerV2 as Sampler

# Set the noise model of the real machine
real_backend = service.backend("ibm_sherbrooke")
aer = AerSimulator.from_backend(real_backend)
pm = generate_preset_pass_manager(backend=aer, optimization_level=1)
isa_qc = pm.run(qc) # transpile for the real machine
sampler = Sampler(mode=aer)
result = sampler.run([isa_qc],shots=1000).result() # execution

# Extraction and visualization of measurement results
pub_result = result[0]
counts = pub_result.data.c.get_counts() # Note the 'c' !
plot_histogram(counts)

🔴[3] Execution on an actual IBM Quantum machine (submitting a job via the web)

Next, the job was submitted to an actual IBM Quantum machine via the web and executed. The machine was ibm_sherbrooke, the same as that given in the noise model above. The job was executed in batch mode, so the execution results were retrieved via the web after it was completed. This is shown in Fig. 4, and it was found to be almost identical to the simulation results shown in Fig. 3, which reflect the above noise model.

# Automatically select machines with low load
from qiskit_ibm_runtime import SamplerV2 as Sampler
service = QiskitRuntimeService(channel="ibm_quantum", token= "***")
be = service.least_busy(simulator=False, operational=True)
print(f"QPU backend:{be}")

# Transpile for real machine and submit the job
pm = generate_preset_pass_manager(optimization_level=1, backend=be)
ic = pm.run(qc) # Transpiled circuit
job = Sampler(be).run([ic], shots= 1000)
print(f"job ID: {job.job_id()}")
print(f"job statusI: {job.status()}")

# After execution, the results are retrieved and displayed
from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService(
    channel='ibm_quantum',
    instance='ibm-q/open/main',
    token='token for the job'
)
job = service.job('jab ID')
job_result = job.result()
counts = job.result()[0].data.c.get_counts()
plot_histogram(counts)

The execution status is shown in Fig. 5. Usage = 2 sec. Free users are limited to 10 minutes of usage per month. This is sufficient for testing simple quantum circuits, but caution is required when testing slightly more complex quantum circuits, as this can result in unexpectedly high usage. At present, there are three models of actual machines available for free use, as shown in Fig. 6. For paid users, eight more models of actual machines can be used in addition to these.


🔴 Differences between the results of a real machine and a simulator

Currently, quantum computers generate various noises, which causes errors. For example, the difference between the results of a pure simulator (Fig. 2) and the results of a real machine (Fig. 4) shows this. Although it cannot be said in general, errors that occur on a real machine can have a large impact on the necessary calculations. However, in the case of this example problem, due to the nature of probabilistically searching for an order, it can be said that the difference between Fig. 2 and Fig. 4 is almost no problem.

量子コンピューティング開発環境Qiskitでの実行方法

English version here
【要旨】
量子コンピューティングの代表的な開発環境として、IBM Qiskitを利用している。そのバージョンアップは頻繁になされて、すぐにdeprecated(非推奨、または廃止)となる部分が多く、困惑する場合がある。量子ゲートや量子回路の記述などはほとんど変わらないが、シミュレータ、および実機での実行方法などの変更が多発する。ここでは、現時点(2024-11-10)での典型的な実行方法3つをメモして置きたい。

🔴例題:Shorの素因数分解アルゴリズムの量子計算部分
 ここでは、Shorのアルゴリズムの主要部である位数計算(order finding)量子回路を動かすことだけに注目する。Fig.1は、デモとして動かすための、極く小さな整数15の素因数分解(15 = 3 × 5)の場合である。Shorのアルゴリズム全体とFIg.1の量子回路との関係などは今回は説明しないので、例えば以下のような過去記事をご覧いただきたい。

🔴[1]Qiskit Samplerによるシミュレーション(ローカルPCで実行)
 Fig.1のような量子回路(名称:qc)の実行(下位3量子ビットの測定を含む)を行うための最も一般的なシミュレータとして、Qiskit Samplerがある。その利用の要点は以下のとおりである。このシミュレーションの結果(1,000 shotsの測定結果)をFig.2に示す。

# シミュレーションの実行
from qiskit_aer.primitives import Sampler
sampler = Sampler()
result = sampler.run(qc, shots=1000).result()

# 測定結果の取り出しと図示
quasi_dists = result.quasi_dists
binary_quasi_dist = quasi_dists[0].binary_probabilities()
counts_dict = quasi_dists[0].binary_probabilities()
counts = Counts(counts_dict)
plot_histogram(counts)


🔴[2]実機のノイズモデルを組み込んだシミュレーション(ローカルPCで実行)
 上記では、シミュレーション結果(Fig.2)として、4つの基底に対応するカウントがほぼ25%づつで、それ以外の基底のカウントは、ノイズがないので、理論通りゼロとなった。このような通常のSamplerによる以外に、量子コンピュータ実機で発生するノイズを反映させたシミュレーションを行うこともできる。
 Fig.3は、ibm_sherbrookeという名の実機(127-qubits)で発生するノイズモデルを、AerSimulatorに組み込んで実行した結果である。確かに、Fig.2では発生しなかったノイズによる影響が出ている。実機で実行する前の事前検討などに有用であろう。

# 重要なimport
from qiskit_aer import AerSimulator
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
from qiskit_ibm_runtime import QiskitRuntimeService, SamplerV2 as Sampler

# リアルマシンのノイズモデルをセット
real_backend = service.backend("ibm_sherbrooke")
aer = AerSimulator.from_backend(real_backend)
pm = generate_preset_pass_manager(backend=aer, optimization_level=1)
isa_qc = pm.run(qc) # 実マシン向けのtranspile
sampler = Sampler(mode=aer)
result = sampler.run([isa_qc],shots=1000).result() # 実行

# 測定結果の取り出しと図示
pub_result = result[0]
counts = pub_result.data.c.get_counts() # 'c'を指定することに注意!
plot_histogram(counts)

🔴[3]IBM Quantumマシン実機での実行(web経由でジョブを投入)
 次に、IBM Quantumマシン実機へweb経由でジョブを投入し、実行を行った。マシンは、上記のノイズモデルで与えたものと同じibm_sherbrookeである。ジョブはバッチ形式で実行されるので、その終了後にWeb経由で実行結果を取り出す。それを表示したものがFig.4である。上記のノイズモデルを反映したシミュレーション結果Fig.3とほぼ同一であることが確認できた。

# 負荷の少なそうなマシンを自動選択
from qiskit_ibm_runtime import SamplerV2 as Sampler
service = QiskitRuntimeService(channel="ibm_quantum", token= "***")
be = service.least_busy(simulator=False, operational=True)
print(f"QPUバックエンド:{be}")

# 実マシン向けのtranspileを行い、Jobを投入
pm = generate_preset_pass_manager(optimization_level=1, backend=be)
ic = pm.run(qc) # Transpile結果
job = Sampler(be).run([ic], shots= 1000)
print(f"ジョブID: {job.job_id()}")
print(f"ジョブI状態: {job.status()}")

# 実行終了後に、結果を取り出し、表示。
from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService(
    channel='ibm_quantum',
    instance='ibm-q/open/main',
    token='jobに対応するトークン'
)
job = service.job('jab ID')
job_result = job.result()
counts = job.result()[0].data.c.get_counts()
plot_histogram(counts)

 この実行の状況をFig.5に示した。Usage = 2 secとなっている。無償ユーザは、毎月10分までのUsageという制約がある。簡単な量子回路の試験には十分であるが、少し複雑な量子回路になると想定外に多くのUsageを使うことになるので、注意が必要である。なお、現時点では、無償で使える実機はFig.6に示すとおり、3機種であった。有償の場合は、これらの他にさらに8機種の実機が利用できる。


🔴実マシンとシミュレータの結果の相違について
 現状では、量子コンピュータは種々のノイズが発生するので誤りが起こる。例えば、純粋のシミュレータの結果Fig.2と、実マシンによる結果Fig.4の相違がそれを示している。一概には言えないが、実機で起こる誤りが、必要な計算に与える影響は大きい場合がある。だが、本例題に限って言えば、確率的に位数(order)を探すという性質上、Fig.2とFig.4の差はほとんど問題にならないと言える。

2024年10月24日木曜日

量子国際会議Quantum Innovation 2024 Tokyo参加メモ

【要旨】政府関係機関(理研など)主催の量子コンピューティング国際会議 "Quantum Innovation 2024" が、東京(お茶の水)で3日間に渡り開催された。主に、研究者や専門家向けの会議である。日本、米国、欧州などの主要な研究機関からの講演と多数のポスター展示が行われた。小生は、単なる量子コンピューティング愛好者(アマチュア)に過ぎず、理解は全く十分ではないのだが、参加しての感想などを、極く簡単に述べたい。

🔴開催概要
 参加者は500名を超え、会場のキャパシティから満員御礼が出ていた。量子コンピュータの実用化にはまだまだ時間がかかる状況にも関わらず、これだけの参加者があって、活気に満ちていたことは、予想外であった。大手の量子コンピュータメーカであるIBMやGoogleなどからの発表などは全くなかった。もしも、それもあれば、雰囲気はもっと変わっていただろうが、今回はそうではなく、各国の政府関係機関や大学等の取り組み状況や研究開発マイルストーンが示され、討論がなされた。

 狙いとして、(1)量子技術の実用化の促進、(2)量子技術の人材育成、(3)国際協力の促進などが掲げられていたのだが、(2)の人材育成はほとんど語られず、(1)と(3)が主な話題であった。講演はKeynoteを含めて80件ほど、また、ポスタセッションは合計150件と意外に多かった。講演は著名な研究者の登壇が目についたが、ポスターは学生発表もかなり多かった。それが、暗黙の(2)人材育成なのかも知れない。

🔴Plenary Sessions(Keynote)からいくつか
・Sergio Cantu : QuEra’s path to fault-tolerant quantum
 ボストンを拠点とするQuEra Computing IncのCEOの講演。超電導方式に代わる中性原子(neutral atom)による量子コンピュータの開発で、昨年末あたりから急に有名になっているベンチャである。HarvardおよびMITと密接に繋がっている。特に、量子エラー訂正に対するアプローチと、フォールト トレラントな量子コンピューティング(ハード、ソフト、アルゴリズム、クラウドアクセスを包含)の実現を目指す。2024年に256-qubit、2025年に3,000-qubit、2026年に10,000-qubitを世に出したいとのこと。

・Vlatko Vedral (Oxford U):Quantum physics in the macroscopic domain
 冒頭で、"Quantumとは真に何を意味するか?”という、ドキッとする質問を会場に投げかけていた。案の定、哲学的というか生命の根源に関わる話が続いた。すなわち、生命システムも量子コヒーレンス、重ね合わせ、そして量子エンタングルメントも利用して、特定のタスクを効率的に実行していることを示唆する証拠がある(バクテリアでの例)というお話!それを、マクロレベルで、量子効果の維持および制御に結びつけられるのかを考える。すなわち、量子コンピュータを構成するために。

Taro Shimada(Quantum STrategic industry Alliance for Revolution(Q-STAR))
Q-STAR’s initiatives for building a quantum ecosystem

 Q-STARは、産官学一体となった量子技術への転換を加速させることを目指す、日本の一般社団法人。量子技術の急速な進歩に伴い、多くの国が国家戦略を策定し、国際協力を推進している。Q-STARは、堅牢な量子システムの構築、国際標準化の推進、グローバルパートナーシップの強化に向けて活動している。具体的な量子コンピュータ方式としては、冷却原子タイプのものに着目しているようである。

・Celia Merzbacher(QED-C 米国):QED-C Overview: Looking back and looking ahead
 QED-Cは、量子産業の実現と成長を目指す利害関係者の経済グローバル コンソーシアムである。米国国家量子イニシアチブ (NQI) の一環として設立され、250 を超えるメンバーと米国立標準技術研究所 (NIST) によってサポートされている。QED-C は、エネルギー、金融、物流、ナビゲーション、バイオメディカルなど、さまざまな分野での量子技術の使用事例に関するレポートを公開していて、国際協力を進めるている。だが、技術輸出は、国家の安全保安上、慎重さが求められることも強調していたのが印象的だった。

🔴一般講演の分野は三つ
上記以外の講演とポスターセッションは、大きく以下の3分野に分けられていた。

  • 量子コンピューティング(Quantum Computing)
  • 量子センシング(Quantum Sensing)
  • 量子暗号と通信(Quantum Cryptography & Communication)
 このうち、"量子コンピューティング"は、小生の期待に反して、アプリケーション寄りのものは皆無で、ほとんどがデバイスを含む、量子コンピュータの構成技術そのものに関する。広範な実用アプリケーションを議論するまでに至っていない現状を改めて認識させられた。ポスターセッションの発表件数を見ても、全体で150件のうち、この"量子コンピューティング" と "量子センシング" がその8割ほどを占めていた。

🔴量子暗号と通信(Quantum Cryptography & Communication)
 これは、社会一般にそのインパクトが伝わりやすいので注目度は高まっている。特に、量子鍵配送(QKD:Quantum Key Distribution)は、量子セキュアネットワークの不可欠な要素である。(正しいか否か確信は持てないが)この分野は、汎用的な量子コンピュータが実現しなくても、すでに利用できる量子技術があるため研究開発が進んでいるのではないか。すなわち、アプリケーションレイヤーのソフトウェア技術は、1984年に発表されたBB84と、1991年に発表されたEkert Protocolが現在でも理論的基盤となっていることは間違いなかろう。

 BB84では量子もつれは使われないが、Ekertは量子もつれが根底にある。両アルゴリズムとも、送信者と受信者が独立にランダムに選択した正規直交基底を用い、それぞれの測定結果としての確率が、盗聴の有無を決定づける。だが、100Kmオーバーの距離で、大量のもつれた量子対を光通信で送るための技術課題が多く、現在それに取り組んでいるという状況らしい。すなわち、アプリケーションレイヤの下の、Network management、Key management、Quantum Layerの各々の実装技術である。数件あったこの分野の発表のうち、シンガポール国立大のHao Qinの講演や、東芝のShinya Murai氏による講演は比較的分かりやすく、説得性があったように思う。


2024年10月16日水曜日

Testing my mobile quantum circuit simulator

[Abstract] This article tests the applicability of the mobile quantum circuit simulator Qsim_multi that I have developed so far with MIT App Inventor. As examples, I have taken the inverse Quantum Fourier transform and the order finding problems that appear in a recently published book. These form the basis of Shor's prime factorization algorithm. In conclusion, I have confirmed that my simulator Qsim_multi can handle these problems successfully.

🔴 A new book on quantum computing
Recently, I bought a new book (FIg.1) by Nivio Dos Santos. The title is "How to code for Quantum Computers", but it is not a so-called how-to book, but a compact summary of basic concepts. As soon as you open the book, you get the feeling that something fun is written in it. In the second half, the quantum Fourier transform, quantum phase estimation, and Shor's algorithm calculations are explained in detail. Therefore, I would say that this is a book for beginners to intermediate level.
Although the main text does not include any program code, the Python code (Jupyter Notebook) for the Google Cirq environment is publicly available on the Web, which is useful.

I ran the following two examples from the book on my mobile quantum simulator. However, I noticed something important here. That is the order of the quantum bits. My simulator is the same as IBM Qiskit, but in Cirq, the order is reversed. Therefore, it was necessary to reverse it. However, even if I did that, for example, the results of the quantum Fourier transform would have different phases even if the probabilities of each basis were the same. If you keep that in mind, there is no problem.

🔴 Example1: Using Inverse-QFT
First, here is an example using the inverse quantum Fourier transform. Fig.2 shows the circuit diagram and quantum state consisting of 16 bases explained in this book. The inverse quantum Fourier transform invQFT is shown in its expanded form. The small filled circles in each circle indicate the probability, and the slope of the red line indicates the phase.
The result of converting this to my simulator and running it is shown in Fig. 3. This simulator has a built-in inverse quantum Fourier transform (IQFT), so I used it as is. Comparing the quantum state with Fig. 2, the probability is the same, and the phase is a mirror image. This result shows that my simulator is operating normally.

🔴 Example2: Finding the order of [gk mod N = 1]
Next, we will look at the order-finding problem, which is important in Shor's algorithm. Here, we find the order of the specific example "7k mod 15 = 1", that is, the smallest integer k that satisfies this equation.

The quantum circuit and the order discovery results are shown below. Fig. 4 is from the Cirq environment, and Fig. 5 is from my simulator. The measurement results after applying "7k mod 15 " and invQFT were consistent for both in a 3-qubit system. That is, out of the eight possibilities, only 010, 100, 000, and 110 were measured with equal probability. By approximating the result to a rational number, we obtained 1/4, and found that the order was 4. The details of why we can say this and its relationship to Shor's algorithm are shown below:

 2024年7月9日火曜日
 Shor's Algorithm:量子コンピューティングの学びの最高峰
In Fig. 4, the measurement results are shown as the frequency of occurrence in 1000 trials, and in Fog.5 they are shown as probability calculation results.

In addition, in my simulator in Fig. 5, the measured values ​​for the four cases (3-qubit) are divided into four. This is a little difficult to see, so it would be better to summarize it as shown in Fig. 4. I would like to address this in the next version update.

🔴Conclusions
For simple cases of the inverse quantum Fourier transform and the order finding problem, my mobile quantum circuit simulator gave identical results to those run in the Google Cirq environment, confirming the applicability of the simulator to a certain extent.

-------------------------------------------------------------
Thank you Nivio for your great response!
-------------------------------------------------------------

自作モバイル量子回路シミュレータのテスト

【要旨】本稿は、これまでに自作したモバイル量子回路シミュレータQsim_multiの適用性をテストするものである。例題として、最近発刊されたある書籍に載っている、逆量子フーリエ変換位数発見問題を取り上げた。これらは、Shorの素因数分解アルゴリズムの根幹を成している。結論として、自作シミュレータQsim_multiがこれらを正常に処理できることを確認できた。

🔴 A new book on quantum computing
 最近、Nivio Dos Santos著の新刊(FIg.1)を購入した。タイトルは、"How to code for Quantum Computers"となっているが、いわゆるハウツー本ではなく、基本概念がコンパクトにまとめられている。本を開いたとたんに、何か楽しいことが書いてある、という雰囲気がある。後半には、量子フーリエ変換、量子位相推定、Shorのアルゴリズムの計算が詳細に説明されている。だから、初級から中級レベルの本だと言える。
 本文には、プログラムコードはほとんど出てこないが、Google Cirq環境用のPythonコード(Jupyter Notebook)がWeb上に公開されているので重宝する。

 この本に掲載されている以下の二つの例題を、私の自作モバイル量子シミュレータで稼働させるのである。だが、ここで重要なことに気づいた。それは、量子ビットの並べ順である。私のシミュレータは、IBM Qiskitなどと同じだが、Cirqでは、それが逆順になっているのである。したがって、それを逆転させる必要があった。しかし、そうしても、例えば、量子フーリエ変換の結果などは、各基底の確率は同一になっても、位相は異なるだろう。それを踏まえて扱えば問題ない。

🔴 Example1: Using Inverse-QFT
 まず、逆量子フーリエ変換を使う例である。Fig.2はこの書籍で説明されている回路図と16個の基底からなる量子状態である。逆量子フーリエ変換invQFTは展開形で示されている。それぞれの円内の塗り潰した小さな円は確率を示し、赤い直線の傾きは位相を示す。
 これを私のシミュレータ用に変換して実行した結果をFig.3に示す。このシミュレータには、逆量子フーリエ変換IQFTを内蔵しているので、それをそのまま使った。量子状態をFig.2と比較すると、確率は同じであり、位相は鏡像反転している。この結果から、私のシミュレータは、正常に稼働していることが分かる。

🔴 Example2: Finding the order of [gk mod N = 1]
 次に、Shorのアルゴリズムで重要な位数発見問題である。ここでは、具体例「7k mod 15 = 1」の位数、すなわち、この式を満たす最小の整数kを求める。
 量子回路と位数発見結果を以下に示す。Fig.4はCirq環境であり、Fig.5は私のシミュレータによる。「7k mod 15 」とinvQFTの適用後の測定結果は、3-qubitシステムにおいて、両者で一致した。すなわち、8個の可能性のうち、010、100、000、110の四つだけが、それぞれ等しい確率で測定される。その結果を有理数近似して1/4が得られ、位数が4であることがわかった。なぜそう言えるのかの詳細と、Shorのアルゴリズムとの関係は以下に示されている:
 2024年7月9日火曜日
 Shor's Algorithm:量子コンピューティングの学びの最高峰
 Fig.4では、測定結果は、1000回試行おける出現頻度で示してあり、Fog.5では確率計算結果として示している。
 なお、Fig.5の私のシミュレータでは、測定した4ケース(3-qubit)の値が、それぞれ四つに分かれている。これは少し見にくいので、Fig4.のようにまとめた方が良い。次回のバージョンアップの際に対処したい。

🔴結論
 逆量子フーリエ変換と位数発見問題の簡単な場合について、私のモバイル量子回路シミュレータは、Google Cirq環境で実行されたのと同一の結果を与えた。一定の適用性を確認できたと考える。

2024年10月7日月曜日

ある女子学生とMIT App Inventor

 小生、普段は量子コンピューティング(fundamentals)関連 記事を書いています。そこで作成しているアプリは、ほぼ全面的にMIT App Inventorを利用しています。そのApp Inventorと日本のある女子学生の関わりに関するstoryが以下に掲載されています。
 素晴らしい記事だと思います!🎉🎉🎉

🔴MIT App Inventorトップページ
https://appinventor.mit.edu/

🔴App Inventor Foundation Newsページ
https://www.appinventorfoundation.org/news/rika-suzuki


2024年10月6日日曜日

Books to Learn the Basics of Quantum Computing

This topic has already been covered several times on this blog. I hope that the short articles to come will also be helpful to those who are thinking of learning quantum computing. If you have a solid grasp of the basics, you will have a higher chance of progressing in anything.

There are countless books, web materials, YouTube videos, etc. on quantum computing, but the following two books are recommended on the IBM Quantum Learning site. These are books that I have studied thoroughly myself, so I am very happy with this recommendation! (I have written several articles on this blog about the contents of these books, so please take a look.)

What's also great is that, to a certain extent, you can use the IBM Quantum Computer for free, as shown below. Most of the examples on this site and the examples in the books above can be run on this hardware.
Of course, IBM also provides guides for those who want to move on to more advanced content. For example, the following well-known advanced books are also introduced.
  • Michael A. Nielsen, Isaac L. Chuang, "Quantum Computation and Quantum Information" 
  • Phillip Kaye, Raymond Laflamme, and Michele Mosca, "An Introduction to Quantum Computing"

2024年9月26日木曜日

最近購入した量子コンピューティング書籍2冊

 最近、量子コンピューティングの本を2冊購入した。「ここを知りたい」と思っていたことが書かれていて、とても有用だったので、簡単に紹介したい。

🔴中山茂:新版Qiskit 量子プログラミング入門、Gaia教育シリーズ79, 2024
 IBMの量子プログラミング開発環境Qiskitは多機能で優れたものではあるが、その改訂の頻度が激しすぎる。その都度、それまで動いていたアプリに何らかの不整合が生じて動かなくなる状態が続いている。過渡期であるのでやむを得ないのかも知れないが、困っている人は多いはずである。
 著者はその点も考慮して、その時点の最新版Qiskit 1.1で稼働するPythonコードを多数示している。IBMのサイトでドキュメントを調べなくても、本書がガイドしてくれるのでとても有り難い!(と思っていたら、さらにQiskit 1.2で変更になってしまったところが既に数ヶ所見つかった!)

 小生にとって最も良かったのは、最新のIBM Quantum実機(シミュレータではなく)をどのように使うか、その例題が付いていることである。若干の修正は必要であったが、小生のローカルマシンに構築したQiskit環境から(APIトークンを付与して)実機で動かすことができた。具体的には、最新のIBM Quantum実機で以下の機能を使うことができた:
  • Estimatorによる、実機上での期待値計算
  • Samplerによる、実機上での量子状態計算
  • 量子回路に対する、トランスパイルによる選択マシン向けの最適化
 さらに、量子計算と古典計算を連携させるPythonプログラムの例も多数示しているので、単に勉強ではなく、少しづつ、実際的な問題解決に向かえるという気にさせてくれる。

🔴Vladimir Silva: Quantum Computing by Practice, APress, 2024
 この書籍で特に気に入った章は、Chapter 8: Game Theoryである。古典コンピュータではできない、量子コンピュータ特有のゲーム問題解法が示されている。これを動かして、量子コンピューティングに馴染みがない人を驚かすことができる!以下の二つがある。
  • Counterfeit coin puzzle:量子重ね合わせと、確率振幅増幅を使った驚異の偽コイン発見プログラム
  • Mermin-Peres Magic Square Game: 量子もつれを巧みに利用した、見えないテレパシーを使うような驚異的マジック!

2024年9月23日月曜日

「量子天秤」の威力を示す偽コイン発見ゲーム

 前報では、量子もつれの不思議さを感じられるMermin-Peres Magic Gameについて述べた。今回は、量子特有の別の性質、量子重ね合わせ(superposition)を巧みに利用した「偽コイン発見」Counterfeit Coin Puzzleについて簡単に書いてみたい。

🔴偽コイン(Counterfeit Coin)発見パズル
 n個のコインのうちに、k個の偽物が混じっているとする。偽物は、いずれも正常なものよりも一定量だけ軽い。どれが偽物かを特定したい。ここでは(左右の皿に同数のコインを入れて均衡を測るため)天秤を使う。では、何回、天秤で測定すれば偽物を特定できるか。それを解くための計算量に関する研究はすでに発表されている。

 具体例で検討する。今、8個のコインのうち1個が偽物(n = 8、k = 1)について考える。この場合、2回だけ天秤で測れば偽物を特定できることが分かっている。

 だが、量子計算では、「量子天秤」Quantum Beam Balanceを使うと、偽物が1個である場合、コインの総数nに拘らず、1回だけの測定で偽物を特定できる!

🔴量子天秤では1回の測定で偽物を特定できるという事実
 量子計算ではなぜそれができるのかについては、IBM Qiskitの解説[1]や書籍[2]などに詳しく掲載されている。本稿では、whyではなく、howについてだけ示す。つまり、「こうすればできる」というメモとして叙述する。

(1)「量子天秤」Quantum Beam Balanceを作る
 例えば、11111001のような、1が偶数個のバイナリストリングを考える。これは、コインq7q6q5q4q3q2q1q0に対応するが、q1q2を除く6個のコインを皿に載せた状態を意味する。左右どちらの皿に載せるかは問題ではない。下図は、そのようなすべてのバイナリストリングの重ね合わせ状態(superposition)を作る仕掛けである。その作成が成功した場合は、最下段の量子ビットq8が0となり、失敗の場合は1となる。その成功の確率は0.5なので、成功するまで繰り返せば良い。

 このsuperpositionの作成が成功した場合(q8の測定結果が0の場合)、図の右端に置かれたCNOT(制御付きNOT)が働いて、偽コインのインデックス(この場合は3)が設定される。念のためだが、これによって予め答えを教えている訳ではなく、偽物のコインを一つ入れたに過ぎない。この時点で、必要な量子天秤を構成したということになる。


(2)量子天秤で偽コインを特定する
 引き続き、下図の量子回路を適用すると、偽コインを特定できる。回路の説明は略すが、注目すべきは、この回路を1回通すだけで、すなわち、量子天秤で1回だけ測定するだけで結果が出ることである!

 実際、測定結果は、以下のいずれかになる。どちらの場合も、q3だけが他のビットと異なっている。すなわち、偽コインはq3であることを示している!
🔴IBM Quantum実機でも確かめたいが
 この量子回路を、IBM Quantum実機(ibm_sherbrooke)で実行してみたが、失敗であった。"Instruction bfunc is not supported"というエラーが発生。bfucとは、Boolean Functionのこと。すなわち、古典レジスタの値に応じて、動的に量子回路を構成するc_if ()コマンドは、この実機ではサポートされないとのことらしい。シミュレータでは、上記のように正常に実行できたが...
 一方、驚くべきことに、ChatGPTに問い合わせたところ、納得できる回答が得られた。すでに多くの人が、IBM Quantum実機を利用していてSNSなどでエラー情報の交換が行われているからであろう。
 なお、現時点ではIBM Quantum実機上で量子状態をそのまま保存して再利用することはできないようである。シミュレータでは、State vectorを保存、取り出しはできるが。実機では、測定結果(古典ビットに保存できる)を利用して、新たに次の量子回路を設定することになる。

参考資料
[1] Quantum Counterfeit Coin Problem,
https://github.com/qiskit-community/qiskit-community-tutorials/blob/master/games/quantum_counterfeit_coin_problem.ipynb

[2] Vladimir Silva, Quantum Computing by Practice (Chapter 8), APress, 2024. 

---------------------------------
private memo:
Anaconda -
/IBM_Qiskit_Local_Sim_OK/Completed_qiskit1x/Counterfeit_coin_IBM_2.ipynb

---------------------------------

2024年9月18日水曜日

Videos showing my mobile quantum circuit simulators in action

So far, I have created many quantum apps and several quantum circuit simulators. Recently, I have revised these. Enjoy the videos showing how they work! 

n-qubit simulator

2024年9月12日木曜日

量子もつれ(entanglement)を体感できそうなゲーム

【要旨】量子コンピューティングで最も重要な原理の一つは、量子もつれ entanglementである。図1に示す通り、科学雑誌Newtonの最新号にも30頁の解説がある。その量子もつれを体感できそうな簡単なゲームアプリを作成し、自作のモバイル量子回路シミュレータと、IBM Quantum実機で実行した。その結果を検討した。

🔴 Tiny Mermin-Peres Magic Game
 量子もつれを利用するゲームとして有名なMermin-Peres Magic Squareというのがある。ここでは、そのエッセンスを抜き出して、独自の簡単なゲームとした。そのため、先頭にTinyを付した。そのTinyゲームを図2に示す。

 登場人物は、Alice、Bob、Refereeの三人である。AliceとBobはそれぞれ図2に示した四つの3ビットのstringを持つ。(1)Aliceは所有する3ビットstringの一つをランダムに選んでRefereeへ送る。ただし、その情報をBobへ伝えることは禁止。(2)Bobは、Refereeから「成功」と言われるようにするため、自分の3ビットstringのどれかをRefereeへ送る。(3)Refereeは、両者から送られてきたstringの右端のビットを比較し、それらが同一ならば「成功」、異なれば「失敗」を宣言する。

 例えば、Aliceが#1を、Bobが#2を送信した場合は、両者の右端ビットが同一なので「成功」だが、Aliceが#1を、Bobが#4を送信した場合は「失敗」となる。

 AliceとBobにとって、「必ず成功」となる戦略はあるのか?古典的方法では、それは無いと言えるだろう。なぜなら、Aliceがどの3ビットstringを送信したかを、Bobは知らないからである。

 ところが、量子コンピュータを使う(量子もつれを使う)と、「必ず成功」する仕組みを作ることができるのである!

🔴 量子もつれに基づく「必ず成功する」戦略
 「量子もつれ」とは何か、また、その回路図の意味は何かの説明は略す。それをご存知ない方にも、「こんなやり方もあるのか」ということを感じていただければ十分である。

 図3にその戦略を示した。まず、AliceとBobはそれぞれ3ビットstringを持つとしたが、ここでは2量子ビットづつしか持たない。それは、図2の「ビット列の特性」に示した通り、Aliceの3ビットの和は偶数であり、Bobのそれは奇数であることによる。すなわち、最初の2ビットが決まれば、右端のビットは自動的に決まってしまうからである。

 図3の量子回路では、ゲーム開始前の準備として、AliceとBobの量子ビットに「量子もつれ」を生じさせている。しかし、ゲーム開始後には、何らの"通信"も行っていないように見える。ところがRefereeは、AlcieとBobから送られてきた結果から、必ず、「成功」の判断を下すのである!

🔴 自作モバイル量子回路シミュレータによる確認
 上記の戦略の妥当性を、自作シミュレータで確認した結果を図4に示す。右側に、赤い小さな円が8個ある。これは、AliceとBobの量子ビット4つの測定結果から、8つの「成功」のパタンが、それぞれ1/8の確率で発生することを意味している。「失敗」が起こる確率はゼロである。

 一例として、最初の赤丸に対応する0001は、Aliceが000を、Bobが010をRefereeに送ったことを意味する。両者の右端ビットは共に0なので、確かに「成功」である。他の七つのケースも、同様に、全て「成功」であることが分かる。
 以上のことから、BobはAliceが何を送ったのかを知らないのに、常に「成功」となるstringをRefereeへ送ることができている。すなわち、Bobが測定を行うと、その結果として、必ず「成功」となるstringをRefereeへ送ることができる。不思議さは消えないかもしれないが、これが量子もつれの効果である。

🔴 IBM Quantum実機による確認
 上記は、量子回路シミュレータの結果である。次に、本物の量子もつれを起こす、量子コンピュータ実機ではどうなるのかを確かめた。図5は、そのための量子回路の準備である。記述法は異なるが、実質的には、図4に示したものと等価である。
 この量子回路を、IBM Quantum実機で実行した結果が図6である。10,000ショットにおける、AliceとBobの測定結果のパタンの出現頻度を示している。赤枠で囲んだパタンは、図4の赤丸と対応している。すなわち、「成功」となるパタン8つが高い頻度で出現している。つまり、86%は「成功」となるパタンである。一方では、実機のノイズ等ため、一部の量子もつれの消失などにより、14%は「失敗」となった。現在、一般公開されている量子コンピュータではこの程度の誤差が生ずる場合がある。

🔴 まとめと感想
 ここに述べた、Tiny Mermin-Peresというゲームは、古典的方法では、「100%成功」する戦略は存在しない。しかし、量子もつれを利用すると、不思議なことに、「100%成功」する戦略を作ることができる。量子回路シミュレータではそれを確認することができた。一方、本物の「量子もつれ」が使われる量子コンピュータ実機(現在一般公開されているもの)では、ノイズによるエラーのため、「86%程度の確率で成功」するという結果となった。それでも、古典コンピュータでは不可能なことが、高い確率で実現できるという好例を与えている。素晴らしいことである。今後、量子コンピュータは急速に進展する気配なので、この86%は次第に100%に近づくであろう。

---------------------------------
private memo:
IBM Quantum Composer 
Files/Mermin_Peres_FoYo1
---------------------------------