2020年3月31日火曜日

Try NetLogo Web with Android app

NetLogo for multi-agent modeling has been used to create desktop applications. On the other hand, NetLogo Web, which is almost compatible with NetLogo, is also available. See the figure below.


Let's compare the Desktop version and Web version with the following example. The example is "Visualizing Infection" shown earlier. Click here for more information. In the Android application shown below, the NetLogo model created in the Desktop version is executed on a PC in advance, and the execution process is stored in a video file for each parameter set and used. The video works perfectly, but you cannot run simulations on another new dataset with this app. Of course, this isn't necessary for this app.

Use video of the execution process of Desktop NetLogo

On the other hand, if you want to run a NetLogo model in an Android application corresponding to an arbitrary parameter set, you can use the NetLogo Web version. The figure below illustrates this. The operability was not good, such as the sliders and buttons being very small (although they could be enlarged), but they worked. So in some cases, this NetLogo Web might be good. Also, as you can see at the bottom, there is a great merit that you can edit the source code on the spot.

Incorporate NetLogo Web version into Android application

2020年3月29日日曜日

新型コロナウィルス:simple is (the) bestな解説

 難しそうなことのポイントを、専門知識を前提とせずに、優しく、丁寧に、かつ簡潔に解説してほしい。それは誰もが思うことです。新型コロナウィルス関係で、私が感じ入ったそのような解説3例 (A), (B), (C)をご紹介したいと思います。

-----------------------------------------------------------------
【追記】山中伸弥教授のホームページ[1]に書かれた「5つの提言 2020-3-31」を拝見し、下記のうちの最後の解説(C)について、小生のおもいを追加します。確かに、数学的には解説(C)の内容は納得できますが、山中教授の提言どおり、今はそう言っている場合じゃない。検査態勢を拡充し、徹底的に検査すべき段階なのかも知れません。専門家のひとりがおっしゃっていましたが、「今日正しいと思っていることが、明日は違っている」と言う状況なのかも知れません。
-----------------------------------------------------------------

(A)コロナウィルスの仕組みについてのやさしい解説
 新型コロナウィルスに関する山中伸弥教授のホームページ[1]のなかで紹介されている「動画で学ぶ」のひとつに、免疫研究者(スタンフォード大学中内研究室の新妻耕太氏)によるユニークな、やさしく本質に迫る解説[2]があります。「やさしいコロナウィルス解説-専門用語全然使わないチャレンジ-」というタイトルにふさわしいものです。約3分間のビデオ8本のシリーズとなっています。あっというまに、引きつけられて全部観てしまいました。特徴をとらえた大胆なイラストを用いて、コロナウィルスとは何か、どうやって体内入り増殖するのか、人-人感染の仕組みとは、等々を理解することができます。素晴らしい!さらに感心したのは、日本政府の専門家会議の報告にある3つの「密」を避けることもいち早く取り入れ、警鐘を鳴らしている点です。

新妻耕太氏のYoutube動画[2]より引用

(B)なぜ家に留まるべきなのかを、ずばりひとつのGIF画像で解説
 世界的に新型コロナウィルスが猛威をふるい感染が拡大している状況において、Sigal Samuel[3]は、「なぜ家に留まるべきなのか」を的確に説明しています。使っているのは一つのGIF画像(少しづつ変わる34枚の画像で構成)だけです。これが、ずばり、その根拠を示してくれます。単純な画像であるがゆえに、インパクトがあります。これも素晴らしいですね。基本的な用語Ro(基本再生産数)の説明も交えながら、(英語ですが)やさしい説明文もよいと思います。

Sigal Samuel[3]の解説から引用


(C)検査をむやみに行っても意味がないことを、やさしい数学で解説
 コロナウィルス感染の拡大状況にあって、もっとどんどん検査をやるべきという論調も見受けられるのですが、このビデオ[4]をご覧いただければ、そうではないなあ、と納得できるのではないでしょうか。ただし同時に、ある程度疑わしい人に絞って検査することの重要性も説いています。「ベイズの定理」という用語には意図的に触れていないようです。それは分数の計算だけで、「条件付き確率」の意味をやさしく伝えたいということだと思いました。数学から遠のいてしまった大人はもちろん、小中学生でも理解できるのではないでしょうか。(小生は、小中学の数学に疎いのでまちがいかもしれませんが)Youtubeをこんな風に有効に活用できるという好例でもあります。

