2022年9月27日火曜日

MIT App Inventorの新設Chart機能の利用例

 MIT App Inventorに新設されたChart機能[1]について、前報で述べました。ここでは、簡単な例で具体的にその使用例を示します。簡単にグラフを描きたい場合の参考にしていただければ幸いです。

CSVファイルのデータからグラフを素早く描く
 x, yの組みのデータが格納されたcsvファイルからグラフを描きます。図1の左上に示したような.csvファイルです。このファイルから、その右側にあるようなグラフ描画は、下段にある2つのブロックだけで実現できます!最初のブロックでは、このファイルを読み込みます。読み込みが完了すると下のブロックが起動されます。その中では、.csvデータをリスト(リストのリスト)に変換して、それをChart.ImportFromListに与えるだけです。
グラフを拡大して描画したい
 こんなに素早くグラフを描けたのですが、x軸, y軸とも自動で設定されており、この例では、158点のデータが一つの画面に圧縮して表示されています。そのため、グラフが太くなっています。データ全体の状況はこれでよくわかるのですが、拡大して詳しくみたい場合は、自分で工夫する必要があります。例えば、画面にはいつも15点づつのデータを表示し、グラフは自動的に左にシフトさせるようにしたのが、図2です。この実現にあたっては、[2]を参考にさせていただきました。
Y軸のmin, maxを指定してグラフをシフトしたい
 図2では、グラフがシフトされるたびに、Y軸方向が自動的に拡大・縮小してしまい、みていると目がチラチラする場合があります。Y軸のmin, maxを指定してY軸範囲を固定できれば良いのですが、現状のChartにそれは無いようです。そこでその機能をなんとか実現させたのが図3です。図2では、グラフ描画のためのChartオプジェクトを1つ使っていましたが、ここでは、別にもう一つのChartオブジェクトを使い、そこには、右端の方に、最小値と最大値にしたい値を設定したのがミソです!
 この場合のグラフのシフトの様子は、下記のビデオをご覧ください。
 この利用例のアプリ(ソースコード)は、以下に公開していますので、詳細が必要な方はそれをご覧ください。

参考資料
[1] Data Science with Charts and GoogleSheets
https://community.appinventor.mit.edu/t/data-science-with-charts-and-googlesheets/66116
[2] Charts component. Graphic shift left
https://community.appinventor.mit.edu/t/charts-component-graphic-shift-left/66169

2022年9月24日土曜日

Data Science work in MIT AppInventor with new Data Charts components

MIT App Inventor is continuously being upgraded in a wide range of ways, from new features incorporating cutting-edge AI technology to convenient features for daily application development. The members of the development team also seem to have grown even more recently. This time, I tried the newly added Data Chart function. Very convenient!

Until now, there was no built-in function for drawing graphs, so if necessary, we used extension functions developed by volunteers, or drew them offline with Excel. Now, anyone can use Data Chart as a standard feature right away. It facilitates visualization of various data. Chart types include standard line charts, bar charts, pie charts, scatter charts, and more. It also has support for many types of data sources.

You can easily draw a graph from a list as shown in Figure 1. The function to convert CSV format and JSON format data to a list is already built in, so this is easy to use. Also, we can use Spreadsheet, CloudDB, and TinyDB as data sources, so they are very convenient when large data files already exist. In addition, adding single point to a  graph is available, so it can be used to display data from various sensors in real time.
Here is one application that uses this Data Chart. This is a recording app of atmospheric pressure fluctuations. Figure 2(a) shows real-time air pressure ​​obtained in a short term from the barometer built into the smartphone.

On the other hand, Fig. 2(b) shows the atmospheric pressure fluctuation when Typhoon No. 19 passed nearby in 2019. The data acquired at intervals of about 5 minutes over 12 hours was stored in CSV file, and it is displayed. You can see that the air pressure dropped sharply at the time of closest approach, and immediately turned to rise.

As the graph shows, the atmospheric pressure of the typhoon at that time dropped by about 40hPa in a few hours, so it was a fairly strong typhoon. Even with a personal smartphone, you can feel the approach of a typhoon like this. If many people do this kind of thing in various places and aggregate those data, it seems to make some big thing.

2022年9月18日日曜日

ドイチュのアルゴリズムで量子計算のこころに触れる(続)

 前回の記事で、ドイチュの量子アルゴリズムを述べた。今回は、その拡張版であるドイチュ・ジョサのアルゴリズムを試した。

ドイチュ・ジョサのアルゴリズム
 この場合も、値として0か1をとる2値関数f(x)が定数関数か平衡関数かを、ただ1回の関数の評価で判定できるという不思議なアルゴリズムである。今回は、変数xは、0,1,2, ... , 2n-1を取るように値域が拡大されている。この場合の定数関数とは、どのxに対してもf(x)の値は同一であり、平衡関数とは、半分のxに対してはf(x)=0であり、残り半分のxに対してはf(x)=1ということである。
 従来のコンピュータで平衡関数/定数関数を判定するには、f(x)を最大2n-1+1回調べる必要があるが、ドイチュ・ジョサの量子アルゴリズムでは、ただ1回で済む、という素晴らしさがある。

ドイチュ・ジョサのアルゴリズムの量子回路
 前回同様、渡邉靖志著[1]のドイチュ・ジョサのアルゴリズムとその量子回路の説明を参考にさせていただいた。この著書には、簡潔にその真髄が書かれている。図1に示す通り、特に難しい数式を含むわけではないが巧妙に組み立てられているので、じっくりと腰を据えて理解する必要がある。ここには詳細説明は書けないが、ともかく、この量子回路によって最終的に測定した結果、n個の0の列 "000...0" が観測される可能性が0%であれば、平衡関数であるということだ。
IBM Quantum実機での実行
 理解を確認するため、n=3の場合の量子回路図を作り、それをIBM Quantum実機で動かしてみた。その際、Qiskitの解説[2]を参考にさせていただいた。図2に定数関数の場合の、図3に平衡関数の場合の判定結果をそれぞれ示した。いずれも納得できる結果だが、現状の実機ではノイズのために幾らかの誤差が生ずる。すなわち、理論的には観測されないはずのビット列も若干観測されたが、結果の判断に影響はない。
 なお、誤差のない理論通りの実行結果を得て、理解を進めたいのであれば、実機ではなくシミュレータを使えば良い。IBM Quantumの環境では、実機の場合と全く同じインタフェースでこのようなシミュレータを使うことができる。また、図4に示す通り、Qni量子シミュレータを使うのも良いだろう。
参考文献
[1] 渡邉靖志:入門講義 量子コンピュータ、講談社サイエンティフィック、2021年11月24日初版
[2] Open-Source Quantum Development Qiskit,
https://qiskit.org/textbook/ja/ch-states/introduction.html

2022年9月16日金曜日

素晴らしい手書き数式の自動整形ソフト

 前回の記事で、量子計算の式が混み入っていたので、万年筆の手書きをスキャンして貼り付けました。本当は、LaTeXで書くべきなんでしょうが、不慣れな私には苦痛でしたので。これをご覧になった元の職場の同僚だった博先生から、「手書き数式も味わいがありますが」という慰めの言葉をいただきました。しかし、同時に、Mathpix Snipというソフトで、手書き数式をWordの数式エディタへ貼り付けられる、という情報もいただきました。

 これは試すしかありません。数式といえば、一般には微積の複雑な式を思い浮かべますが、今回は、ちょっと違って、Diracのケットベクトル記号や、ベクトルの直積、排他的論理和などからなる数式です。早速、一部を試してみました。
 下図の通り、素晴らしい!完璧でした。ディープラーニングで画像認識の応用になっているようです。下部の緑のバーは、confidenceが100%近いことを示していますから、自信があるのでしょう。

 さらにやってみました。少し複雑になった次の例もまた完璧です!