条件付き確率に関するYoutubeビデオ[4]より引用


参考資料
[1] 山中伸弥による新型コロナウイルス情報発信
https://www.covid19-yamanaka.com

[2] 新型コロナウイルス感染を理解するためのやさしい生物学-新妻免疫塾
https://www.youtube.com/watch?v=yM9wCG23iQ0&list=PLhZK0Os7ExEEP3wydYgVJnYw3eD3uQvv4

[3] Sigal Samuel:How you can keep thousands of people from getting coronavirus, in one GIF
https://www.vox.com/future-perfect/2020/3/26/21193851/coronavirus-covid-19-staying-home-social-distancing

[4] むやみな検査を行ってはいけない理由、数学的に説明します【条件付き確率】
https://www.youtube.com/watch?v=67FGN9RKmqw

2020年3月26日木曜日

梅の形のえびせん

 世界的な不安が迫り来るなか、ちょっとしたことでもいい。何か明るい話題や出来事がほしい。それに該当するほどではないですが...

 えびせんをぼりぼり食べながら仕事(というほどでもないが)。季節限定の紀州の梅味です。なかなか出ないのですが、出たらハッピー!「梅形のえびせん」が、3個も出てきました!少しでも良いことが起こればいいのですが...

2020年3月24日火曜日

Visualizing the progress of virus infection (No.1)

Notice:On 2020-3-25, the following content was released as an Android app to the MIT App Inventor Gallery.
ai2.appinventor.mit.edu/?galleryId=4888454785269760
This article is written in Japanese. If you want to read in English, please use Google Translate, Microsoft Translator, and so on.
Click here for a description of the new version (on 2020-4-4).

【要旨】新型コロナウイルス感染症対策専門家会議の報告を理解するために、マルチエージェントを用いて、感染状況の可視化を試みました。

感染症流行の基礎知識を得る
 今回の新型コロナウィルスを含む感染症流行の詳細な予測数理モデルは、文献[1]等にあります。微分方程式を用いた難しい説明もありますが、「基本再生産数」「実効再生産数」など基礎知識は得られると思います。また、資料[3]には、「集団免疫」の考え方の解説や、感染状況のビジュアル化が示されており、非常に参考になりました。資料[4]には、現状のとらえ方と今後の警戒の引き締め等が分かりやすく書かれています。

日本国内の状況の理解
 上記から基礎知識を得たとはいえ、小生は全くの素人なので、以下の記述には誤解や間違いがあるかも知れません。それを前提で書かせていただきます。「新型コロナウイルス感染症対策専門家会議」の報告[2]とそれに関する優れた解説[3]を読んで、小生が理解したポイントは以下のとおりです。

(1)なんとか持ちこたえている。この感染症を一定の制御下に置くことができている。
(2)国内で感染が確認された人のうち約80%の人は、他の人に感染させていない。
(3)このウィルス実効再生産数は現在0.7程度に抑えられており、これまでの対策が一定の効果を発揮している。
(4)今後、どこかの地域を発端とした感染爆発の可能性もある。継続した警戒、対策が不可欠。

 図1に、上記項目(2)と項目(3)の状況をビジュアル化しています。ある集団に、感染者が3名が発生したとします。このうち、例えば感染者(A)は、近隣の3名に感染させ、そのうちの1名はさらに他の人へ感染を広げています。残りの2名はその後他人に感染させることはありませんでした。感染者(A)、(B)、(C)とも、最大でも数名の第三次感染者を出したところで拡大は停止しています。これは、発症に対して、隔離や治療が適切に行われた効果を反映しています。
 この図では、感染者のうちで他人へ感染させなかった人の割合は83%になります。また、実効再生産数は0.78であり、上記項目(2)、項目(3)の数値にほぼ合致しています。したがって、本図は、現在の実際の感染状況を理解するのに役立つのではないかと思います。