手書きの縦棒"|"と数字の"1"は、区別が難しいと思われるのですが、きちんと認識されているので、おそらく、Diracのケットベクトルだと分かっている(学習している)のでしょう。 

 もう一つやってみます。カッコも多重になり、密になってきました。結果は、かなり良いです。手書きの、論理否定の上バーは認識されたようだが、出力に反映されなかった。このくらいなら、Wordの数式エディタにコピーして簡単に修正できますね。

 結論として、ぜひ今後も使いたい!今、試しているうちに無料使用件数の上限に達してしまいました!分かりました、料金を払って使い続けます!

2022年9月15日木曜日

ドイチュのアルゴリズムで量子計算のこころに触れる

【要旨】アルゴリズム、アルゴリズムとよく言いますが、コインの真偽判定に関するドイチュのアルゴリズムは、現在のPC上では考えられません。量子計算に特有の全く不思議なアルゴリズムですが、小生なりに理解した結果を、分かりやすく説明します。(なお、量子ビットの状態、重ね合わせ、もつれ、及び量子ゲートの基礎知識を前提としていますが、ご存じなくても、不思議さは感じていただけると思います。)

このアルゴリズムの拡張版であるドイチュ・ジョサのアルゴリズムについてはこちらに簡単な試行結果があります。

コインの真偽判定の問題
 
コインをトスして何かを決める場合がある。その際、コインが変造されていないかを検査したい。表裏が同一のデザインならば、それは偽物だ。表と裏をそれぞれ見るので、2回の検査を要する。これを2値(0, 1)関数f(x)の適用に置き換えてみる。変数xも0か1をとるとする。コインの最初の検査をf(0)、2回目の検査をf(1)とする。関数値0と1は、それぞれ、QueenエリザベスIIのデザインと裏地のデザインに対応する。そのような関数fとして、図1に示すように、 f1, f2, f3, f4の4種が考えられる。f1と f2は、平衡関数(裏表が異なる)と呼ばれ、f3, f4は定数関数(表裏が同一)と呼ばれる。

ドイチュのアルゴリズム
 
この問題を解く、ドイチュのアルゴリズム(1985年)は、ただ1回のコインの検査だけで済むという。そんなことできるのか?実に不思議だが、それを実現する量子回路が図2に示すものだ。詳細は後で述べるが、まずはそれがどんなものかを見てみよう。

 制御ビットと標的ビットという2つの量子ビットを用意し、それぞれ"|0>"と"|1>"に初期化する。それらにアダマールゲートHを通す。その状態にOracleと呼ばれる判定ゲート適用する。Oracleの中身は、図にあるように排他的論理和をとるだけの単純なものだが、Oracleに入ってくる状態①が、すでに量子特有の重ね合わせ状態となっていて、これが常識では考えにくい作用を起こす元になっている。
 それはともかく、Oracle適用後の制御ビットにさらにアダマールHを適用し、その結果を観測した結果が、"0"ならば定数関数(偽物)であり、"1"ならば平衡関数(本物)だという。繰り返しになるが、Oracleは1回しか通していない。だから、f(x)の計算も1回しかやっていない。それなのに、このような結論が得られるのだ!
ドイチュのアルゴリズムの実行
 
なぜこのアルゴリムでよいのかは後で述べるが、その前に、この回路をQni量子シミュレータで実行して結果を確認する。IBM Quantumの実機でも簡単に実行できるのだが、待ち時間が長すぎるので、今回は保留した。

 図2では、対象の関数として一般的にf(x)としたが、実際には具体的な関数に対応した量子回路をOracleとして設定する必要がある。図3に、上で述べた4種類の関数ごとのOracleを示した。各関数がなぜ、それぞれ図のようなOracle(量子ゲートで構成)になるのかは、青色の数式で示してある。例えば、関数f1は、制御NOTゲート(CNOT)だけでOracleを構成できる。

 それぞれの関数ごとに、図2に示した量子回路の実行結果(最終的な観測結果)は、上で述べたように、平衡関数(本物)、定数関数(偽物)を正しく識別したことが確認できた!
ドイチュのアルゴリズムの証明
 
ここからは、このアルゴリズムが思い通りに働くことを理論的に示す。ここで用いた計算は、渡邉靖志著[1]に従っているが、途中の計算過程もできるだけ省略せずに、独自の説明も加えた。その前に必要となる種々の量子ゲートの働きについては、こちらのブログ記事も参照されたい。また、アダマールゲートHについては、小生自作の図4のブロッホ球の模型もイメージするのに役立つだろう。
 では、図2の量子回路に戻り、アダマールゲート適用後の状態①がどうなるかを、以下の計算で示す。(ケットベクトルや直積の記号が頻出して入力しにくいので、万年筆で手書きした。クリックして拡大してご覧ください。)
 次に、Oracleを通過後の状態②の計算を示す。そして、この状態での制御ビットに再度アダマールゲートHを適用し、それを観測して、関数の均衡、定数を判定できることを明らかにしている。
これで完結した!
IBM Quantum実機でも実行
 
量子コンピュータ実機(IBM Quantum - ibm_nairobi)による結果も得られたので記録しておく。下図は、図3の関数f1に対するものであり、観測結果は93.5%(=958/1024)の確率で、"1"、すなわち、平衡関数だという正しい結果となった。
感想など
 ここまでで計算上、ドイチュのアルゴリズムを理解できたことになる。しかし、実感としては、いまだに不思議さは拭い去れない。そこでは、量子ビットの重ね合わせ状態が巧みに使われていて、f(0)とf(1)が同時に計算されていることになる。これは、従来の並列処理を想起させるかも知れないが、その仕組みは本質的に異なる。量子コンピューティングのこころに触れることができるアルゴリズムなのである。

謝辞
 この記事を書くに当たって、以下の参考文献を大いに利用させていただいた。[1]からは、量子コンピューティング全般の基本を、理論と例題を通して学ぶことができた。また[2]からは、Qni量子シミュレータを活用したアルゴリズムの実装について学んだ。これらの著者に感謝申し上げたい。

参考文献
[1] 渡邉靖志:入門講義 量子コンピュータ、講談社サイエンティフィック、2021年11月24日初版
[2] 中山茂:量子アプリQni - 量子プログラミング初歩、Gaia教育シリーズ52、2022年8月8日初版

2022年9月10日土曜日

Learning fundamental single qubit quantum gates

Various quantum gates exist for a single qubit. They are integral to the quantum circuits that make up quantum applications. There are many manuals, but I created my own material that lists the functions of basic quantum gates. This will be of great help when creating the necessary quantum circuits. This material was created with reference to the quantum simulator Qni [1], which has an excellent GUI.

First, Fig. 1 is a compact summary of the basic quantum gate functionality. This figure is a collection of descriptions of quantum gates in Qni. The results of applying quantum gates to qubit initial vectors "|0>" and "|1>" are shown. In other words, it shows what kind of super-positioning state is created by "|0>" and "|1>". 
Next, Fig.2 is a hand-made model of Bloch sphere. Using φ and θ corresponding to the state vector of the qubit shown in this figure, Fig.3 and Fig.4 show the working of the quantum gate in more detail. These figures display the complex coefficients (ie, probability magnitude and phase) that indicate the quantum superposition after application of quantum gates.
 
There is something worth noting here. For example, for the quantum state vector "|0>", both Pauli X and Pauli Y gates result in "|1>" with 100% probability. However, their amplitudes and phases are different. The phase is zero for Pauli X, but π/2 for Pauli Y. Such a phase difference is important later in causing wave interference. Moreover, the application result of the Hadamard gate is characterized by being "|0>" or "|1>" with a probability of 50% each. The probability (in this case 50%) is proportional to square of amplitude.

Reference
[1] Qni Tutorial: https://qniapp.net

2022年9月2日金曜日

Bloch sphere model for understanding quantum computers

To learn the basics of quantum computers, it is necessary to understand qubits and quantum logic gates. At first, it is a little difficult to envision their properties and actions.