感染爆発する状況もビジュアライズ
 感染の本格的なシュミレータなど([5][6])も様々作成されています。ここでは、もっと単純に感染状況を可視化したいので、自作することにしました。それには、かって利用していたNetLogo(マルチエージェントモデリング開発環境)[7]を使います。ある大学の情報工学科のブログ記事[8]に、「ないものは作るしかない、ということで(似て非なるものはありますが)、作りました」という言葉があり、それに触発されて作りました。

 図1は、作成したプログラムを使ったものです。このプログラム(モデル)の仕組みは非常に単純であり、以下のような枠組みです。

(a)感染者の発したウィルスは、近隣(N,NE,E,SE,S,SW,W,NW)の人に一定の確率(Th1)で達する。
(b)ウイルスが到着した場合、その人は一定の確率(Th2)で感染する。
(c)感染した場合でも、一定の確率(Th3)でそれ以上他人に感染させることはない。
(d)感染までの期間、持続期間や移動による影響などは考慮していない。
 (ただし、改訂版アプリ-2020-4-4では、感染者の移動も考慮しました。)
(e)単位時間毎に、感染するかしないかは、単純にパラメータ(a),(b),(c)で決まる。

 この図1は、感染対策が行き届いている状況を反映するように、パラメータ(Th1, Th2, Th3)を設定して実行した結果です。つまり、上記で理解した項目(2)と項目(3)の数値に近づくようにパラメータ調整したものです。その結果が妥当であれば、次に、感染対策を怠った(あるいはかなり緩和させた)場合の感染爆発も、これらのパラメータ調整で表現できるのではないでしょうか。あまり確信はありませんが。

シミュレーションの実行例
 以上の検討にもとづき、2つのケースのシミュレーションを行いました。図2は、両方に共通の開始時点の様子です。人口834名の集団に6名の感染者が発生している状態から出発します。


 図3は、感染対策が功を奏している場合であり、上に示した図1は、この図の一部です。短いビデオも添付しました。


図4は、不運にも感染爆発してしまったケースです。資料[3]によれば、ドイツのメルケル首相は、「対策を取らなかった場合、ドイツ国民の60%〜70%が新型コロナウイルスに感染する可能性がある」と述べたとのことです。メルケル首相は物理学者でもあったので、その発言には根拠があるはずです。実際、基本的な計算式に当てはめると、基本再生産数3の場合(新型コロナウィルスがこれに該当)、初期に免疫を持った人がおらず、何も対策をとらない場合、感染者が集団免疫となり収束するまでに、全人口の67%が感染するとのことです。図4の結果は、感染爆発が収束するまでに、69%の人が感染することを示しおり、(偶然でしょうが)この数値に良く合致します!?


以上、極めて単純なシミュレーション(というよりも状況の可視化)ですが、ご参考になる点があれば幸いです。

参考資料
[1]西浦博、稲葉寿:感染症流行の予測:感染症数理モデルにおける定量的課題、数理統計第54巻第2号、pp. 461-480、統計数理研究所(2006)
[2]「新型コロナウイルス感染症対策の状況分析・提言」(2020/3/19)
新型コロナウイルス感染症対策専門家会議
https://www.mhlw.go.jp/content/10900000/000610566.pdf
[3]浦島充佳:日本で新型コロナが「感染爆発」しない理由(2020/03/19
https://forbesjapan.com/articles/detail/33158/1/1/1
[4]忽那賢志:新型コロナのオーバーシュート(感染者の爆発的増加)を起こさないために我々にできることは?
https://news.yahoo.co.jp/byline/kutsunasatoshi/20200322-00169120/
[5]Marco J. de Vries:Virus2
http://ccl.northwestern.edu/netlogo/models/community/Virus2
[6]Yang, C. and Wilensky, U: epiDEM Travel and Control
https://ccl.northwestern.edu/netlogo/models/epiDEMTravelandControl
[7]山本富士男:マルチエージェントシステム構築のためのNetLogoを学ぶ
https://sites.google.com/site/yamlabnetlogo/
[8]神奈川工科大学情報工学科ブログ記事「ただいま、仕込み中」
http://blog.cs.kanagawa-it.ac.jp/2020/03/blog-post_19.html


2020年3月19日木曜日

もう一つのJavaアプリケーション開発環境 BlueJ

要旨教育向けの、Javaアプリケーション開発環境として、BlueJがあります。大学で使用されている下記の著名なJava教科書の幅広い例題をこれで稼働させて、その有用性確認しました。

BlueJについて
   Javaアプリケーション開発環境として、Eclipseは広く普及しています。これに対して、BlueJ[1]は、約20年の歴史を持つ、教育向けの優れたJava開発環境として知られています。Oracleがサポートし、J. Goslingも絶賛しています!国内では知名度はあまり高くないようですが、日本語解説書[2]もあります。Eclipseは、Java以外の言語での開発も可能な非常に高機能なのに対して、BlueJはJavaに特化した簡潔で親しみやすい特徴があります。したがって、もしも、現在大学のJava授業で使われている最も高度と思われる教科書[3]の例題が、全て完全に動くのであれば、BlueJを使うという選択肢も生まれるのではないか。今回の記事はそれを検討したものです。


今回の実証実験に使用した教科書の例題
   多くの大学で利用されており、Javaの基本事項を幅広く網羅した高度で精緻な以下の教科書[3]の例題を対象としました。これらの例題は、Java8に準拠したものですが、BlueJの最新版はJava11に準拠しています。したがって、言語仕様面からは問題なくBlueJでも動くはずです。しかしながら、現実には、実行環境の相違などから問題があるかも知れません。それを確認するのです。


   この教科書の例題は膨大な数に上りますので、できるだけ広範囲に考えて、以下の8題を選択して検証することにしました。

第5章:T51.java
  (1)クラスとメソッドを説明する、簡単なタートルグラフィックス
第6章:Args61.java
  (2)mainメソッドに実行時に与えられるパラメータの利用
第12章:ExecutorExample.java
  (3)エグゼキューターサービスを用いた平行実行。ラムダ式も使用。
第12章:StreamTurtle.java
  (4)並列ストリームの処理の流れ。ラムダ式も使用。
第14章:Standup.java
  (5)JavaFX、CSSファイル、アクションイベント処理
第15章:ShapeEventExample.java
  (6)JavaFX、マウスによるShapeイベント処理
第16章:FileReadWrite2.java
  (7)テキストファイルを行毎に読んで表示
第17章:WeatherClient.java
  (8)HTTPクライアント。外部jarでJSONファイルデコード。

BlueJのプロジェクトとパッケージ
   ここでは、Mac版BlueJを使いますが、特に何の設定も無しにすぐに使えます。Windows版でも同じだと思います。また、Raspberry Pi等には標準でBlueJが組み込まれているようです[4]。
 
   上記例題のJavaソースファイルは、それが属する章の名称(例えば第17章ならばchap17)のパッケージに入っています。BlueJのプロジェクトでも、パッケージ構造はそのまま使うことができます。下図をごらん下さい。なお、各パッケージを開くと、それに属するJavaソースファイル名を確認できます。クラス間の依存関係は、自動的に矢印で表示されます。非常に見やすく、親しみやすいと感じます。


BlueJでの実行状況
   予想どおり、上記8題は特に問題なく、完全に動作しました。ソースコードの変更は一切不要でした。言語仕様の上位互換性からこれは当然ではありますが。ただし、画像ファイル、テキストファイル、CSSファイルの配置場所は、プロジェクトの直下にします。これは、Eclipseの場合と同じですが、環境が違うので注意が必要です。また、例題(8)でのJSONを扱うための外部jarファイルを取り込む手順、例題(2)でのmainメソッドに実行時パラメータを与える方法に注意すればよいです。詳細は、末尾のTipsをご覧下さい。

   以下に、例題(3)と例題(8)の実行状況を示します。ソースファイルエディタも、構造が色分けされて見やすいと思います。



結論
   以上の検討結果(8題の実行実験)から、恐らく、この教科書のぼぼ全ての例題は問題なく実行できるという感触を得ました。したがって、BlueJは、大学でのJavaプログラミング環境として十分活用できると思われます。Eclipseよりも軽快であり、必要にして十分な機能があると考えます。特に、初心者にはより優しい環境であり、親しみやすく、取り組む意欲を低下させないと言えます。

Tips ...

 (1) 画像、テキスト、CSSファイルの配置
   プロジェクトの直下(パッケージの中ではなく)置けば、"lay.jpg"のように、ファイル名を直接指定することで参照できる。もしも、これ以外の別の場所に置くのであれば、以下のように、絶対パスで参照すればよい。
private static final String RESULTS_FILE = "results.txt”;
Path resultsFile = Paths.get(RESULTS_FILE).toAbsolutePath();
FileWriter writer = new FileWriter(resultsFile.toString());
また、例えば、 "results.txt”ファイルをパッケージresに置くのであれば、"/res/results.txt"として参照できる。
CSSファイルは、プロジェクトの画面に出現するが、テキストや画像ファイルはそこには現れないので、別途何らかの方法で参照する。

 (2) 外部jarファイルの追加
   jarファイルを、プロジェクトの直下へ配置する。その後、
BlueJ -> カスタマイズ -> ライブラリで「ユーザライブラリ」に、AddFileを押して、jarファイルを指定 -> OKを押す。
その後、BlueJを再起動すれば、そのjarファイルのクラスをimportできる。

 (3) mainメソッドの引数に、実行時にパラメータを渡す
   mainメソッドを起動するウインドウに{ }が出現するので、その中に、以下のようにパラメータを指定する。各パラメータとも、ダブルクオーテーションが必要。
例:{"apple", "orange", "10"}

参考資料
[1] BlueJ公式Webサイト
https://www.bluej.org
[2] 深瀬欽正:Java新入門 学習環境BlueJでスイスイ、リックテレコム
[3] 立木秀樹・有賀妙子:すべての人のためのJavaプログラミング第3版、共立出版
https://www.i.h.kyoto-u.ac.jp/users/tsuiki/javaEveryone3/index.html
[4] Raspberry PiでのJavaコーディング
https://www.oracle.com/webfolder/technetwork/jp/javamagazine/Java-JF15-NewToJava.pdf



2020年3月7日土曜日

Ideas into Reality

 あるシンポジウムで、短い口頭発表を行う予定でしたが、新型コロナウィルスの影響でそれは中止になりました。そこで、中止発表当日に!完成したスライド16枚とその説明をここに掲載したいと思います。Web自主発表?です。(オンライン発表ではないですが。)

[末尾に、参考資料を追記しました。2020-3-10]

    AIの適用が拡大しています。そして、個人のニーズと嗜好の多様化に伴い、個人的な面でもそれは拡大しています。その背景として、AI活用の容易化、そして、AIはブラックボックス的でもあるが使える!という機運の高まりがあります。ここでの目的は、「Ideas into Realityの推進」にあります。具体的には、AIを活用した数例のアイディアを検討し、それを高レベルの開発環境で迅速にプロトタイピングできることを示します。それをさらに多様なAIアプリケーションの開発力向上に繋げて行きたいと思います。

    そのAIアプリケーション開発ですが、開発環境を概観した図がこちらです。様々な環境に包まれていますが、ここでは、緑色で示した「高レベル学習モデル作成」と「スマホアプリ開発環境」、それといくつかの従来型プログラミング言語とライブラリを使って行きます。

    これまでに、AIを活用したいくつかのアイディアを発案し、それを実装してきました。あまり難しいものはありませんが、こちらに示すようなものです。今回はそのうち、(1)ニューロンをmicro:bitで実装、(2)綺麗な風景の自動認識、の2つについてお話します。

    最初のアイディアは「Neural Networkのニューロンの動作をmicro:bit[1]を使って実感したい!」です。こちらは、手書き数字認識をDepp Learningで学習している例[2]です。ここにあるニューロンひとつづつを、1台のmicro:bitで実装したいということです。しかしながら、そのためには、この例は明らかに複雑過ぎますので、非常に簡単な例を考えます。意味のある最も単純な例としてのXORの認識[3]です。ですが、根幹となるバックプロパゲーション[4]は実装します。それが肝なのですから。ところで、なぜこのような原始的な実装をするのか?それは、そうすることで、実感を持って理解が深まること、そして、なによりも楽しい!からです。

    こちらは、7台のmicro:bitの連携でXORを学習しているところです。論理的な結線を書いてありますが、実際には結線はありません。全て無線通信でデータをやりとりしています。先ほどのバックプロパゲーションですが、この手書きの式にしたがって、Pythonで20行ほどの短いプログラムとしてmicro:bitに組み込みました。なお、micro:bitは性能が低いので、学習を加速させるため、こちらのNetLogo[5]で予め辺の重みの大まかな値(近似値)を求めておき、それを使って出発させます。

 こちらは、その動作状況のビデオの一部です。バックプロパゲーションのフェーズから示していますが、次にフォーワードプロパゲーションになると、出力Zに結果の数値が(一桁づつ)表示されます。正解と出力Zの差が一定値以下になると学習が終わったことになります。この画面では、x=1, y=1に対して、出力Z= 0を学習した状態です。

    このビデオはYouTubeで公開[6]しているのですが、それが図のとおり、micro:bitの公式Twitterで紹介されました。micro:bitは主に学校向けでありますから、通常はこのような使い方はしないのですが、これが取り上げられたということは、研究成果も教育へ還元して行こう、という姿勢の表れではないかと考えています。

    次に2番目のアイディアです。曇りがちだが、晴れると美しい山があります。しかし、いつそうなるか分かりませんので、綺麗に見える時にスマホへ自動通知する、というものです。具体的には、北海道の北部に利尻岳があります。島になっています。隣の礼文島からこれを写しているライブカメラ[7]がありますので、それを利用します。ここが海峡になっていることもあり、通常は曇っていて、unluckyな状況ですが、時々、goodな風景になります。そして希に、山全体が見えるexcellentになります。このexcellentになった時に、スマホに自動通知し、さらに先ほどのmicro:bitに大きな山のイメージを表示します。

 こちらは、作成したスマホアプリです。動かしてみます。最初は、曇っているがgoodな風景です。次に、excellentなのが出てきます。最後の画面では、confidence 0.99でexcellentと認識されています。

    この場合の画像の学習は、Google Teachable Machine2[8]で行いました。ブラウザで行えます。すなわち、excellent, good, unluckyな画像をそれぞれ30枚以上用意すると、すぐに学習を実行できます。学習が終われば、ここに新たな画像を与えると、3つのうちのどれに該当するかが判定されます。これらの操作はブラウザだけで閉じて行えます。しかし、ここでは、Androidアプリで利用するため、後で、この学習済みモデルを取り出します。

    ところで、このTeachable Machineは非常に高レベルの開発環境なのですが、それを完全なブラックボックスとせずに、システムからのフィードバック情報に基づいた調整が必要です。すなわち、学習の進行に伴う誤差の低減状況や、ラベル毎の正解率が得られますので、それを見ながら、入力画像の適合性や枚数の調整、さらに、こちらにある学習用ハイパーパラメータの調整を行うべきです。

    Androidアプリケーションとして作成するためのファイルの構成がこちらの図です。先ほどの学習済みモデルはこちらですが、具体的には3つのファイルで構成されています。それを操作するための、短い、JavaScript, HTMLを作成して、それらを、AndroidのローカルWebサーバへ配置します。それを動かすための制御プログラムは、MIT App Inventor[9]で作成しました。

    この図が、そのApp Inventorプログラムです。明解なブロック型のプログラム構造になっていることが分かります。すなわち、(1)ライブカメラから分類すべき画像を得る。(2)その画像を取得できたら認識を開始する。(3)先ほどの学習済みモデルを使って認識を実行する。(4)認識が終わると最後のブロックが呼び出されるので、そのなかで、分類結果がexcellentであればnotifyする。という流れです。

    ここ1、2年で、大学などを中心に、AIやデータサイエンスの教育研究が急速に盛んになってきました。ここに挙げたのは一部に過ぎませんが、例えば、神奈川工科大学の研究ブランディング事業でAIシステム[10]というのもあります。これらの取り組みのなかでも、今回のようなIdeas into Realityの実践は重要になっていくのではないかと思います。

    まとめです。AIを活用したいくつかのアイディアとそのスマホ等での実現についてお話しました。そのなかで、高レベルな開発環境とPythonの併用、さらに、App InventorとJavaScriptとの連携の強みを確認できました。今後の課題としては、例題に留まらない、実用レベルでのAIの活用をさらに蓄積して行く必要を感じます。一方、AIが出した結果に従うことに慣れてしまう怖さも感じます。例えば、サラリーマン川柳に、「AIに 営業スマイル 審査され」[11]というのがあります。これは、ちょっと考えさせられる句ではないでしょうか。最後に、高レベルの開発であっても、原理、動作、結果を的確に把握して行くという姿勢が重要と考えます。

Thank you for your attention

参考資料
[1] Micro:bit Educational Foundation
https://microbit.org/
https://twitter.com/microbit_edu
[2] Deep Neural Networks and Dropout
http://modelingcommons.org/browse/one_model/4445#model_tabs_browse_info
[3] 高卒でもわかる機械学習 (3) 多層パーセプトロン
http://hokuts.com/2015/12/04/ml3-mlp/
[4] 高卒でもわかる機械学習 (6) 誤差逆伝播法 その2
http://hokuts.com/2016/10/09/bp2/
[5] Artificial Neural Net - Multilayer
https://ccl.northwestern.edu/netlogo/models/ArtificialNeuralNet-Multilayer
[6] BackPropagation in Neural Network with an Example (XOR) Using Multiple Micro:bits
https://www.youtube.com/watch?v=tsYr01lQ_HY
[7] 礼文町 ライブカメラ
http://www.town.rebun.hokkaido.jp
[8] Teachable Machine2
https://teachablemachine.withgoogle.com/
[9] MIT App Inventor
http://appinventor.mit.edu/
[10] 神奈川工科大学 私立大学研究ブランディング事業
https://www.kait.jp/topics/branding/
[11] 第33回サラリーマン川柳 優秀100句
https://event.dai-ichi-life.co.jp/company/senryu/

2020年3月2日月曜日

Decoding JSON by using new Dictionary Blocks

This article demonstrates the use of new blocks called Dictionaries [1] in MIT App Inventor. These blocks were announced in the releases nb181c and nb182 (February 18, 2020) and are mainly used for encoding and decoding JSON files.

By the way, I previously developed a JSON Decoding Extension. Examples of its use are shown below:
Another example using JSON Decoding Extension

In the following, I use the new Dictionaries to decode JSON file for the same example. This app displays the weather forecast using OpenWeather [2]. Here, I show the weather forecast for Sapporo City in Japan every 3 hours up to 5 days ahead. Fig.1 shows an example of JSON text output from OpenWeather. Some parts are folded in the figure, but if all are expanded, there are 1,341 lines.


Fig.2 shows an application that takes all the values for tags surrounded by a red frame in this JSON text and displays them on the smartphone. Namely, values for the city name, time, temperature, and weather are displayed. To use OpenWeather in this application, you need to obtain your own API Key.


This application uses Dictionaries blocks to decode JSON text. First, get the city name "Sapporo" as shown in Fig.3. The JSON text obtained from OpenWeather is processed by a web block, and the result is made into a list structure. (global jsonL). Next, the city name is obtained by the "get value at key path" method of the Dictionary block.


Next, to extract all the weather forecasts (time, temperature, description) every 3 hours, use the procedure shown in Fig.4. First, traverse the array that is the value of the "list" tag by specifying "walk all at level". The resulting list (global subList) is used in the subsequent blocks. For example, to get all the temperatures and put the result into a list structure, use the "list by walking key path" method. At this time, the element given as an argument is a list of (walk all at level, main, temp). Here, the order of the list elements is important. It is necessary to carefully specify the order while looking closely at the hierarchical structure of the JSON file. I think Fig.5 will help you understand it.




As a result of the above tests, I found that the new "Dictionaries blocks" can efficiently decode JSON files, similar to the "JSON Decoding Extension" described above.

References
[1] MIT App Inventor Dictionary Blocks
http://ai2.appinventor.mit.edu/reference/blocks/dictionaries.html
[2] OpenWeaterMap API guide
https://openweathermap.org/guide