A qubit is a vector in three-dimensional space, but that vector actually connects the origin and the spherical surface of a sphere with a radius of 1. A spherical surface is a two-dimensional space. Therefore, the state vector of a qubit is represented by two variables, amplitude θ and phase φ.

It would be nice to display it with computer graphics and understand it, but it is still easier to understand by creating a physical sphere and touching it.

Now we have created four Bloch sphere models to represent the state vector of the qubit. It is shown in the figure below. The functions of Pauli X gate and Hadamard gate can also be imagined.


2022年9月1日木曜日

Image noise reduction based on quantum annealing

Abstract

This app uses quantum annealing, a type of quantum computing, to reduce noise in binary images. For this purpose, a model called an Ising model, which consists of the interrelationships of pixels after adding noise, is constructed, and sent to the Annealing WEB service using App Inventor's web function. Noise reduction is displayed on the smartphone screen based on the spin information corresponding to the pixels returned from the web service. This app, which runs on familiar smartphones, lets you experience the processing of a quantum annealing machine that is different from existing computers.

This app is published here: source code  
source code: MIT App Inventor Gallery
(If you need pre-built .apk file, please contact me.)

This app won the "2022 September's MIT APP INVENTOR OF THE MONTH" award. 

Noise reduction using Annealing web service

Here, we will use Hitachi's CMOS Annealing cloud web service. Designate the original image on your smartphone, add a small amount of random noise to it, and use it as the input image. In preparation for removing that noise, we map each black and white pixel to a spin up or down (in quantum mechanics). And we also describe the connection relations between those spins. After that, we construct an energy function (or cost function) that describes the properties that neighboring pixels (spins) should have after noise reduction. In other words, this creates an Ising model. Sending it to the web service will give you the spin direction that minimizes the energy function value. Based on that, it generates a noise-reduced image. A more detailed explanation of this method can be found on the Hitachi web page below:
https://annealing-cloud.com/en/tutorial/1.html

Noise reduction application created with MIT App Inventor

Figure 1 shows an application created with MIT App Inventor based on this method. The procedure for its use is shown at the bottom of the figure. First of all, in order to use this Annealing Web service, please obtain an access token from the Hitachi website below. You can get it for free. The expiration date is one month, but you can renew the expiration date if necessary. You will need to paste this token into the input field at the top of the app.
https://annealing-cloud.com/en/web-api/token-request.html

There are several parameters to control this annealing. Some of them can be changed from this screen. For the meaning of the parameters, see the Hitachi website above. Here we use a simple preset image (a simple illustration of a dog), but you can easily replace it with your own image. You can also observe by changing the size of the image and the number of noises (number of pixels).

It may take some time for the web service to respond, so please be patient!
If the noise reduction results seem strange or you get an error, please wait a while and try again!

Results of noise reduction in this method

This app is not aimed at practical noise reduction, but is a demo app that shows the possibilities of the quantum annealing method. Therefore, it will not cope well with images that are too complex or too much noise. Some execution results are shown in Figure 2. From these results, we can see the characteristics of this method. In other words, it can be confirmed that isolated noise within white or black areas is easy to remove, but noise near black and white borders is difficult to remove.

Main blocks of this app

The main MIT App Inventor blocks for this app are shown in Fig.3. There are two parts. Part (a) is for starting the Annealing Web service. An energy function (Ising model) required for noise reduction is set in the variable "model_list". The energy function contains two formulas. One is for the number of pixels in which black and white are reversed in the input image and the denoised image. The second is for the number of pairs of pixels in which adjacent pixels have the same value in the image after noise removal. Also, part (b) processes the result (information about spin) received as Json text from the web service.

Acknowledgments

This application is based on the explanation on the website of Hitachi, Ltd. below:
https://annealing-cloud.com/en/index.html
We would like to thank Dr. Masanao Yamaoka of Hitachi, Ltd., who developed the CMOS annealing machine, for answering various technical questions.